123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263642646426564266642676426864269642706427164272642736427464275642766427764278642796428064281642826428364284642856428664287642886428964290642916429264293642946429564296642976429864299643006430164302643036430464305643066430764308643096431064311643126431364314643156431664317643186431964320643216432264323643246432564326643276432864329643306433164332643336433464335643366433764338643396434064341643426434364344643456434664347643486434964350643516435264353643546435564356643576435864359643606436164362643636436464365643666436764368643696437064371643726437364374643756437664377643786437964380643816438264383643846438564386643876438864389643906439164392643936439464395643966439764398643996440064401644026440364404644056440664407644086440964410644116441264413644146441564416644176441864419644206442164422644236442464425644266442764428644296443064431644326443364434644356443664437644386443964440644416444264443644446444564446644476444864449644506445164452644536445464455644566445764458644596446064461644626446364464644656446664467644686446964470644716447264473644746447564476644776447864479644806448164482644836448464485644866448764488644896449064491644926449364494644956449664497644986449964500645016450264503645046450564506645076450864509645106451164512645136451464515645166451764518645196452064521645226452364524645256452664527645286452964530645316453264533645346453564536645376453864539645406454164542645436454464545645466454764548645496455064551645526455364554645556455664557645586455964560645616456264563645646456564566645676456864569645706457164572645736457464575645766457764578645796458064581645826458364584645856458664587645886458964590645916459264593645946459564596645976459864599646006460164602646036460464605646066460764608646096461064611646126461364614646156461664617646186461964620646216462264623646246462564626646276462864629646306463164632646336463464635646366463764638646396464064641646426464364644646456464664647646486464964650646516465264653646546465564656646576465864659646606466164662646636466464665646666466764668646696467064671646726467364674646756467664677646786467964680646816468264683646846468564686646876468864689646906469164692646936469464695646966469764698646996470064701647026470364704647056470664707647086470964710647116471264713647146471564716647176471864719647206472164722647236472464725647266472764728647296473064731647326473364734647356473664737647386473964740647416474264743647446474564746647476474864749647506475164752647536475464755647566475764758647596476064761647626476364764647656476664767647686476964770647716477264773647746477564776647776477864779647806478164782647836478464785647866478764788647896479064791647926479364794647956479664797647986479964800648016480264803648046480564806648076480864809648106481164812648136481464815648166481764818648196482064821648226482364824648256482664827648286482964830648316483264833648346483564836648376483864839648406484164842648436484464845648466484764848648496485064851648526485364854648556485664857648586485964860648616486264863648646486564866648676486864869648706487164872648736487464875648766487764878648796488064881648826488364884648856488664887648886488964890648916489264893648946489564896648976489864899649006490164902649036490464905649066490764908649096491064911649126491364914649156491664917649186491964920649216492264923649246492564926649276492864929649306493164932649336493464935649366493764938649396494064941649426494364944649456494664947649486494964950649516495264953649546495564956649576495864959649606496164962649636496464965649666496764968649696497064971649726497364974649756497664977649786497964980649816498264983649846498564986649876498864989649906499164992649936499464995649966499764998649996500065001650026500365004650056500665007650086500965010650116501265013650146501565016650176501865019650206502165022650236502465025650266502765028650296503065031650326503365034650356503665037650386503965040650416504265043650446504565046650476504865049650506505165052650536505465055650566505765058650596506065061650626506365064650656506665067650686506965070650716507265073650746507565076650776507865079650806508165082650836508465085650866508765088650896509065091650926509365094650956509665097650986509965100651016510265103651046510565106651076510865109651106511165112651136511465115651166511765118651196512065121651226512365124651256512665127651286512965130651316513265133651346513565136651376513865139651406514165142651436514465145651466514765148651496515065151651526515365154651556515665157651586515965160651616516265163651646516565166651676516865169651706517165172651736517465175651766517765178651796518065181651826518365184651856518665187651886518965190651916519265193651946519565196651976519865199652006520165202652036520465205652066520765208652096521065211652126521365214652156521665217652186521965220652216522265223652246522565226652276522865229652306523165232652336523465235652366523765238652396524065241652426524365244652456524665247652486524965250652516525265253652546525565256652576525865259652606526165262652636526465265652666526765268652696527065271652726527365274652756527665277652786527965280652816528265283652846528565286652876528865289652906529165292652936529465295652966529765298652996530065301653026530365304653056530665307653086530965310653116531265313653146531565316653176531865319653206532165322653236532465325653266532765328653296533065331653326533365334653356533665337653386533965340653416534265343653446534565346653476534865349653506535165352653536535465355653566535765358653596536065361653626536365364653656536665367653686536965370653716537265373653746537565376653776537865379653806538165382653836538465385653866538765388653896539065391653926539365394653956539665397653986539965400654016540265403654046540565406654076540865409654106541165412654136541465415654166541765418654196542065421654226542365424654256542665427654286542965430654316543265433654346543565436654376543865439654406544165442654436544465445654466544765448654496545065451654526545365454654556545665457654586545965460654616546265463654646546565466654676546865469654706547165472654736547465475654766547765478654796548065481654826548365484654856548665487654886548965490654916549265493654946549565496654976549865499655006550165502655036550465505655066550765508655096551065511655126551365514655156551665517655186551965520655216552265523655246552565526655276552865529655306553165532655336553465535655366553765538655396554065541655426554365544655456554665547655486554965550655516555265553655546555565556655576555865559655606556165562655636556465565655666556765568655696557065571655726557365574655756557665577655786557965580655816558265583655846558565586655876558865589655906559165592655936559465595655966559765598655996560065601656026560365604656056560665607656086560965610656116561265613656146561565616656176561865619656206562165622656236562465625656266562765628656296563065631656326563365634656356563665637656386563965640656416564265643656446564565646656476564865649656506565165652656536565465655656566565765658656596566065661656626566365664656656566665667656686566965670656716567265673656746567565676656776567865679656806568165682656836568465685656866568765688656896569065691656926569365694656956569665697656986569965700657016570265703657046570565706657076570865709657106571165712657136571465715657166571765718657196572065721657226572365724657256572665727657286572965730657316573265733657346573565736657376573865739657406574165742657436574465745657466574765748657496575065751657526575365754657556575665757657586575965760657616576265763657646576565766657676576865769657706577165772657736577465775657766577765778657796578065781657826578365784657856578665787657886578965790657916579265793657946579565796657976579865799658006580165802658036580465805658066580765808658096581065811658126581365814658156581665817658186581965820658216582265823658246582565826658276582865829658306583165832658336583465835658366583765838658396584065841658426584365844658456584665847658486584965850658516585265853658546585565856658576585865859658606586165862658636586465865658666586765868658696587065871658726587365874658756587665877658786587965880658816588265883658846588565886658876588865889658906589165892658936589465895658966589765898658996590065901659026590365904659056590665907659086590965910659116591265913659146591565916659176591865919659206592165922659236592465925659266592765928659296593065931659326593365934659356593665937659386593965940659416594265943659446594565946659476594865949659506595165952659536595465955659566595765958659596596065961659626596365964659656596665967659686596965970659716597265973659746597565976659776597865979659806598165982659836598465985659866598765988659896599065991659926599365994659956599665997659986599966000660016600266003660046600566006660076600866009660106601166012660136601466015660166601766018660196602066021660226602366024660256602666027660286602966030660316603266033660346603566036660376603866039660406604166042660436604466045660466604766048660496605066051660526605366054660556605666057660586605966060660616606266063660646606566066660676606866069660706607166072660736607466075660766607766078660796608066081660826608366084660856608666087660886608966090660916609266093660946609566096660976609866099661006610166102661036610466105661066610766108661096611066111661126611366114661156611666117661186611966120661216612266123661246612566126661276612866129661306613166132661336613466135661366613766138661396614066141661426614366144661456614666147661486614966150661516615266153661546615566156661576615866159661606616166162661636616466165661666616766168661696617066171661726617366174661756617666177661786617966180661816618266183661846618566186661876618866189661906619166192661936619466195661966619766198661996620066201662026620366204662056620666207662086620966210662116621266213662146621566216662176621866219662206622166222662236622466225662266622766228662296623066231662326623366234662356623666237662386623966240662416624266243662446624566246662476624866249662506625166252662536625466255662566625766258662596626066261662626626366264662656626666267662686626966270662716627266273662746627566276662776627866279662806628166282662836628466285662866628766288662896629066291662926629366294662956629666297662986629966300663016630266303663046630566306663076630866309663106631166312663136631466315663166631766318663196632066321663226632366324663256632666327663286632966330663316633266333663346633566336663376633866339663406634166342663436634466345663466634766348663496635066351663526635366354663556635666357663586635966360663616636266363663646636566366663676636866369663706637166372663736637466375663766637766378663796638066381663826638366384663856638666387663886638966390663916639266393663946639566396663976639866399664006640166402664036640466405664066640766408664096641066411664126641366414664156641666417664186641966420664216642266423664246642566426664276642866429664306643166432664336643466435664366643766438664396644066441664426644366444664456644666447664486644966450664516645266453664546645566456664576645866459664606646166462664636646466465664666646766468664696647066471664726647366474664756647666477664786647966480664816648266483664846648566486664876648866489664906649166492664936649466495664966649766498664996650066501665026650366504665056650666507665086650966510665116651266513665146651566516665176651866519665206652166522665236652466525665266652766528665296653066531665326653366534665356653666537665386653966540665416654266543665446654566546665476654866549665506655166552665536655466555665566655766558665596656066561665626656366564665656656666567665686656966570665716657266573665746657566576665776657866579665806658166582665836658466585665866658766588665896659066591665926659366594665956659666597665986659966600666016660266603666046660566606666076660866609666106661166612666136661466615666166661766618666196662066621666226662366624666256662666627666286662966630666316663266633666346663566636666376663866639666406664166642666436664466645666466664766648666496665066651666526665366654666556665666657666586665966660666616666266663666646666566666666676666866669666706667166672666736667466675666766667766678666796668066681666826668366684666856668666687666886668966690666916669266693666946669566696666976669866699667006670166702667036670466705667066670766708667096671066711667126671366714667156671666717667186671966720667216672266723667246672566726667276672866729667306673166732667336673466735667366673766738667396674066741667426674366744667456674666747667486674966750667516675266753667546675566756667576675866759667606676166762667636676466765667666676766768667696677066771667726677366774667756677666777667786677966780667816678266783667846678566786667876678866789667906679166792667936679466795667966679766798667996680066801668026680366804668056680666807668086680966810668116681266813668146681566816668176681866819668206682166822668236682466825668266682766828668296683066831668326683366834668356683666837668386683966840668416684266843668446684566846668476684866849668506685166852668536685466855668566685766858668596686066861668626686366864668656686666867668686686966870668716687266873668746687566876668776687866879668806688166882668836688466885668866688766888668896689066891668926689366894668956689666897668986689966900669016690266903669046690566906669076690866909669106691166912669136691466915669166691766918669196692066921669226692366924669256692666927669286692966930669316693266933669346693566936669376693866939669406694166942669436694466945669466694766948669496695066951669526695366954669556695666957669586695966960669616696266963669646696566966669676696866969669706697166972669736697466975669766697766978669796698066981669826698366984669856698666987669886698966990669916699266993669946699566996669976699866999670006700167002670036700467005670066700767008670096701067011670126701367014670156701667017670186701967020670216702267023670246702567026670276702867029670306703167032670336703467035670366703767038670396704067041670426704367044670456704667047670486704967050670516705267053670546705567056670576705867059670606706167062670636706467065670666706767068670696707067071670726707367074670756707667077670786707967080670816708267083670846708567086670876708867089670906709167092670936709467095670966709767098670996710067101671026710367104671056710667107671086710967110671116711267113671146711567116671176711867119671206712167122671236712467125671266712767128671296713067131671326713367134671356713667137671386713967140671416714267143671446714567146671476714867149671506715167152671536715467155671566715767158671596716067161671626716367164671656716667167671686716967170671716717267173671746717567176671776717867179671806718167182671836718467185671866718767188671896719067191671926719367194671956719667197671986719967200672016720267203672046720567206672076720867209672106721167212672136721467215672166721767218672196722067221672226722367224672256722667227672286722967230672316723267233672346723567236672376723867239672406724167242672436724467245672466724767248672496725067251672526725367254672556725667257672586725967260672616726267263672646726567266672676726867269672706727167272672736727467275672766727767278672796728067281672826728367284672856728667287672886728967290672916729267293672946729567296672976729867299673006730167302673036730467305673066730767308673096731067311673126731367314673156731667317673186731967320673216732267323673246732567326673276732867329673306733167332673336733467335673366733767338673396734067341673426734367344673456734667347673486734967350673516735267353673546735567356673576735867359673606736167362673636736467365673666736767368673696737067371673726737367374673756737667377673786737967380673816738267383673846738567386673876738867389673906739167392673936739467395673966739767398673996740067401674026740367404674056740667407674086740967410674116741267413674146741567416674176741867419674206742167422674236742467425674266742767428674296743067431674326743367434674356743667437674386743967440674416744267443674446744567446674476744867449674506745167452674536745467455674566745767458674596746067461674626746367464674656746667467674686746967470674716747267473674746747567476674776747867479674806748167482674836748467485674866748767488674896749067491674926749367494674956749667497674986749967500675016750267503675046750567506675076750867509675106751167512675136751467515675166751767518675196752067521675226752367524675256752667527675286752967530675316753267533675346753567536675376753867539675406754167542675436754467545675466754767548675496755067551675526755367554675556755667557675586755967560675616756267563675646756567566675676756867569675706757167572675736757467575675766757767578675796758067581675826758367584675856758667587675886758967590675916759267593675946759567596675976759867599676006760167602676036760467605676066760767608676096761067611676126761367614676156761667617676186761967620676216762267623676246762567626676276762867629676306763167632676336763467635676366763767638676396764067641676426764367644676456764667647676486764967650676516765267653676546765567656676576765867659676606766167662676636766467665676666766767668676696767067671676726767367674676756767667677676786767967680676816768267683676846768567686676876768867689676906769167692676936769467695676966769767698676996770067701677026770367704677056770667707677086770967710677116771267713677146771567716677176771867719677206772167722677236772467725677266772767728677296773067731677326773367734677356773667737677386773967740677416774267743677446774567746677476774867749677506775167752677536775467755677566775767758677596776067761677626776367764677656776667767677686776967770677716777267773677746777567776677776777867779677806778167782677836778467785677866778767788677896779067791677926779367794677956779667797677986779967800678016780267803678046780567806678076780867809678106781167812678136781467815678166781767818678196782067821678226782367824678256782667827678286782967830678316783267833678346783567836678376783867839678406784167842678436784467845678466784767848678496785067851678526785367854678556785667857678586785967860678616786267863678646786567866678676786867869678706787167872678736787467875678766787767878678796788067881678826788367884678856788667887678886788967890678916789267893678946789567896678976789867899679006790167902679036790467905679066790767908679096791067911679126791367914679156791667917679186791967920679216792267923679246792567926679276792867929679306793167932679336793467935679366793767938679396794067941679426794367944679456794667947679486794967950679516795267953679546795567956679576795867959679606796167962679636796467965679666796767968679696797067971679726797367974679756797667977679786797967980679816798267983679846798567986679876798867989679906799167992679936799467995679966799767998679996800068001680026800368004680056800668007680086800968010680116801268013680146801568016680176801868019680206802168022680236802468025680266802768028680296803068031680326803368034680356803668037680386803968040680416804268043680446804568046680476804868049680506805168052680536805468055680566805768058680596806068061680626806368064680656806668067680686806968070680716807268073680746807568076680776807868079680806808168082680836808468085680866808768088680896809068091680926809368094680956809668097680986809968100681016810268103681046810568106681076810868109681106811168112681136811468115681166811768118681196812068121681226812368124681256812668127681286812968130681316813268133681346813568136681376813868139681406814168142681436814468145681466814768148681496815068151681526815368154681556815668157681586815968160681616816268163681646816568166681676816868169681706817168172681736817468175681766817768178681796818068181681826818368184681856818668187681886818968190681916819268193681946819568196681976819868199682006820168202682036820468205682066820768208682096821068211682126821368214682156821668217682186821968220682216822268223682246822568226682276822868229682306823168232682336823468235682366823768238682396824068241682426824368244682456824668247682486824968250682516825268253682546825568256682576825868259682606826168262682636826468265682666826768268682696827068271682726827368274682756827668277682786827968280682816828268283682846828568286682876828868289682906829168292682936829468295682966829768298682996830068301683026830368304683056830668307683086830968310683116831268313683146831568316683176831868319683206832168322683236832468325683266832768328683296833068331683326833368334683356833668337683386833968340683416834268343683446834568346683476834868349683506835168352683536835468355683566835768358683596836068361683626836368364683656836668367683686836968370683716837268373683746837568376683776837868379683806838168382683836838468385683866838768388683896839068391683926839368394683956839668397683986839968400684016840268403684046840568406684076840868409684106841168412684136841468415684166841768418684196842068421684226842368424684256842668427684286842968430684316843268433684346843568436684376843868439684406844168442684436844468445684466844768448684496845068451684526845368454684556845668457684586845968460684616846268463684646846568466684676846868469684706847168472684736847468475684766847768478684796848068481684826848368484684856848668487684886848968490684916849268493684946849568496684976849868499685006850168502685036850468505685066850768508685096851068511685126851368514685156851668517685186851968520685216852268523685246852568526685276852868529685306853168532685336853468535685366853768538685396854068541685426854368544685456854668547685486854968550685516855268553685546855568556685576855868559685606856168562685636856468565685666856768568685696857068571685726857368574685756857668577685786857968580685816858268583685846858568586685876858868589685906859168592685936859468595685966859768598685996860068601686026860368604686056860668607686086860968610686116861268613686146861568616686176861868619686206862168622686236862468625686266862768628686296863068631686326863368634686356863668637686386863968640686416864268643686446864568646686476864868649686506865168652686536865468655686566865768658686596866068661686626866368664686656866668667686686866968670686716867268673686746867568676686776867868679686806868168682686836868468685686866868768688686896869068691686926869368694686956869668697686986869968700687016870268703687046870568706687076870868709687106871168712687136871468715687166871768718687196872068721687226872368724687256872668727687286872968730687316873268733687346873568736687376873868739687406874168742687436874468745687466874768748687496875068751687526875368754687556875668757687586875968760687616876268763687646876568766687676876868769687706877168772687736877468775687766877768778687796878068781687826878368784687856878668787687886878968790687916879268793687946879568796687976879868799688006880168802688036880468805688066880768808688096881068811688126881368814688156881668817688186881968820688216882268823688246882568826688276882868829688306883168832688336883468835688366883768838688396884068841688426884368844688456884668847688486884968850688516885268853688546885568856688576885868859688606886168862688636886468865688666886768868688696887068871688726887368874688756887668877688786887968880688816888268883688846888568886688876888868889688906889168892688936889468895688966889768898688996890068901689026890368904689056890668907689086890968910689116891268913689146891568916689176891868919689206892168922689236892468925689266892768928689296893068931689326893368934689356893668937689386893968940689416894268943689446894568946689476894868949689506895168952689536895468955689566895768958689596896068961689626896368964689656896668967689686896968970689716897268973689746897568976689776897868979689806898168982689836898468985689866898768988689896899068991689926899368994689956899668997689986899969000690016900269003690046900569006690076900869009690106901169012690136901469015690166901769018690196902069021690226902369024690256902669027690286902969030690316903269033690346903569036690376903869039690406904169042690436904469045690466904769048690496905069051690526905369054690556905669057690586905969060690616906269063690646906569066690676906869069690706907169072690736907469075690766907769078690796908069081690826908369084690856908669087690886908969090690916909269093690946909569096690976909869099691006910169102691036910469105691066910769108691096911069111691126911369114691156911669117691186911969120691216912269123691246912569126691276912869129691306913169132691336913469135691366913769138691396914069141691426914369144691456914669147691486914969150691516915269153691546915569156691576915869159691606916169162691636916469165691666916769168691696917069171691726917369174691756917669177691786917969180691816918269183691846918569186691876918869189691906919169192691936919469195691966919769198691996920069201692026920369204692056920669207692086920969210692116921269213692146921569216692176921869219692206922169222692236922469225692266922769228692296923069231692326923369234692356923669237692386923969240692416924269243692446924569246692476924869249692506925169252692536925469255692566925769258692596926069261692626926369264692656926669267692686926969270692716927269273692746927569276692776927869279692806928169282692836928469285692866928769288692896929069291692926929369294692956929669297692986929969300693016930269303693046930569306693076930869309693106931169312693136931469315693166931769318693196932069321693226932369324693256932669327693286932969330693316933269333693346933569336693376933869339693406934169342693436934469345693466934769348693496935069351693526935369354693556935669357693586935969360693616936269363693646936569366693676936869369693706937169372693736937469375693766937769378693796938069381693826938369384693856938669387693886938969390693916939269393693946939569396693976939869399694006940169402694036940469405694066940769408694096941069411694126941369414694156941669417694186941969420694216942269423694246942569426694276942869429694306943169432694336943469435694366943769438694396944069441694426944369444694456944669447694486944969450694516945269453694546945569456694576945869459694606946169462694636946469465694666946769468694696947069471694726947369474694756947669477694786947969480694816948269483694846948569486694876948869489694906949169492694936949469495694966949769498694996950069501695026950369504695056950669507695086950969510695116951269513695146951569516695176951869519695206952169522695236952469525695266952769528695296953069531695326953369534695356953669537695386953969540695416954269543695446954569546695476954869549695506955169552695536955469555695566955769558695596956069561695626956369564695656956669567695686956969570695716957269573695746957569576695776957869579695806958169582695836958469585695866958769588695896959069591695926959369594695956959669597695986959969600696016960269603696046960569606696076960869609696106961169612696136961469615696166961769618696196962069621696226962369624696256962669627696286962969630696316963269633696346963569636696376963869639696406964169642696436964469645696466964769648696496965069651696526965369654696556965669657696586965969660696616966269663696646966569666696676966869669696706967169672696736967469675696766967769678696796968069681696826968369684696856968669687696886968969690696916969269693696946969569696696976969869699697006970169702697036970469705697066970769708697096971069711697126971369714697156971669717697186971969720697216972269723697246972569726697276972869729697306973169732697336973469735697366973769738697396974069741697426974369744697456974669747697486974969750697516975269753697546975569756697576975869759697606976169762697636976469765697666976769768697696977069771697726977369774697756977669777697786977969780697816978269783697846978569786697876978869789697906979169792697936979469795697966979769798697996980069801698026980369804698056980669807698086980969810698116981269813698146981569816698176981869819698206982169822698236982469825698266982769828698296983069831698326983369834698356983669837698386983969840698416984269843698446984569846698476984869849698506985169852698536985469855698566985769858698596986069861698626986369864698656986669867698686986969870698716987269873698746987569876698776987869879698806988169882698836988469885698866988769888698896989069891698926989369894698956989669897698986989969900699016990269903699046990569906699076990869909699106991169912699136991469915699166991769918699196992069921699226992369924699256992669927699286992969930699316993269933699346993569936699376993869939699406994169942699436994469945699466994769948699496995069951699526995369954699556995669957699586995969960699616996269963699646996569966699676996869969699706997169972699736997469975699766997769978699796998069981699826998369984699856998669987699886998969990699916999269993699946999569996699976999869999700007000170002700037000470005700067000770008700097001070011700127001370014700157001670017700187001970020700217002270023700247002570026700277002870029700307003170032700337003470035700367003770038700397004070041700427004370044700457004670047700487004970050700517005270053700547005570056700577005870059700607006170062700637006470065700667006770068700697007070071700727007370074700757007670077700787007970080700817008270083700847008570086700877008870089700907009170092700937009470095700967009770098700997010070101701027010370104701057010670107701087010970110701117011270113701147011570116701177011870119701207012170122701237012470125701267012770128701297013070131701327013370134701357013670137701387013970140701417014270143701447014570146701477014870149701507015170152701537015470155701567015770158701597016070161701627016370164701657016670167701687016970170701717017270173701747017570176701777017870179701807018170182701837018470185701867018770188701897019070191701927019370194701957019670197701987019970200702017020270203702047020570206702077020870209702107021170212702137021470215702167021770218702197022070221702227022370224702257022670227702287022970230702317023270233702347023570236702377023870239702407024170242702437024470245702467024770248702497025070251702527025370254702557025670257702587025970260702617026270263702647026570266702677026870269702707027170272702737027470275702767027770278702797028070281702827028370284702857028670287702887028970290702917029270293702947029570296702977029870299703007030170302703037030470305703067030770308703097031070311703127031370314703157031670317703187031970320703217032270323703247032570326703277032870329703307033170332703337033470335703367033770338703397034070341703427034370344703457034670347703487034970350703517035270353703547035570356703577035870359703607036170362703637036470365703667036770368703697037070371703727037370374703757037670377703787037970380703817038270383703847038570386703877038870389703907039170392703937039470395703967039770398703997040070401704027040370404704057040670407704087040970410704117041270413704147041570416704177041870419704207042170422704237042470425704267042770428704297043070431704327043370434704357043670437704387043970440704417044270443704447044570446704477044870449704507045170452704537045470455704567045770458704597046070461704627046370464704657046670467704687046970470704717047270473704747047570476704777047870479704807048170482704837048470485704867048770488704897049070491704927049370494704957049670497704987049970500705017050270503705047050570506705077050870509705107051170512705137051470515705167051770518705197052070521705227052370524705257052670527705287052970530705317053270533705347053570536705377053870539705407054170542705437054470545705467054770548705497055070551705527055370554705557055670557705587055970560705617056270563705647056570566705677056870569705707057170572705737057470575705767057770578705797058070581705827058370584705857058670587705887058970590705917059270593705947059570596705977059870599706007060170602706037060470605706067060770608706097061070611706127061370614706157061670617706187061970620706217062270623706247062570626706277062870629706307063170632706337063470635706367063770638706397064070641706427064370644706457064670647706487064970650706517065270653706547065570656706577065870659706607066170662706637066470665706667066770668706697067070671706727067370674706757067670677706787067970680706817068270683706847068570686706877068870689706907069170692706937069470695706967069770698706997070070701707027070370704707057070670707707087070970710707117071270713707147071570716707177071870719707207072170722707237072470725707267072770728707297073070731707327073370734707357073670737707387073970740707417074270743707447074570746707477074870749707507075170752707537075470755707567075770758707597076070761707627076370764707657076670767707687076970770707717077270773707747077570776707777077870779707807078170782707837078470785707867078770788707897079070791707927079370794707957079670797707987079970800708017080270803708047080570806708077080870809708107081170812708137081470815708167081770818708197082070821708227082370824708257082670827708287082970830708317083270833708347083570836708377083870839708407084170842708437084470845708467084770848708497085070851708527085370854708557085670857708587085970860708617086270863708647086570866708677086870869708707087170872708737087470875708767087770878708797088070881708827088370884708857088670887708887088970890708917089270893708947089570896708977089870899709007090170902709037090470905709067090770908709097091070911709127091370914709157091670917709187091970920709217092270923709247092570926709277092870929709307093170932709337093470935709367093770938709397094070941709427094370944709457094670947709487094970950709517095270953709547095570956709577095870959709607096170962709637096470965709667096770968709697097070971709727097370974709757097670977709787097970980709817098270983709847098570986709877098870989709907099170992709937099470995709967099770998709997100071001710027100371004710057100671007710087100971010710117101271013710147101571016710177101871019710207102171022710237102471025710267102771028710297103071031710327103371034710357103671037710387103971040710417104271043710447104571046710477104871049710507105171052710537105471055710567105771058710597106071061710627106371064710657106671067710687106971070710717107271073710747107571076710777107871079710807108171082710837108471085710867108771088710897109071091710927109371094710957109671097710987109971100711017110271103711047110571106711077110871109711107111171112711137111471115711167111771118711197112071121711227112371124711257112671127711287112971130711317113271133711347113571136711377113871139711407114171142711437114471145711467114771148711497115071151711527115371154711557115671157711587115971160711617116271163711647116571166711677116871169711707117171172711737117471175711767117771178711797118071181711827118371184711857118671187711887118971190711917119271193711947119571196711977119871199712007120171202712037120471205712067120771208712097121071211712127121371214712157121671217712187121971220712217122271223712247122571226712277122871229712307123171232712337123471235712367123771238712397124071241712427124371244712457124671247712487124971250712517125271253712547125571256712577125871259712607126171262712637126471265712667126771268712697127071271712727127371274712757127671277712787127971280712817128271283712847128571286712877128871289712907129171292712937129471295712967129771298712997130071301713027130371304713057130671307713087130971310713117131271313713147131571316713177131871319713207132171322713237132471325713267132771328713297133071331713327133371334713357133671337713387133971340713417134271343713447134571346713477134871349713507135171352713537135471355713567135771358713597136071361713627136371364713657136671367713687136971370713717137271373713747137571376713777137871379713807138171382713837138471385713867138771388713897139071391713927139371394713957139671397713987139971400714017140271403714047140571406714077140871409714107141171412714137141471415714167141771418714197142071421714227142371424714257142671427714287142971430714317143271433714347143571436714377143871439714407144171442714437144471445714467144771448714497145071451714527145371454714557145671457714587145971460714617146271463714647146571466714677146871469714707147171472714737147471475714767147771478714797148071481714827148371484714857148671487714887148971490714917149271493714947149571496714977149871499715007150171502715037150471505715067150771508715097151071511715127151371514715157151671517715187151971520715217152271523715247152571526715277152871529715307153171532715337153471535715367153771538715397154071541715427154371544715457154671547715487154971550715517155271553715547155571556715577155871559715607156171562715637156471565715667156771568715697157071571715727157371574715757157671577715787157971580715817158271583715847158571586715877158871589715907159171592715937159471595715967159771598715997160071601716027160371604716057160671607716087160971610716117161271613716147161571616716177161871619716207162171622716237162471625716267162771628716297163071631716327163371634716357163671637716387163971640716417164271643716447164571646716477164871649716507165171652716537165471655716567165771658716597166071661716627166371664716657166671667716687166971670716717167271673716747167571676716777167871679716807168171682716837168471685716867168771688716897169071691716927169371694716957169671697716987169971700717017170271703717047170571706717077170871709717107171171712717137171471715717167171771718717197172071721717227172371724717257172671727717287172971730717317173271733717347173571736717377173871739717407174171742717437174471745717467174771748717497175071751717527175371754717557175671757717587175971760717617176271763717647176571766717677176871769717707177171772717737177471775717767177771778717797178071781717827178371784717857178671787717887178971790717917179271793717947179571796717977179871799718007180171802718037180471805718067180771808718097181071811718127181371814718157181671817718187181971820718217182271823718247182571826718277182871829718307183171832718337183471835718367183771838718397184071841718427184371844718457184671847718487184971850718517185271853718547185571856718577185871859718607186171862718637186471865718667186771868718697187071871718727187371874718757187671877718787187971880718817188271883718847188571886718877188871889718907189171892718937189471895718967189771898718997190071901719027190371904719057190671907719087190971910719117191271913719147191571916719177191871919719207192171922719237192471925719267192771928719297193071931719327193371934719357193671937719387193971940719417194271943719447194571946719477194871949719507195171952719537195471955719567195771958719597196071961719627196371964719657196671967719687196971970719717197271973719747197571976719777197871979719807198171982719837198471985719867198771988719897199071991719927199371994719957199671997719987199972000720017200272003720047200572006720077200872009720107201172012720137201472015720167201772018720197202072021720227202372024720257202672027720287202972030720317203272033720347203572036720377203872039720407204172042720437204472045720467204772048720497205072051720527205372054720557205672057720587205972060720617206272063720647206572066720677206872069720707207172072720737207472075720767207772078720797208072081720827208372084720857208672087720887208972090720917209272093720947209572096720977209872099721007210172102721037210472105721067210772108721097211072111721127211372114721157211672117721187211972120721217212272123721247212572126721277212872129721307213172132721337213472135721367213772138721397214072141721427214372144721457214672147721487214972150721517215272153721547215572156721577215872159721607216172162721637216472165721667216772168721697217072171721727217372174721757217672177721787217972180721817218272183721847218572186721877218872189721907219172192721937219472195721967219772198721997220072201722027220372204722057220672207722087220972210722117221272213722147221572216722177221872219722207222172222722237222472225722267222772228722297223072231722327223372234722357223672237722387223972240722417224272243722447224572246722477224872249722507225172252722537225472255722567225772258722597226072261722627226372264722657226672267722687226972270722717227272273722747227572276722777227872279722807228172282722837228472285722867228772288722897229072291722927229372294722957229672297722987229972300723017230272303723047230572306723077230872309723107231172312723137231472315723167231772318723197232072321723227232372324723257232672327723287232972330723317233272333723347233572336723377233872339723407234172342723437234472345723467234772348723497235072351723527235372354723557235672357723587235972360723617236272363723647236572366723677236872369723707237172372723737237472375723767237772378723797238072381723827238372384723857238672387723887238972390723917239272393723947239572396723977239872399724007240172402724037240472405724067240772408724097241072411724127241372414724157241672417724187241972420724217242272423724247242572426724277242872429724307243172432724337243472435724367243772438724397244072441724427244372444724457244672447724487244972450724517245272453724547245572456724577245872459724607246172462724637246472465724667246772468724697247072471724727247372474724757247672477724787247972480724817248272483724847248572486724877248872489724907249172492724937249472495724967249772498724997250072501725027250372504725057250672507725087250972510725117251272513725147251572516725177251872519725207252172522725237252472525725267252772528725297253072531725327253372534725357253672537725387253972540725417254272543725447254572546725477254872549725507255172552725537255472555725567255772558725597256072561725627256372564725657256672567725687256972570725717257272573725747257572576725777257872579725807258172582725837258472585725867258772588725897259072591725927259372594725957259672597725987259972600726017260272603726047260572606726077260872609726107261172612726137261472615726167261772618726197262072621726227262372624726257262672627726287262972630726317263272633726347263572636726377263872639726407264172642726437264472645726467264772648726497265072651726527265372654726557265672657726587265972660726617266272663726647266572666726677266872669726707267172672726737267472675726767267772678726797268072681726827268372684726857268672687726887268972690726917269272693726947269572696726977269872699727007270172702727037270472705727067270772708727097271072711727127271372714727157271672717727187271972720727217272272723727247272572726727277272872729727307273172732727337273472735727367273772738727397274072741727427274372744727457274672747727487274972750727517275272753727547275572756727577275872759727607276172762727637276472765727667276772768727697277072771727727277372774727757277672777727787277972780727817278272783727847278572786727877278872789727907279172792727937279472795727967279772798727997280072801728027280372804728057280672807728087280972810728117281272813728147281572816728177281872819728207282172822728237282472825728267282772828728297283072831728327283372834728357283672837728387283972840728417284272843728447284572846728477284872849728507285172852728537285472855728567285772858728597286072861728627286372864728657286672867728687286972870728717287272873728747287572876728777287872879728807288172882728837288472885728867288772888728897289072891728927289372894728957289672897728987289972900729017290272903729047290572906729077290872909729107291172912729137291472915729167291772918729197292072921729227292372924729257292672927729287292972930729317293272933729347293572936729377293872939729407294172942729437294472945729467294772948729497295072951729527295372954729557295672957729587295972960729617296272963729647296572966729677296872969729707297172972729737297472975729767297772978729797298072981729827298372984729857298672987729887298972990729917299272993729947299572996729977299872999730007300173002730037300473005730067300773008730097301073011730127301373014730157301673017730187301973020730217302273023730247302573026730277302873029730307303173032730337303473035730367303773038730397304073041730427304373044730457304673047730487304973050730517305273053730547305573056730577305873059730607306173062730637306473065730667306773068730697307073071730727307373074730757307673077730787307973080730817308273083730847308573086730877308873089730907309173092730937309473095730967309773098730997310073101731027310373104731057310673107731087310973110731117311273113731147311573116731177311873119731207312173122731237312473125731267312773128731297313073131731327313373134731357313673137731387313973140731417314273143731447314573146731477314873149731507315173152731537315473155731567315773158731597316073161731627316373164731657316673167731687316973170731717317273173731747317573176731777317873179731807318173182731837318473185731867318773188731897319073191731927319373194731957319673197731987319973200732017320273203732047320573206732077320873209732107321173212732137321473215732167321773218732197322073221732227322373224732257322673227732287322973230732317323273233732347323573236732377323873239732407324173242732437324473245732467324773248732497325073251732527325373254732557325673257732587325973260732617326273263732647326573266732677326873269732707327173272732737327473275732767327773278732797328073281732827328373284732857328673287732887328973290732917329273293732947329573296732977329873299733007330173302733037330473305733067330773308733097331073311733127331373314733157331673317733187331973320733217332273323733247332573326733277332873329733307333173332733337333473335733367333773338733397334073341733427334373344733457334673347733487334973350733517335273353733547335573356733577335873359733607336173362733637336473365733667336773368733697337073371733727337373374733757337673377733787337973380733817338273383733847338573386733877338873389733907339173392733937339473395733967339773398733997340073401734027340373404734057340673407734087340973410734117341273413734147341573416734177341873419734207342173422734237342473425734267342773428734297343073431734327343373434734357343673437734387343973440734417344273443734447344573446734477344873449734507345173452734537345473455734567345773458734597346073461734627346373464734657346673467734687346973470734717347273473734747347573476734777347873479734807348173482734837348473485734867348773488734897349073491734927349373494734957349673497734987349973500735017350273503735047350573506735077350873509735107351173512735137351473515735167351773518735197352073521735227352373524735257352673527735287352973530735317353273533735347353573536735377353873539735407354173542735437354473545735467354773548735497355073551735527355373554735557355673557735587355973560735617356273563735647356573566735677356873569735707357173572735737357473575735767357773578735797358073581735827358373584735857358673587735887358973590735917359273593735947359573596735977359873599736007360173602736037360473605736067360773608736097361073611736127361373614736157361673617736187361973620736217362273623736247362573626736277362873629736307363173632736337363473635736367363773638736397364073641736427364373644736457364673647736487364973650736517365273653736547365573656736577365873659736607366173662736637366473665736667366773668736697367073671736727367373674736757367673677736787367973680736817368273683736847368573686736877368873689736907369173692736937369473695736967369773698736997370073701737027370373704737057370673707737087370973710737117371273713737147371573716737177371873719737207372173722737237372473725737267372773728737297373073731737327373373734737357373673737737387373973740737417374273743737447374573746737477374873749737507375173752737537375473755737567375773758737597376073761737627376373764737657376673767737687376973770737717377273773737747377573776737777377873779737807378173782737837378473785737867378773788737897379073791737927379373794737957379673797737987379973800738017380273803738047380573806738077380873809738107381173812738137381473815738167381773818738197382073821738227382373824738257382673827738287382973830738317383273833738347383573836738377383873839738407384173842738437384473845738467384773848738497385073851738527385373854738557385673857738587385973860738617386273863738647386573866738677386873869738707387173872738737387473875738767387773878738797388073881738827388373884738857388673887738887388973890738917389273893738947389573896738977389873899739007390173902739037390473905739067390773908739097391073911739127391373914739157391673917739187391973920739217392273923739247392573926739277392873929739307393173932739337393473935739367393773938739397394073941739427394373944739457394673947739487394973950739517395273953739547395573956739577395873959739607396173962739637396473965739667396773968739697397073971739727397373974739757397673977739787397973980739817398273983739847398573986739877398873989739907399173992739937399473995739967399773998739997400074001740027400374004740057400674007740087400974010740117401274013740147401574016740177401874019740207402174022740237402474025740267402774028740297403074031740327403374034740357403674037740387403974040740417404274043740447404574046740477404874049740507405174052740537405474055740567405774058740597406074061740627406374064740657406674067740687406974070740717407274073740747407574076740777407874079740807408174082740837408474085740867408774088740897409074091740927409374094740957409674097740987409974100741017410274103741047410574106741077410874109741107411174112741137411474115741167411774118741197412074121741227412374124741257412674127741287412974130741317413274133741347413574136741377413874139741407414174142741437414474145741467414774148741497415074151741527415374154741557415674157741587415974160741617416274163741647416574166741677416874169741707417174172741737417474175741767417774178741797418074181741827418374184741857418674187741887418974190741917419274193741947419574196741977419874199742007420174202742037420474205742067420774208742097421074211742127421374214742157421674217742187421974220742217422274223742247422574226742277422874229742307423174232742337423474235742367423774238742397424074241742427424374244742457424674247742487424974250742517425274253742547425574256742577425874259742607426174262742637426474265742667426774268742697427074271742727427374274742757427674277742787427974280742817428274283742847428574286742877428874289742907429174292742937429474295742967429774298742997430074301743027430374304743057430674307743087430974310743117431274313743147431574316743177431874319743207432174322743237432474325743267432774328743297433074331743327433374334743357433674337743387433974340743417434274343743447434574346743477434874349743507435174352743537435474355743567435774358743597436074361743627436374364743657436674367743687436974370743717437274373743747437574376743777437874379743807438174382743837438474385743867438774388743897439074391743927439374394743957439674397743987439974400744017440274403744047440574406744077440874409744107441174412744137441474415744167441774418744197442074421744227442374424744257442674427744287442974430744317443274433744347443574436744377443874439744407444174442744437444474445744467444774448744497445074451744527445374454744557445674457744587445974460744617446274463744647446574466744677446874469744707447174472744737447474475744767447774478744797448074481744827448374484744857448674487744887448974490744917449274493744947449574496744977449874499745007450174502745037450474505745067450774508745097451074511745127451374514745157451674517745187451974520745217452274523745247452574526745277452874529745307453174532745337453474535745367453774538745397454074541745427454374544745457454674547745487454974550745517455274553745547455574556745577455874559745607456174562745637456474565745667456774568745697457074571745727457374574745757457674577745787457974580745817458274583745847458574586745877458874589745907459174592745937459474595745967459774598745997460074601746027460374604746057460674607746087460974610746117461274613746147461574616746177461874619746207462174622746237462474625746267462774628746297463074631746327463374634746357463674637746387463974640746417464274643746447464574646746477464874649746507465174652746537465474655746567465774658746597466074661746627466374664746657466674667746687466974670746717467274673746747467574676746777467874679746807468174682746837468474685746867468774688746897469074691746927469374694746957469674697746987469974700747017470274703747047470574706747077470874709747107471174712747137471474715747167471774718747197472074721747227472374724747257472674727747287472974730747317473274733747347473574736747377473874739747407474174742747437474474745747467474774748747497475074751747527475374754747557475674757747587475974760747617476274763747647476574766747677476874769747707477174772747737477474775747767477774778747797478074781747827478374784747857478674787747887478974790747917479274793747947479574796747977479874799748007480174802748037480474805748067480774808748097481074811748127481374814748157481674817748187481974820748217482274823748247482574826748277482874829748307483174832748337483474835748367483774838748397484074841748427484374844748457484674847748487484974850748517485274853748547485574856748577485874859748607486174862748637486474865748667486774868748697487074871748727487374874748757487674877748787487974880748817488274883748847488574886748877488874889748907489174892748937489474895748967489774898748997490074901749027490374904749057490674907749087490974910749117491274913749147491574916749177491874919749207492174922749237492474925749267492774928749297493074931749327493374934749357493674937749387493974940749417494274943749447494574946749477494874949749507495174952749537495474955749567495774958749597496074961749627496374964749657496674967749687496974970749717497274973749747497574976749777497874979749807498174982749837498474985749867498774988749897499074991749927499374994749957499674997749987499975000750017500275003750047500575006750077500875009750107501175012750137501475015750167501775018750197502075021750227502375024750257502675027750287502975030750317503275033750347503575036750377503875039750407504175042750437504475045750467504775048750497505075051750527505375054750557505675057750587505975060750617506275063750647506575066750677506875069750707507175072750737507475075750767507775078750797508075081750827508375084750857508675087750887508975090750917509275093750947509575096750977509875099751007510175102751037510475105751067510775108751097511075111751127511375114751157511675117751187511975120751217512275123751247512575126751277512875129751307513175132751337513475135751367513775138751397514075141751427514375144751457514675147751487514975150751517515275153751547515575156751577515875159751607516175162751637516475165751667516775168751697517075171751727517375174751757517675177751787517975180751817518275183751847518575186751877518875189751907519175192751937519475195751967519775198751997520075201752027520375204752057520675207752087520975210752117521275213752147521575216752177521875219752207522175222752237522475225752267522775228752297523075231752327523375234752357523675237752387523975240752417524275243752447524575246752477524875249752507525175252752537525475255752567525775258752597526075261752627526375264752657526675267752687526975270752717527275273752747527575276752777527875279752807528175282752837528475285752867528775288752897529075291752927529375294752957529675297752987529975300753017530275303753047530575306753077530875309753107531175312753137531475315753167531775318753197532075321753227532375324753257532675327753287532975330753317533275333753347533575336753377533875339753407534175342753437534475345753467534775348753497535075351753527535375354753557535675357753587535975360753617536275363753647536575366753677536875369753707537175372753737537475375753767537775378753797538075381753827538375384753857538675387753887538975390753917539275393753947539575396753977539875399754007540175402754037540475405754067540775408754097541075411754127541375414754157541675417754187541975420754217542275423754247542575426754277542875429754307543175432754337543475435754367543775438754397544075441754427544375444754457544675447754487544975450754517545275453754547545575456754577545875459754607546175462754637546475465754667546775468754697547075471754727547375474754757547675477754787547975480754817548275483754847548575486754877548875489754907549175492754937549475495754967549775498754997550075501755027550375504755057550675507755087550975510755117551275513755147551575516755177551875519755207552175522755237552475525755267552775528755297553075531755327553375534755357553675537755387553975540755417554275543755447554575546755477554875549755507555175552755537555475555755567555775558755597556075561755627556375564755657556675567755687556975570755717557275573755747557575576755777557875579755807558175582755837558475585755867558775588755897559075591755927559375594755957559675597755987559975600756017560275603756047560575606756077560875609756107561175612756137561475615756167561775618756197562075621756227562375624756257562675627756287562975630756317563275633756347563575636756377563875639756407564175642756437564475645756467564775648756497565075651756527565375654756557565675657756587565975660756617566275663756647566575666756677566875669756707567175672756737567475675756767567775678756797568075681756827568375684756857568675687756887568975690756917569275693756947569575696756977569875699757007570175702757037570475705757067570775708757097571075711757127571375714757157571675717757187571975720757217572275723757247572575726757277572875729757307573175732757337573475735757367573775738757397574075741757427574375744757457574675747757487574975750757517575275753757547575575756757577575875759757607576175762757637576475765757667576775768757697577075771757727577375774757757577675777757787577975780757817578275783757847578575786757877578875789757907579175792757937579475795757967579775798757997580075801758027580375804758057580675807758087580975810758117581275813758147581575816758177581875819758207582175822758237582475825758267582775828758297583075831758327583375834758357583675837758387583975840758417584275843758447584575846758477584875849758507585175852758537585475855758567585775858758597586075861758627586375864758657586675867758687586975870758717587275873758747587575876758777587875879758807588175882758837588475885758867588775888758897589075891758927589375894758957589675897758987589975900759017590275903759047590575906759077590875909759107591175912759137591475915759167591775918759197592075921759227592375924759257592675927759287592975930759317593275933759347593575936759377593875939759407594175942759437594475945759467594775948759497595075951759527595375954759557595675957759587595975960759617596275963759647596575966759677596875969759707597175972759737597475975759767597775978759797598075981759827598375984759857598675987759887598975990759917599275993759947599575996759977599875999760007600176002760037600476005760067600776008760097601076011760127601376014760157601676017760187601976020760217602276023760247602576026760277602876029760307603176032760337603476035760367603776038760397604076041760427604376044760457604676047760487604976050760517605276053760547605576056760577605876059760607606176062760637606476065760667606776068760697607076071760727607376074760757607676077760787607976080760817608276083760847608576086760877608876089760907609176092760937609476095760967609776098760997610076101761027610376104761057610676107761087610976110761117611276113761147611576116761177611876119761207612176122761237612476125761267612776128761297613076131761327613376134761357613676137761387613976140761417614276143761447614576146761477614876149761507615176152761537615476155761567615776158761597616076161761627616376164761657616676167761687616976170761717617276173761747617576176761777617876179761807618176182761837618476185761867618776188761897619076191761927619376194761957619676197761987619976200762017620276203762047620576206762077620876209762107621176212762137621476215762167621776218762197622076221762227622376224762257622676227762287622976230762317623276233762347623576236762377623876239762407624176242762437624476245762467624776248762497625076251762527625376254762557625676257762587625976260762617626276263762647626576266762677626876269762707627176272762737627476275762767627776278762797628076281762827628376284762857628676287762887628976290762917629276293762947629576296762977629876299763007630176302763037630476305763067630776308763097631076311763127631376314763157631676317763187631976320763217632276323763247632576326763277632876329763307633176332763337633476335763367633776338763397634076341763427634376344763457634676347763487634976350763517635276353763547635576356763577635876359763607636176362763637636476365763667636776368763697637076371763727637376374763757637676377763787637976380763817638276383763847638576386763877638876389763907639176392763937639476395763967639776398763997640076401764027640376404764057640676407764087640976410764117641276413764147641576416764177641876419764207642176422764237642476425764267642776428764297643076431764327643376434764357643676437764387643976440764417644276443764447644576446764477644876449764507645176452764537645476455764567645776458764597646076461764627646376464764657646676467764687646976470764717647276473764747647576476764777647876479764807648176482764837648476485764867648776488764897649076491764927649376494764957649676497764987649976500765017650276503765047650576506765077650876509765107651176512765137651476515765167651776518765197652076521765227652376524765257652676527765287652976530765317653276533765347653576536765377653876539765407654176542765437654476545765467654776548765497655076551765527655376554765557655676557765587655976560765617656276563765647656576566765677656876569765707657176572765737657476575765767657776578765797658076581765827658376584765857658676587765887658976590765917659276593765947659576596765977659876599766007660176602766037660476605766067660776608766097661076611766127661376614766157661676617766187661976620766217662276623766247662576626766277662876629766307663176632766337663476635766367663776638766397664076641766427664376644766457664676647766487664976650766517665276653766547665576656766577665876659766607666176662766637666476665766667666776668766697667076671766727667376674766757667676677766787667976680766817668276683766847668576686766877668876689766907669176692766937669476695766967669776698766997670076701767027670376704767057670676707767087670976710767117671276713767147671576716767177671876719767207672176722767237672476725767267672776728767297673076731767327673376734767357673676737767387673976740767417674276743767447674576746767477674876749767507675176752767537675476755767567675776758767597676076761767627676376764767657676676767767687676976770767717677276773767747677576776767777677876779767807678176782767837678476785767867678776788767897679076791767927679376794767957679676797767987679976800768017680276803768047680576806768077680876809768107681176812768137681476815768167681776818768197682076821768227682376824768257682676827768287682976830768317683276833768347683576836768377683876839768407684176842768437684476845768467684776848768497685076851768527685376854768557685676857768587685976860768617686276863768647686576866768677686876869768707687176872768737687476875768767687776878768797688076881768827688376884768857688676887768887688976890768917689276893768947689576896768977689876899769007690176902769037690476905769067690776908769097691076911769127691376914769157691676917769187691976920769217692276923769247692576926769277692876929769307693176932769337693476935769367693776938769397694076941769427694376944769457694676947769487694976950769517695276953769547695576956769577695876959769607696176962769637696476965769667696776968769697697076971769727697376974769757697676977769787697976980769817698276983769847698576986769877698876989769907699176992769937699476995769967699776998769997700077001770027700377004770057700677007770087700977010770117701277013770147701577016770177701877019770207702177022770237702477025770267702777028770297703077031770327703377034770357703677037770387703977040770417704277043770447704577046770477704877049770507705177052770537705477055770567705777058770597706077061770627706377064770657706677067770687706977070770717707277073770747707577076770777707877079770807708177082770837708477085770867708777088770897709077091770927709377094770957709677097770987709977100771017710277103771047710577106771077710877109771107711177112771137711477115771167711777118771197712077121771227712377124771257712677127771287712977130771317713277133771347713577136771377713877139771407714177142771437714477145771467714777148771497715077151771527715377154771557715677157771587715977160771617716277163771647716577166771677716877169771707717177172771737717477175771767717777178771797718077181771827718377184771857718677187771887718977190771917719277193771947719577196771977719877199772007720177202772037720477205772067720777208772097721077211772127721377214772157721677217772187721977220772217722277223772247722577226772277722877229772307723177232772337723477235772367723777238772397724077241772427724377244772457724677247772487724977250772517725277253772547725577256772577725877259772607726177262772637726477265772667726777268772697727077271772727727377274772757727677277772787727977280772817728277283772847728577286772877728877289772907729177292772937729477295772967729777298772997730077301773027730377304773057730677307773087730977310773117731277313773147731577316773177731877319773207732177322773237732477325773267732777328773297733077331773327733377334773357733677337773387733977340773417734277343773447734577346773477734877349773507735177352773537735477355773567735777358773597736077361773627736377364773657736677367773687736977370773717737277373773747737577376773777737877379773807738177382773837738477385773867738777388773897739077391773927739377394773957739677397773987739977400774017740277403774047740577406774077740877409774107741177412774137741477415774167741777418774197742077421774227742377424774257742677427774287742977430774317743277433774347743577436774377743877439774407744177442774437744477445774467744777448774497745077451774527745377454774557745677457774587745977460774617746277463774647746577466774677746877469774707747177472774737747477475774767747777478774797748077481774827748377484774857748677487774887748977490774917749277493774947749577496774977749877499775007750177502775037750477505775067750777508775097751077511775127751377514775157751677517775187751977520775217752277523775247752577526775277752877529775307753177532775337753477535775367753777538775397754077541775427754377544775457754677547775487754977550775517755277553775547755577556775577755877559775607756177562775637756477565775667756777568775697757077571775727757377574775757757677577775787757977580775817758277583775847758577586775877758877589775907759177592775937759477595775967759777598775997760077601776027760377604776057760677607776087760977610776117761277613776147761577616776177761877619776207762177622776237762477625776267762777628776297763077631776327763377634776357763677637776387763977640776417764277643776447764577646776477764877649776507765177652776537765477655776567765777658776597766077661776627766377664776657766677667776687766977670776717767277673776747767577676776777767877679776807768177682776837768477685776867768777688776897769077691776927769377694776957769677697776987769977700777017770277703777047770577706777077770877709777107771177712777137771477715777167771777718777197772077721777227772377724777257772677727777287772977730777317773277733777347773577736777377773877739777407774177742777437774477745777467774777748777497775077751777527775377754777557775677757777587775977760777617776277763777647776577766777677776877769777707777177772777737777477775777767777777778777797778077781777827778377784777857778677787777887778977790777917779277793777947779577796777977779877799778007780177802778037780477805778067780777808778097781077811778127781377814778157781677817778187781977820778217782277823778247782577826778277782877829778307783177832778337783477835778367783777838778397784077841778427784377844778457784677847778487784977850778517785277853778547785577856778577785877859778607786177862778637786477865778667786777868778697787077871778727787377874778757787677877778787787977880778817788277883778847788577886778877788877889778907789177892778937789477895778967789777898778997790077901779027790377904779057790677907779087790977910779117791277913779147791577916779177791877919779207792177922779237792477925779267792777928779297793077931779327793377934779357793677937779387793977940779417794277943779447794577946779477794877949779507795177952779537795477955779567795777958779597796077961779627796377964779657796677967779687796977970779717797277973779747797577976779777797877979779807798177982779837798477985779867798777988779897799077991779927799377994779957799677997779987799978000780017800278003780047800578006780077800878009780107801178012780137801478015780167801778018780197802078021780227802378024780257802678027780287802978030780317803278033780347803578036780377803878039780407804178042780437804478045780467804778048780497805078051780527805378054780557805678057780587805978060780617806278063780647806578066780677806878069780707807178072780737807478075780767807778078780797808078081780827808378084780857808678087780887808978090780917809278093780947809578096780977809878099781007810178102781037810478105781067810778108781097811078111781127811378114781157811678117781187811978120781217812278123781247812578126781277812878129781307813178132781337813478135781367813778138781397814078141781427814378144781457814678147781487814978150781517815278153781547815578156781577815878159781607816178162781637816478165781667816778168781697817078171781727817378174781757817678177781787817978180781817818278183781847818578186781877818878189781907819178192781937819478195781967819778198781997820078201782027820378204782057820678207782087820978210782117821278213782147821578216782177821878219782207822178222782237822478225782267822778228782297823078231782327823378234782357823678237782387823978240782417824278243782447824578246782477824878249782507825178252782537825478255782567825778258782597826078261782627826378264782657826678267782687826978270782717827278273782747827578276782777827878279782807828178282782837828478285782867828778288782897829078291782927829378294782957829678297782987829978300783017830278303783047830578306783077830878309783107831178312783137831478315783167831778318783197832078321783227832378324783257832678327783287832978330783317833278333783347833578336783377833878339783407834178342783437834478345783467834778348783497835078351783527835378354783557835678357783587835978360783617836278363783647836578366783677836878369783707837178372783737837478375783767837778378783797838078381783827838378384783857838678387783887838978390783917839278393783947839578396783977839878399784007840178402784037840478405784067840778408784097841078411784127841378414784157841678417784187841978420784217842278423784247842578426784277842878429784307843178432784337843478435784367843778438784397844078441784427844378444784457844678447784487844978450784517845278453784547845578456784577845878459784607846178462784637846478465784667846778468784697847078471784727847378474784757847678477784787847978480784817848278483784847848578486784877848878489784907849178492784937849478495784967849778498784997850078501785027850378504785057850678507785087850978510785117851278513785147851578516785177851878519785207852178522785237852478525785267852778528785297853078531785327853378534785357853678537785387853978540785417854278543785447854578546785477854878549785507855178552785537855478555785567855778558785597856078561785627856378564785657856678567785687856978570785717857278573785747857578576785777857878579785807858178582785837858478585785867858778588785897859078591785927859378594785957859678597785987859978600786017860278603786047860578606786077860878609786107861178612786137861478615786167861778618786197862078621786227862378624786257862678627786287862978630786317863278633786347863578636786377863878639786407864178642786437864478645786467864778648786497865078651786527865378654786557865678657786587865978660786617866278663786647866578666786677866878669786707867178672786737867478675786767867778678786797868078681786827868378684786857868678687786887868978690786917869278693786947869578696786977869878699787007870178702787037870478705787067870778708787097871078711787127871378714787157871678717787187871978720787217872278723787247872578726787277872878729787307873178732787337873478735787367873778738787397874078741787427874378744787457874678747787487874978750787517875278753787547875578756787577875878759787607876178762787637876478765787667876778768787697877078771787727877378774787757877678777787787877978780787817878278783787847878578786787877878878789787907879178792787937879478795787967879778798787997880078801788027880378804788057880678807788087880978810788117881278813788147881578816788177881878819788207882178822788237882478825788267882778828788297883078831788327883378834788357883678837788387883978840788417884278843788447884578846788477884878849788507885178852788537885478855788567885778858788597886078861788627886378864788657886678867788687886978870788717887278873788747887578876788777887878879788807888178882788837888478885788867888778888788897889078891788927889378894788957889678897788987889978900789017890278903789047890578906789077890878909789107891178912789137891478915789167891778918789197892078921789227892378924789257892678927789287892978930789317893278933789347893578936789377893878939789407894178942789437894478945789467894778948789497895078951789527895378954789557895678957789587895978960789617896278963789647896578966789677896878969789707897178972789737897478975789767897778978789797898078981789827898378984789857898678987789887898978990789917899278993789947899578996789977899878999790007900179002790037900479005790067900779008790097901079011790127901379014790157901679017790187901979020790217902279023790247902579026790277902879029790307903179032790337903479035790367903779038790397904079041790427904379044790457904679047790487904979050790517905279053790547905579056790577905879059790607906179062790637906479065790667906779068790697907079071790727907379074790757907679077790787907979080790817908279083790847908579086790877908879089790907909179092790937909479095790967909779098790997910079101791027910379104791057910679107791087910979110791117911279113791147911579116791177911879119791207912179122791237912479125791267912779128791297913079131791327913379134791357913679137791387913979140791417914279143791447914579146791477914879149791507915179152791537915479155791567915779158791597916079161791627916379164791657916679167791687916979170791717917279173791747917579176791777917879179791807918179182791837918479185791867918779188791897919079191791927919379194791957919679197791987919979200792017920279203792047920579206792077920879209792107921179212792137921479215792167921779218792197922079221792227922379224792257922679227792287922979230792317923279233792347923579236792377923879239792407924179242792437924479245792467924779248792497925079251792527925379254792557925679257792587925979260792617926279263792647926579266792677926879269792707927179272792737927479275792767927779278792797928079281792827928379284792857928679287792887928979290792917929279293792947929579296792977929879299793007930179302793037930479305793067930779308793097931079311793127931379314793157931679317793187931979320793217932279323793247932579326793277932879329793307933179332793337933479335793367933779338793397934079341793427934379344793457934679347793487934979350793517935279353793547935579356793577935879359793607936179362793637936479365793667936779368793697937079371793727937379374793757937679377793787937979380793817938279383793847938579386793877938879389793907939179392793937939479395793967939779398793997940079401794027940379404794057940679407794087940979410794117941279413794147941579416794177941879419794207942179422794237942479425794267942779428794297943079431794327943379434794357943679437794387943979440794417944279443794447944579446794477944879449794507945179452794537945479455794567945779458794597946079461794627946379464794657946679467794687946979470794717947279473794747947579476794777947879479794807948179482794837948479485794867948779488794897949079491794927949379494794957949679497794987949979500795017950279503795047950579506795077950879509795107951179512795137951479515795167951779518795197952079521795227952379524795257952679527795287952979530795317953279533795347953579536795377953879539795407954179542795437954479545795467954779548795497955079551795527955379554795557955679557795587955979560795617956279563795647956579566795677956879569795707957179572795737957479575795767957779578795797958079581795827958379584795857958679587795887958979590795917959279593795947959579596795977959879599796007960179602796037960479605796067960779608796097961079611796127961379614796157961679617796187961979620796217962279623796247962579626796277962879629796307963179632796337963479635796367963779638796397964079641796427964379644796457964679647796487964979650796517965279653796547965579656796577965879659796607966179662796637966479665796667966779668796697967079671796727967379674796757967679677796787967979680796817968279683796847968579686796877968879689796907969179692796937969479695796967969779698796997970079701797027970379704797057970679707797087970979710797117971279713797147971579716797177971879719797207972179722797237972479725797267972779728797297973079731797327973379734797357973679737797387973979740797417974279743797447974579746797477974879749797507975179752797537975479755797567975779758797597976079761797627976379764797657976679767797687976979770797717977279773797747977579776797777977879779797807978179782797837978479785797867978779788797897979079791797927979379794797957979679797797987979979800798017980279803798047980579806798077980879809798107981179812798137981479815798167981779818798197982079821798227982379824798257982679827798287982979830798317983279833798347983579836798377983879839798407984179842798437984479845798467984779848798497985079851798527985379854798557985679857798587985979860798617986279863798647986579866798677986879869798707987179872798737987479875798767987779878798797988079881798827988379884798857988679887798887988979890798917989279893798947989579896798977989879899799007990179902799037990479905799067990779908799097991079911799127991379914799157991679917799187991979920799217992279923799247992579926799277992879929799307993179932799337993479935799367993779938799397994079941799427994379944799457994679947799487994979950799517995279953799547995579956799577995879959799607996179962799637996479965799667996779968799697997079971799727997379974799757997679977799787997979980799817998279983799847998579986799877998879989799907999179992799937999479995799967999779998799998000080001800028000380004800058000680007800088000980010800118001280013800148001580016800178001880019800208002180022800238002480025800268002780028800298003080031800328003380034800358003680037800388003980040800418004280043800448004580046800478004880049800508005180052800538005480055800568005780058800598006080061800628006380064800658006680067800688006980070800718007280073800748007580076800778007880079800808008180082800838008480085800868008780088800898009080091800928009380094800958009680097800988009980100801018010280103801048010580106801078010880109801108011180112801138011480115801168011780118801198012080121801228012380124801258012680127801288012980130801318013280133801348013580136801378013880139801408014180142801438014480145801468014780148801498015080151801528015380154801558015680157801588015980160801618016280163801648016580166801678016880169801708017180172801738017480175801768017780178801798018080181801828018380184801858018680187801888018980190801918019280193801948019580196801978019880199802008020180202802038020480205802068020780208802098021080211802128021380214802158021680217802188021980220802218022280223802248022580226802278022880229802308023180232802338023480235802368023780238802398024080241802428024380244802458024680247802488024980250802518025280253802548025580256802578025880259802608026180262802638026480265802668026780268802698027080271802728027380274802758027680277802788027980280802818028280283802848028580286802878028880289802908029180292802938029480295802968029780298802998030080301803028030380304803058030680307803088030980310803118031280313803148031580316803178031880319803208032180322803238032480325803268032780328803298033080331803328033380334803358033680337803388033980340803418034280343803448034580346803478034880349803508035180352803538035480355803568035780358803598036080361803628036380364803658036680367803688036980370803718037280373803748037580376803778037880379803808038180382803838038480385803868038780388803898039080391803928039380394803958039680397803988039980400804018040280403804048040580406804078040880409804108041180412804138041480415804168041780418804198042080421804228042380424804258042680427804288042980430804318043280433804348043580436804378043880439804408044180442804438044480445804468044780448804498045080451804528045380454804558045680457804588045980460804618046280463804648046580466804678046880469804708047180472804738047480475804768047780478804798048080481804828048380484804858048680487804888048980490804918049280493804948049580496804978049880499805008050180502805038050480505805068050780508805098051080511805128051380514805158051680517805188051980520805218052280523805248052580526805278052880529805308053180532805338053480535805368053780538805398054080541805428054380544805458054680547805488054980550805518055280553805548055580556805578055880559805608056180562805638056480565805668056780568805698057080571805728057380574805758057680577805788057980580805818058280583805848058580586805878058880589805908059180592805938059480595805968059780598805998060080601806028060380604806058060680607806088060980610806118061280613806148061580616806178061880619806208062180622806238062480625806268062780628806298063080631806328063380634806358063680637806388063980640806418064280643806448064580646806478064880649806508065180652806538065480655806568065780658806598066080661806628066380664806658066680667806688066980670806718067280673806748067580676806778067880679806808068180682806838068480685806868068780688806898069080691806928069380694806958069680697806988069980700807018070280703807048070580706807078070880709807108071180712807138071480715807168071780718807198072080721807228072380724807258072680727807288072980730807318073280733807348073580736807378073880739807408074180742807438074480745807468074780748807498075080751807528075380754807558075680757807588075980760807618076280763807648076580766807678076880769807708077180772807738077480775807768077780778807798078080781807828078380784807858078680787807888078980790807918079280793807948079580796807978079880799808008080180802808038080480805808068080780808808098081080811808128081380814808158081680817808188081980820808218082280823808248082580826808278082880829808308083180832808338083480835808368083780838808398084080841808428084380844808458084680847808488084980850808518085280853808548085580856808578085880859808608086180862808638086480865808668086780868808698087080871808728087380874808758087680877808788087980880808818088280883808848088580886808878088880889808908089180892808938089480895808968089780898808998090080901809028090380904809058090680907809088090980910809118091280913809148091580916809178091880919809208092180922809238092480925809268092780928809298093080931809328093380934809358093680937809388093980940809418094280943809448094580946809478094880949809508095180952809538095480955809568095780958809598096080961809628096380964809658096680967809688096980970809718097280973809748097580976809778097880979809808098180982809838098480985809868098780988809898099080991809928099380994809958099680997809988099981000810018100281003810048100581006810078100881009810108101181012810138101481015810168101781018810198102081021810228102381024810258102681027810288102981030810318103281033810348103581036810378103881039810408104181042810438104481045810468104781048810498105081051810528105381054810558105681057810588105981060810618106281063810648106581066810678106881069810708107181072810738107481075810768107781078810798108081081810828108381084810858108681087810888108981090810918109281093810948109581096810978109881099811008110181102811038110481105811068110781108811098111081111811128111381114811158111681117811188111981120811218112281123811248112581126811278112881129811308113181132811338113481135811368113781138811398114081141811428114381144811458114681147811488114981150811518115281153811548115581156811578115881159811608116181162811638116481165811668116781168811698117081171811728117381174811758117681177811788117981180811818118281183811848118581186811878118881189811908119181192811938119481195811968119781198811998120081201812028120381204812058120681207812088120981210812118121281213812148121581216812178121881219812208122181222812238122481225812268122781228812298123081231812328123381234812358123681237812388123981240812418124281243812448124581246812478124881249812508125181252812538125481255812568125781258812598126081261812628126381264812658126681267812688126981270812718127281273812748127581276812778127881279812808128181282812838128481285812868128781288812898129081291812928129381294812958129681297812988129981300813018130281303813048130581306813078130881309813108131181312813138131481315813168131781318813198132081321813228132381324813258132681327813288132981330813318133281333813348133581336813378133881339813408134181342813438134481345813468134781348813498135081351813528135381354813558135681357813588135981360813618136281363813648136581366813678136881369813708137181372813738137481375813768137781378813798138081381813828138381384813858138681387813888138981390813918139281393813948139581396813978139881399814008140181402814038140481405814068140781408814098141081411814128141381414814158141681417814188141981420814218142281423814248142581426814278142881429814308143181432814338143481435814368143781438814398144081441814428144381444814458144681447814488144981450814518145281453814548145581456814578145881459814608146181462814638146481465814668146781468814698147081471814728147381474814758147681477814788147981480814818148281483814848148581486814878148881489814908149181492814938149481495814968149781498814998150081501815028150381504815058150681507815088150981510815118151281513815148151581516815178151881519815208152181522815238152481525815268152781528815298153081531815328153381534815358153681537815388153981540815418154281543815448154581546815478154881549815508155181552815538155481555815568155781558815598156081561815628156381564815658156681567815688156981570815718157281573815748157581576815778157881579815808158181582815838158481585815868158781588815898159081591815928159381594815958159681597815988159981600816018160281603816048160581606816078160881609816108161181612816138161481615816168161781618816198162081621816228162381624816258162681627816288162981630816318163281633816348163581636816378163881639816408164181642816438164481645816468164781648816498165081651816528165381654816558165681657816588165981660816618166281663816648166581666816678166881669816708167181672816738167481675816768167781678816798168081681816828168381684816858168681687816888168981690816918169281693816948169581696816978169881699817008170181702817038170481705817068170781708817098171081711817128171381714817158171681717817188171981720817218172281723817248172581726817278172881729817308173181732817338173481735817368173781738817398174081741817428174381744817458174681747817488174981750817518175281753817548175581756817578175881759817608176181762817638176481765817668176781768817698177081771817728177381774817758177681777817788177981780817818178281783817848178581786817878178881789817908179181792817938179481795817968179781798817998180081801818028180381804818058180681807818088180981810818118181281813818148181581816818178181881819818208182181822818238182481825818268182781828818298183081831818328183381834818358183681837818388183981840818418184281843818448184581846818478184881849818508185181852818538185481855818568185781858818598186081861818628186381864818658186681867818688186981870818718187281873818748187581876818778187881879818808188181882818838188481885818868188781888818898189081891818928189381894818958189681897818988189981900819018190281903819048190581906819078190881909819108191181912819138191481915819168191781918819198192081921819228192381924819258192681927819288192981930819318193281933819348193581936819378193881939819408194181942819438194481945819468194781948819498195081951819528195381954819558195681957819588195981960819618196281963819648196581966819678196881969819708197181972819738197481975819768197781978819798198081981819828198381984819858198681987819888198981990819918199281993819948199581996819978199881999820008200182002820038200482005820068200782008820098201082011820128201382014820158201682017820188201982020820218202282023820248202582026820278202882029820308203182032820338203482035820368203782038820398204082041820428204382044820458204682047820488204982050820518205282053820548205582056820578205882059820608206182062820638206482065820668206782068820698207082071820728207382074820758207682077820788207982080820818208282083820848208582086820878208882089820908209182092820938209482095820968209782098820998210082101821028210382104821058210682107821088210982110821118211282113821148211582116821178211882119821208212182122821238212482125821268212782128821298213082131821328213382134821358213682137821388213982140821418214282143821448214582146821478214882149821508215182152821538215482155821568215782158821598216082161821628216382164821658216682167821688216982170821718217282173821748217582176821778217882179821808218182182821838218482185821868218782188821898219082191821928219382194821958219682197821988219982200822018220282203822048220582206822078220882209822108221182212822138221482215822168221782218822198222082221822228222382224822258222682227822288222982230822318223282233822348223582236822378223882239822408224182242822438224482245822468224782248822498225082251822528225382254822558225682257822588225982260822618226282263822648226582266822678226882269822708227182272822738227482275822768227782278822798228082281822828228382284822858228682287822888228982290822918229282293822948229582296822978229882299823008230182302823038230482305823068230782308823098231082311823128231382314823158231682317823188231982320823218232282323823248232582326823278232882329823308233182332823338233482335823368233782338823398234082341823428234382344823458234682347823488234982350823518235282353823548235582356823578235882359823608236182362823638236482365823668236782368823698237082371823728237382374823758237682377823788237982380823818238282383823848238582386823878238882389823908239182392823938239482395823968239782398823998240082401824028240382404824058240682407824088240982410824118241282413824148241582416824178241882419824208242182422824238242482425824268242782428824298243082431824328243382434824358243682437824388243982440824418244282443824448244582446824478244882449824508245182452824538245482455824568245782458824598246082461824628246382464824658246682467824688246982470824718247282473824748247582476824778247882479824808248182482824838248482485824868248782488824898249082491824928249382494824958249682497824988249982500825018250282503825048250582506825078250882509825108251182512825138251482515825168251782518825198252082521825228252382524825258252682527825288252982530825318253282533825348253582536825378253882539825408254182542825438254482545825468254782548825498255082551825528255382554825558255682557825588255982560825618256282563825648256582566825678256882569825708257182572825738257482575825768257782578825798258082581825828258382584825858258682587825888258982590825918259282593825948259582596825978259882599826008260182602826038260482605826068260782608826098261082611826128261382614826158261682617826188261982620826218262282623826248262582626826278262882629826308263182632826338263482635826368263782638826398264082641826428264382644826458264682647826488264982650826518265282653826548265582656826578265882659826608266182662826638266482665826668266782668826698267082671826728267382674826758267682677826788267982680826818268282683826848268582686826878268882689826908269182692826938269482695826968269782698826998270082701827028270382704827058270682707827088270982710827118271282713827148271582716827178271882719827208272182722827238272482725827268272782728827298273082731827328273382734827358273682737827388273982740827418274282743827448274582746827478274882749827508275182752827538275482755827568275782758827598276082761827628276382764827658276682767827688276982770827718277282773827748277582776827778277882779827808278182782827838278482785827868278782788827898279082791827928279382794827958279682797827988279982800828018280282803828048280582806828078280882809828108281182812828138281482815828168281782818828198282082821828228282382824828258282682827828288282982830828318283282833828348283582836828378283882839828408284182842828438284482845828468284782848828498285082851828528285382854828558285682857828588285982860828618286282863828648286582866828678286882869828708287182872828738287482875828768287782878828798288082881828828288382884828858288682887828888288982890828918289282893828948289582896828978289882899829008290182902829038290482905829068290782908829098291082911829128291382914829158291682917829188291982920829218292282923829248292582926829278292882929829308293182932829338293482935829368293782938829398294082941829428294382944829458294682947829488294982950829518295282953829548295582956829578295882959829608296182962829638296482965829668296782968829698297082971829728297382974829758297682977829788297982980829818298282983829848298582986829878298882989829908299182992829938299482995829968299782998829998300083001830028300383004830058300683007830088300983010830118301283013830148301583016830178301883019830208302183022830238302483025830268302783028830298303083031830328303383034830358303683037830388303983040830418304283043830448304583046830478304883049830508305183052830538305483055830568305783058830598306083061830628306383064830658306683067830688306983070830718307283073830748307583076830778307883079830808308183082830838308483085830868308783088830898309083091830928309383094830958309683097830988309983100831018310283103831048310583106831078310883109831108311183112831138311483115831168311783118831198312083121831228312383124831258312683127831288312983130831318313283133831348313583136831378313883139831408314183142831438314483145831468314783148831498315083151831528315383154831558315683157831588315983160831618316283163831648316583166831678316883169831708317183172831738317483175831768317783178831798318083181831828318383184831858318683187831888318983190831918319283193831948319583196831978319883199832008320183202832038320483205832068320783208832098321083211832128321383214832158321683217832188321983220832218322283223832248322583226832278322883229832308323183232832338323483235832368323783238832398324083241832428324383244832458324683247832488324983250832518325283253832548325583256832578325883259832608326183262832638326483265832668326783268832698327083271832728327383274832758327683277832788327983280832818328283283832848328583286832878328883289832908329183292832938329483295832968329783298832998330083301833028330383304833058330683307833088330983310833118331283313833148331583316833178331883319833208332183322833238332483325833268332783328833298333083331833328333383334833358333683337833388333983340833418334283343833448334583346833478334883349833508335183352833538335483355833568335783358833598336083361833628336383364833658336683367833688336983370833718337283373833748337583376833778337883379833808338183382833838338483385833868338783388833898339083391833928339383394833958339683397833988339983400834018340283403834048340583406834078340883409834108341183412834138341483415834168341783418834198342083421834228342383424834258342683427834288342983430834318343283433834348343583436834378343883439834408344183442834438344483445834468344783448834498345083451834528345383454834558345683457834588345983460834618346283463834648346583466834678346883469834708347183472834738347483475834768347783478834798348083481834828348383484834858348683487834888348983490834918349283493834948349583496834978349883499835008350183502835038350483505835068350783508835098351083511835128351383514835158351683517835188351983520835218352283523835248352583526835278352883529835308353183532835338353483535835368353783538835398354083541835428354383544835458354683547835488354983550835518355283553835548355583556835578355883559835608356183562835638356483565835668356783568835698357083571835728357383574835758357683577835788357983580835818358283583835848358583586835878358883589835908359183592835938359483595835968359783598835998360083601836028360383604836058360683607836088360983610836118361283613836148361583616836178361883619836208362183622836238362483625836268362783628836298363083631836328363383634836358363683637836388363983640836418364283643836448364583646836478364883649836508365183652836538365483655836568365783658836598366083661836628366383664836658366683667836688366983670836718367283673836748367583676836778367883679836808368183682836838368483685836868368783688836898369083691836928369383694836958369683697836988369983700837018370283703837048370583706837078370883709837108371183712837138371483715837168371783718837198372083721837228372383724837258372683727837288372983730837318373283733837348373583736837378373883739837408374183742837438374483745837468374783748837498375083751837528375383754837558375683757837588375983760837618376283763837648376583766837678376883769837708377183772837738377483775837768377783778837798378083781837828378383784837858378683787837888378983790837918379283793837948379583796837978379883799838008380183802838038380483805838068380783808838098381083811838128381383814838158381683817838188381983820838218382283823838248382583826838278382883829838308383183832838338383483835838368383783838838398384083841838428384383844838458384683847838488384983850838518385283853838548385583856838578385883859838608386183862838638386483865838668386783868838698387083871838728387383874838758387683877838788387983880838818388283883838848388583886838878388883889838908389183892838938389483895838968389783898838998390083901839028390383904839058390683907839088390983910839118391283913839148391583916839178391883919839208392183922839238392483925839268392783928839298393083931839328393383934839358393683937839388393983940839418394283943839448394583946839478394883949839508395183952839538395483955839568395783958839598396083961839628396383964839658396683967839688396983970839718397283973839748397583976839778397883979839808398183982839838398483985839868398783988839898399083991839928399383994839958399683997839988399984000840018400284003840048400584006840078400884009840108401184012840138401484015840168401784018840198402084021840228402384024840258402684027840288402984030840318403284033840348403584036840378403884039840408404184042840438404484045840468404784048840498405084051840528405384054840558405684057840588405984060840618406284063840648406584066840678406884069840708407184072840738407484075840768407784078840798408084081840828408384084840858408684087840888408984090840918409284093840948409584096840978409884099841008410184102841038410484105841068410784108841098411084111841128411384114841158411684117841188411984120841218412284123841248412584126841278412884129841308413184132841338413484135841368413784138841398414084141841428414384144841458414684147841488414984150841518415284153841548415584156841578415884159841608416184162841638416484165841668416784168841698417084171841728417384174841758417684177841788417984180841818418284183841848418584186841878418884189841908419184192841938419484195841968419784198841998420084201842028420384204842058420684207842088420984210842118421284213842148421584216842178421884219842208422184222842238422484225842268422784228842298423084231842328423384234842358423684237842388423984240842418424284243842448424584246842478424884249842508425184252842538425484255842568425784258842598426084261842628426384264842658426684267842688426984270842718427284273842748427584276842778427884279842808428184282842838428484285842868428784288842898429084291842928429384294842958429684297842988429984300843018430284303843048430584306843078430884309843108431184312843138431484315843168431784318843198432084321843228432384324843258432684327843288432984330843318433284333843348433584336843378433884339843408434184342843438434484345843468434784348843498435084351843528435384354843558435684357843588435984360843618436284363843648436584366843678436884369843708437184372843738437484375843768437784378843798438084381843828438384384843858438684387843888438984390843918439284393843948439584396843978439884399844008440184402844038440484405844068440784408844098441084411844128441384414844158441684417844188441984420844218442284423844248442584426844278442884429844308443184432844338443484435844368443784438844398444084441844428444384444844458444684447844488444984450844518445284453844548445584456844578445884459844608446184462844638446484465844668446784468844698447084471844728447384474844758447684477844788447984480844818448284483844848448584486844878448884489844908449184492844938449484495844968449784498844998450084501845028450384504845058450684507845088450984510845118451284513845148451584516845178451884519845208452184522845238452484525845268452784528845298453084531845328453384534845358453684537845388453984540845418454284543845448454584546845478454884549845508455184552845538455484555845568455784558845598456084561845628456384564845658456684567845688456984570845718457284573845748457584576845778457884579845808458184582845838458484585845868458784588845898459084591845928459384594845958459684597845988459984600846018460284603846048460584606846078460884609846108461184612846138461484615846168461784618846198462084621846228462384624846258462684627846288462984630846318463284633846348463584636846378463884639846408464184642846438464484645846468464784648846498465084651846528465384654846558465684657846588465984660846618466284663846648466584666846678466884669846708467184672846738467484675846768467784678846798468084681846828468384684846858468684687846888468984690846918469284693846948469584696846978469884699847008470184702847038470484705847068470784708847098471084711847128471384714847158471684717847188471984720847218472284723847248472584726847278472884729847308473184732847338473484735847368473784738847398474084741847428474384744847458474684747847488474984750847518475284753847548475584756847578475884759847608476184762847638476484765847668476784768847698477084771847728477384774847758477684777847788477984780847818478284783847848478584786847878478884789847908479184792847938479484795847968479784798847998480084801848028480384804848058480684807848088480984810848118481284813848148481584816848178481884819848208482184822848238482484825848268482784828848298483084831848328483384834848358483684837848388483984840848418484284843848448484584846848478484884849848508485184852848538485484855848568485784858848598486084861848628486384864848658486684867848688486984870848718487284873848748487584876848778487884879848808488184882848838488484885848868488784888848898489084891848928489384894848958489684897848988489984900849018490284903849048490584906849078490884909849108491184912849138491484915849168491784918849198492084921849228492384924849258492684927849288492984930849318493284933849348493584936849378493884939849408494184942849438494484945849468494784948849498495084951849528495384954849558495684957849588495984960849618496284963849648496584966849678496884969849708497184972849738497484975849768497784978849798498084981849828498384984849858498684987849888498984990849918499284993849948499584996849978499884999850008500185002850038500485005850068500785008850098501085011850128501385014850158501685017850188501985020850218502285023850248502585026850278502885029850308503185032850338503485035850368503785038850398504085041850428504385044850458504685047850488504985050850518505285053850548505585056850578505885059850608506185062850638506485065850668506785068850698507085071850728507385074850758507685077850788507985080850818508285083850848508585086850878508885089850908509185092850938509485095850968509785098850998510085101851028510385104851058510685107851088510985110851118511285113851148511585116851178511885119851208512185122851238512485125851268512785128851298513085131851328513385134851358513685137851388513985140851418514285143851448514585146851478514885149851508515185152851538515485155851568515785158851598516085161851628516385164851658516685167851688516985170851718517285173851748517585176851778517885179851808518185182851838518485185851868518785188851898519085191851928519385194851958519685197851988519985200852018520285203852048520585206852078520885209852108521185212852138521485215852168521785218852198522085221852228522385224852258522685227852288522985230852318523285233852348523585236852378523885239852408524185242852438524485245852468524785248852498525085251852528525385254852558525685257852588525985260852618526285263852648526585266852678526885269852708527185272852738527485275852768527785278852798528085281852828528385284852858528685287852888528985290852918529285293852948529585296852978529885299853008530185302853038530485305853068530785308853098531085311853128531385314853158531685317853188531985320853218532285323853248532585326853278532885329853308533185332853338533485335853368533785338853398534085341853428534385344853458534685347853488534985350853518535285353853548535585356853578535885359853608536185362853638536485365853668536785368853698537085371853728537385374853758537685377853788537985380853818538285383853848538585386853878538885389853908539185392853938539485395853968539785398853998540085401854028540385404854058540685407854088540985410854118541285413854148541585416854178541885419854208542185422854238542485425854268542785428854298543085431854328543385434854358543685437854388543985440854418544285443854448544585446854478544885449854508545185452854538545485455854568545785458854598546085461854628546385464854658546685467854688546985470854718547285473854748547585476854778547885479854808548185482854838548485485854868548785488854898549085491854928549385494854958549685497854988549985500855018550285503855048550585506855078550885509855108551185512855138551485515855168551785518855198552085521855228552385524855258552685527855288552985530855318553285533855348553585536855378553885539855408554185542855438554485545855468554785548855498555085551855528555385554855558555685557855588555985560855618556285563855648556585566855678556885569855708557185572855738557485575855768557785578855798558085581855828558385584855858558685587855888558985590855918559285593855948559585596855978559885599856008560185602856038560485605856068560785608856098561085611856128561385614856158561685617856188561985620856218562285623856248562585626856278562885629856308563185632856338563485635856368563785638856398564085641856428564385644856458564685647856488564985650856518565285653856548565585656856578565885659856608566185662856638566485665856668566785668856698567085671856728567385674856758567685677856788567985680856818568285683856848568585686856878568885689856908569185692856938569485695856968569785698856998570085701857028570385704857058570685707857088570985710857118571285713857148571585716857178571885719857208572185722857238572485725857268572785728857298573085731857328573385734857358573685737857388573985740857418574285743857448574585746857478574885749857508575185752857538575485755857568575785758857598576085761857628576385764857658576685767857688576985770857718577285773857748577585776857778577885779857808578185782857838578485785857868578785788857898579085791857928579385794857958579685797857988579985800858018580285803858048580585806858078580885809858108581185812858138581485815858168581785818858198582085821858228582385824858258582685827858288582985830858318583285833858348583585836858378583885839858408584185842858438584485845858468584785848858498585085851858528585385854858558585685857858588585985860858618586285863858648586585866858678586885869858708587185872858738587485875858768587785878858798588085881858828588385884858858588685887858888588985890858918589285893858948589585896858978589885899859008590185902859038590485905859068590785908859098591085911859128591385914859158591685917859188591985920859218592285923859248592585926859278592885929859308593185932859338593485935859368593785938859398594085941859428594385944859458594685947859488594985950859518595285953859548595585956859578595885959859608596185962859638596485965859668596785968859698597085971859728597385974859758597685977859788597985980859818598285983859848598585986859878598885989859908599185992859938599485995859968599785998859998600086001860028600386004860058600686007860088600986010860118601286013860148601586016860178601886019860208602186022860238602486025860268602786028860298603086031860328603386034860358603686037860388603986040860418604286043860448604586046860478604886049860508605186052860538605486055860568605786058860598606086061860628606386064860658606686067860688606986070860718607286073860748607586076860778607886079860808608186082860838608486085860868608786088860898609086091860928609386094860958609686097860988609986100861018610286103861048610586106861078610886109861108611186112861138611486115861168611786118861198612086121861228612386124861258612686127861288612986130861318613286133861348613586136861378613886139861408614186142861438614486145861468614786148861498615086151861528615386154861558615686157861588615986160861618616286163861648616586166861678616886169861708617186172861738617486175861768617786178861798618086181861828618386184861858618686187861888618986190861918619286193861948619586196861978619886199862008620186202862038620486205862068620786208862098621086211862128621386214862158621686217862188621986220862218622286223862248622586226862278622886229862308623186232862338623486235862368623786238862398624086241862428624386244862458624686247862488624986250862518625286253862548625586256862578625886259862608626186262862638626486265862668626786268862698627086271862728627386274862758627686277862788627986280862818628286283862848628586286862878628886289862908629186292862938629486295862968629786298862998630086301863028630386304863058630686307863088630986310863118631286313863148631586316863178631886319863208632186322863238632486325863268632786328863298633086331863328633386334863358633686337863388633986340863418634286343863448634586346863478634886349863508635186352863538635486355863568635786358863598636086361863628636386364863658636686367863688636986370863718637286373863748637586376863778637886379863808638186382863838638486385863868638786388863898639086391863928639386394863958639686397863988639986400864018640286403864048640586406864078640886409864108641186412864138641486415864168641786418864198642086421864228642386424864258642686427864288642986430864318643286433864348643586436864378643886439864408644186442864438644486445864468644786448864498645086451864528645386454864558645686457864588645986460864618646286463864648646586466864678646886469864708647186472864738647486475864768647786478864798648086481864828648386484864858648686487864888648986490864918649286493864948649586496864978649886499865008650186502865038650486505865068650786508865098651086511865128651386514865158651686517865188651986520865218652286523865248652586526865278652886529865308653186532865338653486535865368653786538865398654086541865428654386544865458654686547865488654986550865518655286553865548655586556865578655886559865608656186562865638656486565865668656786568865698657086571865728657386574865758657686577865788657986580865818658286583865848658586586865878658886589865908659186592865938659486595865968659786598865998660086601866028660386604866058660686607866088660986610866118661286613866148661586616866178661886619866208662186622866238662486625866268662786628866298663086631866328663386634866358663686637866388663986640866418664286643866448664586646866478664886649866508665186652866538665486655866568665786658866598666086661866628666386664866658666686667866688666986670866718667286673866748667586676866778667886679866808668186682866838668486685866868668786688866898669086691866928669386694866958669686697866988669986700867018670286703867048670586706867078670886709867108671186712867138671486715867168671786718867198672086721867228672386724867258672686727867288672986730867318673286733867348673586736867378673886739867408674186742867438674486745867468674786748867498675086751867528675386754867558675686757867588675986760867618676286763867648676586766867678676886769867708677186772867738677486775867768677786778867798678086781867828678386784867858678686787867888678986790867918679286793867948679586796867978679886799868008680186802868038680486805868068680786808868098681086811868128681386814868158681686817868188681986820868218682286823868248682586826868278682886829868308683186832868338683486835868368683786838868398684086841868428684386844868458684686847868488684986850868518685286853868548685586856868578685886859868608686186862868638686486865868668686786868868698687086871868728687386874868758687686877868788687986880868818688286883868848688586886868878688886889868908689186892868938689486895868968689786898868998690086901869028690386904869058690686907869088690986910869118691286913869148691586916869178691886919869208692186922869238692486925869268692786928869298693086931869328693386934869358693686937869388693986940869418694286943869448694586946869478694886949869508695186952869538695486955869568695786958869598696086961869628696386964869658696686967869688696986970869718697286973869748697586976869778697886979869808698186982869838698486985869868698786988869898699086991869928699386994869958699686997869988699987000870018700287003870048700587006870078700887009870108701187012870138701487015870168701787018870198702087021870228702387024870258702687027870288702987030870318703287033870348703587036870378703887039870408704187042870438704487045870468704787048870498705087051870528705387054870558705687057870588705987060870618706287063870648706587066870678706887069870708707187072870738707487075870768707787078870798708087081870828708387084870858708687087870888708987090870918709287093870948709587096870978709887099871008710187102871038710487105871068710787108871098711087111871128711387114871158711687117871188711987120871218712287123871248712587126871278712887129871308713187132871338713487135871368713787138871398714087141871428714387144871458714687147871488714987150871518715287153871548715587156871578715887159871608716187162871638716487165871668716787168871698717087171871728717387174871758717687177871788717987180871818718287183871848718587186871878718887189871908719187192871938719487195871968719787198871998720087201872028720387204872058720687207872088720987210872118721287213872148721587216872178721887219872208722187222872238722487225872268722787228872298723087231872328723387234872358723687237872388723987240872418724287243872448724587246872478724887249872508725187252872538725487255872568725787258872598726087261872628726387264872658726687267872688726987270872718727287273872748727587276872778727887279872808728187282872838728487285872868728787288872898729087291872928729387294872958729687297872988729987300873018730287303873048730587306873078730887309873108731187312873138731487315873168731787318873198732087321873228732387324873258732687327873288732987330873318733287333873348733587336873378733887339873408734187342873438734487345873468734787348873498735087351873528735387354873558735687357873588735987360873618736287363873648736587366873678736887369873708737187372873738737487375873768737787378873798738087381873828738387384873858738687387873888738987390873918739287393873948739587396873978739887399874008740187402874038740487405874068740787408874098741087411874128741387414874158741687417874188741987420874218742287423874248742587426874278742887429874308743187432874338743487435874368743787438874398744087441874428744387444874458744687447874488744987450874518745287453874548745587456874578745887459874608746187462874638746487465874668746787468874698747087471874728747387474874758747687477874788747987480874818748287483874848748587486874878748887489874908749187492874938749487495874968749787498874998750087501875028750387504875058750687507875088750987510875118751287513875148751587516875178751887519875208752187522875238752487525875268752787528875298753087531875328753387534875358753687537875388753987540875418754287543875448754587546875478754887549875508755187552875538755487555875568755787558875598756087561875628756387564875658756687567875688756987570875718757287573875748757587576875778757887579875808758187582875838758487585875868758787588875898759087591875928759387594875958759687597875988759987600876018760287603876048760587606876078760887609876108761187612876138761487615876168761787618876198762087621876228762387624876258762687627876288762987630876318763287633876348763587636876378763887639876408764187642876438764487645876468764787648876498765087651876528765387654876558765687657876588765987660876618766287663876648766587666876678766887669876708767187672876738767487675876768767787678876798768087681876828768387684876858768687687876888768987690876918769287693876948769587696876978769887699877008770187702877038770487705877068770787708877098771087711877128771387714877158771687717877188771987720877218772287723877248772587726877278772887729877308773187732877338773487735877368773787738877398774087741877428774387744877458774687747877488774987750877518775287753877548775587756877578775887759877608776187762877638776487765877668776787768877698777087771877728777387774877758777687777877788777987780877818778287783877848778587786877878778887789877908779187792877938779487795877968779787798877998780087801878028780387804878058780687807878088780987810878118781287813878148781587816878178781887819878208782187822878238782487825878268782787828878298783087831878328783387834878358783687837878388783987840878418784287843878448784587846878478784887849878508785187852878538785487855878568785787858878598786087861878628786387864878658786687867878688786987870878718787287873878748787587876878778787887879878808788187882878838788487885878868788787888878898789087891878928789387894878958789687897878988789987900879018790287903879048790587906879078790887909879108791187912879138791487915879168791787918879198792087921879228792387924879258792687927879288792987930879318793287933879348793587936879378793887939879408794187942879438794487945879468794787948879498795087951879528795387954879558795687957879588795987960879618796287963879648796587966879678796887969879708797187972879738797487975879768797787978879798798087981879828798387984879858798687987879888798987990879918799287993879948799587996879978799887999880008800188002880038800488005880068800788008880098801088011880128801388014880158801688017880188801988020880218802288023880248802588026880278802888029880308803188032880338803488035880368803788038880398804088041880428804388044880458804688047880488804988050880518805288053880548805588056880578805888059880608806188062880638806488065880668806788068880698807088071880728807388074880758807688077880788807988080880818808288083880848808588086880878808888089880908809188092880938809488095880968809788098880998810088101881028810388104881058810688107881088810988110881118811288113881148811588116881178811888119881208812188122881238812488125881268812788128881298813088131881328813388134881358813688137881388813988140881418814288143881448814588146881478814888149881508815188152881538815488155881568815788158881598816088161881628816388164881658816688167881688816988170881718817288173881748817588176881778817888179881808818188182881838818488185881868818788188881898819088191881928819388194881958819688197881988819988200882018820288203882048820588206882078820888209882108821188212882138821488215882168821788218882198822088221882228822388224882258822688227882288822988230882318823288233882348823588236882378823888239882408824188242882438824488245882468824788248882498825088251882528825388254882558825688257882588825988260882618826288263882648826588266882678826888269882708827188272882738827488275882768827788278882798828088281882828828388284882858828688287882888828988290882918829288293882948829588296882978829888299883008830188302883038830488305883068830788308883098831088311883128831388314883158831688317883188831988320883218832288323883248832588326883278832888329883308833188332883338833488335883368833788338883398834088341883428834388344883458834688347883488834988350883518835288353883548835588356883578835888359883608836188362883638836488365883668836788368883698837088371883728837388374883758837688377883788837988380883818838288383883848838588386883878838888389883908839188392883938839488395883968839788398883998840088401884028840388404884058840688407884088840988410884118841288413884148841588416884178841888419884208842188422884238842488425884268842788428884298843088431884328843388434884358843688437884388843988440884418844288443884448844588446884478844888449884508845188452884538845488455884568845788458884598846088461884628846388464884658846688467884688846988470884718847288473884748847588476884778847888479884808848188482884838848488485884868848788488884898849088491884928849388494884958849688497884988849988500885018850288503885048850588506885078850888509885108851188512885138851488515885168851788518885198852088521885228852388524885258852688527885288852988530885318853288533885348853588536885378853888539885408854188542885438854488545885468854788548885498855088551885528855388554885558855688557885588855988560885618856288563885648856588566885678856888569885708857188572885738857488575885768857788578885798858088581885828858388584885858858688587885888858988590885918859288593885948859588596885978859888599886008860188602886038860488605886068860788608886098861088611886128861388614886158861688617886188861988620886218862288623886248862588626886278862888629886308863188632886338863488635886368863788638886398864088641886428864388644886458864688647886488864988650886518865288653886548865588656886578865888659886608866188662886638866488665886668866788668886698867088671886728867388674886758867688677886788867988680886818868288683886848868588686886878868888689886908869188692886938869488695886968869788698886998870088701887028870388704887058870688707887088870988710887118871288713887148871588716887178871888719887208872188722887238872488725887268872788728887298873088731887328873388734887358873688737887388873988740887418874288743887448874588746887478874888749887508875188752887538875488755887568875788758887598876088761887628876388764887658876688767887688876988770887718877288773887748877588776887778877888779887808878188782887838878488785887868878788788887898879088791887928879388794887958879688797887988879988800888018880288803888048880588806888078880888809888108881188812888138881488815888168881788818888198882088821888228882388824888258882688827888288882988830888318883288833888348883588836888378883888839888408884188842888438884488845888468884788848888498885088851888528885388854888558885688857888588885988860888618886288863888648886588866888678886888869888708887188872888738887488875888768887788878888798888088881888828888388884888858888688887888888888988890888918889288893888948889588896888978889888899889008890188902889038890488905889068890788908889098891088911889128891388914889158891688917889188891988920889218892288923889248892588926889278892888929889308893188932889338893488935889368893788938889398894088941889428894388944889458894688947889488894988950889518895288953889548895588956889578895888959889608896188962889638896488965889668896788968889698897088971889728897388974889758897688977889788897988980889818898288983889848898588986889878898888989889908899188992889938899488995889968899788998889998900089001890028900389004890058900689007890088900989010890118901289013890148901589016890178901889019890208902189022890238902489025890268902789028890298903089031890328903389034890358903689037890388903989040890418904289043890448904589046890478904889049890508905189052890538905489055890568905789058890598906089061890628906389064890658906689067890688906989070890718907289073890748907589076890778907889079890808908189082890838908489085890868908789088890898909089091890928909389094890958909689097890988909989100891018910289103891048910589106891078910889109891108911189112891138911489115891168911789118891198912089121891228912389124891258912689127891288912989130891318913289133891348913589136891378913889139891408914189142891438914489145891468914789148891498915089151891528915389154891558915689157891588915989160891618916289163891648916589166891678916889169891708917189172891738917489175891768917789178891798918089181891828918389184891858918689187891888918989190891918919289193891948919589196891978919889199892008920189202892038920489205892068920789208892098921089211892128921389214892158921689217892188921989220892218922289223892248922589226892278922889229892308923189232892338923489235892368923789238892398924089241892428924389244892458924689247892488924989250892518925289253892548925589256892578925889259892608926189262892638926489265892668926789268892698927089271892728927389274892758927689277892788927989280892818928289283892848928589286892878928889289892908929189292892938929489295892968929789298892998930089301893028930389304893058930689307893088930989310893118931289313893148931589316893178931889319893208932189322893238932489325893268932789328893298933089331893328933389334893358933689337893388933989340893418934289343893448934589346893478934889349893508935189352893538935489355893568935789358893598936089361893628936389364893658936689367893688936989370893718937289373893748937589376893778937889379893808938189382893838938489385893868938789388893898939089391893928939389394893958939689397893988939989400894018940289403894048940589406894078940889409894108941189412894138941489415894168941789418894198942089421894228942389424894258942689427894288942989430894318943289433894348943589436894378943889439894408944189442894438944489445894468944789448894498945089451894528945389454894558945689457894588945989460894618946289463894648946589466894678946889469894708947189472894738947489475894768947789478894798948089481894828948389484894858948689487894888948989490894918949289493894948949589496894978949889499895008950189502895038950489505895068950789508895098951089511895128951389514895158951689517895188951989520895218952289523895248952589526895278952889529895308953189532895338953489535895368953789538895398954089541895428954389544895458954689547895488954989550895518955289553895548955589556895578955889559895608956189562895638956489565895668956789568895698957089571895728957389574895758957689577895788957989580895818958289583895848958589586895878958889589895908959189592895938959489595895968959789598895998960089601896028960389604896058960689607896088960989610896118961289613896148961589616896178961889619896208962189622896238962489625896268962789628896298963089631896328963389634896358963689637896388963989640896418964289643896448964589646896478964889649896508965189652896538965489655896568965789658896598966089661896628966389664896658966689667896688966989670896718967289673896748967589676896778967889679896808968189682896838968489685896868968789688896898969089691896928969389694896958969689697896988969989700897018970289703897048970589706897078970889709897108971189712897138971489715897168971789718897198972089721897228972389724897258972689727897288972989730897318973289733897348973589736897378973889739897408974189742897438974489745897468974789748897498975089751897528975389754897558975689757897588975989760897618976289763897648976589766897678976889769897708977189772897738977489775897768977789778897798978089781897828978389784897858978689787897888978989790897918979289793897948979589796897978979889799898008980189802898038980489805898068980789808898098981089811898128981389814898158981689817898188981989820898218982289823898248982589826898278982889829898308983189832898338983489835898368983789838898398984089841898428984389844898458984689847898488984989850898518985289853898548985589856898578985889859898608986189862898638986489865898668986789868898698987089871898728987389874898758987689877898788987989880898818988289883898848988589886898878988889889898908989189892898938989489895898968989789898898998990089901899028990389904899058990689907899088990989910899118991289913899148991589916899178991889919899208992189922899238992489925899268992789928899298993089931899328993389934899358993689937899388993989940899418994289943899448994589946899478994889949899508995189952899538995489955899568995789958899598996089961899628996389964899658996689967899688996989970899718997289973899748997589976899778997889979899808998189982899838998489985899868998789988899898999089991899928999389994899958999689997899988999990000900019000290003900049000590006900079000890009900109001190012900139001490015900169001790018900199002090021900229002390024900259002690027900289002990030900319003290033900349003590036900379003890039900409004190042900439004490045900469004790048900499005090051900529005390054900559005690057900589005990060900619006290063900649006590066900679006890069900709007190072900739007490075900769007790078900799008090081900829008390084900859008690087900889008990090900919009290093900949009590096900979009890099901009010190102901039010490105901069010790108901099011090111901129011390114901159011690117901189011990120901219012290123901249012590126901279012890129901309013190132901339013490135901369013790138901399014090141901429014390144901459014690147901489014990150901519015290153901549015590156901579015890159901609016190162901639016490165901669016790168901699017090171901729017390174901759017690177901789017990180901819018290183901849018590186901879018890189901909019190192901939019490195901969019790198901999020090201902029020390204902059020690207902089020990210902119021290213902149021590216902179021890219902209022190222902239022490225902269022790228902299023090231902329023390234902359023690237902389023990240902419024290243902449024590246902479024890249902509025190252902539025490255902569025790258902599026090261902629026390264902659026690267902689026990270902719027290273902749027590276902779027890279902809028190282902839028490285902869028790288902899029090291902929029390294902959029690297902989029990300903019030290303903049030590306903079030890309903109031190312903139031490315903169031790318903199032090321903229032390324903259032690327903289032990330903319033290333903349033590336903379033890339903409034190342903439034490345903469034790348903499035090351903529035390354903559035690357903589035990360903619036290363903649036590366903679036890369903709037190372903739037490375903769037790378903799038090381903829038390384903859038690387903889038990390903919039290393903949039590396903979039890399904009040190402904039040490405904069040790408904099041090411904129041390414904159041690417904189041990420904219042290423904249042590426904279042890429904309043190432904339043490435904369043790438904399044090441904429044390444904459044690447904489044990450904519045290453904549045590456904579045890459904609046190462904639046490465904669046790468904699047090471904729047390474904759047690477904789047990480904819048290483904849048590486904879048890489904909049190492904939049490495904969049790498904999050090501905029050390504905059050690507905089050990510905119051290513905149051590516905179051890519905209052190522905239052490525905269052790528905299053090531905329053390534905359053690537905389053990540905419054290543905449054590546905479054890549905509055190552905539055490555905569055790558905599056090561905629056390564905659056690567905689056990570905719057290573905749057590576905779057890579905809058190582905839058490585905869058790588905899059090591905929059390594905959059690597905989059990600906019060290603906049060590606906079060890609906109061190612906139061490615906169061790618906199062090621906229062390624906259062690627906289062990630906319063290633906349063590636906379063890639906409064190642906439064490645906469064790648906499065090651906529065390654906559065690657906589065990660906619066290663906649066590666906679066890669906709067190672906739067490675906769067790678906799068090681906829068390684906859068690687906889068990690906919069290693906949069590696906979069890699907009070190702907039070490705907069070790708907099071090711907129071390714907159071690717907189071990720907219072290723907249072590726907279072890729907309073190732907339073490735907369073790738907399074090741907429074390744907459074690747907489074990750907519075290753907549075590756907579075890759907609076190762907639076490765907669076790768907699077090771907729077390774907759077690777907789077990780907819078290783907849078590786907879078890789907909079190792907939079490795907969079790798907999080090801908029080390804908059080690807908089080990810908119081290813908149081590816908179081890819908209082190822908239082490825908269082790828908299083090831908329083390834908359083690837908389083990840908419084290843908449084590846908479084890849908509085190852908539085490855908569085790858908599086090861908629086390864908659086690867908689086990870908719087290873908749087590876908779087890879908809088190882908839088490885908869088790888908899089090891908929089390894908959089690897908989089990900909019090290903909049090590906909079090890909909109091190912909139091490915909169091790918909199092090921909229092390924909259092690927909289092990930909319093290933909349093590936909379093890939909409094190942909439094490945909469094790948909499095090951909529095390954909559095690957909589095990960909619096290963909649096590966909679096890969909709097190972909739097490975909769097790978909799098090981909829098390984909859098690987909889098990990909919099290993909949099590996909979099890999910009100191002910039100491005910069100791008910099101091011910129101391014910159101691017910189101991020910219102291023910249102591026910279102891029910309103191032910339103491035910369103791038910399104091041910429104391044910459104691047910489104991050910519105291053910549105591056910579105891059910609106191062910639106491065910669106791068910699107091071910729107391074910759107691077910789107991080910819108291083910849108591086910879108891089910909109191092910939109491095910969109791098910999110091101911029110391104911059110691107911089110991110911119111291113911149111591116911179111891119911209112191122911239112491125911269112791128911299113091131911329113391134911359113691137911389113991140911419114291143911449114591146911479114891149911509115191152911539115491155911569115791158911599116091161911629116391164911659116691167911689116991170911719117291173911749117591176911779117891179911809118191182911839118491185911869118791188911899119091191911929119391194911959119691197911989119991200912019120291203912049120591206912079120891209912109121191212912139121491215912169121791218912199122091221912229122391224912259122691227912289122991230912319123291233912349123591236912379123891239912409124191242912439124491245912469124791248912499125091251912529125391254912559125691257912589125991260912619126291263912649126591266912679126891269912709127191272912739127491275912769127791278912799128091281912829128391284912859128691287912889128991290912919129291293912949129591296912979129891299913009130191302913039130491305913069130791308913099131091311913129131391314913159131691317913189131991320913219132291323913249132591326913279132891329913309133191332913339133491335913369133791338913399134091341913429134391344913459134691347913489134991350913519135291353913549135591356913579135891359913609136191362913639136491365913669136791368913699137091371913729137391374913759137691377913789137991380913819138291383913849138591386913879138891389913909139191392913939139491395913969139791398913999140091401914029140391404914059140691407914089140991410914119141291413914149141591416914179141891419914209142191422914239142491425914269142791428914299143091431914329143391434914359143691437914389143991440914419144291443914449144591446914479144891449914509145191452914539145491455914569145791458914599146091461914629146391464914659146691467914689146991470914719147291473914749147591476914779147891479914809148191482914839148491485914869148791488914899149091491914929149391494914959149691497914989149991500915019150291503915049150591506915079150891509915109151191512915139151491515915169151791518915199152091521915229152391524915259152691527915289152991530915319153291533915349153591536915379153891539915409154191542915439154491545915469154791548915499155091551915529155391554915559155691557915589155991560915619156291563915649156591566915679156891569915709157191572915739157491575915769157791578915799158091581915829158391584915859158691587915889158991590915919159291593915949159591596915979159891599916009160191602916039160491605916069160791608916099161091611916129161391614916159161691617916189161991620916219162291623916249162591626916279162891629916309163191632916339163491635916369163791638916399164091641916429164391644916459164691647916489164991650916519165291653916549165591656916579165891659916609166191662916639166491665916669166791668916699167091671916729167391674916759167691677916789167991680916819168291683916849168591686916879168891689916909169191692916939169491695916969169791698916999170091701917029170391704917059170691707917089170991710917119171291713917149171591716917179171891719917209172191722917239172491725917269172791728917299173091731917329173391734917359173691737917389173991740917419174291743917449174591746917479174891749917509175191752917539175491755917569175791758917599176091761917629176391764917659176691767917689176991770917719177291773917749177591776917779177891779917809178191782917839178491785917869178791788917899179091791917929179391794917959179691797917989179991800918019180291803918049180591806918079180891809918109181191812918139181491815918169181791818918199182091821918229182391824918259182691827918289182991830918319183291833918349183591836918379183891839918409184191842918439184491845918469184791848918499185091851918529185391854918559185691857918589185991860918619186291863918649186591866918679186891869918709187191872918739187491875918769187791878918799188091881918829188391884918859188691887918889188991890918919189291893918949189591896918979189891899919009190191902919039190491905919069190791908919099191091911919129191391914919159191691917919189191991920919219192291923919249192591926919279192891929919309193191932919339193491935919369193791938919399194091941919429194391944919459194691947919489194991950919519195291953919549195591956919579195891959919609196191962919639196491965919669196791968919699197091971919729197391974919759197691977919789197991980919819198291983919849198591986919879198891989919909199191992919939199491995919969199791998919999200092001920029200392004920059200692007920089200992010920119201292013920149201592016920179201892019920209202192022920239202492025920269202792028920299203092031920329203392034920359203692037920389203992040920419204292043920449204592046920479204892049920509205192052920539205492055920569205792058920599206092061920629206392064920659206692067920689206992070920719207292073920749207592076920779207892079920809208192082920839208492085920869208792088920899209092091920929209392094920959209692097920989209992100921019210292103921049210592106921079210892109921109211192112921139211492115921169211792118921199212092121921229212392124921259212692127921289212992130921319213292133921349213592136921379213892139921409214192142921439214492145921469214792148921499215092151921529215392154921559215692157921589215992160921619216292163921649216592166921679216892169921709217192172921739217492175921769217792178921799218092181921829218392184921859218692187921889218992190921919219292193921949219592196921979219892199922009220192202922039220492205922069220792208922099221092211922129221392214922159221692217922189221992220922219222292223922249222592226922279222892229922309223192232922339223492235922369223792238922399224092241922429224392244922459224692247922489224992250922519225292253922549225592256922579225892259922609226192262922639226492265922669226792268922699227092271922729227392274922759227692277922789227992280922819228292283922849228592286922879228892289922909229192292922939229492295922969229792298922999230092301923029230392304923059230692307923089230992310923119231292313923149231592316923179231892319923209232192322923239232492325923269232792328923299233092331923329233392334923359233692337923389233992340923419234292343923449234592346923479234892349923509235192352923539235492355923569235792358923599236092361923629236392364923659236692367923689236992370923719237292373923749237592376923779237892379923809238192382923839238492385923869238792388923899239092391923929239392394923959239692397923989239992400924019240292403924049240592406924079240892409924109241192412924139241492415924169241792418924199242092421924229242392424924259242692427924289242992430924319243292433924349243592436924379243892439924409244192442924439244492445924469244792448924499245092451924529245392454924559245692457924589245992460924619246292463924649246592466924679246892469924709247192472924739247492475924769247792478924799248092481924829248392484924859248692487924889248992490924919249292493924949249592496924979249892499925009250192502925039250492505925069250792508925099251092511925129251392514925159251692517925189251992520925219252292523925249252592526925279252892529925309253192532925339253492535925369253792538925399254092541925429254392544925459254692547925489254992550925519255292553925549255592556925579255892559925609256192562925639256492565925669256792568925699257092571925729257392574925759257692577925789257992580925819258292583925849258592586925879258892589925909259192592925939259492595925969259792598925999260092601926029260392604926059260692607926089260992610926119261292613926149261592616926179261892619926209262192622926239262492625926269262792628926299263092631926329263392634926359263692637926389263992640926419264292643926449264592646926479264892649926509265192652926539265492655926569265792658926599266092661926629266392664926659266692667926689266992670926719267292673926749267592676926779267892679926809268192682926839268492685926869268792688926899269092691926929269392694926959269692697926989269992700927019270292703927049270592706927079270892709927109271192712927139271492715927169271792718927199272092721927229272392724927259272692727927289272992730927319273292733927349273592736927379273892739927409274192742927439274492745927469274792748927499275092751927529275392754927559275692757927589275992760927619276292763927649276592766927679276892769927709277192772927739277492775927769277792778927799278092781927829278392784927859278692787927889278992790927919279292793927949279592796927979279892799928009280192802928039280492805928069280792808928099281092811928129281392814928159281692817928189281992820928219282292823928249282592826928279282892829928309283192832928339283492835928369283792838928399284092841928429284392844928459284692847928489284992850928519285292853928549285592856928579285892859928609286192862928639286492865928669286792868928699287092871928729287392874928759287692877928789287992880928819288292883928849288592886928879288892889928909289192892928939289492895928969289792898928999290092901929029290392904929059290692907929089290992910929119291292913929149291592916929179291892919929209292192922929239292492925929269292792928929299293092931929329293392934929359293692937929389293992940929419294292943929449294592946929479294892949929509295192952929539295492955929569295792958929599296092961929629296392964929659296692967929689296992970929719297292973929749297592976929779297892979929809298192982929839298492985929869298792988929899299092991929929299392994929959299692997929989299993000930019300293003930049300593006930079300893009930109301193012930139301493015930169301793018930199302093021930229302393024930259302693027930289302993030930319303293033930349303593036930379303893039930409304193042930439304493045930469304793048930499305093051930529305393054930559305693057930589305993060930619306293063930649306593066930679306893069930709307193072930739307493075930769307793078930799308093081930829308393084930859308693087930889308993090930919309293093930949309593096930979309893099931009310193102931039310493105931069310793108931099311093111931129311393114931159311693117931189311993120931219312293123931249312593126931279312893129931309313193132931339313493135931369313793138931399314093141931429314393144931459314693147931489314993150931519315293153931549315593156931579315893159931609316193162931639316493165931669316793168931699317093171931729317393174931759317693177931789317993180931819318293183931849318593186931879318893189931909319193192931939319493195931969319793198931999320093201932029320393204932059320693207932089320993210932119321293213932149321593216932179321893219932209322193222932239322493225932269322793228932299323093231932329323393234932359323693237932389323993240932419324293243932449324593246932479324893249932509325193252932539325493255932569325793258932599326093261932629326393264932659326693267932689326993270932719327293273932749327593276932779327893279932809328193282932839328493285932869328793288932899329093291932929329393294932959329693297932989329993300933019330293303933049330593306933079330893309933109331193312933139331493315933169331793318933199332093321933229332393324933259332693327933289332993330933319333293333933349333593336933379333893339933409334193342933439334493345933469334793348933499335093351933529335393354933559335693357933589335993360933619336293363933649336593366933679336893369933709337193372933739337493375933769337793378933799338093381933829338393384933859338693387933889338993390933919339293393933949339593396933979339893399934009340193402934039340493405934069340793408934099341093411934129341393414934159341693417934189341993420934219342293423934249342593426934279342893429934309343193432934339343493435934369343793438934399344093441934429344393444934459344693447934489344993450934519345293453934549345593456934579345893459934609346193462934639346493465934669346793468934699347093471934729347393474934759347693477934789347993480934819348293483934849348593486934879348893489934909349193492934939349493495934969349793498934999350093501935029350393504935059350693507935089350993510935119351293513935149351593516935179351893519935209352193522935239352493525935269352793528935299353093531935329353393534935359353693537935389353993540935419354293543935449354593546935479354893549935509355193552935539355493555935569355793558935599356093561935629356393564935659356693567935689356993570935719357293573935749357593576935779357893579935809358193582935839358493585935869358793588935899359093591935929359393594935959359693597935989359993600936019360293603936049360593606936079360893609936109361193612936139361493615936169361793618936199362093621936229362393624936259362693627936289362993630936319363293633936349363593636936379363893639936409364193642936439364493645936469364793648936499365093651936529365393654936559365693657936589365993660936619366293663936649366593666936679366893669936709367193672936739367493675936769367793678936799368093681936829368393684936859368693687936889368993690936919369293693936949369593696936979369893699937009370193702937039370493705937069370793708937099371093711937129371393714937159371693717937189371993720937219372293723937249372593726937279372893729937309373193732937339373493735937369373793738937399374093741937429374393744937459374693747937489374993750937519375293753937549375593756937579375893759937609376193762937639376493765937669376793768937699377093771937729377393774937759377693777937789377993780937819378293783937849378593786937879378893789937909379193792937939379493795937969379793798937999380093801938029380393804938059380693807938089380993810938119381293813938149381593816938179381893819938209382193822938239382493825938269382793828938299383093831938329383393834938359383693837938389383993840938419384293843938449384593846938479384893849938509385193852938539385493855938569385793858938599386093861938629386393864938659386693867938689386993870938719387293873938749387593876938779387893879938809388193882938839388493885938869388793888938899389093891938929389393894938959389693897938989389993900939019390293903939049390593906939079390893909939109391193912939139391493915939169391793918939199392093921939229392393924939259392693927939289392993930939319393293933939349393593936939379393893939939409394193942939439394493945939469394793948939499395093951939529395393954939559395693957939589395993960939619396293963939649396593966939679396893969939709397193972939739397493975939769397793978939799398093981939829398393984939859398693987939889398993990939919399293993939949399593996939979399893999940009400194002940039400494005940069400794008940099401094011940129401394014940159401694017940189401994020940219402294023940249402594026940279402894029940309403194032940339403494035940369403794038940399404094041940429404394044940459404694047940489404994050940519405294053940549405594056940579405894059940609406194062940639406494065940669406794068940699407094071940729407394074940759407694077940789407994080940819408294083940849408594086940879408894089940909409194092940939409494095940969409794098940999410094101941029410394104941059410694107941089410994110941119411294113941149411594116941179411894119941209412194122941239412494125941269412794128941299413094131941329413394134941359413694137941389413994140941419414294143941449414594146941479414894149941509415194152941539415494155941569415794158941599416094161941629416394164941659416694167941689416994170941719417294173941749417594176941779417894179941809418194182941839418494185941869418794188941899419094191941929419394194941959419694197941989419994200942019420294203942049420594206942079420894209942109421194212942139421494215942169421794218942199422094221942229422394224942259422694227942289422994230942319423294233942349423594236942379423894239942409424194242942439424494245942469424794248942499425094251942529425394254942559425694257942589425994260942619426294263942649426594266942679426894269942709427194272942739427494275942769427794278942799428094281942829428394284942859428694287942889428994290942919429294293942949429594296942979429894299943009430194302943039430494305943069430794308943099431094311943129431394314943159431694317943189431994320943219432294323943249432594326943279432894329943309433194332943339433494335943369433794338943399434094341943429434394344943459434694347943489434994350943519435294353943549435594356943579435894359943609436194362943639436494365943669436794368943699437094371943729437394374943759437694377943789437994380943819438294383943849438594386943879438894389943909439194392943939439494395943969439794398943999440094401944029440394404944059440694407944089440994410944119441294413944149441594416944179441894419944209442194422944239442494425944269442794428944299443094431944329443394434944359443694437944389443994440944419444294443944449444594446944479444894449944509445194452944539445494455944569445794458944599446094461944629446394464944659446694467944689446994470944719447294473944749447594476944779447894479944809448194482944839448494485944869448794488944899449094491944929449394494944959449694497944989449994500945019450294503945049450594506945079450894509945109451194512945139451494515945169451794518945199452094521945229452394524945259452694527945289452994530945319453294533945349453594536945379453894539945409454194542945439454494545945469454794548945499455094551945529455394554945559455694557945589455994560945619456294563945649456594566945679456894569945709457194572945739457494575945769457794578945799458094581945829458394584945859458694587945889458994590945919459294593945949459594596945979459894599946009460194602946039460494605946069460794608946099461094611946129461394614946159461694617946189461994620946219462294623946249462594626946279462894629946309463194632946339463494635946369463794638946399464094641946429464394644946459464694647946489464994650946519465294653946549465594656946579465894659946609466194662946639466494665946669466794668946699467094671946729467394674946759467694677946789467994680946819468294683946849468594686946879468894689946909469194692946939469494695946969469794698946999470094701947029470394704947059470694707947089470994710947119471294713947149471594716947179471894719947209472194722947239472494725947269472794728947299473094731947329473394734947359473694737947389473994740947419474294743947449474594746947479474894749947509475194752947539475494755947569475794758947599476094761947629476394764947659476694767947689476994770947719477294773947749477594776947779477894779947809478194782947839478494785947869478794788947899479094791947929479394794947959479694797947989479994800948019480294803948049480594806948079480894809948109481194812948139481494815948169481794818948199482094821948229482394824948259482694827948289482994830948319483294833948349483594836948379483894839948409484194842948439484494845948469484794848948499485094851948529485394854948559485694857948589485994860948619486294863948649486594866948679486894869948709487194872948739487494875948769487794878948799488094881948829488394884948859488694887948889488994890948919489294893948949489594896948979489894899949009490194902949039490494905949069490794908949099491094911949129491394914949159491694917949189491994920949219492294923949249492594926949279492894929949309493194932949339493494935949369493794938949399494094941949429494394944949459494694947949489494994950949519495294953949549495594956949579495894959949609496194962949639496494965949669496794968949699497094971949729497394974949759497694977949789497994980949819498294983949849498594986949879498894989949909499194992949939499494995949969499794998949999500095001950029500395004950059500695007950089500995010950119501295013950149501595016950179501895019950209502195022950239502495025950269502795028950299503095031950329503395034950359503695037950389503995040950419504295043950449504595046950479504895049950509505195052950539505495055950569505795058950599506095061950629506395064950659506695067950689506995070950719507295073950749507595076950779507895079950809508195082950839508495085950869508795088950899509095091950929509395094950959509695097950989509995100951019510295103951049510595106951079510895109951109511195112951139511495115951169511795118951199512095121951229512395124951259512695127951289512995130951319513295133951349513595136951379513895139951409514195142951439514495145951469514795148951499515095151951529515395154951559515695157951589515995160951619516295163951649516595166951679516895169951709517195172951739517495175951769517795178951799518095181951829518395184951859518695187951889518995190951919519295193951949519595196951979519895199952009520195202952039520495205952069520795208952099521095211952129521395214952159521695217952189521995220952219522295223952249522595226952279522895229952309523195232952339523495235952369523795238952399524095241952429524395244952459524695247952489524995250952519525295253952549525595256952579525895259952609526195262952639526495265952669526795268952699527095271952729527395274952759527695277952789527995280952819528295283952849528595286952879528895289952909529195292952939529495295952969529795298952999530095301953029530395304953059530695307953089530995310953119531295313953149531595316953179531895319953209532195322953239532495325953269532795328953299533095331953329533395334953359533695337953389533995340953419534295343953449534595346953479534895349953509535195352953539535495355953569535795358953599536095361953629536395364953659536695367953689536995370953719537295373953749537595376953779537895379953809538195382953839538495385953869538795388953899539095391953929539395394953959539695397953989539995400954019540295403954049540595406954079540895409954109541195412954139541495415954169541795418954199542095421954229542395424954259542695427954289542995430954319543295433954349543595436954379543895439954409544195442954439544495445954469544795448954499545095451954529545395454954559545695457954589545995460954619546295463954649546595466954679546895469954709547195472954739547495475954769547795478954799548095481954829548395484954859548695487954889548995490954919549295493954949549595496954979549895499955009550195502955039550495505955069550795508955099551095511955129551395514955159551695517955189551995520955219552295523955249552595526955279552895529955309553195532955339553495535955369553795538955399554095541955429554395544955459554695547955489554995550955519555295553955549555595556955579555895559955609556195562955639556495565955669556795568955699557095571955729557395574955759557695577955789557995580955819558295583955849558595586955879558895589955909559195592955939559495595955969559795598955999560095601956029560395604956059560695607956089560995610956119561295613956149561595616956179561895619956209562195622956239562495625956269562795628956299563095631956329563395634956359563695637956389563995640956419564295643956449564595646956479564895649956509565195652956539565495655956569565795658956599566095661956629566395664956659566695667956689566995670956719567295673956749567595676956779567895679956809568195682956839568495685956869568795688956899569095691956929569395694956959569695697956989569995700957019570295703957049570595706957079570895709957109571195712957139571495715957169571795718957199572095721957229572395724957259572695727957289572995730957319573295733957349573595736957379573895739957409574195742957439574495745957469574795748957499575095751957529575395754957559575695757957589575995760957619576295763957649576595766957679576895769957709577195772957739577495775957769577795778957799578095781957829578395784957859578695787957889578995790957919579295793957949579595796957979579895799958009580195802958039580495805958069580795808958099581095811958129581395814958159581695817958189581995820958219582295823958249582595826958279582895829958309583195832958339583495835958369583795838958399584095841958429584395844958459584695847958489584995850958519585295853958549585595856958579585895859958609586195862958639586495865958669586795868958699587095871958729587395874958759587695877958789587995880958819588295883958849588595886958879588895889958909589195892958939589495895958969589795898958999590095901959029590395904959059590695907959089590995910959119591295913959149591595916959179591895919959209592195922959239592495925959269592795928959299593095931959329593395934959359593695937959389593995940959419594295943959449594595946959479594895949959509595195952959539595495955959569595795958959599596095961959629596395964959659596695967959689596995970959719597295973959749597595976959779597895979959809598195982959839598495985959869598795988959899599095991959929599395994959959599695997959989599996000960019600296003960049600596006960079600896009960109601196012960139601496015960169601796018960199602096021960229602396024960259602696027960289602996030960319603296033960349603596036960379603896039960409604196042960439604496045960469604796048960499605096051960529605396054960559605696057960589605996060960619606296063960649606596066960679606896069960709607196072960739607496075960769607796078960799608096081960829608396084960859608696087960889608996090960919609296093960949609596096960979609896099961009610196102961039610496105961069610796108961099611096111961129611396114961159611696117961189611996120961219612296123961249612596126961279612896129961309613196132961339613496135961369613796138961399614096141961429614396144961459614696147961489614996150961519615296153961549615596156961579615896159961609616196162961639616496165961669616796168961699617096171961729617396174961759617696177961789617996180961819618296183961849618596186961879618896189961909619196192961939619496195961969619796198961999620096201962029620396204962059620696207962089620996210962119621296213962149621596216962179621896219962209622196222962239622496225962269622796228962299623096231962329623396234962359623696237962389623996240962419624296243962449624596246962479624896249962509625196252962539625496255962569625796258962599626096261962629626396264962659626696267962689626996270962719627296273962749627596276962779627896279962809628196282962839628496285962869628796288962899629096291962929629396294962959629696297962989629996300963019630296303963049630596306963079630896309963109631196312963139631496315963169631796318963199632096321963229632396324963259632696327963289632996330963319633296333963349633596336963379633896339963409634196342963439634496345963469634796348963499635096351963529635396354963559635696357963589635996360963619636296363963649636596366963679636896369963709637196372963739637496375963769637796378963799638096381963829638396384963859638696387963889638996390963919639296393963949639596396963979639896399964009640196402964039640496405964069640796408964099641096411964129641396414964159641696417964189641996420964219642296423964249642596426964279642896429964309643196432964339643496435964369643796438964399644096441964429644396444964459644696447964489644996450964519645296453964549645596456964579645896459964609646196462964639646496465964669646796468964699647096471964729647396474964759647696477964789647996480964819648296483964849648596486964879648896489964909649196492964939649496495964969649796498964999650096501965029650396504965059650696507965089650996510965119651296513965149651596516965179651896519965209652196522965239652496525965269652796528965299653096531965329653396534965359653696537965389653996540965419654296543965449654596546965479654896549965509655196552965539655496555965569655796558965599656096561965629656396564965659656696567965689656996570965719657296573965749657596576965779657896579965809658196582965839658496585965869658796588965899659096591965929659396594965959659696597965989659996600966019660296603966049660596606966079660896609966109661196612966139661496615966169661796618966199662096621966229662396624966259662696627966289662996630966319663296633966349663596636966379663896639966409664196642966439664496645966469664796648966499665096651966529665396654966559665696657966589665996660966619666296663966649666596666966679666896669966709667196672966739667496675966769667796678966799668096681966829668396684966859668696687966889668996690966919669296693966949669596696966979669896699967009670196702967039670496705967069670796708967099671096711967129671396714967159671696717967189671996720967219672296723967249672596726967279672896729967309673196732967339673496735967369673796738967399674096741967429674396744967459674696747967489674996750967519675296753967549675596756967579675896759967609676196762967639676496765967669676796768967699677096771967729677396774967759677696777967789677996780967819678296783967849678596786967879678896789967909679196792967939679496795967969679796798967999680096801968029680396804968059680696807968089680996810968119681296813968149681596816968179681896819968209682196822968239682496825968269682796828968299683096831968329683396834968359683696837968389683996840968419684296843968449684596846968479684896849968509685196852968539685496855968569685796858968599686096861968629686396864968659686696867968689686996870968719687296873968749687596876968779687896879968809688196882968839688496885968869688796888968899689096891968929689396894968959689696897968989689996900969019690296903969049690596906969079690896909969109691196912969139691496915969169691796918969199692096921969229692396924969259692696927969289692996930969319693296933969349693596936969379693896939969409694196942969439694496945969469694796948969499695096951969529695396954969559695696957969589695996960969619696296963969649696596966969679696896969969709697196972969739697496975969769697796978969799698096981969829698396984969859698696987969889698996990969919699296993969949699596996969979699896999970009700197002970039700497005970069700797008970099701097011970129701397014970159701697017970189701997020970219702297023970249702597026970279702897029970309703197032970339703497035970369703797038970399704097041970429704397044970459704697047970489704997050970519705297053970549705597056970579705897059970609706197062970639706497065970669706797068970699707097071970729707397074970759707697077970789707997080970819708297083970849708597086970879708897089970909709197092970939709497095970969709797098970999710097101971029710397104971059710697107971089710997110971119711297113971149711597116971179711897119971209712197122971239712497125971269712797128971299713097131971329713397134971359713697137971389713997140971419714297143971449714597146971479714897149971509715197152971539715497155971569715797158971599716097161971629716397164971659716697167971689716997170971719717297173971749717597176971779717897179971809718197182971839718497185971869718797188971899719097191971929719397194971959719697197971989719997200972019720297203972049720597206972079720897209972109721197212972139721497215972169721797218972199722097221972229722397224972259722697227972289722997230972319723297233972349723597236972379723897239972409724197242972439724497245972469724797248972499725097251972529725397254972559725697257972589725997260972619726297263972649726597266972679726897269972709727197272972739727497275972769727797278972799728097281972829728397284972859728697287972889728997290972919729297293972949729597296972979729897299973009730197302973039730497305973069730797308973099731097311973129731397314973159731697317973189731997320973219732297323973249732597326973279732897329973309733197332973339733497335973369733797338973399734097341973429734397344973459734697347973489734997350973519735297353973549735597356973579735897359973609736197362973639736497365973669736797368973699737097371973729737397374973759737697377973789737997380973819738297383973849738597386973879738897389973909739197392973939739497395973969739797398973999740097401974029740397404974059740697407974089740997410974119741297413974149741597416974179741897419974209742197422974239742497425974269742797428974299743097431974329743397434974359743697437974389743997440974419744297443974449744597446974479744897449974509745197452974539745497455974569745797458974599746097461974629746397464974659746697467974689746997470974719747297473974749747597476974779747897479974809748197482974839748497485974869748797488974899749097491974929749397494974959749697497974989749997500975019750297503975049750597506975079750897509975109751197512975139751497515975169751797518975199752097521975229752397524975259752697527975289752997530975319753297533975349753597536975379753897539975409754197542975439754497545975469754797548975499755097551975529755397554975559755697557975589755997560975619756297563975649756597566975679756897569975709757197572975739757497575975769757797578975799758097581975829758397584975859758697587975889758997590975919759297593975949759597596975979759897599976009760197602976039760497605976069760797608976099761097611976129761397614976159761697617976189761997620976219762297623976249762597626976279762897629976309763197632976339763497635976369763797638976399764097641976429764397644976459764697647976489764997650976519765297653976549765597656976579765897659976609766197662976639766497665976669766797668976699767097671976729767397674976759767697677976789767997680976819768297683976849768597686976879768897689976909769197692976939769497695976969769797698976999770097701977029770397704977059770697707977089770997710977119771297713977149771597716977179771897719977209772197722977239772497725977269772797728977299773097731977329773397734977359773697737977389773997740977419774297743977449774597746977479774897749977509775197752977539775497755977569775797758977599776097761977629776397764977659776697767977689776997770977719777297773977749777597776977779777897779977809778197782977839778497785977869778797788977899779097791977929779397794977959779697797977989779997800978019780297803978049780597806978079780897809978109781197812978139781497815978169781797818978199782097821978229782397824978259782697827978289782997830978319783297833978349783597836978379783897839978409784197842978439784497845978469784797848978499785097851978529785397854978559785697857978589785997860978619786297863978649786597866978679786897869978709787197872978739787497875978769787797878978799788097881978829788397884978859788697887978889788997890978919789297893978949789597896978979789897899979009790197902979039790497905979069790797908979099791097911979129791397914979159791697917979189791997920979219792297923979249792597926979279792897929979309793197932979339793497935979369793797938979399794097941979429794397944979459794697947979489794997950979519795297953979549795597956979579795897959979609796197962979639796497965979669796797968979699797097971979729797397974979759797697977979789797997980979819798297983979849798597986979879798897989979909799197992979939799497995979969799797998979999800098001980029800398004980059800698007980089800998010980119801298013980149801598016980179801898019980209802198022980239802498025980269802798028980299803098031980329803398034980359803698037980389803998040980419804298043980449804598046980479804898049980509805198052980539805498055980569805798058980599806098061980629806398064980659806698067980689806998070980719807298073980749807598076980779807898079980809808198082980839808498085980869808798088980899809098091980929809398094980959809698097980989809998100981019810298103981049810598106981079810898109981109811198112981139811498115981169811798118981199812098121981229812398124981259812698127981289812998130981319813298133981349813598136981379813898139981409814198142981439814498145981469814798148981499815098151981529815398154981559815698157981589815998160981619816298163981649816598166981679816898169981709817198172981739817498175981769817798178981799818098181981829818398184981859818698187981889818998190981919819298193981949819598196981979819898199982009820198202982039820498205982069820798208982099821098211982129821398214982159821698217982189821998220982219822298223982249822598226982279822898229982309823198232982339823498235982369823798238982399824098241982429824398244982459824698247982489824998250982519825298253982549825598256982579825898259982609826198262982639826498265982669826798268982699827098271982729827398274982759827698277982789827998280982819828298283982849828598286982879828898289982909829198292982939829498295982969829798298982999830098301983029830398304983059830698307983089830998310983119831298313983149831598316983179831898319983209832198322983239832498325983269832798328983299833098331983329833398334983359833698337983389833998340983419834298343983449834598346983479834898349983509835198352983539835498355983569835798358983599836098361983629836398364983659836698367983689836998370983719837298373983749837598376983779837898379983809838198382983839838498385983869838798388983899839098391983929839398394983959839698397983989839998400984019840298403984049840598406984079840898409984109841198412984139841498415984169841798418984199842098421984229842398424984259842698427984289842998430984319843298433984349843598436984379843898439984409844198442984439844498445984469844798448984499845098451984529845398454984559845698457984589845998460984619846298463984649846598466984679846898469984709847198472984739847498475984769847798478984799848098481984829848398484984859848698487984889848998490984919849298493984949849598496984979849898499985009850198502985039850498505985069850798508985099851098511985129851398514985159851698517985189851998520985219852298523985249852598526985279852898529985309853198532985339853498535985369853798538985399854098541985429854398544985459854698547985489854998550985519855298553985549855598556985579855898559985609856198562985639856498565985669856798568985699857098571985729857398574985759857698577985789857998580985819858298583985849858598586985879858898589985909859198592985939859498595985969859798598985999860098601986029860398604986059860698607986089860998610986119861298613986149861598616986179861898619986209862198622986239862498625986269862798628986299863098631986329863398634986359863698637986389863998640986419864298643986449864598646986479864898649986509865198652986539865498655986569865798658986599866098661986629866398664986659866698667986689866998670986719867298673986749867598676986779867898679986809868198682986839868498685986869868798688986899869098691986929869398694986959869698697986989869998700987019870298703987049870598706987079870898709987109871198712987139871498715987169871798718987199872098721987229872398724987259872698727987289872998730987319873298733987349873598736987379873898739987409874198742987439874498745987469874798748987499875098751987529875398754987559875698757987589875998760987619876298763987649876598766987679876898769987709877198772987739877498775987769877798778987799878098781987829878398784987859878698787987889878998790987919879298793987949879598796987979879898799988009880198802988039880498805988069880798808988099881098811988129881398814988159881698817988189881998820988219882298823988249882598826988279882898829988309883198832988339883498835988369883798838988399884098841988429884398844988459884698847988489884998850988519885298853988549885598856988579885898859988609886198862988639886498865988669886798868988699887098871988729887398874988759887698877988789887998880988819888298883988849888598886988879888898889988909889198892988939889498895988969889798898988999890098901989029890398904989059890698907989089890998910989119891298913989149891598916989179891898919989209892198922989239892498925989269892798928989299893098931989329893398934989359893698937989389893998940989419894298943989449894598946989479894898949989509895198952989539895498955989569895798958989599896098961989629896398964989659896698967989689896998970989719897298973989749897598976989779897898979989809898198982989839898498985989869898798988989899899098991989929899398994989959899698997989989899999000990019900299003990049900599006990079900899009990109901199012990139901499015990169901799018990199902099021990229902399024990259902699027990289902999030990319903299033990349903599036990379903899039990409904199042990439904499045990469904799048990499905099051990529905399054990559905699057990589905999060990619906299063990649906599066990679906899069990709907199072990739907499075990769907799078990799908099081990829908399084990859908699087990889908999090990919909299093990949909599096990979909899099991009910199102991039910499105991069910799108991099911099111991129911399114991159911699117991189911999120991219912299123991249912599126991279912899129991309913199132991339913499135991369913799138991399914099141991429914399144991459914699147991489914999150991519915299153991549915599156991579915899159991609916199162991639916499165991669916799168991699917099171991729917399174991759917699177991789917999180991819918299183991849918599186991879918899189991909919199192991939919499195991969919799198991999920099201992029920399204992059920699207992089920999210992119921299213992149921599216992179921899219992209922199222992239922499225992269922799228992299923099231992329923399234992359923699237992389923999240992419924299243992449924599246992479924899249992509925199252992539925499255992569925799258992599926099261992629926399264992659926699267992689926999270992719927299273992749927599276992779927899279992809928199282992839928499285992869928799288992899929099291992929929399294992959929699297992989929999300993019930299303993049930599306993079930899309993109931199312993139931499315993169931799318993199932099321993229932399324993259932699327993289932999330993319933299333993349933599336993379933899339993409934199342993439934499345993469934799348993499935099351993529935399354993559935699357993589935999360993619936299363993649936599366993679936899369993709937199372993739937499375993769937799378993799938099381993829938399384993859938699387993889938999390993919939299393993949939599396993979939899399994009940199402994039940499405994069940799408994099941099411994129941399414994159941699417994189941999420994219942299423994249942599426994279942899429994309943199432994339943499435994369943799438994399944099441994429944399444994459944699447994489944999450994519945299453994549945599456994579945899459994609946199462994639946499465994669946799468994699947099471994729947399474994759947699477994789947999480994819948299483994849948599486994879948899489994909949199492994939949499495994969949799498994999950099501995029950399504995059950699507995089950999510995119951299513995149951599516995179951899519995209952199522995239952499525995269952799528995299953099531995329953399534995359953699537995389953999540995419954299543995449954599546995479954899549995509955199552995539955499555995569955799558995599956099561995629956399564995659956699567995689956999570995719957299573995749957599576995779957899579995809958199582995839958499585995869958799588995899959099591995929959399594995959959699597995989959999600996019960299603996049960599606996079960899609996109961199612996139961499615996169961799618996199962099621996229962399624996259962699627996289962999630996319963299633996349963599636996379963899639996409964199642996439964499645996469964799648996499965099651996529965399654996559965699657996589965999660996619966299663996649966599666996679966899669996709967199672996739967499675996769967799678996799968099681996829968399684996859968699687996889968999690996919969299693996949969599696996979969899699997009970199702997039970499705997069970799708997099971099711997129971399714997159971699717997189971999720997219972299723997249972599726997279972899729997309973199732997339973499735997369973799738997399974099741997429974399744997459974699747997489974999750997519975299753997549975599756997579975899759997609976199762997639976499765997669976799768997699977099771997729977399774997759977699777997789977999780997819978299783997849978599786997879978899789997909979199792997939979499795997969979799798997999980099801998029980399804998059980699807998089980999810998119981299813998149981599816998179981899819998209982199822998239982499825998269982799828998299983099831998329983399834998359983699837998389983999840998419984299843998449984599846998479984899849998509985199852998539985499855998569985799858998599986099861998629986399864998659986699867998689986999870998719987299873998749987599876998779987899879998809988199882998839988499885998869988799888998899989099891998929989399894998959989699897998989989999900999019990299903999049990599906999079990899909999109991199912999139991499915999169991799918999199992099921999229992399924999259992699927999289992999930999319993299933999349993599936999379993899939999409994199942999439994499945999469994799948999499995099951999529995399954999559995699957999589995999960999619996299963999649996599966999679996899969999709997199972999739997499975999769997799978999799998099981999829998399984999859998699987999889998999990999919999299993999949999599996999979999899999100000100001100002100003100004100005100006100007100008100009100010100011100012100013100014100015100016100017100018100019100020100021100022100023100024100025100026100027100028100029100030100031100032100033100034100035100036100037100038100039100040100041100042100043100044100045100046100047100048100049100050100051100052100053100054100055100056100057100058100059100060100061100062100063100064100065100066100067100068100069100070100071100072100073100074100075100076100077100078100079100080100081100082100083100084100085100086100087100088100089100090100091100092100093100094100095100096100097100098100099100100100101100102100103100104100105100106100107100108100109100110100111100112100113100114100115100116100117100118100119100120100121100122100123100124100125100126100127100128100129100130100131100132100133100134100135100136100137100138100139100140100141100142100143100144100145100146100147100148100149100150100151100152100153100154100155100156100157100158100159100160100161100162100163100164100165100166100167100168100169100170100171100172100173100174100175100176100177100178100179100180100181100182100183100184100185100186100187100188100189100190100191100192100193100194100195100196100197100198100199100200100201100202100203100204100205100206100207100208100209100210100211100212100213100214100215100216100217100218100219100220100221100222100223100224100225100226100227100228100229100230100231100232100233100234100235100236100237100238100239100240100241100242100243100244100245100246100247100248100249100250100251100252100253100254100255100256100257100258100259100260100261100262100263100264100265100266100267100268100269100270100271100272100273100274100275100276100277100278100279100280100281100282100283100284100285100286100287100288100289100290100291100292100293100294100295100296100297100298100299100300100301100302100303100304100305100306100307100308100309100310100311100312100313100314100315100316100317100318100319100320100321100322100323100324100325100326100327100328100329100330100331100332100333100334100335100336100337100338100339100340100341100342100343100344100345100346100347100348100349100350100351100352100353100354100355100356100357100358100359100360100361100362100363100364100365100366100367100368100369100370100371100372100373100374100375100376100377100378100379100380100381100382100383100384100385100386100387100388100389100390100391100392100393100394100395100396100397100398100399100400100401100402100403100404100405100406100407100408100409100410100411100412100413100414100415100416100417100418100419100420100421100422100423100424100425100426100427100428100429100430100431100432100433100434100435100436100437100438100439100440100441100442100443100444100445100446100447100448100449100450100451100452100453100454100455100456100457100458100459100460100461100462100463100464100465100466100467100468100469100470100471100472100473100474100475100476100477100478100479100480100481100482100483100484100485100486100487100488100489100490100491100492100493100494100495100496100497100498100499100500100501100502100503100504100505100506100507100508100509100510100511100512100513100514100515100516100517100518100519100520100521100522100523100524100525100526100527100528100529100530100531100532100533100534100535100536100537100538100539100540100541100542100543100544100545100546100547100548100549100550100551100552100553100554100555100556100557100558100559100560100561100562100563100564100565100566100567100568100569100570100571100572100573100574100575100576100577100578100579100580100581100582100583100584100585100586100587100588100589100590100591100592100593100594100595100596100597100598100599100600100601100602100603100604100605100606100607100608100609100610100611100612100613100614100615100616100617100618100619100620100621100622100623100624100625100626100627100628100629100630100631100632100633100634100635100636100637100638100639100640100641100642100643100644100645100646100647100648100649100650100651100652100653100654100655100656100657100658100659100660100661100662100663100664100665100666100667100668100669100670100671100672100673100674100675100676100677100678100679100680100681100682100683100684100685100686100687100688100689100690100691100692100693100694100695100696100697100698100699100700100701100702100703100704100705100706100707100708100709100710100711100712100713100714100715100716100717100718100719100720100721100722100723100724100725100726100727100728100729100730100731100732100733100734100735100736100737100738100739100740100741100742100743100744100745100746100747100748100749100750100751100752100753100754100755100756100757100758100759100760100761100762100763100764100765100766100767100768100769100770100771100772100773100774100775100776100777100778100779100780100781100782100783100784100785100786100787100788100789100790100791100792100793100794100795100796100797100798100799100800100801100802100803100804100805100806100807100808100809100810100811100812100813100814100815100816100817100818100819100820100821100822100823100824100825100826100827100828100829100830100831100832100833100834100835100836100837100838100839100840100841100842100843100844100845100846100847100848100849100850100851100852100853100854100855100856100857100858100859100860100861100862100863100864100865100866100867100868100869100870100871100872100873100874100875100876100877100878100879100880100881100882100883100884100885100886100887100888100889100890100891100892100893100894100895100896100897100898100899100900100901100902100903100904100905100906100907100908100909100910100911100912100913100914100915100916100917100918100919100920100921100922100923100924100925100926100927100928100929100930100931100932100933100934100935100936100937100938100939100940100941100942100943100944100945100946100947100948100949100950100951100952100953100954100955100956100957100958100959100960100961100962100963100964100965100966100967100968100969100970100971100972100973100974100975100976100977100978100979100980100981100982100983100984100985100986100987100988100989100990100991100992100993100994100995100996100997100998100999101000101001101002101003101004101005101006101007101008101009101010101011101012101013101014101015101016101017101018101019101020101021101022101023101024101025101026101027101028101029101030101031101032101033101034101035101036101037101038101039101040101041101042101043101044101045101046101047101048101049101050101051101052101053101054101055101056101057101058101059101060101061101062101063101064101065101066101067101068101069101070101071101072101073101074101075101076101077101078101079101080101081101082101083101084101085101086101087101088101089101090101091101092101093101094101095101096101097101098101099101100101101101102101103101104101105101106101107101108101109101110101111101112101113101114101115101116101117101118101119101120101121101122101123101124101125101126101127101128101129101130101131101132101133101134101135101136101137101138101139101140101141101142101143101144101145101146101147101148101149101150101151101152101153101154101155101156101157101158101159101160101161101162101163101164101165101166101167101168101169101170101171101172101173101174101175101176101177101178101179101180101181101182101183101184101185101186101187101188101189101190101191101192101193101194101195101196101197101198101199101200101201101202101203101204101205101206101207101208101209101210101211101212101213101214101215101216101217101218101219101220101221101222101223101224101225101226101227101228101229101230101231101232101233101234101235101236101237101238101239101240101241101242101243101244101245101246101247101248101249101250101251101252101253101254101255101256101257101258101259101260101261101262101263101264101265101266101267101268101269101270101271101272101273101274101275101276101277101278101279101280101281101282101283101284101285101286101287101288101289101290101291101292101293101294101295101296101297101298101299101300101301101302101303101304101305101306101307101308101309101310101311101312101313101314101315101316101317101318101319101320101321101322101323101324101325101326101327101328101329101330101331101332101333101334101335101336101337101338101339101340101341101342101343101344101345101346101347101348101349101350101351101352101353101354101355101356101357101358101359101360101361101362101363101364101365101366101367101368101369101370101371101372101373101374101375101376101377101378101379101380101381101382101383101384101385101386101387101388101389101390101391101392101393101394101395101396101397101398101399101400101401101402101403101404101405101406101407101408101409101410101411101412101413101414101415101416101417101418101419101420101421101422101423101424101425101426101427101428101429101430101431101432101433101434101435101436101437101438101439101440101441101442101443101444101445101446101447101448101449101450101451101452101453101454101455101456101457101458101459101460101461101462101463101464101465101466101467101468101469101470101471101472101473101474101475101476101477101478101479101480101481101482101483101484101485101486101487101488101489101490101491101492101493101494101495101496101497101498101499101500101501101502101503101504101505101506101507101508101509101510101511101512101513101514101515101516101517101518101519101520101521101522101523101524101525101526101527101528101529101530101531101532101533101534101535101536101537101538101539101540101541101542101543101544101545101546101547101548101549101550101551101552101553101554101555101556101557101558101559101560101561101562101563101564101565101566101567101568101569101570101571101572101573101574101575101576101577101578101579101580101581101582101583101584101585101586101587101588101589101590101591101592101593101594101595101596101597101598101599101600101601101602101603101604101605101606101607101608101609101610101611101612101613101614101615101616101617101618101619101620101621101622101623101624101625101626101627101628101629101630101631101632101633101634101635101636101637101638101639101640101641101642101643101644101645101646101647101648101649101650101651101652101653101654101655101656101657101658101659101660101661101662101663101664101665101666101667101668101669101670101671101672101673101674101675101676101677101678101679101680101681101682101683101684101685101686101687101688101689101690101691101692101693101694101695101696101697101698101699101700101701101702101703101704101705101706101707101708101709101710101711101712101713101714101715101716101717101718101719101720101721101722101723101724101725101726101727101728101729101730101731101732101733101734101735101736101737101738101739101740101741101742101743101744101745101746101747101748101749101750101751101752101753101754101755101756101757101758101759101760101761101762101763101764101765101766101767101768101769101770101771101772101773101774101775101776101777101778101779101780101781101782101783101784101785101786101787101788101789101790101791101792101793101794101795101796101797101798101799101800101801101802101803101804101805101806101807101808101809101810101811101812101813101814101815101816101817101818101819101820101821101822101823101824101825101826101827101828101829101830101831101832101833101834101835101836101837101838101839101840101841101842101843101844101845101846101847101848101849101850101851101852101853101854101855101856101857101858101859101860101861101862101863101864101865101866101867101868101869101870101871101872101873101874101875101876101877101878101879101880101881101882101883101884101885101886101887101888101889101890101891101892101893101894101895101896101897101898101899101900101901101902101903101904101905101906101907101908101909101910101911101912101913101914101915101916101917101918101919101920101921101922101923101924101925101926101927101928101929101930101931101932101933101934101935101936101937101938101939101940101941101942101943101944101945101946101947101948101949101950101951101952101953101954101955101956101957101958101959101960101961101962101963101964101965101966101967101968101969101970101971101972101973101974101975101976101977101978101979101980101981101982101983101984101985101986101987101988101989101990101991101992101993101994101995101996101997101998101999102000102001102002102003102004102005102006102007102008102009102010102011102012102013102014102015102016102017102018102019102020102021102022102023102024102025102026102027102028102029102030102031102032102033102034102035102036102037102038102039102040102041102042102043102044102045102046102047102048102049102050102051102052102053102054102055102056102057102058102059102060102061102062102063102064102065102066102067102068102069102070102071102072102073102074102075102076102077102078102079102080102081102082102083102084102085102086102087102088102089102090102091102092102093102094102095102096102097102098102099102100102101102102102103102104102105102106102107102108102109102110102111102112102113102114102115102116102117102118102119102120102121102122102123102124102125102126102127102128102129102130102131102132102133102134102135102136102137102138102139102140102141102142102143102144102145102146102147102148102149102150102151102152102153102154102155102156102157102158102159102160102161102162102163102164102165102166102167102168102169102170102171102172102173102174102175102176102177102178102179102180102181102182102183102184102185102186102187102188102189102190102191102192102193102194102195102196102197102198102199102200102201102202102203102204102205102206102207102208102209102210102211102212102213102214102215102216102217102218102219102220102221102222102223102224102225102226102227102228102229102230102231102232102233102234102235102236102237102238102239102240102241102242102243102244102245102246102247102248102249102250102251102252102253102254102255102256102257102258102259102260102261102262102263102264102265102266102267102268102269102270102271102272102273102274102275102276102277102278102279102280102281102282102283102284102285102286102287102288102289102290102291102292102293102294102295102296102297102298102299102300102301102302102303102304102305102306102307102308102309102310102311102312102313102314102315102316102317102318102319102320102321102322102323102324102325102326102327102328102329102330102331102332102333102334102335102336102337102338102339102340102341102342102343102344102345102346102347102348102349102350102351102352102353102354102355102356102357102358102359102360102361102362102363102364102365102366102367102368102369102370102371102372102373102374102375102376102377102378102379102380102381102382102383102384102385102386102387102388102389102390102391102392102393102394102395102396102397102398102399102400102401102402102403102404102405102406102407102408102409102410102411102412102413102414102415102416102417102418102419102420102421102422102423102424102425102426102427102428102429102430102431102432102433102434102435102436102437102438102439102440102441102442102443102444102445102446102447102448102449102450102451102452102453102454102455102456102457102458102459102460102461102462102463102464102465102466102467102468102469102470102471102472102473102474102475102476102477102478102479102480102481102482102483102484102485102486102487102488102489102490102491102492102493102494102495102496102497102498102499102500102501102502102503102504102505102506102507102508102509102510102511102512102513102514102515102516102517102518102519102520102521102522102523102524102525102526102527102528102529102530102531102532102533102534102535102536102537102538102539102540102541102542102543102544102545102546102547102548102549102550102551102552102553102554102555102556102557102558102559102560102561102562102563102564102565102566102567102568102569102570102571102572102573102574102575102576102577102578102579102580102581102582102583102584102585102586102587102588102589102590102591102592102593102594102595102596102597102598102599102600102601102602102603102604102605102606102607102608102609102610102611102612102613102614102615102616102617102618102619102620102621102622102623102624102625102626102627102628102629102630102631102632102633102634102635102636102637102638102639102640102641102642102643102644102645102646102647102648102649102650102651102652102653102654102655102656102657102658102659102660102661102662102663102664102665102666102667102668102669102670102671102672102673102674102675102676102677102678102679102680102681102682102683102684102685102686102687102688102689102690102691102692102693102694102695102696102697102698102699102700102701102702102703102704102705102706102707102708102709102710102711102712102713102714102715102716102717102718102719102720102721102722102723102724102725102726102727102728102729102730102731102732102733102734102735102736102737102738102739102740102741102742102743102744102745102746102747102748102749102750102751102752102753102754102755102756102757102758102759102760102761102762102763102764102765102766102767102768102769102770102771102772102773102774102775102776102777102778102779102780102781102782102783102784102785102786102787102788102789102790102791102792102793102794102795102796102797102798102799102800102801102802102803102804102805102806102807102808102809102810102811102812102813102814102815102816102817102818102819102820102821102822102823102824102825102826102827102828102829102830102831102832102833102834102835102836102837102838102839102840102841102842102843102844102845102846102847102848102849102850102851102852102853102854102855102856102857102858102859102860102861102862102863102864102865102866102867102868102869102870102871102872102873102874102875102876102877102878102879102880102881102882102883102884102885102886102887102888102889102890102891102892102893102894102895102896102897102898102899102900102901102902102903102904102905102906102907102908102909102910102911102912102913102914102915102916102917102918102919102920102921102922102923102924102925102926102927102928102929102930102931102932102933102934102935102936102937102938102939102940102941102942102943102944102945102946102947102948102949102950102951102952102953102954102955102956102957102958102959102960102961102962102963102964102965102966102967102968102969102970102971102972102973102974102975102976102977102978102979102980102981102982102983102984102985102986102987102988102989102990102991102992102993102994102995102996102997102998102999103000103001103002103003103004103005103006103007103008103009103010103011103012103013103014103015103016103017103018103019103020103021103022103023103024103025103026103027103028103029103030103031103032103033103034103035103036103037103038103039103040103041103042103043103044103045103046103047103048103049103050103051103052103053103054103055103056103057103058103059103060103061103062103063103064103065103066103067103068103069103070103071103072103073103074103075103076103077103078103079103080103081103082103083103084103085103086103087103088103089103090103091103092103093103094103095103096103097103098103099103100103101103102103103103104103105103106103107103108103109103110103111103112103113103114103115103116103117103118103119103120103121103122103123103124103125103126103127103128103129103130103131103132103133103134103135103136103137103138103139103140103141103142103143103144103145103146103147103148103149103150103151103152103153103154103155103156103157103158103159103160103161103162103163103164103165103166103167103168103169103170103171103172103173103174103175103176103177103178103179103180103181103182103183103184103185103186103187103188103189103190103191103192103193103194103195103196103197103198103199103200103201103202103203103204103205103206103207103208103209103210103211103212103213103214103215103216103217103218103219103220103221103222103223103224103225103226103227103228103229103230103231103232103233103234103235103236103237103238103239103240103241103242103243103244103245103246103247103248103249103250103251103252103253103254103255103256103257103258103259103260103261103262103263103264103265103266103267103268103269103270103271103272103273103274103275103276103277103278103279103280103281103282103283103284103285103286103287103288103289103290103291103292103293103294103295103296103297103298103299103300103301103302103303103304103305103306103307103308103309103310103311103312103313103314103315103316103317103318103319103320103321103322103323103324103325103326103327103328103329103330103331103332103333103334103335103336103337103338103339103340103341103342103343103344103345103346103347103348103349103350103351103352103353103354103355103356103357103358103359103360103361103362103363103364103365103366103367103368103369103370103371103372103373103374103375103376103377103378103379103380103381103382103383103384103385103386103387103388103389103390103391103392103393103394103395103396103397103398103399103400103401103402103403103404103405103406103407103408103409103410103411103412103413103414103415103416103417103418103419103420103421103422103423103424103425103426103427103428103429103430103431103432103433103434103435103436103437103438103439103440103441103442103443103444103445103446103447103448103449103450103451103452103453103454103455103456103457103458103459103460103461103462103463103464103465103466103467103468103469103470103471103472103473103474103475103476103477103478103479103480103481103482103483103484103485103486103487103488103489103490103491103492103493103494103495103496103497103498103499103500103501103502103503103504103505103506103507103508103509103510103511103512103513103514103515103516103517103518103519103520103521103522103523103524103525103526103527103528103529103530103531103532103533103534103535103536103537103538103539103540103541103542103543103544103545103546103547103548103549103550103551103552103553103554103555103556103557103558103559103560103561103562103563103564103565103566103567103568103569103570103571103572103573103574103575103576103577103578103579103580103581103582103583103584103585103586103587103588103589103590103591103592103593103594103595103596103597103598103599103600103601103602103603103604103605103606103607103608103609103610103611103612103613103614103615103616103617103618103619103620103621103622103623103624103625103626103627103628103629103630103631103632103633103634103635103636103637103638103639103640103641103642103643103644103645103646103647103648103649103650103651103652103653103654103655103656103657103658103659103660103661103662103663103664103665103666103667103668103669103670103671103672103673103674103675103676103677103678103679103680103681103682103683103684103685103686103687103688103689103690103691103692103693103694103695103696103697103698103699103700103701103702103703103704103705103706103707103708103709103710103711103712103713103714103715103716103717103718103719103720103721103722103723103724103725103726103727103728103729103730103731103732103733103734103735103736103737103738103739103740103741103742103743103744103745103746103747103748103749103750103751103752103753103754103755103756103757103758103759103760103761103762103763103764103765103766103767103768103769103770103771103772103773103774103775103776103777103778103779103780103781103782103783103784103785103786103787103788103789103790103791103792103793103794103795103796103797103798103799103800103801103802103803103804103805103806103807103808103809103810103811103812103813103814103815103816103817103818103819103820103821103822103823103824103825103826103827103828103829103830103831103832103833103834103835103836103837103838103839103840103841103842103843103844103845103846103847103848103849103850103851103852103853103854103855103856103857103858103859103860103861103862103863103864103865103866103867103868103869103870103871103872103873103874103875103876103877103878103879103880103881103882103883103884103885103886103887103888103889103890103891103892103893103894103895103896103897103898103899103900103901103902103903103904103905103906103907103908103909103910103911103912103913103914103915103916103917103918103919103920103921103922103923103924103925103926103927103928103929103930103931103932103933103934103935103936103937103938103939103940103941103942103943103944103945103946103947103948103949103950103951103952103953103954103955103956103957103958103959103960103961103962103963103964103965103966103967103968103969103970103971103972103973103974103975103976103977103978103979103980103981103982103983103984103985103986103987103988103989103990103991103992103993103994103995103996103997103998103999104000104001104002104003104004104005104006104007104008104009104010104011104012104013104014104015104016104017104018104019104020104021104022104023104024104025104026104027104028104029104030104031104032104033104034104035104036104037104038104039104040104041104042104043104044104045104046104047104048104049104050104051104052104053104054104055104056104057104058104059104060104061104062104063104064104065104066104067104068104069104070104071104072104073104074104075104076104077104078104079104080104081104082104083104084104085104086104087104088104089104090104091104092104093104094104095104096104097104098104099104100104101104102104103104104104105104106104107104108104109104110104111104112104113104114104115104116104117104118104119104120104121104122104123104124104125104126104127104128104129104130104131104132104133104134104135104136104137104138104139104140104141104142104143104144104145104146104147104148104149104150104151104152104153104154104155104156104157104158104159104160104161104162104163104164104165104166104167104168104169104170104171104172104173104174104175104176104177104178104179104180104181104182104183104184104185104186104187104188104189104190104191104192104193104194104195104196104197104198104199104200104201104202104203104204104205104206104207104208104209104210104211104212104213104214104215104216104217104218104219104220104221104222104223104224104225104226104227104228104229104230104231104232104233104234104235104236104237104238104239104240104241104242104243104244104245104246104247104248104249104250104251104252104253104254104255104256104257104258104259104260104261104262104263104264104265104266104267104268104269104270104271104272104273104274104275104276104277104278104279104280104281104282104283104284104285104286104287104288104289104290104291104292104293104294104295104296104297104298104299104300104301104302104303104304104305104306104307104308104309104310104311104312104313104314104315104316104317104318104319104320104321104322104323104324104325104326104327104328104329104330104331104332104333104334104335104336104337104338104339104340104341104342104343104344104345104346104347104348104349104350104351104352104353104354104355104356104357104358104359104360104361104362104363104364104365104366104367104368104369104370104371104372104373104374104375104376104377104378104379104380104381104382104383104384104385104386104387104388104389104390104391104392104393104394104395104396104397104398104399104400104401104402104403104404104405104406104407104408104409104410104411104412104413104414104415104416104417104418104419104420104421104422104423104424104425104426104427104428104429104430104431104432104433104434104435104436104437104438104439104440104441104442104443104444104445104446104447104448104449104450104451104452104453104454104455104456104457104458104459104460104461104462104463104464104465104466104467104468104469104470104471104472104473104474104475104476104477104478104479104480104481104482104483104484104485104486104487104488104489104490104491104492104493104494104495104496104497104498104499104500104501104502104503104504104505104506104507104508104509104510104511104512104513104514104515104516104517104518104519104520104521104522104523104524104525104526104527104528104529104530104531104532104533104534104535104536104537104538104539104540104541104542104543104544104545104546104547104548104549104550104551104552104553104554104555104556104557104558104559104560104561104562104563104564104565104566104567104568104569104570104571104572104573104574104575104576104577104578104579104580104581104582104583104584104585104586104587104588104589104590104591104592104593104594104595104596104597104598104599104600104601104602104603104604104605104606104607104608104609104610104611104612104613104614104615104616104617104618104619104620104621104622104623104624104625104626104627104628104629104630104631104632104633104634104635104636104637104638104639104640104641104642104643104644104645104646104647104648104649104650104651104652104653104654104655104656104657104658104659104660104661104662104663104664104665104666104667104668104669104670104671104672104673104674104675104676104677104678104679104680104681104682104683104684104685104686104687104688104689104690104691104692104693104694104695104696104697104698104699104700104701104702104703104704104705104706104707104708104709104710104711104712104713104714104715104716104717104718104719104720104721104722104723104724104725104726104727104728104729104730104731104732104733104734104735104736104737104738104739104740104741104742104743104744104745104746104747104748104749104750104751104752104753104754104755104756104757104758104759104760104761104762104763104764104765104766104767104768104769104770104771104772104773104774104775104776104777104778104779104780104781104782104783104784104785104786104787104788104789104790104791104792104793104794104795104796104797104798104799104800104801104802104803104804104805104806104807104808104809104810104811104812104813104814104815104816104817104818104819104820104821104822104823104824104825104826104827104828104829104830104831104832104833104834104835104836104837104838104839104840104841104842104843104844104845104846104847104848104849104850104851104852104853104854104855104856104857104858104859104860104861104862104863104864104865104866104867104868104869104870104871104872104873104874104875104876104877104878104879104880104881104882104883104884104885104886104887104888104889104890104891104892104893104894104895104896104897104898104899104900104901104902104903104904104905104906104907104908104909104910104911104912104913104914104915104916104917104918104919104920104921104922104923104924104925104926104927104928104929104930104931104932104933104934104935104936104937104938104939104940104941104942104943104944104945104946104947104948104949104950104951104952104953104954104955104956104957104958104959104960104961104962104963104964104965104966104967104968104969104970104971104972104973104974104975104976104977104978104979104980104981104982104983104984104985104986104987104988104989104990104991104992104993104994104995104996104997104998104999105000105001105002105003105004105005105006105007105008105009105010105011105012105013105014105015105016105017105018105019105020105021105022105023105024105025105026105027105028105029105030105031105032105033105034105035105036105037105038105039105040105041105042105043105044105045105046105047105048105049105050105051105052105053105054105055105056105057105058105059105060105061105062105063105064105065105066105067105068105069105070105071105072105073105074105075105076105077105078105079105080105081105082105083105084105085105086105087105088105089105090105091105092105093105094105095105096105097105098105099105100105101105102105103105104105105105106105107105108105109105110105111105112105113105114105115105116105117105118105119105120105121105122105123105124105125105126105127105128105129105130105131105132105133105134105135105136105137105138105139105140105141105142105143105144105145105146105147105148105149105150105151105152105153105154105155105156105157105158105159105160105161105162105163105164105165105166105167105168105169105170105171105172105173105174105175105176105177105178105179105180105181105182105183105184105185105186105187105188105189105190105191105192105193105194105195105196105197105198105199105200105201105202105203105204105205105206105207105208105209105210105211105212105213105214105215105216105217105218105219105220105221105222105223105224105225105226105227105228105229105230105231105232105233105234105235105236105237105238105239105240105241105242105243105244105245105246105247105248105249105250105251105252105253105254105255105256105257105258105259105260105261105262105263105264105265105266105267105268105269105270105271105272105273105274105275105276105277105278105279105280105281105282105283105284105285105286105287105288105289105290105291105292105293105294105295105296105297105298105299105300105301105302105303105304105305105306105307105308105309105310105311105312105313105314105315105316105317105318105319105320105321105322105323105324105325105326105327105328105329105330105331105332105333105334105335105336105337105338105339105340105341105342105343105344105345105346105347105348105349105350105351105352105353105354105355105356105357105358105359105360105361105362105363105364105365105366105367105368105369105370105371105372105373105374105375105376105377105378105379105380105381105382105383105384105385105386105387105388105389105390105391105392105393105394105395105396105397105398105399105400105401105402105403105404105405105406105407105408105409105410105411105412105413105414105415105416105417105418105419105420105421105422105423105424105425105426105427105428105429105430105431105432105433105434105435105436105437105438105439105440105441105442105443105444105445105446105447105448105449105450105451105452105453105454105455105456105457105458105459105460105461105462105463105464105465105466105467105468105469105470105471105472105473105474105475105476105477105478105479105480105481105482105483105484105485105486105487105488105489105490105491105492105493105494105495105496105497105498105499105500105501105502105503105504105505105506105507105508105509105510105511105512105513105514105515105516105517105518105519105520105521105522105523105524105525105526105527105528105529105530105531105532105533105534105535105536105537105538105539105540105541105542105543105544105545105546105547105548105549105550105551105552105553105554105555105556105557105558105559105560105561105562105563105564105565105566105567105568105569105570105571105572105573105574105575105576105577105578105579105580105581105582105583105584105585105586105587105588105589105590105591105592105593105594105595105596105597105598105599105600105601105602105603105604105605105606105607105608105609105610105611105612105613105614105615105616105617105618105619105620105621105622105623105624105625105626105627105628105629105630105631105632105633105634105635105636105637105638105639105640105641105642105643105644105645105646105647105648105649105650105651105652105653105654105655105656105657105658105659105660105661105662105663105664105665105666105667105668105669105670105671105672105673105674105675105676105677105678105679105680105681105682105683105684105685105686105687105688105689105690105691105692105693105694105695105696105697105698105699105700105701105702105703105704105705105706105707105708105709105710105711105712105713105714105715105716105717105718105719105720105721105722105723105724105725105726105727105728105729105730105731105732105733105734105735105736105737105738105739105740105741105742105743105744105745105746105747105748105749105750105751105752105753105754105755105756105757105758105759105760105761105762105763105764105765105766105767105768105769105770105771105772105773105774105775105776105777105778105779105780105781105782105783105784105785105786105787105788105789105790105791105792105793105794105795105796105797105798105799105800105801105802105803105804105805105806105807105808105809105810105811105812105813105814105815105816105817105818105819105820105821105822105823105824105825105826105827105828105829105830105831105832105833105834105835105836105837105838105839105840105841105842105843105844105845105846105847105848105849105850105851105852105853105854105855105856105857105858105859105860105861105862105863105864105865105866105867105868105869105870105871105872105873105874105875105876105877105878105879105880105881105882105883105884105885105886105887105888105889105890105891105892105893105894105895105896105897105898105899105900105901105902105903105904105905105906105907105908105909105910105911105912105913105914105915105916105917105918105919105920105921105922105923105924105925105926105927105928105929105930105931105932105933105934105935105936105937105938105939105940105941105942105943105944105945105946105947105948105949105950105951105952105953105954105955105956105957105958105959105960105961105962105963105964105965105966105967105968105969105970105971105972105973105974105975105976105977105978105979105980105981105982105983105984105985105986105987105988105989105990105991105992105993105994105995105996105997105998105999106000106001106002106003106004106005106006106007106008106009106010106011106012106013106014106015106016106017106018106019106020106021106022106023106024106025106026106027106028106029106030106031106032106033106034106035106036106037106038106039106040106041106042106043106044106045106046106047106048106049106050106051106052106053106054106055106056106057106058106059106060106061106062106063106064106065106066106067106068106069106070106071106072106073106074106075106076106077106078106079106080106081106082106083106084106085106086106087106088106089106090106091106092106093106094106095106096106097106098106099106100106101106102106103106104106105106106106107106108106109106110106111106112106113106114106115106116106117106118106119106120106121106122106123106124106125106126106127106128106129106130106131106132106133106134106135106136106137106138106139106140106141106142106143106144106145106146106147106148106149106150106151106152106153106154106155106156106157106158106159106160106161106162106163106164106165106166106167106168106169106170106171106172106173106174106175106176106177106178106179106180106181106182106183106184106185106186106187106188106189106190106191106192106193106194106195106196106197106198106199106200106201106202106203106204106205106206106207106208106209106210106211106212106213106214106215106216106217106218106219106220106221106222106223106224106225106226106227106228106229106230106231106232106233106234106235106236106237106238106239106240106241106242106243106244106245106246106247106248106249106250106251106252106253106254106255106256106257106258106259106260106261106262106263106264106265106266106267106268106269106270106271106272106273106274106275106276106277106278106279106280106281106282106283106284106285106286106287106288106289106290106291106292106293106294106295106296106297106298106299106300106301106302106303106304106305106306106307106308106309106310106311106312106313106314106315106316106317106318106319106320106321106322106323106324106325106326106327106328106329106330106331106332106333106334106335106336106337106338106339106340106341106342106343106344106345106346106347106348106349106350106351106352106353106354106355106356106357106358106359106360106361106362106363106364106365106366106367106368106369106370106371106372106373106374106375106376106377106378106379106380106381106382106383106384106385106386106387106388106389106390106391106392106393106394106395106396106397106398106399106400106401106402106403106404106405106406106407106408106409106410106411106412106413106414106415106416106417106418106419106420106421106422106423106424106425106426106427106428106429106430106431106432106433106434106435106436106437106438106439106440106441106442106443106444106445106446106447106448106449106450106451106452106453106454106455106456106457106458106459106460106461106462106463106464106465106466106467106468106469106470106471106472106473106474106475106476106477106478106479106480106481106482106483106484106485106486106487106488106489106490106491106492106493106494106495106496106497106498106499106500106501106502106503106504106505106506106507106508106509106510106511106512106513106514106515106516106517106518106519106520106521106522106523106524106525106526106527106528106529106530106531106532106533106534106535106536106537106538106539106540106541106542106543106544106545106546106547106548106549106550106551106552106553106554106555106556106557106558106559106560106561106562106563106564106565106566106567106568106569106570106571106572106573106574106575106576106577106578106579106580106581106582106583106584106585106586106587106588106589106590106591106592106593106594106595106596106597106598106599106600106601106602106603106604106605106606106607106608106609106610106611106612106613106614106615106616106617106618106619106620106621106622106623106624106625106626106627106628106629106630106631106632106633106634106635106636106637106638106639106640106641106642106643106644106645106646106647106648106649106650106651106652106653106654106655106656106657106658106659106660106661106662106663106664106665106666106667106668106669106670106671106672106673106674106675106676106677106678106679106680106681106682106683106684106685106686106687106688106689106690106691106692106693106694106695106696106697106698106699106700106701106702106703106704106705106706106707106708106709106710106711106712106713106714106715106716106717106718106719106720106721106722106723106724106725106726106727106728106729106730106731106732106733106734106735106736106737106738106739106740106741106742106743106744106745106746106747106748106749106750106751106752106753106754106755106756106757106758106759106760106761106762106763106764106765106766106767106768106769106770106771106772106773106774106775106776106777106778106779106780106781106782106783106784106785106786106787106788106789106790106791106792106793106794106795106796106797106798106799106800106801106802106803106804106805106806106807106808106809106810106811106812106813106814106815106816106817106818106819106820106821106822106823106824106825106826106827106828106829106830106831106832106833106834106835106836106837106838106839106840106841106842106843106844106845106846106847106848106849106850106851106852106853106854106855106856106857106858106859106860106861106862106863106864106865106866106867106868106869106870106871106872106873106874106875106876106877106878106879106880106881106882106883106884106885106886106887106888106889106890106891106892106893106894106895106896106897106898106899106900106901106902106903106904106905106906106907106908106909106910106911106912106913106914106915106916106917106918106919106920106921106922106923106924106925106926106927106928106929106930106931106932106933106934106935106936106937106938106939106940106941106942106943106944106945106946106947106948106949106950106951106952106953106954106955106956106957106958106959106960106961106962106963106964106965106966106967106968106969106970106971106972106973106974106975106976106977106978106979106980106981106982106983106984106985106986106987106988106989106990106991106992106993106994106995106996106997106998106999107000107001107002107003107004107005107006107007107008107009107010107011107012107013107014107015107016107017107018107019107020107021107022107023107024107025107026107027107028107029107030107031107032107033107034107035107036107037107038107039107040107041107042107043107044107045107046107047107048107049107050107051107052107053107054107055107056107057107058107059107060107061107062107063107064107065107066107067107068107069107070107071107072107073107074107075107076107077107078107079107080107081107082107083107084107085107086107087107088107089107090107091107092107093107094107095107096107097107098107099107100107101107102107103107104107105107106107107107108107109107110107111107112107113107114107115107116107117107118107119107120107121107122107123107124107125107126107127107128107129107130107131107132107133107134107135107136107137107138107139107140107141107142107143107144107145107146107147107148107149107150107151107152107153107154107155107156107157107158107159107160107161107162107163107164107165107166107167107168107169107170107171107172107173107174107175107176107177107178107179107180107181107182107183107184107185107186107187107188107189107190107191107192107193107194107195107196107197107198107199107200107201107202107203107204107205107206107207107208107209107210107211107212107213107214107215107216107217107218107219107220107221107222107223107224107225107226107227107228107229107230107231107232107233107234107235107236107237107238107239107240107241107242107243107244107245107246107247107248107249107250107251107252107253107254107255107256107257107258107259107260107261107262107263107264107265107266107267107268107269107270107271107272107273107274107275107276107277107278107279107280107281107282107283107284107285107286107287107288107289107290107291107292107293107294107295107296107297107298107299107300107301107302107303107304107305107306107307107308107309107310107311107312107313107314107315107316107317107318107319107320107321107322107323107324107325107326107327107328107329107330107331107332107333107334107335107336107337107338107339107340107341107342107343107344107345107346107347107348107349107350107351107352107353107354107355107356107357107358107359107360107361107362107363107364107365107366107367107368107369107370107371107372107373107374107375107376107377107378107379107380107381107382107383107384107385107386107387107388107389107390107391107392107393107394107395107396107397107398107399107400107401107402107403107404107405107406107407107408107409107410107411107412107413107414107415107416107417107418107419107420107421107422107423107424107425107426107427107428107429107430107431107432107433107434107435107436107437107438107439107440107441107442107443107444107445107446107447107448107449107450107451107452107453107454107455107456107457107458107459107460107461107462107463107464107465107466107467107468107469107470107471107472107473107474107475107476107477107478107479107480107481107482107483107484107485107486107487107488107489107490107491107492107493107494107495107496107497107498107499107500107501107502107503107504107505107506107507107508107509107510107511107512107513107514107515107516107517107518107519107520107521107522107523107524107525107526107527107528107529107530107531107532107533107534107535107536107537107538107539107540107541107542107543107544107545107546107547107548107549107550107551107552107553107554107555107556107557107558107559107560107561107562107563107564107565107566107567107568107569107570107571107572107573107574107575107576107577107578107579107580107581107582107583107584107585107586107587107588107589107590107591107592107593107594107595107596107597107598107599107600107601107602107603107604107605107606107607107608107609107610107611107612107613107614107615107616107617107618107619107620107621107622107623107624107625107626107627107628107629107630107631107632107633107634107635107636107637107638107639107640107641107642107643107644107645107646107647107648107649107650107651107652107653107654107655107656107657107658107659107660107661107662107663107664107665107666107667107668107669107670107671107672107673107674107675107676107677107678107679107680107681107682107683107684107685107686107687107688107689107690107691107692107693107694107695107696107697107698107699107700107701107702107703107704107705107706107707107708107709107710107711107712107713107714107715107716107717107718107719107720107721107722107723107724107725107726107727107728107729107730107731107732107733107734107735107736107737107738107739107740107741107742107743107744107745107746107747107748107749107750107751107752107753107754107755107756107757107758107759107760107761107762107763107764107765107766107767107768107769107770107771107772107773107774107775107776107777107778107779107780107781107782107783107784107785107786107787107788107789107790107791107792107793107794107795107796107797107798107799107800107801107802107803107804107805107806107807107808107809107810107811107812107813107814107815107816107817107818107819107820107821107822107823107824107825107826107827107828107829107830107831107832107833107834107835107836107837107838107839107840107841107842107843107844107845107846107847107848107849107850107851107852107853107854107855107856107857107858107859107860107861107862107863107864107865107866107867107868107869107870107871107872107873107874107875107876107877107878107879107880107881107882107883107884107885107886107887107888107889107890107891107892107893107894107895107896107897107898107899107900107901107902107903107904107905107906107907107908107909107910107911107912107913107914107915107916107917107918107919107920107921107922107923107924107925107926107927107928107929107930107931107932107933107934107935107936107937107938107939107940107941107942107943107944107945107946107947107948107949107950107951107952107953107954107955107956107957107958107959107960107961107962107963107964107965107966107967107968107969107970107971107972107973107974107975107976107977107978107979107980107981107982107983107984107985107986107987107988107989107990107991107992107993107994107995107996107997107998107999108000108001108002108003108004108005108006108007108008108009108010108011108012108013108014108015108016108017108018108019108020108021108022108023108024108025108026108027108028108029108030108031108032108033108034108035108036108037108038108039108040108041108042108043108044108045108046108047108048108049108050108051108052108053108054108055108056108057108058108059108060108061108062108063108064108065108066108067108068108069108070108071108072108073108074108075108076108077108078108079108080108081108082108083108084108085108086108087108088108089108090108091108092108093108094108095108096108097108098108099108100108101108102108103108104108105108106108107108108108109108110108111108112108113108114108115108116108117108118108119108120108121108122108123108124108125108126108127108128108129108130108131108132108133108134108135108136108137108138108139108140108141108142108143108144108145108146108147108148108149108150108151108152108153108154108155108156108157108158108159108160108161108162108163108164108165108166108167108168108169108170108171108172108173108174108175108176108177108178108179108180108181108182108183108184108185108186108187108188108189108190108191108192108193108194108195108196108197108198108199108200108201108202108203108204108205108206108207108208108209108210108211108212108213108214108215108216108217108218108219108220108221108222108223108224108225108226108227108228108229108230108231108232108233108234108235108236108237108238108239108240108241108242108243108244108245108246108247108248108249108250108251108252108253108254108255108256108257108258108259108260108261108262108263108264108265108266108267108268108269108270108271108272108273108274108275108276108277108278108279108280108281108282108283108284108285108286108287108288108289108290108291108292108293108294108295108296108297108298108299108300108301108302108303108304108305108306108307108308108309108310108311108312108313108314108315108316108317108318108319108320108321108322108323108324108325108326108327108328108329108330108331108332108333108334108335108336108337108338108339108340108341108342108343108344108345108346108347108348108349108350108351108352108353108354108355108356108357108358108359108360108361108362108363108364108365108366108367108368108369108370108371108372108373108374108375108376108377108378108379108380108381108382108383108384108385108386108387108388108389108390108391108392108393108394108395108396108397108398108399108400108401108402108403108404108405108406108407108408108409108410108411108412108413108414108415108416108417108418108419108420108421108422108423108424108425108426108427108428108429108430108431108432108433108434108435108436108437108438108439108440108441108442108443108444108445108446108447108448108449108450108451108452108453108454108455108456108457108458108459108460108461108462108463108464108465108466108467108468108469108470108471108472108473108474108475108476108477108478108479108480108481108482108483108484108485108486108487108488108489108490108491108492108493108494108495108496108497108498108499108500108501108502108503108504108505108506108507108508108509108510108511108512108513108514108515108516108517108518108519108520108521108522108523108524108525108526108527108528108529108530108531108532108533108534108535108536108537108538108539108540108541108542108543108544108545108546108547108548108549108550108551108552108553108554108555108556108557108558108559108560108561108562108563108564108565108566108567108568108569108570108571108572108573108574108575108576108577108578108579108580108581108582108583108584108585108586108587108588108589108590108591108592108593108594108595108596108597108598108599108600108601108602108603108604108605108606108607108608108609108610108611108612108613108614108615108616108617108618108619108620108621108622108623108624108625108626108627108628108629108630108631108632108633108634108635108636108637108638108639108640108641108642108643108644108645108646108647108648108649108650108651108652108653108654108655108656108657108658108659108660108661108662108663108664108665108666108667108668108669108670108671108672108673108674108675108676108677108678108679108680108681108682108683108684108685108686108687108688108689108690108691108692108693108694108695108696108697108698108699108700108701108702108703108704108705108706108707108708108709108710108711108712108713108714108715108716108717108718108719108720108721108722108723108724108725108726108727108728108729108730108731108732108733108734108735108736108737108738108739108740108741108742108743108744108745108746108747108748108749108750108751108752108753108754108755108756108757108758108759108760108761108762108763108764108765108766108767108768108769108770108771108772108773108774108775108776108777108778108779108780108781108782108783108784108785108786108787108788108789108790108791108792108793108794108795108796108797108798108799108800108801108802108803108804108805108806108807108808108809108810108811108812108813108814108815108816108817108818108819108820108821108822108823108824108825108826108827108828108829108830108831108832108833108834108835108836108837108838108839108840108841108842108843108844108845108846108847108848108849108850108851108852108853108854108855108856108857108858108859108860108861108862108863108864108865108866108867108868108869108870108871108872108873108874108875108876108877108878108879108880108881108882108883108884108885108886108887108888108889108890108891108892108893108894108895108896108897108898108899108900108901108902108903108904108905108906108907108908108909108910108911108912108913108914108915108916108917108918108919108920108921108922108923108924108925108926108927108928108929108930108931108932108933108934108935108936108937108938108939108940108941108942108943108944108945108946108947108948108949108950108951108952108953108954108955108956108957108958108959108960108961108962108963108964108965108966108967108968108969108970108971108972108973108974108975108976108977108978108979108980108981108982108983108984108985108986108987108988108989108990108991108992108993108994108995108996108997108998108999109000109001109002109003109004109005109006109007109008109009109010109011109012109013109014109015109016109017109018109019109020109021109022109023109024109025109026109027109028109029109030109031109032109033109034109035109036109037109038109039109040109041109042109043109044109045109046109047109048109049109050109051109052109053109054109055109056109057109058109059109060109061109062109063109064109065109066109067109068109069109070109071109072109073109074109075109076109077109078109079109080109081109082109083109084109085109086109087109088109089109090109091109092109093109094109095109096109097109098109099109100109101109102109103109104109105109106109107109108109109109110109111109112109113109114109115109116109117109118109119109120109121109122109123109124109125109126109127109128109129109130109131109132109133109134109135109136109137109138109139109140109141109142109143109144109145109146109147109148109149109150109151109152109153109154109155109156109157109158109159109160109161109162109163109164109165109166109167109168109169109170109171109172109173109174109175109176109177109178109179109180109181109182109183109184109185109186109187109188109189109190109191109192109193109194109195109196109197109198109199109200109201109202109203109204109205109206109207109208109209109210109211109212109213109214109215109216109217109218109219109220109221109222109223109224109225109226109227109228109229109230109231109232109233109234109235109236109237109238109239109240109241109242109243109244109245109246109247109248109249109250109251109252109253109254109255109256109257109258109259109260109261109262109263109264109265109266109267109268109269109270109271109272109273109274109275109276109277109278109279109280109281109282109283109284109285109286109287109288109289109290109291109292109293109294109295109296109297109298109299109300109301109302109303109304109305109306109307109308109309109310109311109312109313109314109315109316109317109318109319109320109321109322109323109324109325109326109327109328109329109330109331109332109333109334109335109336109337109338109339109340109341109342109343109344109345109346109347109348109349109350109351109352109353109354109355109356109357109358109359109360109361109362109363109364109365109366109367109368109369109370109371109372109373109374109375109376109377109378109379109380109381109382109383109384109385109386109387109388109389109390109391109392109393109394109395109396109397109398109399109400109401109402109403109404109405109406109407109408109409109410109411109412109413109414109415109416109417109418109419109420109421109422109423109424109425109426109427109428109429109430109431109432109433109434109435109436109437109438109439109440109441109442109443109444109445109446109447109448109449109450109451109452109453109454109455109456109457109458109459109460109461109462109463109464109465109466109467109468109469109470109471109472109473109474109475109476109477109478109479109480109481109482109483109484109485109486109487109488109489109490109491109492109493109494109495109496109497109498109499109500109501109502109503109504109505109506109507109508109509109510109511109512109513109514109515109516109517109518109519109520109521109522109523109524109525109526109527109528109529109530109531109532109533109534109535109536109537109538109539109540109541109542109543109544109545109546109547109548109549109550109551109552109553109554109555109556109557109558109559109560109561109562109563109564109565109566109567109568109569109570109571109572109573109574109575109576109577109578109579109580109581109582109583109584109585109586109587109588109589109590109591109592109593109594109595109596109597109598109599109600109601109602109603109604109605109606109607109608109609109610109611109612109613109614109615109616109617109618109619109620109621109622109623109624109625109626109627109628109629109630109631109632109633109634109635109636109637109638109639109640109641109642109643109644109645109646109647109648109649109650109651109652109653109654109655109656109657109658109659109660109661109662109663109664109665109666109667109668109669109670109671109672109673109674109675109676109677109678109679109680109681109682109683109684109685109686109687109688109689109690109691109692109693109694109695109696109697109698109699109700109701109702109703109704109705109706109707109708109709109710109711109712109713109714109715109716109717109718109719109720109721109722109723109724109725109726109727109728109729109730109731109732109733109734109735109736109737109738109739109740109741109742109743109744109745109746109747109748109749109750109751109752109753109754109755109756109757109758109759109760109761109762109763109764109765109766109767109768109769109770109771109772109773109774109775109776109777109778109779109780109781109782109783109784109785109786109787109788109789109790109791109792109793109794109795109796109797109798109799109800109801109802109803109804109805109806109807109808109809109810109811109812109813109814109815109816109817109818109819109820109821109822109823109824109825109826109827109828109829109830109831109832109833109834109835109836109837109838109839109840109841109842109843109844109845109846109847109848109849109850109851109852109853109854109855109856109857109858109859109860109861109862109863109864109865109866109867109868109869109870109871109872109873109874109875109876109877109878109879109880109881109882109883109884109885109886109887109888109889109890109891109892109893109894109895109896109897109898109899109900109901109902109903109904109905109906109907109908109909109910109911109912109913109914109915109916109917109918109919109920109921109922109923109924109925109926109927109928109929109930109931109932109933109934109935109936109937109938109939109940109941109942109943109944109945109946109947109948109949109950109951109952109953109954109955109956109957109958109959109960109961109962109963109964109965109966109967109968109969109970109971109972109973109974109975109976109977109978109979109980109981109982109983109984109985109986109987109988109989109990109991109992109993109994109995109996109997109998109999110000110001110002110003110004110005110006110007110008110009110010110011110012110013110014110015110016110017110018110019110020110021110022110023110024110025110026110027110028110029110030110031110032110033110034110035110036110037110038110039110040110041110042110043110044110045110046110047110048110049110050110051110052110053110054110055110056110057110058110059110060110061110062110063110064110065110066110067110068110069110070110071110072110073110074110075110076110077110078110079110080110081110082110083110084110085110086110087110088110089110090110091110092110093110094110095110096110097110098110099110100110101110102110103110104110105110106110107110108110109110110110111110112110113110114110115110116110117110118110119110120110121110122110123110124110125110126110127110128110129110130110131110132110133110134110135110136110137110138110139110140110141110142110143110144110145110146110147110148110149110150110151110152110153110154110155110156110157110158110159110160110161110162110163110164110165110166110167110168110169110170110171110172110173110174110175110176110177110178110179110180110181110182110183110184110185110186110187110188110189110190110191110192110193110194110195110196110197110198110199110200110201110202110203110204110205110206110207110208110209110210110211110212110213110214110215110216110217110218110219110220110221110222110223110224110225110226110227110228110229110230110231110232110233110234110235110236110237110238110239110240110241110242110243110244110245110246110247110248110249110250110251110252110253110254110255110256110257110258110259110260110261110262110263110264110265110266110267110268110269110270110271110272110273110274110275110276110277110278110279110280110281110282110283110284110285110286110287110288110289110290110291110292110293110294110295110296110297110298110299110300110301110302110303110304110305110306110307110308110309110310110311110312110313110314110315110316110317110318110319110320110321110322110323110324110325110326110327110328110329110330110331110332110333110334110335110336110337110338110339110340110341110342110343110344110345110346110347110348110349110350110351110352110353110354110355110356110357110358110359110360110361110362110363110364110365110366110367110368110369110370110371110372110373110374110375110376110377110378110379110380110381110382110383110384110385110386110387110388110389110390110391110392110393110394110395110396110397110398110399110400110401110402110403110404110405110406110407110408110409110410110411110412110413110414110415110416110417110418110419110420110421110422110423110424110425110426110427110428110429110430110431110432110433110434110435110436110437110438110439110440110441110442110443110444110445110446110447110448110449110450110451110452110453110454110455110456110457110458110459110460110461110462110463110464110465110466110467110468110469110470110471110472110473110474110475110476110477110478110479110480110481110482110483110484110485110486110487110488110489110490110491110492110493110494110495110496110497110498110499110500110501110502110503110504110505110506110507110508110509110510110511110512110513110514110515110516110517110518110519110520110521110522110523110524110525110526110527110528110529110530110531110532110533110534110535110536110537110538110539110540110541110542110543110544110545110546110547110548110549110550110551110552110553110554110555110556110557110558110559110560110561110562110563110564110565110566110567110568110569110570110571110572110573110574110575110576110577110578110579110580110581110582110583110584110585110586110587110588110589110590110591110592110593110594110595110596110597110598110599110600110601110602110603110604110605110606110607110608110609110610110611110612110613110614110615110616110617110618110619110620110621110622110623110624110625110626110627110628110629110630110631110632110633110634110635110636110637110638110639110640110641110642110643110644110645110646110647110648110649110650110651110652110653110654110655110656110657110658110659110660110661110662110663110664110665110666110667110668110669110670110671110672110673110674110675110676110677110678110679110680110681110682110683110684110685110686110687110688110689110690110691110692110693110694110695110696110697110698110699110700110701110702110703110704110705110706110707110708110709110710110711110712110713110714110715110716110717110718110719110720110721110722110723110724110725110726110727110728110729110730110731110732110733110734110735110736110737110738110739110740110741110742110743110744110745110746110747110748110749110750110751110752110753110754110755110756110757110758110759110760110761110762110763110764110765110766110767110768110769110770110771110772110773110774110775110776110777110778110779110780110781110782110783110784110785110786110787110788110789110790110791110792110793110794110795110796110797110798110799110800110801110802110803110804110805110806110807110808110809110810110811110812110813110814110815110816110817110818110819110820110821110822110823110824110825110826110827110828110829110830110831110832110833110834110835110836110837110838110839110840110841110842110843110844110845110846110847110848110849110850110851110852110853110854110855110856110857110858110859110860110861110862110863110864110865110866110867110868110869110870110871110872110873110874110875110876110877110878110879110880110881110882110883110884110885110886110887110888110889110890110891110892110893110894110895110896110897110898110899110900110901110902110903110904110905110906110907110908110909110910110911110912110913110914110915110916110917110918110919110920110921110922110923110924110925110926110927110928110929110930110931110932110933110934110935110936110937110938110939110940110941110942110943110944110945110946110947110948110949110950110951110952110953110954110955110956110957110958110959110960110961110962110963110964110965110966110967110968110969110970110971110972110973110974110975110976110977110978110979110980110981110982110983110984110985110986110987110988110989110990110991110992110993110994110995110996110997110998110999111000111001111002111003111004111005111006111007111008111009111010111011111012111013111014111015111016111017111018111019111020111021111022111023111024111025111026111027111028111029111030111031111032111033111034111035111036111037111038111039111040111041111042111043111044111045111046111047111048111049111050111051111052111053111054111055111056111057111058111059111060111061111062111063111064111065111066111067111068111069111070111071111072111073111074111075111076111077111078111079111080111081111082111083111084111085111086111087111088111089111090111091111092111093111094111095111096111097111098111099111100111101111102111103111104111105111106111107111108111109111110111111111112111113111114111115111116111117111118111119111120111121111122111123111124111125111126111127111128111129111130111131111132111133111134111135111136111137111138111139111140111141111142111143111144111145111146111147111148111149111150111151111152111153111154111155111156111157111158111159111160111161111162111163111164111165111166111167111168111169111170111171111172111173111174111175111176111177111178111179111180111181111182111183111184111185111186111187111188111189111190111191111192111193111194111195111196111197111198111199111200111201111202111203111204111205111206111207111208111209111210111211111212111213111214111215111216111217111218111219111220111221111222111223111224111225111226111227111228111229111230111231111232111233111234111235111236111237111238111239111240111241111242111243111244111245111246111247111248111249111250111251111252111253111254111255111256111257111258111259111260111261111262111263111264111265111266111267111268111269111270111271111272111273111274111275111276111277111278111279111280111281111282111283111284111285111286111287111288111289111290111291111292111293111294111295111296111297111298111299111300111301111302111303111304111305111306111307111308111309111310111311111312111313111314111315111316111317111318111319111320111321111322111323111324111325111326111327111328111329111330111331111332111333111334111335111336111337111338111339111340111341111342111343111344111345111346111347111348111349111350111351111352111353111354111355111356111357111358111359111360111361111362111363111364111365111366111367111368111369111370111371111372111373111374111375111376111377111378111379111380111381111382111383111384111385111386111387111388111389111390111391111392111393111394111395111396111397111398111399111400111401111402111403111404111405111406111407111408111409111410111411111412111413111414111415111416111417111418111419111420111421111422111423111424111425111426111427111428111429111430111431111432111433111434111435111436111437111438111439111440111441111442111443111444111445111446111447111448111449111450111451111452111453111454111455111456111457111458111459111460111461111462111463111464111465111466111467111468111469111470111471111472111473111474111475111476111477111478111479111480111481111482111483111484111485111486111487111488111489111490111491111492111493111494111495111496111497111498111499111500111501111502111503111504111505111506111507111508111509111510111511111512111513111514111515111516111517111518111519111520111521111522111523111524111525111526111527111528111529111530111531111532111533111534111535111536111537111538111539111540111541111542111543111544111545111546111547111548111549111550111551111552111553111554111555111556111557111558111559111560111561111562111563111564111565111566111567111568111569111570111571111572111573111574111575111576111577111578111579111580111581111582111583111584111585111586111587111588111589111590111591111592111593111594111595111596111597111598111599111600111601111602111603111604111605111606111607111608111609111610111611111612111613111614111615111616111617111618111619111620111621111622111623111624111625111626111627111628111629111630111631111632111633111634111635111636111637111638111639111640111641111642111643111644111645111646111647111648111649111650111651111652111653111654111655111656111657111658111659111660111661111662111663111664111665111666111667111668111669111670111671111672111673111674111675111676111677111678111679111680111681111682111683111684111685111686111687111688111689111690111691111692111693111694111695111696111697111698111699111700111701111702111703111704111705111706111707111708111709111710111711111712111713111714111715111716111717111718111719111720111721111722111723111724111725111726111727111728111729111730111731111732111733111734111735111736111737111738111739111740111741111742111743111744111745111746111747111748111749111750111751111752111753111754111755111756111757111758111759111760111761111762111763111764111765111766111767111768111769111770111771111772111773111774111775111776111777111778111779111780111781111782111783111784111785111786111787111788111789111790111791111792111793111794111795111796111797111798111799111800111801111802111803111804111805111806111807111808111809111810111811111812111813111814111815111816111817111818111819111820111821111822111823111824111825111826111827111828111829111830111831111832111833111834111835111836111837111838111839111840111841111842111843111844111845111846111847111848111849111850111851111852111853111854111855111856111857111858111859111860111861111862111863111864111865111866111867111868111869111870111871111872111873111874111875111876111877111878111879111880111881111882111883111884111885111886111887111888111889111890111891111892111893111894111895111896111897111898111899111900111901111902111903111904111905111906111907111908111909111910111911111912111913111914111915111916111917111918111919111920111921111922111923111924111925111926111927111928111929111930111931111932111933111934111935111936111937111938111939111940111941111942111943111944111945111946111947111948111949111950111951111952111953111954111955111956111957111958111959111960111961111962111963111964111965111966111967111968111969111970111971111972111973111974111975111976111977111978111979111980111981111982111983111984111985111986111987111988111989111990111991111992111993111994111995111996111997111998111999112000112001112002112003112004112005112006112007112008112009112010112011112012112013112014112015112016112017112018112019112020112021112022112023112024112025112026112027112028112029112030112031112032112033112034112035112036112037112038112039112040112041112042112043112044112045112046112047112048112049112050112051112052112053112054112055112056112057112058112059112060112061112062112063112064112065112066112067112068112069112070112071112072112073112074112075112076112077112078112079112080112081112082112083112084112085112086112087112088112089112090112091112092112093112094112095112096112097112098112099112100112101112102112103112104112105112106112107112108112109112110112111112112112113112114112115112116112117112118112119112120112121112122112123112124112125112126112127112128112129112130112131112132112133112134112135112136112137112138112139112140112141112142112143112144112145112146112147112148112149112150112151112152112153112154112155112156112157112158112159112160112161112162112163112164112165112166112167112168112169112170112171112172112173112174112175112176112177112178112179112180112181112182112183112184112185112186112187112188112189112190112191112192112193112194112195112196112197112198112199112200112201112202112203112204112205112206112207112208112209112210112211112212112213112214112215112216112217112218112219112220112221112222112223112224112225112226112227112228112229112230112231112232112233112234112235112236112237112238112239112240112241112242112243112244112245112246112247112248112249112250112251112252112253112254112255112256112257112258112259112260112261112262112263112264112265112266112267112268112269112270112271112272112273112274112275112276112277112278112279112280112281112282112283112284112285112286112287112288112289112290112291112292112293112294112295112296112297112298112299112300112301112302112303112304112305112306112307112308112309112310112311112312112313112314112315112316112317112318112319112320112321112322112323112324112325112326112327112328112329112330112331112332112333112334112335112336112337112338112339112340112341112342112343112344112345112346112347112348112349112350112351112352112353112354112355112356112357112358112359112360112361112362112363112364112365112366112367112368112369112370112371112372112373112374112375112376112377112378112379112380112381112382112383112384112385112386112387112388112389112390112391112392112393112394112395112396112397112398112399112400112401112402112403112404112405112406112407112408112409112410112411112412112413112414112415112416112417112418112419112420112421112422112423112424112425112426112427112428112429112430112431112432112433112434112435112436112437112438112439112440112441112442112443112444112445112446112447112448112449112450112451112452112453112454112455112456112457112458112459112460112461112462112463112464112465112466112467112468112469112470112471112472112473112474112475112476112477112478112479112480112481112482112483112484112485112486112487112488112489112490112491112492112493112494112495112496112497112498112499112500112501112502112503112504112505112506112507112508112509112510112511112512112513112514112515112516112517112518112519112520112521112522112523112524112525112526112527112528112529112530112531112532112533112534112535112536112537112538112539112540112541112542112543112544112545112546112547112548112549112550112551112552112553112554112555112556112557112558112559112560112561112562112563112564112565112566112567112568112569112570112571112572112573112574112575112576112577112578112579112580112581112582112583112584112585112586112587112588112589112590112591112592112593112594112595112596112597112598112599112600112601112602112603112604112605112606112607112608112609112610112611112612112613112614112615112616112617112618112619112620112621112622112623112624112625112626112627112628112629112630112631112632112633112634112635112636112637112638112639112640112641112642112643112644112645112646112647112648112649112650112651112652112653112654112655112656112657112658112659112660112661112662112663112664112665112666112667112668112669112670112671112672112673112674112675112676112677112678112679112680112681112682112683112684112685112686112687112688112689112690112691112692112693112694112695112696112697112698112699112700112701112702112703112704112705112706112707112708112709112710112711112712112713112714112715112716112717112718112719112720112721112722112723112724112725112726112727112728112729112730112731112732112733112734112735112736112737112738112739112740112741112742112743112744112745112746112747112748112749112750112751112752112753112754112755112756112757112758112759112760112761112762112763112764112765112766112767112768112769112770112771112772112773112774112775112776112777112778112779112780112781112782112783112784112785112786112787112788112789112790112791112792112793112794112795112796112797112798112799112800112801112802112803112804112805112806112807112808112809112810112811112812112813112814112815112816112817112818112819112820112821112822112823112824112825112826112827112828112829112830112831112832112833112834112835112836112837112838112839112840112841112842112843112844112845112846112847112848112849112850112851112852112853112854112855112856112857112858112859112860112861112862112863112864112865112866112867112868112869112870112871112872112873112874112875112876112877112878112879112880112881112882112883112884112885112886112887112888112889112890112891112892112893112894112895112896112897112898112899112900112901112902112903112904112905112906112907112908112909112910112911112912112913112914112915112916112917112918112919112920112921112922112923112924112925112926112927112928112929112930112931112932112933112934112935112936112937112938112939112940112941112942112943112944112945112946112947112948112949112950112951112952112953112954112955112956112957112958112959112960112961112962112963112964112965112966112967112968112969112970112971112972112973112974112975112976112977112978112979112980112981112982112983112984112985112986112987112988112989112990112991112992112993112994112995112996112997112998112999113000113001113002113003113004113005113006113007113008113009113010113011113012113013113014113015113016113017113018113019113020113021113022113023113024113025113026113027113028113029113030113031113032113033113034113035113036113037113038113039113040113041113042113043113044113045113046113047113048113049113050113051113052113053113054113055113056113057113058113059113060113061113062113063113064113065113066113067113068113069113070113071113072113073113074113075113076113077113078113079113080113081113082113083113084113085113086113087113088113089113090113091113092113093113094113095113096113097113098113099113100113101113102113103113104113105113106113107113108113109113110113111113112113113113114113115113116113117113118113119113120113121113122113123113124113125113126113127113128113129113130113131113132113133113134113135113136113137113138113139113140113141113142113143113144113145113146113147113148113149113150113151113152113153113154113155113156113157113158113159113160113161113162113163113164113165113166113167113168113169113170113171113172113173113174113175113176113177113178113179113180113181113182113183113184113185113186113187113188113189113190113191113192113193113194113195113196113197113198113199113200113201113202113203113204113205113206113207113208113209113210113211113212113213113214113215113216113217113218113219113220113221113222113223113224113225113226113227113228113229113230113231113232113233113234113235113236113237113238113239113240113241113242113243113244113245113246113247113248113249113250113251113252113253113254113255113256113257113258113259113260113261113262113263113264113265113266113267113268113269113270113271113272113273113274113275113276113277113278113279113280113281113282113283113284113285113286113287113288113289113290113291113292113293113294113295113296113297113298113299113300113301113302113303113304113305113306113307113308113309113310113311113312113313113314113315113316113317113318113319113320113321113322113323113324113325113326113327113328113329113330113331113332113333113334113335113336113337113338113339113340113341113342113343113344113345113346113347113348113349113350113351113352113353113354113355113356113357113358113359113360113361113362113363113364113365113366113367113368113369113370113371113372113373113374113375113376113377113378113379113380113381113382113383113384113385113386113387113388113389113390113391113392113393113394113395113396113397113398113399113400113401113402113403113404113405113406113407113408113409113410113411113412113413113414113415113416113417113418113419113420113421113422113423113424113425113426113427113428113429113430113431113432113433113434113435113436113437113438113439113440113441113442113443113444113445113446113447113448113449113450113451113452113453113454113455113456113457113458113459113460113461113462113463113464113465113466113467113468113469113470113471113472113473113474113475113476113477113478113479113480113481113482113483113484113485113486113487113488113489113490113491113492113493113494113495113496113497113498113499113500113501113502113503113504113505113506113507113508113509113510113511113512113513113514113515113516113517113518113519113520113521113522113523113524113525113526113527113528113529113530113531113532113533113534113535113536113537113538113539113540113541113542113543113544113545113546113547113548113549113550113551113552113553113554113555113556113557113558113559113560113561113562113563113564113565113566113567113568113569113570113571113572113573113574113575113576113577113578113579113580113581113582113583113584113585113586113587113588113589113590113591113592113593113594113595113596113597113598113599113600113601113602113603113604113605113606113607113608113609113610113611113612113613113614113615113616113617113618113619113620113621113622113623113624113625113626113627113628113629113630113631113632113633113634113635113636113637113638113639113640113641113642113643113644113645113646113647113648113649113650113651113652113653113654113655113656113657113658113659113660113661113662113663113664113665113666113667113668113669113670113671113672113673113674113675113676113677113678113679113680113681113682113683113684113685113686113687113688113689113690113691113692113693113694113695113696113697113698113699113700113701113702113703113704113705113706113707113708113709113710113711113712113713113714113715113716113717113718113719113720113721113722113723113724113725113726113727113728113729113730113731113732113733113734113735113736113737113738113739113740113741113742113743113744113745113746113747113748113749113750113751113752113753113754113755113756113757113758113759113760113761113762113763113764113765113766113767113768113769113770113771113772113773113774113775113776113777113778113779113780113781113782113783113784113785113786113787113788113789113790113791113792113793113794113795113796113797113798113799113800113801113802113803113804113805113806113807113808113809113810113811113812113813113814113815113816113817113818113819113820113821113822113823113824113825113826113827113828113829113830113831113832113833113834113835113836113837113838113839113840113841113842113843113844113845113846113847113848113849113850113851113852113853113854113855113856113857113858113859113860113861113862113863113864113865113866113867113868113869113870113871113872113873113874113875113876113877113878113879113880113881113882113883113884113885113886113887113888113889113890113891113892113893113894113895113896113897113898113899113900113901113902113903113904113905113906113907113908113909113910113911113912113913113914113915113916113917113918113919113920113921113922113923113924113925113926113927113928113929113930113931113932113933113934113935113936113937113938113939113940113941113942113943113944113945113946113947113948113949113950113951113952113953113954113955113956113957113958113959113960113961113962113963113964113965113966113967113968113969113970113971113972113973113974113975113976113977113978113979113980113981113982113983113984113985113986113987113988113989113990113991113992113993113994113995113996113997113998113999114000114001114002114003114004114005114006114007114008114009114010114011114012114013114014114015114016114017114018114019114020114021114022114023114024114025114026114027114028114029114030114031114032114033114034114035114036114037114038114039114040114041114042114043114044114045114046114047114048114049114050114051114052114053114054114055114056114057114058114059114060114061114062114063114064114065114066114067114068114069114070114071114072114073114074114075114076114077114078114079114080114081114082114083114084114085114086114087114088114089114090114091114092114093114094114095114096114097114098114099114100114101114102114103114104114105114106114107114108114109114110114111114112114113114114114115114116114117114118114119114120114121114122114123114124114125114126114127114128114129114130114131114132114133114134114135114136114137114138114139114140114141114142114143114144114145114146114147114148114149114150114151114152114153114154114155114156114157114158114159114160114161114162114163114164114165114166114167114168114169114170114171114172114173114174114175114176114177114178114179114180114181114182114183114184114185114186114187114188114189114190114191114192114193114194114195114196114197114198114199114200114201114202114203114204114205114206114207114208114209114210114211114212114213114214114215114216114217114218114219114220114221114222114223114224114225114226114227114228114229114230114231114232114233114234114235114236114237114238114239114240114241114242114243114244114245114246114247114248114249114250114251114252114253114254114255114256114257114258114259114260114261114262114263114264114265114266114267114268114269114270114271114272114273114274114275114276114277114278114279114280114281114282114283114284114285114286114287114288114289114290114291114292114293114294114295114296114297114298114299114300114301114302114303114304114305114306114307114308114309114310114311114312114313114314114315114316114317114318114319114320114321114322114323114324114325114326114327114328114329114330114331114332114333114334114335114336114337114338114339114340114341114342114343114344114345114346114347114348114349114350114351114352114353114354114355114356114357114358114359114360114361114362114363114364114365114366114367114368114369114370114371114372114373114374114375114376114377114378114379114380114381114382114383114384114385114386114387114388114389114390114391114392114393114394114395114396114397114398114399114400114401114402114403114404114405114406114407114408114409114410114411114412114413114414114415114416114417114418114419114420114421114422114423114424114425114426114427114428114429114430114431114432114433114434114435114436114437114438114439114440114441114442114443114444114445114446114447114448114449114450114451114452114453114454114455114456114457114458114459114460114461114462114463114464114465114466114467114468114469114470114471114472114473114474114475114476114477114478114479114480114481114482114483114484114485114486114487114488114489114490114491114492114493114494114495114496114497114498114499114500114501114502114503114504114505114506114507114508114509114510114511114512114513114514114515114516114517114518114519114520114521114522114523114524114525114526114527114528114529114530114531114532114533114534114535114536114537114538114539114540114541114542114543114544114545114546114547114548114549114550114551114552114553114554114555114556114557114558114559114560114561114562114563114564114565114566114567114568114569114570114571114572114573114574114575114576114577114578114579114580114581114582114583114584114585114586114587114588114589114590114591114592114593114594114595114596114597114598114599114600114601114602114603114604114605114606114607114608114609114610114611114612114613114614114615114616114617114618114619114620114621114622114623114624114625114626114627114628114629114630114631114632114633114634114635114636114637114638114639114640114641114642114643114644114645114646114647114648114649114650114651114652114653114654114655114656114657114658114659114660114661114662114663114664114665114666114667114668114669114670114671114672114673114674114675114676114677114678114679114680114681114682114683114684114685114686114687114688114689114690114691114692114693114694114695114696114697114698114699114700114701114702114703114704114705114706114707114708114709114710114711114712114713114714114715114716114717114718114719114720114721114722114723114724114725114726114727114728114729114730114731114732114733114734114735114736114737114738114739114740114741114742114743114744114745114746114747114748114749114750114751114752114753114754114755114756114757114758114759114760114761114762114763114764114765114766114767114768114769114770114771114772114773114774114775114776114777114778114779114780114781114782114783114784114785114786114787114788114789114790114791114792114793114794114795114796114797114798114799114800114801114802114803114804114805114806114807114808114809114810114811114812114813114814114815114816114817114818114819114820114821114822114823114824114825114826114827114828114829114830114831114832114833114834114835114836114837114838114839114840114841114842114843114844114845114846114847114848114849114850114851114852114853114854114855114856114857114858114859114860114861114862114863114864114865114866114867114868114869114870114871114872114873114874114875114876114877114878114879114880114881114882114883114884114885114886114887114888114889114890114891114892114893114894114895114896114897114898114899114900114901114902114903114904114905114906114907114908114909114910114911114912114913114914114915114916114917114918114919114920114921114922114923114924114925114926114927114928114929114930114931114932114933114934114935114936114937114938114939114940114941114942114943114944114945114946114947114948114949114950114951114952114953114954114955114956114957114958114959114960114961114962114963114964114965114966114967114968114969114970114971114972114973114974114975114976114977114978114979114980114981114982114983114984114985114986114987114988114989114990114991114992114993114994114995114996114997114998114999115000115001115002115003115004115005115006115007115008115009115010115011115012115013115014115015115016115017115018115019115020115021115022115023115024115025115026115027115028115029115030115031115032115033115034115035115036115037115038115039115040115041115042115043115044115045115046115047115048115049115050115051115052115053115054115055115056115057115058115059115060115061115062115063115064115065115066115067115068115069115070115071115072115073115074115075115076115077115078115079115080115081115082115083115084115085115086115087115088115089115090115091115092115093115094115095115096115097115098115099115100115101115102115103115104115105115106115107115108115109115110115111115112115113115114115115115116115117115118115119115120115121115122115123115124115125115126115127115128115129115130115131115132115133115134115135115136115137115138115139115140115141115142115143115144115145115146115147115148115149115150115151115152115153115154115155115156115157115158115159115160115161115162115163115164115165115166115167115168115169115170115171115172115173115174115175115176115177115178115179115180115181115182115183115184115185115186115187115188115189115190115191115192115193115194115195115196115197115198115199115200115201115202115203115204115205115206115207115208115209115210115211115212115213115214115215115216115217115218115219115220115221115222115223115224115225115226115227115228115229115230115231115232115233115234115235115236115237115238115239115240115241115242115243115244115245115246115247115248115249115250115251115252115253115254115255115256115257115258115259115260115261115262115263115264115265115266115267115268115269115270115271115272115273115274115275115276115277115278115279115280115281115282115283115284115285115286115287115288115289115290115291115292115293115294115295115296115297115298115299115300115301115302115303115304115305115306115307115308115309115310115311115312115313115314115315115316115317115318115319115320115321115322115323115324115325115326115327115328115329115330115331115332115333115334115335115336115337115338115339115340115341115342115343115344115345115346115347115348115349115350115351115352115353115354115355115356115357115358115359115360115361115362115363115364115365115366115367115368115369115370115371115372115373115374115375115376115377115378115379115380115381115382115383115384115385115386115387115388115389115390115391115392115393115394115395115396115397115398115399115400115401115402115403115404115405115406115407115408115409115410115411115412115413115414115415115416115417115418115419115420115421115422115423115424115425115426115427115428115429115430115431115432115433115434115435115436115437115438115439115440115441115442115443115444115445115446115447115448115449115450115451115452115453115454115455115456115457115458115459115460115461115462115463115464115465115466115467115468115469115470115471115472115473115474115475115476115477115478115479115480115481115482115483115484115485115486115487115488115489115490115491115492115493115494115495115496115497115498115499115500115501115502115503115504115505115506115507115508115509115510115511115512115513115514115515115516115517115518115519115520115521115522115523115524115525115526115527115528115529115530115531115532115533115534115535115536115537115538115539115540115541115542115543115544115545115546115547115548115549115550115551115552115553115554115555115556115557115558115559115560115561115562115563115564115565115566115567115568115569115570115571115572115573115574115575115576115577115578115579115580115581115582115583115584115585115586115587115588115589115590115591115592115593115594115595115596115597115598115599115600115601115602115603115604115605115606115607115608115609115610115611115612115613115614115615115616115617115618115619115620115621115622115623115624115625115626115627115628115629115630115631115632115633115634115635115636115637115638115639115640115641115642115643115644115645115646115647115648115649115650115651115652115653115654115655115656115657115658115659115660115661115662115663115664115665115666115667115668115669115670115671115672115673115674115675115676115677115678115679115680115681115682115683115684115685115686115687115688115689115690115691115692115693115694115695115696115697115698115699115700115701115702115703115704115705115706115707115708115709115710115711115712115713115714115715115716115717115718115719115720115721115722115723115724115725115726115727115728115729115730115731115732115733115734115735115736115737115738115739115740115741115742115743115744115745115746115747115748115749115750115751115752115753115754115755115756115757115758115759115760115761115762115763115764115765115766115767115768115769115770115771115772115773115774115775115776115777115778115779115780115781115782115783115784115785115786115787115788115789115790115791115792115793115794115795115796115797115798115799115800115801115802115803115804115805115806115807115808115809115810115811115812115813115814115815115816115817115818115819115820115821115822115823115824115825115826115827115828115829115830115831115832115833115834115835115836115837115838115839115840115841115842115843115844115845115846115847115848115849115850115851115852115853115854115855115856115857115858115859115860115861115862115863115864115865115866115867115868115869115870115871115872115873115874115875115876115877115878115879115880115881115882115883115884115885115886115887115888115889115890115891115892115893115894115895115896115897115898115899115900115901115902115903115904115905115906115907115908115909115910115911115912115913115914115915115916115917115918115919115920115921115922115923115924115925115926115927115928115929115930115931115932115933115934115935115936115937115938115939115940115941115942115943115944115945115946115947115948115949115950115951115952115953115954115955115956115957115958115959115960115961115962115963115964115965115966115967115968115969115970115971115972115973115974115975115976115977115978115979115980115981115982115983115984115985115986115987115988115989115990115991115992115993115994115995115996115997115998115999116000116001116002116003116004116005116006116007116008116009116010116011116012116013116014116015116016116017116018116019116020116021116022116023116024116025116026116027116028116029116030116031116032116033116034116035116036116037116038116039116040116041116042116043116044116045116046116047116048116049116050116051116052116053116054116055116056116057116058116059116060116061116062116063116064116065116066116067116068116069116070116071116072116073116074116075116076116077116078116079116080116081116082116083116084116085116086116087116088116089116090116091116092116093116094116095116096116097116098116099116100116101116102116103116104116105116106116107116108116109116110116111116112116113116114116115116116116117116118116119116120116121116122116123116124116125116126116127116128116129116130116131116132116133116134116135116136116137116138116139116140116141116142116143116144116145116146116147116148116149116150116151116152116153116154116155116156116157116158116159116160116161116162116163116164116165116166116167116168116169116170116171116172116173116174116175116176116177116178116179116180116181116182116183116184116185116186116187116188116189116190116191116192116193116194116195116196116197116198116199116200116201116202116203116204116205116206116207116208116209116210116211116212116213116214116215116216116217116218116219116220116221116222116223116224116225116226116227116228116229116230116231116232116233116234116235116236116237116238116239116240116241116242116243116244116245116246116247116248116249116250116251116252116253116254116255116256116257116258116259116260116261116262116263116264116265116266116267116268116269116270116271116272116273116274116275116276116277116278116279116280116281116282116283116284116285116286116287116288116289116290116291116292116293116294116295116296116297116298116299116300116301116302116303116304116305116306116307116308116309116310116311116312116313116314116315116316116317116318116319116320116321116322116323116324116325116326116327116328116329116330116331116332116333116334116335116336116337116338116339116340116341116342116343116344116345116346116347116348116349116350116351116352116353116354116355116356116357116358116359116360116361116362116363116364116365116366116367116368116369116370116371116372116373116374116375116376116377116378116379116380116381116382116383116384116385116386116387116388116389116390116391116392116393116394116395116396116397116398116399116400116401116402116403116404116405116406116407116408116409116410116411116412116413116414116415116416116417116418116419116420116421116422116423116424116425116426116427116428116429116430116431116432116433116434116435116436116437116438116439116440116441116442116443116444116445116446116447116448116449116450116451116452116453116454116455116456116457116458116459116460116461116462116463116464116465116466116467116468116469116470116471116472116473116474116475116476116477116478116479116480116481116482116483116484116485116486116487116488116489116490116491116492116493116494116495116496116497116498116499116500116501116502116503116504116505116506116507116508116509116510116511116512116513116514116515116516116517116518116519116520116521116522116523116524116525116526116527116528116529116530116531116532116533116534116535116536116537116538116539116540116541116542116543116544116545116546116547116548116549116550116551116552116553116554116555116556116557116558116559116560116561116562116563116564116565116566116567116568116569116570116571116572116573116574116575116576116577116578116579116580116581116582116583116584116585116586116587116588116589116590116591116592116593116594116595116596116597116598116599116600116601116602116603116604116605116606116607116608116609116610116611116612116613116614116615116616116617116618116619116620116621116622116623116624116625116626116627116628116629116630116631116632116633116634116635116636116637116638116639116640116641116642116643116644116645116646116647116648116649116650116651116652116653116654116655116656116657116658116659116660116661116662116663116664116665116666116667116668116669116670116671116672116673116674116675116676116677116678116679116680116681116682116683116684116685116686116687116688116689116690116691116692116693116694116695116696116697116698116699116700116701116702116703116704116705116706116707116708116709116710116711116712116713116714116715116716116717116718116719116720116721116722116723116724116725116726116727116728116729116730116731116732116733116734116735116736116737116738116739116740116741116742116743116744116745116746116747116748116749116750116751116752116753116754116755116756116757116758116759116760116761116762116763116764116765116766116767116768116769116770116771116772116773116774116775116776116777116778116779116780116781116782116783116784116785116786116787116788116789116790116791116792116793116794116795116796116797116798116799116800116801116802116803116804116805116806116807116808116809116810116811116812116813116814116815116816116817116818116819116820116821116822116823116824116825116826116827116828116829116830116831116832116833116834116835116836116837116838116839116840116841116842116843116844116845116846116847116848116849116850116851116852116853116854116855116856116857116858116859116860116861116862116863116864116865116866116867116868116869116870116871116872116873116874116875116876116877116878116879116880116881116882116883116884116885116886116887116888116889116890116891116892116893116894116895116896116897116898116899116900116901116902116903116904116905116906116907116908116909116910116911116912116913116914116915116916116917116918116919116920116921116922116923116924116925116926116927116928116929116930116931116932116933116934116935116936116937116938116939116940116941116942116943116944116945116946116947116948116949116950116951116952116953116954116955116956116957116958116959116960116961116962116963116964116965116966116967116968116969116970116971116972116973116974116975116976116977116978116979116980116981116982116983116984116985116986116987116988116989116990116991116992116993116994116995116996116997116998116999117000117001117002117003117004117005117006117007117008117009117010117011117012117013117014117015117016117017117018117019117020117021117022117023117024117025117026117027117028117029117030117031117032117033117034117035117036117037117038117039117040117041117042117043117044117045117046117047117048117049117050117051117052117053117054117055117056117057117058117059117060117061117062117063117064117065117066117067117068117069117070117071117072117073117074117075117076117077117078117079117080117081117082117083117084117085117086117087117088117089117090117091117092117093117094117095117096117097117098117099117100117101117102117103117104117105117106117107117108117109117110117111117112117113117114117115117116117117117118117119117120117121117122117123117124117125117126117127117128117129117130117131117132117133117134117135117136117137117138117139117140117141117142117143117144117145117146117147117148117149117150117151117152117153117154117155117156117157117158117159117160117161117162117163117164117165117166117167117168117169117170117171117172117173117174117175117176117177117178117179117180117181117182117183117184117185117186117187117188117189117190117191117192117193117194117195117196117197117198117199117200117201117202117203117204117205117206117207117208117209117210117211117212117213117214117215117216117217117218117219117220117221117222117223117224117225117226117227117228117229117230117231117232117233117234117235117236117237117238117239117240117241117242117243117244117245117246117247117248117249117250117251117252117253117254117255117256117257117258117259117260117261117262117263117264117265117266117267117268117269117270117271117272117273117274117275117276117277117278117279117280117281117282117283117284117285117286117287117288117289117290117291117292117293117294117295117296117297117298117299117300117301117302117303117304117305117306117307117308117309117310117311117312117313117314117315117316117317117318117319117320117321117322117323117324117325117326117327117328117329117330117331117332117333117334117335117336117337117338117339117340117341117342117343117344117345117346117347117348117349117350117351117352117353117354117355117356117357117358117359117360117361117362117363117364117365117366117367117368117369117370117371117372117373117374117375117376117377117378117379117380117381117382117383117384117385117386117387117388117389117390117391117392117393117394117395117396117397117398117399117400117401117402117403117404117405117406117407117408117409117410117411117412117413117414117415117416117417117418117419117420117421117422117423117424117425117426117427117428117429117430117431117432117433117434117435117436117437117438117439117440117441117442117443117444117445117446117447117448117449117450117451117452117453117454117455117456117457117458117459117460117461117462117463117464117465117466117467117468117469117470117471117472117473117474117475117476117477117478117479117480117481117482117483117484117485117486117487117488117489117490117491117492117493117494117495117496117497117498117499117500117501117502117503117504117505117506117507117508117509117510117511117512117513117514117515117516117517117518117519117520117521117522117523117524117525117526117527117528117529117530117531117532117533117534117535117536117537117538117539117540117541117542117543117544117545117546117547117548117549117550117551117552117553117554117555117556117557117558117559117560117561117562117563117564117565117566117567117568117569117570117571117572117573117574117575117576117577117578117579117580117581117582117583117584117585117586117587117588117589117590117591117592117593117594117595117596117597117598117599117600117601117602117603117604117605117606117607117608117609117610117611117612117613117614117615117616117617117618117619117620117621117622117623117624117625117626117627117628117629117630117631117632117633117634117635117636117637117638117639117640117641117642117643117644117645117646117647117648117649117650117651117652117653117654117655117656117657117658117659117660117661117662117663117664117665117666117667117668117669117670117671117672117673117674117675117676117677117678117679117680117681117682117683117684117685117686117687117688117689117690117691117692117693117694117695117696117697117698117699117700117701117702117703117704117705117706117707117708117709117710117711117712117713117714117715117716117717117718117719117720117721117722117723117724117725117726117727117728117729117730117731117732117733117734117735117736117737117738117739117740117741117742117743117744117745117746117747117748117749117750117751117752117753117754117755117756117757117758117759117760117761117762117763117764117765117766117767117768117769117770117771117772117773117774117775117776117777117778117779117780117781117782117783117784117785117786117787117788117789117790117791117792117793117794117795117796117797117798117799117800117801117802117803117804117805117806117807117808117809117810117811117812117813117814117815117816117817117818117819117820117821117822117823117824117825117826117827117828117829117830117831117832117833117834117835117836117837117838117839117840117841117842117843117844117845117846117847117848117849117850117851117852117853117854117855117856117857117858117859117860117861117862117863117864117865117866117867117868117869117870117871117872117873117874117875117876117877117878117879117880117881117882117883117884117885117886117887117888117889117890117891117892117893117894117895117896117897117898117899117900117901117902117903117904117905117906117907117908117909117910117911117912117913117914117915117916117917117918117919117920117921117922117923117924117925117926117927117928117929117930117931117932117933117934117935117936117937117938117939117940117941117942117943117944117945117946117947117948117949117950117951117952117953117954117955117956117957117958117959117960117961117962117963117964117965117966117967117968117969117970117971117972117973117974117975117976117977117978117979117980117981117982117983117984117985117986117987117988117989117990117991117992117993117994117995117996117997117998117999118000118001118002118003118004118005118006118007118008118009118010118011118012118013118014118015118016118017118018118019118020118021118022118023118024118025118026118027118028118029118030118031118032118033118034118035118036118037118038118039118040118041118042118043118044118045118046118047118048118049118050118051118052118053118054118055118056118057118058118059118060118061118062118063118064118065118066118067118068118069118070118071118072118073118074118075118076118077118078118079118080118081118082118083118084118085118086118087118088118089118090118091118092118093118094118095118096118097118098118099118100118101118102118103118104118105118106118107118108118109118110118111118112118113118114118115118116118117118118118119118120118121118122118123118124118125118126118127118128118129118130118131118132118133118134118135118136118137118138118139118140118141118142118143118144118145118146118147118148118149118150118151118152118153118154118155118156118157118158118159118160118161118162118163118164118165118166118167118168118169118170118171118172118173118174118175118176118177118178118179118180118181118182118183118184118185118186118187118188118189118190118191118192118193118194118195118196118197118198118199118200118201118202118203118204118205118206118207118208118209118210118211118212118213118214118215118216118217118218118219118220118221118222118223118224118225118226118227118228118229118230118231118232118233118234118235118236118237118238118239118240118241118242118243118244118245118246118247118248118249118250118251118252118253118254118255118256118257118258118259118260118261118262118263118264118265118266118267118268118269118270118271118272118273118274118275118276118277118278118279118280118281118282118283118284118285118286118287118288118289118290118291118292118293118294118295118296118297118298118299118300118301118302118303118304118305118306118307118308118309118310118311118312118313118314118315118316118317118318118319118320118321118322118323118324118325118326118327118328118329118330118331118332118333118334118335118336118337118338118339118340118341118342118343118344118345118346118347118348118349118350118351118352118353118354118355118356118357118358118359118360118361118362118363118364118365118366118367118368118369118370118371118372118373118374118375118376118377118378118379118380118381118382118383118384118385118386118387118388118389118390118391118392118393118394118395118396118397118398118399118400118401118402118403118404118405118406118407118408118409118410118411118412118413118414118415118416118417118418118419118420118421118422118423118424118425118426118427118428118429118430118431118432118433118434118435118436118437118438118439118440118441118442118443118444118445118446118447118448118449118450118451118452118453118454118455118456118457118458118459118460118461118462118463118464118465118466118467118468118469118470118471118472118473118474118475118476118477118478118479118480118481118482118483118484118485118486118487118488118489118490118491118492118493118494118495118496118497118498118499118500118501118502118503118504118505118506118507118508118509118510118511118512118513118514118515118516118517118518118519118520118521118522118523118524118525118526118527118528118529118530118531118532118533118534118535118536118537118538118539118540118541118542118543118544118545118546118547118548118549118550118551118552118553118554118555118556118557118558118559118560118561118562118563118564118565118566118567118568118569118570118571118572118573118574118575118576118577118578118579118580118581118582118583118584118585118586118587118588118589118590118591118592118593118594118595118596118597118598118599118600118601118602118603118604118605118606118607118608118609118610118611118612118613118614118615118616118617118618118619118620118621118622118623118624118625118626118627118628118629118630118631118632118633118634118635118636118637118638118639118640118641118642118643118644118645118646118647118648118649118650118651118652118653118654118655118656118657118658118659118660118661118662118663118664118665118666118667118668118669118670118671118672118673118674118675118676118677118678118679118680118681118682118683118684118685118686118687118688118689118690118691118692118693118694118695118696118697118698118699118700118701118702118703118704118705118706118707118708118709118710118711118712118713118714118715118716118717118718118719118720118721118722118723118724118725118726118727118728118729118730118731118732118733118734118735118736118737118738118739118740118741118742118743118744118745118746118747118748118749118750118751118752118753118754118755118756118757118758118759118760118761118762118763118764118765118766118767118768118769118770118771118772118773118774118775118776118777118778118779118780118781118782118783118784118785118786118787118788118789118790118791118792118793118794118795118796118797118798118799118800118801118802118803118804118805118806118807118808118809118810118811118812118813118814118815118816118817118818118819118820118821118822118823118824118825118826118827118828118829118830118831118832118833118834118835118836118837118838118839118840118841118842118843118844118845118846118847118848118849118850118851118852118853118854118855118856118857118858118859118860118861118862118863118864118865118866118867118868118869118870118871118872118873118874118875118876118877118878118879118880118881118882118883118884118885118886118887118888118889118890118891118892118893118894118895118896118897118898118899118900118901118902118903118904118905118906118907118908118909118910118911118912118913118914118915118916118917118918118919118920118921118922118923118924118925118926118927118928118929118930118931118932118933118934118935118936118937118938118939118940118941118942118943118944118945118946118947118948118949118950118951118952118953118954118955118956118957118958118959118960118961118962118963118964118965118966118967118968118969118970118971118972118973118974118975118976118977118978118979118980118981118982118983118984118985118986118987118988118989118990118991118992118993118994118995118996118997118998118999119000119001119002119003119004119005119006119007119008119009119010119011119012119013119014119015119016119017119018119019119020119021119022119023119024119025119026119027119028119029119030119031119032119033119034119035119036119037119038119039119040119041119042119043119044119045119046119047119048119049119050119051119052119053119054119055119056119057119058119059119060119061119062119063119064119065119066119067119068119069119070119071119072119073119074119075119076119077119078119079119080119081119082119083119084119085119086119087119088119089119090119091119092119093119094119095119096119097119098119099119100119101119102119103119104119105119106119107119108119109119110119111119112119113119114119115119116119117119118119119119120119121119122119123119124119125119126119127119128119129119130119131119132119133119134119135119136119137119138119139119140119141119142119143119144119145119146119147119148119149119150119151119152119153119154119155119156119157119158119159119160119161119162119163119164119165119166119167119168119169119170119171119172119173119174119175119176119177119178119179119180119181119182119183119184119185119186119187119188119189119190119191119192119193119194119195119196119197119198119199119200119201119202119203119204119205119206119207119208119209119210119211119212119213119214119215119216119217119218119219119220119221119222119223119224119225119226119227119228119229119230119231119232119233119234119235119236119237119238119239119240119241119242119243119244119245119246119247119248119249119250119251119252119253119254119255119256119257119258119259119260119261119262119263119264119265119266119267119268119269119270119271119272119273119274119275119276119277119278119279119280119281119282119283119284119285119286119287119288119289119290119291119292119293119294119295119296119297119298119299119300119301119302119303119304119305119306119307119308119309119310119311119312119313119314119315119316119317119318119319119320119321119322119323119324119325119326119327119328119329119330119331119332119333119334119335119336119337119338119339119340119341119342119343119344119345119346119347119348119349119350119351119352119353119354119355119356119357119358119359119360119361119362119363119364119365119366119367119368119369119370119371119372119373119374119375119376119377119378119379119380119381119382119383119384119385119386119387119388119389119390119391119392119393119394119395119396119397119398119399119400119401119402119403119404119405119406119407119408119409119410119411119412119413119414119415119416119417119418119419119420119421119422119423119424119425119426119427119428119429119430119431119432119433119434119435119436119437119438119439119440119441119442119443119444119445119446119447119448119449119450119451119452119453119454119455119456119457119458119459119460119461119462119463119464119465119466119467119468119469119470119471119472119473119474119475119476119477119478119479119480119481119482119483119484119485119486119487119488119489119490119491119492119493119494119495119496119497119498119499119500119501119502119503119504119505119506119507119508119509119510119511119512119513119514119515119516119517119518119519119520119521119522119523119524119525119526119527119528119529119530119531119532119533119534119535119536119537119538119539119540119541119542119543119544119545119546119547119548119549119550119551119552119553119554119555119556119557119558119559119560119561119562119563119564119565119566119567119568119569119570119571119572119573119574119575119576119577119578119579119580119581119582119583119584119585119586119587119588119589119590119591119592119593119594119595119596119597119598119599119600119601119602119603119604119605119606119607119608119609119610119611119612119613119614119615119616119617119618119619119620119621119622119623119624119625119626119627119628119629119630119631119632119633119634119635119636119637119638119639119640119641119642119643119644119645119646119647119648119649119650119651119652119653119654119655119656119657119658119659119660119661119662119663119664119665119666119667119668119669119670119671119672119673119674119675119676119677119678119679119680119681119682119683119684119685119686119687119688119689119690119691119692119693119694119695119696119697119698119699119700119701119702119703119704119705119706119707119708119709119710119711119712119713119714119715119716119717119718119719119720119721119722119723119724119725119726119727119728119729119730119731119732119733119734119735119736119737119738119739119740119741119742119743119744119745119746119747119748119749119750119751119752119753119754119755119756119757119758119759119760119761119762119763119764119765119766119767119768119769119770119771119772119773119774119775119776119777119778119779119780119781119782119783119784119785119786119787119788119789119790119791119792119793119794119795119796119797119798119799119800119801119802119803119804119805119806119807119808119809119810119811119812119813119814119815119816119817119818119819119820119821119822119823119824119825119826119827119828119829119830119831119832119833119834119835119836119837119838119839119840119841119842119843119844119845119846119847119848119849119850119851119852119853119854119855119856119857119858119859119860119861119862119863119864119865119866119867119868119869119870119871119872119873119874119875119876119877119878119879119880119881119882119883119884119885119886119887119888119889119890119891119892119893119894119895119896119897119898119899119900119901119902119903119904119905119906119907119908119909119910119911119912119913119914119915119916119917119918119919119920119921119922119923119924119925119926119927119928119929119930119931119932119933119934119935119936119937119938119939119940119941119942119943119944119945119946119947119948119949119950119951119952119953119954119955119956119957119958119959119960119961119962119963119964119965119966119967119968119969119970119971119972119973119974119975119976119977119978119979119980119981119982119983119984119985119986119987119988119989119990119991119992119993119994119995119996119997119998119999120000120001120002120003120004120005120006120007120008120009120010120011120012120013120014120015120016120017120018120019120020120021120022120023120024120025120026120027120028120029120030120031120032120033120034120035120036120037120038120039120040120041120042120043120044120045120046120047120048120049120050120051120052120053120054120055120056120057120058120059120060120061120062120063120064120065120066120067120068120069120070120071120072120073120074120075120076120077120078120079120080120081120082120083120084120085120086120087120088120089120090120091120092120093120094120095120096120097120098120099120100120101120102120103120104120105120106120107120108120109120110120111120112120113120114120115120116120117120118120119120120120121120122120123120124120125120126120127120128120129120130120131120132120133120134120135120136120137120138120139120140120141120142120143120144120145120146120147120148120149120150120151120152120153120154120155120156120157120158120159120160120161120162120163120164120165120166120167120168120169120170120171120172120173120174120175120176120177120178120179120180120181120182120183120184120185120186120187120188120189120190120191120192120193120194120195120196120197120198120199120200120201120202120203120204120205120206120207120208120209120210120211120212120213120214120215120216120217120218120219120220120221120222120223120224120225120226120227120228120229120230120231120232120233120234120235120236120237120238120239120240120241120242120243120244120245120246120247120248120249120250120251120252120253120254120255120256120257120258120259120260120261120262120263120264120265120266120267120268120269120270120271120272120273120274120275120276120277120278120279120280120281120282120283120284120285120286120287120288120289120290120291120292120293120294120295120296120297120298120299120300120301120302120303120304120305120306120307120308120309120310120311120312120313120314120315120316120317120318120319120320120321120322120323120324120325120326120327120328120329120330120331120332120333120334120335120336120337120338120339120340120341120342120343120344120345120346120347120348120349120350120351120352120353120354120355120356120357120358120359120360120361120362120363120364120365120366120367120368120369120370120371120372120373120374120375120376120377120378120379120380120381120382120383120384120385120386120387120388120389120390120391120392120393120394120395120396120397120398120399120400120401120402120403120404120405120406120407120408120409120410120411120412120413120414120415120416120417120418120419120420120421120422120423120424120425120426120427120428120429120430120431120432120433120434120435120436120437120438120439120440120441120442120443120444120445120446120447120448120449120450120451120452120453120454120455120456120457120458120459120460120461120462120463120464120465120466120467120468120469120470120471120472120473120474120475120476120477120478120479120480120481120482120483120484120485120486120487120488120489120490120491120492120493120494120495120496120497120498120499120500120501120502120503120504120505120506120507120508120509120510120511120512120513120514120515120516120517120518120519120520120521120522120523120524120525120526120527120528120529120530120531120532120533120534120535120536120537120538120539120540120541120542120543120544120545120546120547120548120549120550120551120552120553120554120555120556120557120558120559120560120561120562120563120564120565120566120567120568120569120570120571120572120573120574120575120576120577120578120579120580120581120582120583120584120585120586120587120588120589120590120591120592120593120594120595120596120597120598120599120600120601120602120603120604120605120606120607120608120609120610120611120612120613120614120615120616120617120618120619120620120621120622120623120624120625120626120627120628120629120630120631120632120633120634120635120636120637120638120639120640120641120642120643120644120645120646120647120648120649120650120651120652120653120654120655120656120657120658120659120660120661120662120663120664120665120666120667120668120669120670120671120672120673120674120675120676120677120678120679120680120681120682120683120684120685120686120687120688120689120690120691120692120693120694120695120696120697120698120699120700120701120702120703120704120705120706120707120708120709120710120711120712120713120714120715120716120717120718120719120720120721120722120723120724120725120726120727120728120729120730120731120732120733120734120735120736120737120738120739120740120741120742120743120744120745120746120747120748120749120750120751120752120753120754120755120756120757120758120759120760120761120762120763120764120765120766120767120768120769120770120771120772120773120774120775120776120777120778120779120780120781120782120783120784120785120786120787120788120789120790120791120792120793120794120795120796120797120798120799120800120801120802120803120804120805120806120807120808120809120810120811120812120813120814120815120816120817120818120819120820120821120822120823120824120825120826120827120828120829120830120831120832120833120834120835120836120837120838120839120840120841120842120843120844120845120846120847120848120849120850120851120852120853120854120855120856120857120858120859120860120861120862120863120864120865120866120867120868120869120870120871120872120873120874120875120876120877120878120879120880120881120882120883120884120885120886120887120888120889120890120891120892120893120894120895120896120897120898120899120900120901120902120903120904120905120906120907120908120909120910120911120912120913120914120915120916120917120918120919120920120921120922120923120924120925120926120927120928120929120930120931120932120933120934120935120936120937120938120939120940120941120942120943120944120945120946120947120948120949120950120951120952120953120954120955120956120957120958120959120960120961120962120963120964120965120966120967120968120969120970120971120972120973120974120975120976120977120978120979120980120981120982120983120984120985120986120987120988120989120990120991120992120993120994120995120996120997120998120999121000121001121002121003121004121005121006121007121008121009121010121011121012121013121014121015121016121017121018121019121020121021121022121023121024121025121026121027121028121029121030121031121032121033121034121035121036121037121038121039121040121041121042121043121044121045121046121047121048121049121050121051121052121053121054121055121056121057121058121059121060121061121062121063121064121065121066121067121068121069121070121071121072121073121074121075121076121077121078121079121080121081121082121083121084121085121086121087121088121089121090121091121092121093121094121095121096121097121098121099121100121101121102121103121104121105121106121107121108121109121110121111121112121113121114121115121116121117121118121119121120121121121122121123121124121125121126121127121128121129121130121131121132121133121134121135121136121137121138121139121140121141121142121143121144121145121146121147121148121149121150121151121152121153121154121155121156121157121158121159121160121161121162121163121164121165121166121167121168121169121170121171121172121173121174121175121176121177121178121179121180121181121182121183121184121185121186121187121188121189121190121191121192121193121194121195121196121197121198121199121200121201121202121203121204121205121206121207121208121209121210121211121212121213121214121215121216121217121218121219121220121221121222121223121224121225121226121227121228121229121230121231121232121233121234121235121236121237121238121239121240121241121242121243121244121245121246121247121248121249121250121251121252121253121254121255121256121257121258121259121260121261121262121263121264121265121266121267121268121269121270121271121272121273121274121275121276121277121278121279121280121281121282121283121284121285121286121287121288121289121290121291121292121293121294121295121296121297121298121299121300121301121302121303121304121305121306121307121308121309121310121311121312121313121314121315121316121317121318121319121320121321121322121323121324121325121326121327121328121329121330121331121332121333121334121335121336121337121338121339121340121341121342121343121344121345121346121347121348121349121350121351121352121353121354121355121356121357121358121359121360121361121362121363121364121365121366121367121368121369121370121371121372121373121374121375121376121377121378121379121380121381121382121383121384121385121386121387121388121389121390121391121392121393121394121395121396121397121398121399121400121401121402121403121404121405121406121407121408121409121410121411121412121413121414121415121416121417121418121419121420121421121422121423121424121425121426121427121428121429121430121431121432121433121434121435121436121437121438121439121440121441121442121443121444121445121446121447121448121449121450121451121452121453121454121455121456121457121458121459121460121461121462121463121464121465121466121467121468121469121470121471121472121473121474121475121476121477121478121479121480121481121482121483121484121485121486121487121488121489121490121491121492121493121494121495121496121497121498121499121500121501121502121503121504121505121506121507121508121509121510121511121512121513121514121515121516121517121518121519121520121521121522121523121524121525121526121527121528121529121530121531121532121533121534121535121536121537121538121539121540121541121542121543121544121545121546121547121548121549121550121551121552121553121554121555121556121557121558121559121560121561121562121563121564121565121566121567121568121569121570121571121572121573121574121575121576121577121578121579121580121581121582121583121584121585121586121587121588121589121590121591121592121593121594121595121596121597121598121599121600121601121602121603121604121605121606121607121608121609121610121611121612121613121614121615121616121617121618121619121620121621121622121623121624121625121626121627121628121629121630121631121632121633121634121635121636121637121638121639121640121641121642121643121644121645121646121647121648121649121650121651121652121653121654121655121656121657121658121659121660121661121662121663121664121665121666121667121668121669121670121671121672121673121674121675121676121677121678121679121680121681121682121683121684121685121686121687121688121689121690121691121692121693121694121695121696121697121698121699121700121701121702121703121704121705121706121707121708121709121710121711121712121713121714121715121716121717121718121719121720121721121722121723121724121725121726121727121728121729121730121731121732121733121734121735121736121737121738121739121740121741121742121743121744121745121746121747121748121749121750121751121752121753121754121755121756121757121758121759121760121761121762121763121764121765121766121767121768121769121770121771121772121773121774121775121776121777121778121779121780121781121782121783121784121785121786121787121788121789121790121791121792121793121794121795121796121797121798121799121800121801121802121803121804121805121806121807121808121809121810121811121812121813121814121815121816121817121818121819121820121821121822121823121824121825121826121827121828121829121830121831121832121833121834121835121836121837121838121839121840121841121842121843121844121845121846121847121848121849121850121851121852121853121854121855121856121857121858121859121860121861121862121863121864121865121866121867121868121869121870121871121872121873121874121875121876121877121878121879121880121881121882121883121884121885121886121887121888121889121890121891121892121893121894121895121896121897121898121899121900121901121902121903121904121905121906121907121908121909121910121911121912121913121914121915121916121917121918121919121920121921121922121923121924121925121926121927121928121929121930121931121932121933121934121935121936121937121938121939121940121941121942121943121944121945121946121947121948121949121950121951121952121953121954121955121956121957121958121959121960121961121962121963121964121965121966121967121968121969121970121971121972121973121974121975121976121977121978121979121980121981121982121983121984121985121986121987121988121989121990121991121992121993121994121995121996121997121998121999122000122001122002122003122004122005122006122007122008122009122010122011122012122013122014122015122016122017122018122019122020122021122022122023122024122025122026122027122028122029122030122031122032122033122034122035122036122037122038122039122040122041122042122043122044122045122046122047122048122049122050122051122052122053122054122055122056122057122058122059122060122061122062122063122064122065122066122067122068122069122070122071122072122073122074122075122076122077122078122079122080122081122082122083122084122085122086122087122088122089122090122091122092122093122094122095122096122097122098122099122100122101122102122103122104122105122106122107122108122109122110122111122112122113122114122115122116122117122118122119122120122121122122122123122124122125122126122127122128122129122130122131122132122133122134122135122136122137122138122139122140122141122142122143122144122145122146122147122148122149122150122151122152122153122154122155122156122157122158122159122160122161122162122163122164122165122166122167122168122169122170122171122172122173122174122175122176122177122178122179122180122181122182122183122184122185122186122187122188122189122190122191122192122193122194122195122196122197122198122199122200122201122202122203122204122205122206122207122208122209122210122211122212122213122214122215122216122217122218122219122220122221122222122223122224122225122226122227122228122229122230122231122232122233122234122235122236122237122238122239122240122241122242122243122244122245122246122247122248122249122250122251122252122253122254122255122256122257122258122259122260122261122262122263122264122265122266122267122268122269122270122271122272122273122274122275122276122277122278122279122280122281122282122283122284122285122286122287122288122289122290122291122292122293122294122295122296122297122298122299122300122301122302122303122304122305122306122307122308122309122310122311122312122313122314122315122316122317122318122319122320122321122322122323122324122325122326122327122328122329122330122331122332122333122334122335122336122337122338122339122340122341122342122343122344122345122346122347122348122349122350122351122352122353122354122355122356122357122358122359122360122361122362122363122364122365122366122367122368122369122370122371122372122373122374122375122376122377122378122379122380122381122382122383122384122385122386122387122388122389122390122391122392122393122394122395122396122397122398122399122400122401122402122403122404122405122406122407122408122409122410122411122412122413122414122415122416122417122418122419122420122421122422122423122424122425122426122427122428122429122430122431122432122433122434122435122436122437122438122439122440122441122442122443122444122445122446122447122448122449122450122451122452122453122454122455122456122457122458122459122460122461122462122463122464122465122466122467122468122469122470122471122472122473122474122475122476122477122478122479122480122481122482122483122484122485122486122487122488122489122490122491122492122493122494122495122496122497122498122499122500122501122502122503122504122505122506122507122508122509122510122511122512122513122514122515122516122517122518122519122520122521122522122523122524122525122526122527122528122529122530122531122532122533122534122535122536122537122538122539122540122541122542122543122544122545122546122547122548122549122550122551122552122553122554122555122556122557122558122559122560122561122562122563122564122565122566122567122568122569122570122571122572122573122574122575122576122577122578122579122580122581122582122583122584122585122586122587122588122589122590122591122592122593122594122595122596122597122598122599122600122601122602122603122604122605122606122607122608122609122610122611122612122613122614122615122616122617122618122619122620122621122622122623122624122625122626122627122628122629122630122631122632122633122634122635122636122637122638122639122640122641122642122643122644122645122646122647122648122649122650122651122652122653122654122655122656122657122658122659122660122661122662122663122664122665122666122667122668122669122670122671122672122673122674122675122676122677122678122679122680122681122682122683122684122685122686122687122688122689122690122691122692122693122694122695122696122697122698122699122700122701122702122703122704122705122706122707122708122709122710122711122712122713122714122715122716122717122718122719122720122721122722122723122724122725122726122727122728122729122730122731122732122733122734122735122736122737122738122739122740122741122742122743122744122745122746122747122748122749122750122751122752122753122754122755122756122757122758122759122760122761122762122763122764122765122766122767122768122769122770122771122772122773122774122775122776122777122778122779122780122781122782122783122784122785122786122787122788122789122790122791122792122793122794122795122796122797122798122799122800122801122802122803122804122805122806122807122808122809122810122811122812122813122814122815122816122817122818122819122820122821122822122823122824122825122826122827122828122829122830122831122832122833122834122835122836122837122838122839122840122841122842122843122844122845122846122847122848122849122850122851122852122853122854122855122856122857122858122859122860122861122862122863122864122865122866122867122868122869122870122871122872122873122874122875122876122877122878122879122880122881122882122883122884122885122886122887122888122889122890122891122892122893122894122895122896122897122898122899122900122901122902122903122904122905122906122907122908122909122910122911122912122913122914122915122916122917122918122919122920122921122922122923122924122925122926122927122928122929122930122931122932122933122934122935122936122937122938122939122940122941122942122943122944122945122946122947122948122949122950122951122952122953122954122955122956122957122958122959122960122961122962122963122964122965122966122967122968122969122970122971122972122973122974122975122976122977122978122979122980122981122982122983122984122985122986122987122988122989122990122991122992122993122994122995122996122997122998122999123000123001123002123003123004123005123006123007123008123009123010123011123012123013123014123015123016123017123018123019123020123021123022123023123024123025123026123027123028123029123030123031123032123033123034123035123036123037123038123039123040123041123042123043123044123045123046123047123048123049123050123051123052123053123054123055123056123057123058123059123060123061123062123063123064123065123066123067123068123069123070123071123072123073123074123075123076123077123078123079123080123081123082123083123084123085123086123087123088123089123090123091123092123093123094123095123096123097123098123099123100123101123102123103123104123105123106123107123108123109123110123111123112123113123114123115123116123117123118123119123120123121123122123123123124123125123126123127123128123129123130123131123132123133123134123135123136123137123138123139123140123141123142123143123144123145123146123147123148123149123150123151123152123153123154123155123156123157123158123159123160123161123162123163123164123165123166123167123168123169123170123171123172123173123174123175123176123177123178123179123180123181123182123183123184123185123186123187123188123189123190123191123192123193123194123195123196123197123198123199123200123201123202123203123204123205123206123207123208123209123210123211123212123213123214123215123216123217123218123219123220123221123222123223123224123225123226123227123228123229123230123231123232123233123234123235123236123237123238123239123240123241123242123243123244123245123246123247123248123249123250123251123252123253123254123255123256123257123258123259123260123261123262123263123264123265123266123267123268123269123270123271123272123273123274123275123276123277123278123279123280123281123282123283123284123285123286123287123288123289123290123291123292123293123294123295123296123297123298123299123300123301123302123303123304123305123306123307123308123309123310123311123312123313123314123315123316123317123318123319123320123321123322123323123324123325123326123327123328123329123330123331123332123333123334123335123336123337123338123339123340123341123342123343123344123345123346123347123348123349123350123351123352123353123354123355123356123357123358123359123360123361123362123363123364123365123366123367123368123369123370123371123372123373123374123375123376123377123378123379123380123381123382123383123384123385123386123387123388123389123390123391123392123393123394123395123396123397123398123399123400123401123402123403123404123405123406123407123408123409123410123411123412123413123414123415123416123417123418123419123420123421123422123423123424123425123426123427123428123429123430123431123432123433123434123435123436123437123438123439123440123441123442123443123444123445123446123447123448123449123450123451123452123453123454123455123456123457123458123459123460123461123462123463123464123465123466123467123468123469123470123471123472123473123474123475123476123477123478123479123480123481123482123483123484123485123486123487123488123489123490123491123492123493123494123495123496123497123498123499123500123501123502123503123504123505123506123507123508123509123510123511123512123513123514123515123516123517123518123519123520123521123522123523123524123525123526123527123528123529123530123531123532123533123534123535123536123537123538123539123540123541123542123543123544123545123546123547123548123549123550123551123552123553123554123555123556123557123558123559123560123561123562123563123564123565123566123567123568123569123570123571123572123573123574123575123576123577123578123579123580123581123582123583123584123585123586123587123588123589123590123591123592123593123594123595123596123597123598123599123600123601123602123603123604123605123606123607123608123609123610123611123612123613123614123615123616123617123618123619123620123621123622123623123624123625123626123627123628123629123630123631123632123633123634123635123636123637123638123639123640123641123642123643123644123645123646123647123648123649123650123651123652123653123654123655123656123657123658123659123660123661123662123663123664123665123666123667123668123669123670123671123672123673123674123675123676123677123678123679123680123681123682123683123684123685123686123687123688123689123690123691123692123693123694123695123696123697123698123699123700123701123702123703123704123705123706123707123708123709123710123711123712123713123714123715123716123717123718123719123720123721123722123723123724123725123726123727123728123729123730123731123732123733123734123735123736123737123738123739123740123741123742123743123744123745123746123747123748123749123750123751123752123753123754123755123756123757123758123759123760123761123762123763123764123765123766123767123768123769123770123771123772123773123774123775123776123777123778123779123780123781123782123783123784123785123786123787123788123789123790123791123792123793123794123795123796123797123798123799123800123801123802123803123804123805123806123807123808123809123810123811123812123813123814123815123816123817123818123819123820123821123822123823123824123825123826123827123828123829123830123831123832123833123834123835123836123837123838123839123840123841123842123843123844123845123846123847123848123849123850123851123852123853123854123855123856123857123858123859123860123861123862123863123864123865123866123867123868123869123870123871123872123873123874123875123876123877123878123879123880123881123882123883123884123885123886123887123888123889123890123891123892123893123894123895123896123897123898123899123900123901123902123903123904123905123906123907123908123909123910123911123912123913123914123915123916123917123918123919123920123921123922123923123924123925123926123927123928123929123930123931123932123933123934123935123936123937123938123939123940123941123942123943123944123945123946123947123948123949123950123951123952123953123954123955123956123957123958123959123960123961123962123963123964123965123966123967123968123969123970123971123972123973123974123975123976123977123978123979123980123981123982123983123984123985123986123987123988123989123990123991123992123993123994123995123996123997123998123999124000124001124002124003124004124005124006124007124008124009124010124011124012124013124014124015124016124017124018124019124020124021124022124023124024124025124026124027124028124029124030124031124032124033124034124035124036124037124038124039124040124041124042124043124044124045124046124047124048124049124050124051124052124053124054124055124056124057124058124059124060124061124062124063124064124065124066124067124068124069124070124071124072124073124074124075124076124077124078124079124080124081124082124083124084124085124086124087124088124089124090124091124092124093124094124095124096124097124098124099124100124101124102124103124104124105124106124107124108124109124110124111124112124113124114124115124116124117124118124119124120124121124122124123124124124125124126124127124128124129124130124131124132124133124134124135124136124137124138124139124140124141124142124143124144124145124146124147124148124149124150124151124152124153124154124155124156124157124158124159124160124161124162124163124164124165124166124167124168124169124170124171124172124173124174124175124176124177124178124179124180124181124182124183124184124185124186124187124188124189124190124191124192124193124194124195124196124197124198124199124200124201124202124203124204124205124206124207124208124209124210124211124212124213124214124215124216124217124218124219124220124221124222124223124224124225124226124227124228124229124230124231124232124233124234124235124236124237124238124239124240124241124242124243124244124245124246124247124248124249124250124251124252124253124254124255124256124257124258124259124260124261124262124263124264124265124266124267124268124269124270124271124272124273124274124275124276124277124278124279124280124281124282124283124284124285124286124287124288124289124290124291124292124293124294124295124296124297124298124299124300124301124302124303124304124305124306124307124308124309124310124311124312124313124314124315124316124317124318124319124320124321124322124323124324124325124326124327124328124329124330124331124332124333124334124335124336124337124338124339124340124341124342124343124344124345124346124347124348124349124350124351124352124353124354124355124356124357124358124359124360124361124362124363124364124365124366124367124368124369124370124371124372124373124374124375124376124377124378124379124380124381124382124383124384124385124386124387124388124389124390124391124392124393124394124395124396124397124398124399124400124401124402124403124404124405124406124407124408124409124410124411124412124413124414124415124416124417124418124419124420124421124422124423124424124425124426124427124428124429124430124431124432124433124434124435124436124437124438124439124440124441124442124443124444124445124446124447124448124449124450124451124452124453124454124455124456124457124458124459124460124461124462124463124464124465124466124467124468124469124470124471124472124473124474124475124476124477124478124479124480124481124482124483124484124485124486124487124488124489124490124491124492124493124494124495124496124497124498124499124500124501124502124503124504124505124506124507124508124509124510124511124512124513124514124515124516124517124518124519124520124521124522124523124524124525124526124527124528124529124530124531124532124533124534124535124536124537124538124539124540124541124542124543124544124545124546124547124548124549124550124551124552124553124554124555124556124557124558124559124560124561124562124563124564124565124566124567124568124569124570124571124572124573124574124575124576124577124578124579124580124581124582124583124584124585124586124587124588124589124590124591124592124593124594124595124596124597124598124599124600124601124602124603124604124605124606124607124608124609124610124611124612124613124614124615124616124617124618124619124620124621124622124623124624124625124626124627124628124629124630124631124632124633124634124635124636124637124638124639124640124641124642124643124644124645124646124647124648124649124650124651124652124653124654124655124656124657124658124659124660124661124662124663124664124665124666124667124668124669124670124671124672124673124674124675124676124677124678124679124680124681124682124683124684124685124686124687124688124689124690124691124692124693124694124695124696124697124698124699124700124701124702124703124704124705124706124707124708124709124710124711124712124713124714124715124716124717124718124719124720124721124722124723124724124725124726124727124728124729124730124731124732124733124734124735124736124737124738124739124740124741124742124743124744124745124746124747124748124749124750124751124752124753124754124755124756124757124758124759124760124761124762124763124764124765124766124767124768124769124770124771124772124773124774124775124776124777124778124779124780124781124782124783124784124785124786124787124788124789124790124791124792124793124794124795124796124797124798124799124800124801124802124803124804124805124806124807124808124809124810124811124812124813124814124815124816124817124818124819124820124821124822124823124824124825124826124827124828124829124830124831124832124833124834124835124836124837124838124839124840124841124842124843124844124845124846124847124848124849124850124851124852124853124854124855124856124857124858124859124860124861124862124863124864124865124866124867124868124869124870124871124872124873124874124875124876124877124878124879124880124881124882124883124884124885124886124887124888124889124890124891124892124893124894124895124896124897124898124899124900124901124902124903124904124905124906124907124908124909124910124911124912124913124914124915124916124917124918124919124920124921124922124923124924124925124926124927124928124929124930124931124932124933124934124935124936124937124938124939124940124941124942124943124944124945124946124947124948124949124950124951124952124953124954124955124956124957124958124959124960124961124962124963124964124965124966124967124968124969124970124971124972124973124974124975124976124977124978124979124980124981124982124983124984124985124986124987124988124989124990124991124992124993124994124995124996124997124998124999125000125001125002125003125004125005125006125007125008125009125010125011125012125013125014125015125016125017125018125019125020125021125022125023125024125025125026125027125028125029125030125031125032125033125034125035125036125037125038125039125040125041125042125043125044125045125046125047125048125049125050125051125052125053125054125055125056125057125058125059125060125061125062125063125064125065125066125067125068125069125070125071125072125073125074125075125076125077125078125079125080125081125082125083125084125085125086125087125088125089125090125091125092125093125094125095125096125097125098125099125100125101125102125103125104125105125106125107125108125109125110125111125112125113125114125115125116125117125118125119125120125121125122125123125124125125125126125127125128125129125130125131125132125133125134125135125136125137125138125139125140125141125142125143125144125145125146125147125148125149125150125151125152125153125154125155125156125157125158125159125160125161125162125163125164125165125166125167125168125169125170125171125172125173125174125175125176125177125178125179125180125181125182125183125184125185125186125187125188125189125190125191125192125193125194125195125196125197125198125199125200125201125202125203125204125205125206125207125208125209125210125211125212125213125214125215125216125217125218125219125220125221125222125223125224125225125226125227125228125229125230125231125232125233125234125235125236125237125238125239125240125241125242125243125244125245125246125247125248125249125250125251125252125253125254125255125256125257125258125259125260125261125262125263125264125265125266125267125268125269125270125271125272125273125274125275125276125277125278125279125280125281125282125283125284125285125286125287125288125289125290125291125292125293125294125295125296125297125298125299125300125301125302125303125304125305125306125307125308125309125310125311125312125313125314125315125316125317125318125319125320125321125322125323125324125325125326125327125328125329125330125331125332125333125334125335125336125337125338125339125340125341125342125343125344125345125346125347125348125349125350125351125352125353125354125355125356125357125358125359125360125361125362125363125364125365125366125367125368125369125370125371125372125373125374125375125376125377125378125379125380125381125382125383125384125385125386125387125388125389125390125391125392125393125394125395125396125397125398125399125400125401125402125403125404125405125406125407125408125409125410125411125412125413125414125415125416125417125418125419125420125421125422125423125424125425125426125427125428125429125430125431125432125433125434125435125436125437125438125439125440125441125442125443125444125445125446125447125448125449125450125451125452125453125454125455125456125457125458125459125460125461125462125463125464125465125466125467125468125469125470125471125472125473125474125475125476125477125478125479125480125481125482125483125484125485125486125487125488125489125490125491125492125493125494125495125496125497125498125499125500125501125502125503125504125505125506125507125508125509125510125511125512125513125514125515125516125517125518125519125520125521125522125523125524125525125526125527125528125529125530125531125532125533125534125535125536125537125538125539125540125541125542125543125544125545125546125547125548125549125550125551125552125553125554125555125556125557125558125559125560125561125562125563125564125565125566125567125568125569125570125571125572125573125574125575125576125577125578125579125580125581125582125583125584125585125586125587125588125589125590125591125592125593125594125595125596125597125598125599125600125601125602125603125604125605125606125607125608125609125610125611125612125613125614125615125616125617125618125619125620125621125622125623125624125625125626125627125628125629125630125631125632125633125634125635125636125637125638125639125640125641125642125643125644125645125646125647125648125649125650125651125652125653125654125655125656125657125658125659125660125661125662125663125664125665125666125667125668125669125670125671125672125673125674125675125676125677125678125679125680125681125682125683125684125685125686125687125688125689125690125691125692125693125694125695125696125697125698125699125700125701125702125703125704125705125706125707125708125709125710125711125712125713125714125715125716125717125718125719125720125721125722125723125724125725125726125727125728125729125730125731125732125733125734125735125736125737125738125739125740125741125742125743125744125745125746125747125748125749125750125751125752125753125754125755125756125757125758125759125760125761125762125763125764125765125766125767125768125769125770125771125772125773125774125775125776125777125778125779125780125781125782125783125784125785125786125787125788125789125790125791125792125793125794125795125796125797125798125799125800125801125802125803125804125805125806125807125808125809125810125811125812125813125814125815125816125817125818125819125820125821125822125823125824125825125826125827125828125829125830125831125832125833125834125835125836125837125838125839125840125841125842125843125844125845125846125847125848125849125850125851125852125853125854125855125856125857125858125859125860125861125862125863125864125865125866125867125868125869125870125871125872125873125874125875125876125877125878125879125880125881125882125883125884125885125886125887125888125889125890125891125892125893125894125895125896125897125898125899125900125901125902125903125904125905125906125907125908125909125910125911125912125913125914125915125916125917125918125919125920125921125922125923125924125925125926125927125928125929125930125931125932125933125934125935125936125937125938125939125940125941125942125943125944125945125946125947125948125949125950125951125952125953125954125955125956125957125958125959125960125961125962125963125964125965125966125967125968125969125970125971125972125973125974125975125976125977125978125979125980125981125982125983125984125985125986125987125988125989125990125991125992125993125994125995125996125997125998125999126000126001126002126003126004126005126006126007126008126009126010126011126012126013126014126015126016126017126018126019126020126021126022126023126024126025126026126027126028126029126030126031126032126033126034126035126036126037126038126039126040126041126042126043126044126045126046126047126048126049126050126051126052126053126054126055126056126057126058126059126060126061126062126063126064126065126066126067126068126069126070126071126072126073126074126075126076126077126078126079126080126081126082126083126084126085126086126087126088126089126090126091126092126093126094126095126096126097126098126099126100126101126102126103126104126105126106126107126108126109126110126111126112126113126114126115126116126117126118126119126120126121126122126123126124126125126126126127126128126129126130126131126132126133126134126135126136126137126138126139126140126141126142126143126144126145126146126147126148126149126150126151126152126153126154126155126156126157126158126159126160126161126162126163126164126165126166126167126168126169126170126171126172126173126174126175126176126177126178126179126180126181126182126183126184126185126186126187126188126189126190126191126192126193126194126195126196126197126198126199126200126201126202126203126204126205126206126207126208126209126210126211126212126213126214126215126216126217126218126219126220126221126222126223126224126225126226126227126228126229126230126231126232126233126234126235126236126237126238126239126240126241126242126243126244126245126246126247126248126249126250126251126252126253126254126255126256126257126258126259126260126261126262126263126264126265126266126267126268126269126270126271126272126273126274126275126276126277126278126279126280126281126282126283126284126285126286126287126288126289126290126291126292126293126294126295126296126297126298126299126300126301126302126303126304126305126306126307126308126309126310126311126312126313126314126315126316126317126318126319126320126321126322126323126324126325126326126327126328126329126330126331126332126333126334126335126336126337126338126339126340126341126342126343126344126345126346126347126348126349126350126351126352126353126354126355126356126357126358126359126360126361126362126363126364126365126366126367126368126369126370126371126372126373126374126375126376126377126378126379126380126381126382126383126384126385126386126387126388126389126390126391126392126393126394126395126396126397126398126399126400126401126402126403126404126405126406126407126408126409126410126411126412126413126414126415126416126417126418126419126420126421126422126423126424126425126426126427126428126429126430126431126432126433126434126435126436126437126438126439126440126441126442126443126444126445126446126447126448126449126450126451126452126453126454126455126456126457126458126459126460126461126462126463126464126465126466126467126468126469126470126471126472126473126474126475126476126477126478126479126480126481126482126483126484126485126486126487126488126489126490126491126492126493126494126495126496126497126498126499126500126501126502126503126504126505126506126507126508126509126510126511126512126513126514126515126516126517126518126519126520126521126522126523126524126525126526126527126528126529126530126531126532126533126534126535126536126537126538126539126540126541126542126543126544126545126546126547126548126549126550126551126552126553126554126555126556126557126558126559126560126561126562126563126564126565126566126567126568126569126570126571126572126573126574126575126576126577126578126579126580126581126582126583126584126585126586126587126588126589126590126591126592126593126594126595126596126597126598126599126600126601126602126603126604126605126606126607126608126609126610126611126612126613126614126615126616126617126618126619126620126621126622126623126624126625126626126627126628126629126630126631126632126633126634126635126636126637126638126639126640126641126642126643126644126645126646126647126648126649126650126651126652126653126654126655126656126657126658126659126660126661126662126663126664126665126666126667126668126669126670126671126672126673126674126675126676126677126678126679126680126681126682126683126684126685126686126687126688126689126690126691126692126693126694126695126696126697126698126699126700126701126702126703126704126705126706126707126708126709126710126711126712126713126714126715126716126717126718126719126720126721126722126723126724126725126726126727126728126729126730126731126732126733126734126735126736126737126738126739126740126741126742126743126744126745126746126747126748126749126750126751126752126753126754126755126756126757126758126759126760126761126762126763126764126765126766126767126768126769126770126771126772126773126774126775126776126777126778126779126780126781126782126783126784126785126786126787126788126789126790126791126792126793126794126795126796126797126798126799126800126801126802126803126804126805126806126807126808126809126810126811126812126813126814126815126816126817126818126819126820126821126822126823126824126825126826126827126828126829126830126831126832126833126834126835126836126837126838126839126840126841126842126843126844126845126846126847126848126849126850126851126852126853126854126855126856126857126858126859126860126861126862126863126864126865126866126867126868126869126870126871126872126873126874126875126876126877126878126879126880126881126882126883126884126885126886126887126888126889126890126891126892126893126894126895126896126897126898126899126900126901126902126903126904126905126906126907126908126909126910126911126912126913126914126915126916126917126918126919126920126921126922126923126924126925126926126927126928126929126930126931126932126933126934126935126936126937126938126939126940126941126942126943126944126945126946126947126948126949126950126951126952126953126954126955126956126957126958126959126960126961126962126963126964126965126966126967126968126969126970126971126972126973126974126975126976126977126978126979126980126981126982126983126984126985126986126987126988126989126990126991126992126993126994126995126996126997126998126999127000127001127002127003127004127005127006127007127008127009127010127011127012127013127014127015127016127017127018127019127020127021127022127023127024127025127026127027127028127029127030127031127032127033127034127035127036127037127038127039127040127041127042127043127044127045127046127047127048127049127050127051127052127053127054127055127056127057127058127059127060127061127062127063127064127065127066127067127068127069127070127071127072127073127074127075127076127077127078127079127080127081127082127083127084127085127086127087127088127089127090127091127092127093127094127095127096127097127098127099127100127101127102127103127104127105127106127107127108127109127110127111127112127113127114127115127116127117127118127119127120127121127122127123127124127125127126127127127128127129127130127131127132127133127134127135127136127137127138127139127140127141127142127143127144127145127146127147127148127149127150127151127152127153127154127155127156127157127158127159127160127161127162127163127164127165127166127167127168127169127170127171127172127173127174127175127176127177127178127179127180127181127182127183127184127185127186127187127188127189127190127191127192127193127194127195127196127197127198127199127200127201127202127203127204127205127206127207127208127209127210127211127212127213127214127215127216127217127218127219127220127221127222127223127224127225127226127227127228127229127230127231127232127233127234127235127236127237127238127239127240127241127242127243127244127245127246127247127248127249127250127251127252127253127254127255127256127257127258127259127260127261127262127263127264127265127266127267127268127269127270127271127272127273127274127275127276127277127278127279127280127281127282127283127284127285127286127287127288127289127290127291127292127293127294127295127296127297127298127299127300127301127302127303127304127305127306127307127308127309127310127311127312127313127314127315127316127317127318127319127320127321127322127323127324127325127326127327127328127329127330127331127332127333127334127335127336127337127338127339127340127341127342127343127344127345127346127347127348127349127350127351127352127353127354127355127356127357127358127359127360127361127362127363127364127365127366127367127368127369127370127371127372127373127374127375127376127377127378127379127380127381127382127383127384127385127386127387127388127389127390127391127392127393127394127395127396127397127398127399127400127401127402127403127404127405127406127407127408127409127410127411127412127413127414127415127416127417127418127419127420127421127422127423127424127425127426127427127428127429127430127431127432127433127434127435127436127437127438127439127440127441127442127443127444127445127446127447127448127449127450127451127452127453127454127455127456127457127458127459127460127461127462127463127464127465127466127467127468127469127470127471127472127473127474127475127476127477127478127479127480127481127482127483127484127485127486127487127488127489127490127491127492127493127494127495127496127497127498127499127500127501127502127503127504127505127506127507127508127509127510127511127512127513127514127515127516127517127518127519127520127521127522127523127524127525127526127527127528127529127530127531127532127533127534127535127536127537127538127539127540127541127542127543127544127545127546127547127548127549127550127551127552127553127554127555127556127557127558127559127560127561127562127563127564127565127566127567127568127569127570127571127572127573127574127575127576127577127578127579127580127581127582127583127584127585127586127587127588127589127590127591127592127593127594127595127596127597127598127599127600127601127602127603127604127605127606127607127608127609127610127611127612127613127614127615127616127617127618127619127620127621127622127623127624127625127626127627127628127629127630127631127632127633127634127635127636127637127638127639127640127641127642127643127644127645127646127647127648127649127650127651127652127653127654127655127656127657127658127659127660127661127662127663127664127665127666127667127668127669127670127671127672127673127674127675127676127677127678127679127680127681127682127683127684127685127686127687127688127689127690127691127692127693127694127695127696127697127698127699127700127701127702127703127704127705127706127707127708127709127710127711127712127713127714127715127716127717127718127719127720127721127722127723127724127725127726127727127728127729127730127731127732127733127734127735127736127737127738127739127740127741127742127743127744127745127746127747127748127749127750127751127752127753127754127755127756127757127758127759127760127761127762127763127764127765127766127767127768127769127770127771127772127773127774127775127776127777127778127779127780127781127782127783127784127785127786127787127788127789127790127791127792127793127794127795127796127797127798127799127800127801127802127803127804127805127806127807127808127809127810127811127812127813127814127815127816127817127818127819127820127821127822127823127824127825127826127827127828127829127830127831127832127833127834127835127836127837127838127839127840127841127842127843127844127845127846127847127848127849127850127851127852127853127854127855127856127857127858127859127860127861127862127863127864127865127866127867127868127869127870127871127872127873127874127875127876127877127878127879127880127881127882127883127884127885127886127887127888127889127890127891127892127893127894127895127896127897127898127899127900127901127902127903127904127905127906127907127908127909127910127911127912127913127914127915127916127917127918127919127920127921127922127923127924127925127926127927127928127929127930127931127932127933127934127935127936127937127938127939127940127941127942127943127944127945127946127947127948127949127950127951127952127953127954127955127956127957127958127959127960127961127962127963127964127965127966127967127968127969127970127971127972127973127974127975127976127977127978127979127980127981127982127983127984127985127986127987127988127989127990127991127992127993127994127995127996127997127998127999128000128001128002128003128004128005128006128007128008128009128010128011128012128013128014128015128016128017128018128019128020128021128022128023128024128025128026128027128028128029128030128031128032128033128034128035128036128037128038128039128040128041128042128043128044128045128046128047128048128049128050128051128052128053128054128055128056128057128058128059128060128061128062128063128064128065128066128067128068128069128070128071128072128073128074128075128076128077128078128079128080128081128082128083128084128085128086128087128088128089128090128091128092128093128094128095128096128097128098128099128100128101128102128103128104128105128106128107128108128109128110128111128112128113128114128115128116128117128118128119128120128121128122128123128124128125128126128127128128128129128130128131128132128133128134128135128136128137128138128139128140128141128142128143128144128145128146128147128148128149128150128151128152128153128154128155128156128157128158128159128160128161128162128163128164128165128166128167128168128169128170128171128172128173128174128175128176128177128178128179128180128181128182128183128184128185128186128187128188128189128190128191128192128193128194128195128196128197128198128199128200128201128202128203128204128205128206128207128208128209128210128211128212128213128214128215128216128217128218128219128220128221128222128223128224128225128226128227128228128229128230128231128232128233128234128235128236128237128238128239128240128241128242128243128244128245128246128247128248128249128250128251128252128253128254128255128256128257128258128259128260128261128262128263128264128265128266128267128268128269128270128271128272128273128274128275128276128277128278128279128280128281128282128283128284128285128286128287128288128289128290128291128292128293128294128295128296128297128298128299128300128301128302128303128304128305128306128307128308128309128310128311128312128313128314128315128316128317128318128319128320128321128322128323128324128325128326128327128328128329128330128331128332128333128334128335128336128337128338128339128340128341128342128343128344128345128346128347128348128349128350128351128352128353128354128355128356128357128358128359128360128361128362128363128364128365128366128367128368128369128370128371128372128373128374128375128376128377128378128379128380128381128382128383128384128385128386128387128388128389128390128391128392128393128394128395128396128397128398128399128400128401128402128403128404128405128406128407128408128409128410128411128412128413128414128415128416128417128418128419128420128421128422128423128424128425128426128427128428128429128430128431128432128433128434128435128436128437128438128439128440128441128442128443128444128445128446128447128448128449128450128451128452128453128454128455128456128457128458128459128460128461128462128463128464128465128466128467128468128469128470128471128472128473128474128475128476128477128478128479128480128481128482128483128484128485128486128487128488128489128490128491128492128493128494128495128496128497128498128499128500128501128502128503128504128505128506128507128508128509128510128511128512128513128514128515128516128517128518128519128520128521128522128523128524128525128526128527128528128529128530128531128532128533128534128535128536128537128538128539128540128541128542128543128544128545128546128547128548128549128550128551128552128553128554128555128556128557128558128559128560128561128562128563128564128565128566128567128568128569128570128571128572128573128574128575128576128577128578128579128580128581128582128583128584128585128586128587128588128589128590128591128592128593128594128595128596128597128598128599128600128601128602128603128604128605128606128607128608128609128610128611128612128613128614128615128616128617128618128619128620128621128622128623128624128625128626128627128628128629128630128631128632128633128634128635128636128637128638128639128640128641128642128643128644128645128646128647128648128649128650128651128652128653128654128655128656128657128658128659128660128661128662128663128664128665128666128667128668128669128670128671128672128673128674128675128676128677128678128679128680128681128682128683128684128685128686128687128688128689128690128691128692128693128694128695128696128697128698128699128700128701128702128703128704128705128706128707128708128709128710128711128712128713128714128715128716128717128718128719128720128721128722128723128724128725128726128727128728128729128730128731128732128733128734128735128736128737128738128739128740128741128742128743128744128745128746128747128748128749128750128751128752128753128754128755128756128757128758128759128760128761128762128763128764128765128766128767128768128769128770128771128772128773128774128775128776128777128778128779128780128781128782128783128784128785128786128787128788128789128790128791128792128793128794128795128796128797128798128799128800128801128802128803128804128805128806128807128808128809128810128811128812128813128814128815128816128817128818128819128820128821128822128823128824128825128826128827128828128829128830128831128832128833128834128835128836128837128838128839128840128841128842128843128844128845128846128847128848128849128850128851128852128853128854128855128856128857128858128859128860128861128862128863128864128865128866128867128868128869128870128871128872128873128874128875128876128877128878128879128880128881128882128883128884128885128886128887128888128889128890128891128892128893128894128895128896128897128898128899128900128901128902128903128904128905128906128907128908128909128910128911128912128913128914128915128916128917128918128919128920128921128922128923128924128925128926128927128928128929128930128931128932128933128934128935128936128937128938128939128940128941128942128943128944128945128946128947128948128949128950128951128952128953128954128955128956128957128958128959128960128961128962128963128964128965128966128967128968128969128970128971128972128973128974128975128976128977128978128979128980128981128982128983128984128985128986128987128988128989128990128991128992128993128994128995128996128997128998128999129000129001129002129003129004129005129006129007129008129009129010129011129012129013129014129015129016129017129018129019129020129021129022129023129024129025129026129027129028129029129030129031129032129033129034129035129036129037129038129039129040129041129042129043129044129045129046129047129048129049129050129051129052129053129054129055129056129057129058129059129060129061129062129063129064129065129066129067129068129069129070129071129072129073129074129075129076129077129078129079129080129081129082129083129084129085129086129087129088129089129090129091129092129093129094129095129096129097129098129099129100129101129102129103129104129105129106129107129108129109129110129111129112129113129114129115129116129117129118129119129120129121129122129123129124129125129126129127129128129129129130129131129132129133129134129135129136129137129138129139129140129141129142129143129144129145129146129147129148129149129150129151129152129153129154129155129156129157129158129159129160129161129162129163129164129165129166129167129168129169129170129171129172129173129174129175129176129177129178129179129180129181129182129183129184129185129186129187129188129189129190129191129192129193129194129195129196129197129198129199129200129201129202129203129204129205129206129207129208129209129210129211129212129213129214129215129216129217129218129219129220129221129222129223129224129225129226129227129228129229129230129231129232129233129234129235129236129237129238129239129240129241129242129243129244129245129246129247129248129249129250129251129252129253129254129255129256129257129258129259129260129261129262129263129264129265129266129267129268129269129270129271129272129273129274129275129276129277129278129279129280129281129282129283129284129285129286129287129288129289129290129291129292129293129294129295129296129297129298129299129300129301129302129303129304129305129306129307129308129309129310129311129312129313129314129315129316129317129318129319129320129321129322129323129324129325129326129327129328129329129330129331129332129333129334129335129336129337129338129339129340129341129342129343129344129345129346129347129348129349129350129351129352129353129354129355129356129357129358129359129360129361129362129363129364129365129366129367129368129369129370129371129372129373129374129375129376129377129378129379129380129381129382129383129384129385129386129387129388129389129390129391129392129393129394129395129396129397129398129399129400129401129402129403129404129405129406129407129408129409129410129411129412129413129414129415129416129417129418129419129420129421129422129423129424129425129426129427129428129429129430129431129432129433129434129435129436129437129438129439129440129441129442129443129444129445129446129447129448129449129450129451129452129453129454129455129456129457129458129459129460129461129462129463129464129465129466129467129468129469129470129471129472129473129474129475129476129477129478129479129480129481129482129483129484129485129486129487129488129489129490129491129492129493129494129495129496129497129498129499129500129501129502129503129504129505129506129507129508129509129510129511129512129513129514129515129516129517129518129519129520129521129522129523129524129525129526129527129528129529129530129531129532129533129534129535129536129537129538129539129540129541129542129543129544129545129546129547129548129549129550129551129552129553129554129555129556129557129558129559129560129561129562129563129564129565129566129567129568129569129570129571129572129573129574129575129576129577129578129579129580129581129582129583129584129585129586129587129588129589129590129591129592129593129594129595129596129597129598129599129600129601129602129603129604129605129606129607129608129609129610129611129612129613129614129615129616129617129618129619129620129621129622129623129624129625129626129627129628129629129630129631129632129633129634129635129636129637129638129639129640129641129642129643129644129645129646129647129648129649129650129651129652129653129654129655129656129657129658129659129660129661129662129663129664129665129666129667129668129669129670129671129672129673129674129675129676129677129678129679129680129681129682129683129684129685129686129687129688129689129690129691129692129693129694129695129696129697129698129699129700129701129702129703129704129705129706129707129708129709129710129711129712129713129714129715129716129717129718129719129720129721129722129723129724129725129726129727129728129729129730129731129732129733129734129735129736129737129738129739129740129741129742129743129744129745129746129747129748129749129750129751129752129753129754129755129756129757129758129759129760129761129762129763129764129765129766129767129768129769129770129771129772129773129774129775129776129777129778129779129780129781129782129783129784129785129786129787129788129789129790129791129792129793129794129795129796129797129798129799129800129801129802129803129804129805129806129807129808129809129810129811129812129813129814129815129816129817129818129819129820129821129822129823129824129825129826129827129828129829129830129831129832129833129834129835129836129837129838129839129840129841129842129843129844129845129846129847129848129849129850129851129852129853129854129855129856129857129858129859129860129861129862129863129864129865129866129867129868129869129870129871129872129873129874129875129876129877129878129879129880129881129882129883129884129885129886129887129888129889129890129891129892129893129894129895129896129897129898129899129900129901129902129903129904129905129906129907129908129909129910129911129912129913129914129915129916129917129918129919129920129921129922129923129924129925129926129927129928129929129930129931129932129933129934129935129936129937129938129939129940129941129942129943129944129945129946129947129948129949129950129951129952129953129954129955129956129957129958129959129960129961129962129963129964129965129966129967129968129969129970129971129972129973129974129975129976129977129978129979129980129981129982129983129984129985129986129987129988129989129990129991129992129993129994129995129996129997129998129999130000130001130002130003130004130005130006130007130008130009130010130011130012130013130014130015130016130017130018130019130020130021130022130023130024130025130026130027130028130029130030130031130032130033130034130035130036130037130038130039130040130041130042130043130044130045130046130047130048130049130050130051130052130053130054130055130056130057130058130059130060130061130062130063130064130065130066130067130068130069130070130071130072130073130074130075130076130077130078130079130080130081130082130083130084130085130086130087130088130089130090130091130092130093130094130095130096130097130098130099130100130101130102130103130104130105130106130107130108130109130110130111130112130113130114130115130116130117130118130119130120130121130122130123130124130125130126130127130128130129130130130131130132130133130134130135130136130137130138130139130140130141130142130143130144130145130146130147130148130149130150130151130152130153130154130155130156130157130158130159130160130161130162130163130164130165130166130167130168130169130170130171130172130173130174130175130176130177130178130179130180130181130182130183130184130185130186130187130188130189130190130191130192130193130194130195130196130197130198130199130200130201130202130203130204130205130206130207130208130209130210130211130212130213130214130215130216130217130218130219130220130221130222130223130224130225130226130227130228130229130230130231130232130233130234130235130236130237130238130239130240130241130242130243130244130245130246130247130248130249130250130251130252130253130254130255130256130257130258130259130260130261130262130263130264130265130266130267130268130269130270130271130272130273130274130275130276130277130278130279130280130281130282130283130284130285130286130287130288130289130290130291130292130293130294130295130296130297130298130299130300130301130302130303130304130305130306130307130308130309130310130311130312130313130314130315130316130317130318130319130320130321130322130323130324130325130326130327130328130329130330130331130332130333130334130335130336130337130338130339130340130341130342130343130344130345130346130347130348130349130350130351130352130353130354130355130356130357130358130359130360130361130362130363130364130365130366130367130368130369130370130371130372130373130374130375130376130377130378130379130380130381130382130383130384130385130386130387130388130389130390130391130392130393130394130395130396130397130398130399130400130401130402130403130404130405130406130407130408130409130410130411130412130413130414130415130416130417130418130419130420130421130422130423130424130425130426130427130428130429130430130431130432130433130434130435130436130437130438130439130440130441130442130443130444130445130446130447130448130449130450130451130452130453130454130455130456130457130458130459130460130461130462130463130464130465130466130467130468130469130470130471130472130473130474130475130476130477130478130479130480130481130482130483130484130485130486130487130488130489130490130491130492130493130494130495130496130497130498130499130500130501130502130503130504130505130506130507130508130509130510130511130512130513130514130515130516130517130518130519130520130521130522130523130524130525130526130527130528130529130530130531130532130533130534130535130536130537130538130539130540130541130542130543130544130545130546130547130548130549130550130551130552130553130554130555130556130557130558130559130560130561130562130563130564130565130566130567130568130569130570130571130572130573130574130575130576130577130578130579130580130581130582130583130584130585130586130587130588130589130590130591130592130593130594130595130596130597130598130599130600130601130602130603130604130605130606130607130608130609130610130611130612130613130614130615130616130617130618130619130620130621130622130623130624130625130626130627130628130629130630130631130632130633130634130635130636130637130638130639130640130641130642130643130644130645130646130647130648130649130650130651130652130653130654130655130656130657130658130659130660130661130662130663130664130665130666130667130668130669130670130671130672130673130674130675130676130677130678130679130680130681130682130683130684130685130686130687130688130689130690130691130692130693130694130695130696130697130698130699130700130701130702130703130704130705130706130707130708130709130710130711130712130713130714130715130716130717130718130719130720130721130722130723130724130725130726130727130728130729130730130731130732130733130734130735130736130737130738130739130740130741130742130743130744130745130746130747130748130749130750130751130752130753130754130755130756130757130758130759130760130761130762130763130764130765130766130767130768130769130770130771130772130773130774130775130776130777130778130779130780130781130782130783130784130785130786130787130788130789130790130791130792130793130794130795130796130797130798130799130800130801130802130803130804130805130806130807130808130809130810130811130812130813130814130815130816130817130818130819130820130821130822130823130824130825130826130827130828130829130830130831130832130833130834130835130836130837130838130839130840130841130842130843130844130845130846130847130848130849130850130851130852130853130854130855130856130857130858130859130860130861130862130863130864130865130866130867130868130869130870130871130872130873130874130875130876130877130878130879130880130881130882130883130884130885130886130887130888130889130890130891130892130893130894130895130896130897130898130899130900130901130902130903130904130905130906130907130908130909130910130911130912130913130914130915130916130917130918130919130920130921130922130923130924130925130926130927130928130929130930130931130932130933130934130935130936130937130938130939130940130941130942130943130944130945130946130947130948130949130950130951130952130953130954130955130956130957130958130959130960130961130962130963130964130965130966130967130968130969130970130971130972130973130974130975130976130977130978130979130980130981130982130983130984130985130986130987130988130989130990130991130992130993130994130995130996130997130998130999131000131001131002131003131004131005131006131007131008131009131010131011131012131013131014131015131016131017131018131019131020131021131022131023131024131025131026131027131028131029131030131031131032131033131034131035131036131037131038131039131040131041131042131043131044131045131046131047131048131049131050131051131052131053131054131055131056131057131058131059131060131061131062131063131064131065131066131067131068131069131070131071131072131073131074131075131076131077131078131079131080131081131082131083131084131085131086131087131088131089131090131091131092131093131094131095131096131097131098131099131100131101131102131103131104131105131106131107131108131109131110131111131112131113131114131115131116131117131118131119131120131121131122131123131124131125131126131127131128131129131130131131131132131133131134131135131136131137131138131139131140131141131142131143131144131145131146131147131148131149131150131151131152131153131154131155131156131157131158131159131160131161131162131163131164131165131166131167131168131169131170131171131172131173131174131175131176131177131178131179131180131181131182131183131184131185131186131187131188131189131190131191131192131193131194131195131196131197131198131199131200131201131202131203131204131205131206131207131208131209131210131211131212131213131214131215131216131217131218131219131220131221131222131223131224131225131226131227131228131229131230131231131232131233131234131235131236131237131238131239131240131241131242131243131244131245131246131247131248131249131250131251131252131253131254131255131256131257131258131259131260131261131262131263131264131265131266131267131268131269131270131271131272131273131274131275131276131277131278131279131280131281131282131283131284131285131286131287131288131289131290131291131292131293131294131295131296131297131298131299131300131301131302131303131304131305131306131307131308131309131310131311131312131313131314131315131316131317131318131319131320131321131322131323131324131325131326131327131328131329131330131331131332131333131334131335131336131337131338131339131340131341131342131343131344131345131346131347131348131349131350131351131352131353131354131355131356131357131358131359131360131361131362131363131364131365131366131367131368131369131370131371131372131373131374131375131376131377131378131379131380131381131382131383131384131385131386131387131388131389131390131391131392131393131394131395131396131397131398131399131400131401131402131403131404131405131406131407131408131409131410131411131412131413131414131415131416131417131418131419131420131421131422131423131424131425131426131427131428131429131430131431131432131433131434131435131436131437131438131439131440131441131442131443131444131445131446131447131448131449131450131451131452131453131454131455131456131457131458131459131460131461131462131463131464131465131466131467131468131469131470131471131472131473131474131475131476131477131478131479131480131481131482131483131484131485131486131487131488131489131490131491131492131493131494131495131496131497131498131499131500131501131502131503131504131505131506131507131508131509131510131511131512131513131514131515131516131517131518131519131520131521131522131523131524131525131526131527131528131529131530131531131532131533131534131535131536131537131538131539131540131541131542131543131544131545131546131547131548131549131550131551131552131553131554131555131556131557131558131559131560131561131562131563131564131565131566131567131568131569131570131571131572131573131574131575131576131577131578131579131580131581131582131583131584131585131586131587131588131589131590131591131592131593131594131595131596131597131598131599131600131601131602131603131604131605131606131607131608131609131610131611131612131613131614131615131616131617131618131619131620131621131622131623131624131625131626131627131628131629131630131631131632131633131634131635131636131637131638131639131640131641131642131643131644131645131646131647131648131649131650131651131652131653131654131655131656131657131658131659131660131661131662131663131664131665131666131667131668131669131670131671131672131673131674131675131676131677131678131679131680131681131682131683131684131685131686131687131688131689131690131691131692131693131694131695131696131697131698131699131700131701131702131703131704131705131706131707131708131709131710131711131712131713131714131715131716131717131718131719131720131721131722131723131724131725131726131727131728131729131730131731131732131733131734131735131736131737131738131739131740131741131742131743131744131745131746131747131748131749131750131751131752131753131754131755131756131757131758131759131760131761131762131763131764131765131766131767131768131769131770131771131772131773131774131775131776131777131778131779131780131781131782131783131784131785131786131787131788131789131790131791131792131793131794131795131796131797131798131799131800131801131802131803131804131805131806131807131808131809131810131811131812131813131814131815131816131817131818131819131820131821131822131823131824131825131826131827131828131829131830131831131832131833131834131835131836131837131838131839131840131841131842131843131844131845131846131847131848131849131850131851131852131853131854131855131856131857131858131859131860131861131862131863131864131865131866131867131868131869131870131871131872131873131874131875131876131877131878131879131880131881131882131883131884131885131886131887131888131889131890131891131892131893131894131895131896131897131898131899131900131901131902131903131904131905131906131907131908131909131910131911131912131913131914131915131916131917131918131919131920131921131922131923131924131925131926131927131928131929131930131931131932131933131934131935131936131937131938131939131940131941131942131943131944131945131946131947131948131949131950131951131952131953131954131955131956131957131958131959131960131961131962131963131964131965131966131967131968131969131970131971131972131973131974131975131976131977131978131979131980131981131982131983131984131985131986131987131988131989131990131991131992131993131994131995131996131997131998131999132000132001132002132003132004132005132006132007132008132009132010132011132012132013132014132015132016132017132018132019132020132021132022132023132024132025132026132027132028132029132030132031132032132033132034132035132036132037132038132039132040132041132042132043132044132045132046132047132048132049132050132051132052132053132054132055132056132057132058132059132060132061132062132063132064132065132066132067132068132069132070132071132072132073132074132075132076132077132078132079132080132081132082132083132084132085132086132087132088132089132090132091132092132093132094132095132096132097132098132099132100132101132102132103132104132105132106132107132108132109132110132111132112132113132114132115132116132117132118132119132120132121132122132123132124132125132126132127132128132129132130132131132132132133132134132135132136132137132138132139132140132141132142132143132144132145132146132147132148132149132150132151132152132153132154132155132156132157132158132159132160132161132162132163132164132165132166132167132168132169132170132171132172132173132174132175132176132177132178132179132180132181132182132183132184132185132186132187132188132189132190132191132192132193132194132195132196132197132198132199132200132201132202132203132204132205132206132207132208132209132210132211132212132213132214132215132216132217132218132219132220132221132222132223132224132225132226132227132228132229132230132231132232132233132234132235132236132237132238132239132240132241132242132243132244132245132246132247132248132249132250132251132252132253132254132255132256132257132258132259132260132261132262132263132264132265132266132267132268132269132270132271132272132273132274132275132276132277132278132279132280132281132282132283132284132285132286132287132288132289132290132291132292132293132294132295132296132297132298132299132300132301132302132303132304132305132306132307132308132309132310132311132312132313132314132315132316132317132318132319132320132321132322132323132324132325132326132327132328132329132330132331132332132333132334132335132336132337132338132339132340132341132342132343132344132345132346132347132348132349132350132351132352132353132354132355132356132357132358132359132360132361132362132363132364132365132366132367132368132369132370132371132372132373132374132375132376132377132378132379132380132381132382132383132384132385132386132387132388132389132390132391132392132393132394132395132396132397132398132399132400132401132402132403132404132405132406132407132408132409132410132411132412132413132414132415132416132417132418132419132420132421132422132423132424132425132426132427132428132429132430132431132432132433132434132435132436132437132438132439132440132441132442132443132444132445132446132447132448132449132450132451132452132453132454132455132456132457132458132459132460132461132462132463132464132465132466132467132468132469132470132471132472132473132474132475132476132477132478132479132480132481132482132483132484132485132486132487132488132489132490132491132492132493132494132495132496132497132498132499132500132501132502132503132504132505132506132507132508132509132510132511132512132513132514132515132516132517132518132519132520132521132522132523132524132525132526132527132528132529132530132531132532132533132534132535132536132537132538132539132540132541132542132543132544132545132546132547132548132549132550132551132552132553132554132555132556132557132558132559132560132561132562132563132564132565132566132567132568132569132570132571132572132573132574132575132576132577132578132579132580132581132582132583132584132585132586132587132588132589132590132591132592132593132594132595132596132597132598132599132600132601132602132603132604132605132606132607132608132609132610132611132612132613132614132615132616132617132618132619132620132621132622132623132624132625132626132627132628132629132630132631132632132633132634132635132636132637132638132639132640132641132642132643132644132645132646132647132648132649132650132651132652132653132654132655132656132657132658132659132660132661132662132663132664132665132666132667132668132669132670132671132672132673132674132675132676132677132678132679132680132681132682132683132684132685132686132687132688132689132690132691132692132693132694132695132696132697132698132699132700132701132702132703132704132705132706132707132708132709132710132711132712132713132714132715132716132717132718132719132720132721132722132723132724132725132726132727132728132729132730132731132732132733132734132735132736132737132738132739132740132741132742132743132744132745132746132747132748132749132750132751132752132753132754132755132756132757132758132759132760132761132762132763132764132765132766132767132768132769132770132771132772132773132774132775132776132777132778132779132780132781132782132783132784132785132786132787132788132789132790132791132792132793132794132795132796132797132798132799132800132801132802132803132804132805132806132807132808132809132810132811132812132813132814132815132816132817132818132819132820132821132822132823132824132825132826132827132828132829132830132831132832132833132834132835132836132837132838132839132840132841132842132843132844132845132846132847132848132849132850132851132852132853132854132855132856132857132858132859132860132861132862132863132864132865132866132867132868132869132870132871132872132873132874132875132876132877132878132879132880132881132882132883132884132885132886132887132888132889132890132891132892132893132894132895132896132897132898132899132900132901132902132903132904132905132906132907132908132909132910132911132912132913132914132915132916132917132918132919132920132921132922132923132924132925132926132927132928132929132930132931132932132933132934132935132936132937132938132939132940132941132942132943132944132945132946132947132948132949132950132951132952132953132954132955132956132957132958132959132960132961132962132963132964132965132966132967132968132969132970132971132972132973132974132975132976132977132978132979132980132981132982132983132984132985132986132987132988132989132990132991132992132993132994132995132996132997132998132999133000133001133002133003133004133005133006133007133008133009133010133011133012133013133014133015133016133017133018133019133020133021133022133023133024133025133026133027133028133029133030133031133032133033133034133035133036133037133038133039133040133041133042133043133044133045133046133047133048133049133050133051133052133053133054133055133056133057133058133059133060133061133062133063133064133065133066133067133068133069133070133071133072133073133074133075133076133077133078133079133080133081133082133083133084133085133086133087133088133089133090133091133092133093133094133095133096133097133098133099133100133101133102133103133104133105133106133107133108133109133110133111133112133113133114133115133116133117133118133119133120133121133122133123133124133125133126133127133128133129133130133131133132133133133134133135133136133137133138133139133140133141133142133143133144133145133146133147133148133149133150133151133152133153133154133155133156133157133158133159133160133161133162133163133164133165133166133167133168133169133170133171133172133173133174133175133176133177133178133179133180133181133182133183133184133185133186133187133188133189133190133191133192133193133194133195133196133197133198133199133200133201133202133203133204133205133206133207133208133209133210133211133212133213133214133215133216133217133218133219133220133221133222133223133224133225133226133227133228133229133230133231133232133233133234133235133236133237133238133239133240133241133242133243133244133245133246133247133248133249133250133251133252133253133254133255133256133257133258133259133260133261133262133263133264133265133266133267133268133269133270133271133272133273133274133275133276133277133278133279133280133281133282133283133284133285133286133287133288133289133290133291133292133293133294133295133296133297133298133299133300133301133302133303133304133305133306133307133308133309133310133311133312133313133314133315133316133317133318133319133320133321133322133323133324133325133326133327133328133329133330133331133332133333133334133335133336133337133338133339133340133341133342133343133344133345133346133347133348133349133350133351133352133353133354133355133356133357133358133359133360133361133362133363133364133365133366133367133368133369133370133371133372133373133374133375133376133377133378133379133380133381133382133383133384133385133386133387133388133389133390133391133392133393133394133395133396133397133398133399133400133401133402133403133404133405133406133407133408133409133410133411133412133413133414133415133416133417133418133419133420133421133422133423133424133425133426133427133428133429133430133431133432133433133434133435133436133437133438133439133440133441133442133443133444133445133446133447133448133449133450133451133452133453133454133455133456133457133458133459133460133461133462133463133464133465133466133467133468133469133470133471133472133473133474133475133476133477133478133479133480133481133482133483133484133485133486133487133488133489133490133491133492133493133494133495133496133497133498133499133500133501133502133503133504133505133506133507133508133509133510133511133512133513133514133515133516133517133518133519133520133521133522133523133524133525133526133527133528133529133530133531133532133533133534133535133536133537133538133539133540133541133542133543133544133545133546133547133548133549133550133551133552133553133554133555133556133557133558133559133560133561133562133563133564133565133566133567133568133569133570133571133572133573133574133575133576133577133578133579133580133581133582133583133584133585133586133587133588133589133590133591133592133593133594133595133596133597133598133599133600133601133602133603133604133605133606133607133608133609133610133611133612133613133614133615133616133617133618133619133620133621133622133623133624133625133626133627133628133629133630133631133632133633133634133635133636133637133638133639133640133641133642133643133644133645133646133647133648133649133650133651133652133653133654133655133656133657133658133659133660133661133662133663133664133665133666133667133668133669133670133671133672133673133674133675133676133677133678133679133680133681133682133683133684133685133686133687133688133689133690133691133692133693133694133695133696133697133698133699133700133701133702133703133704133705133706133707133708133709133710133711133712133713133714133715133716133717133718133719133720133721133722133723133724133725133726133727133728133729133730133731133732133733133734133735133736133737133738133739133740133741133742133743133744133745133746133747133748133749133750133751133752133753133754133755133756133757133758133759133760133761133762133763133764133765133766133767133768133769133770133771133772133773133774133775133776133777133778133779133780133781133782133783133784133785133786133787133788133789133790133791133792133793133794133795133796133797133798133799133800133801133802133803133804133805133806133807133808133809133810133811133812133813133814133815133816133817133818133819133820133821133822133823133824133825133826133827133828133829133830133831133832133833133834133835133836133837133838133839133840133841133842133843133844133845133846133847133848133849133850133851133852133853133854133855133856133857133858133859133860133861133862133863133864133865133866133867133868133869133870133871133872133873133874133875133876133877133878133879133880133881133882133883133884133885133886133887133888133889133890133891133892133893133894133895133896133897133898133899133900133901133902133903133904133905133906133907133908133909133910133911133912133913133914133915133916133917133918133919133920133921133922133923133924133925133926133927133928133929133930133931133932133933133934133935133936133937133938133939133940133941133942133943133944133945133946133947133948133949133950133951133952133953133954133955133956133957133958133959133960133961133962133963133964133965133966133967133968133969133970133971133972133973133974133975133976133977133978133979133980133981133982133983133984133985133986133987133988133989133990133991133992133993133994133995133996133997133998133999134000134001134002134003134004134005134006134007134008134009134010134011134012134013134014134015134016134017134018134019134020134021134022134023134024134025134026134027134028134029134030134031134032134033134034134035134036134037134038134039134040134041134042134043134044134045134046134047134048134049134050134051134052134053134054134055134056134057134058134059134060134061134062134063134064134065134066134067134068134069134070134071134072134073134074134075134076134077134078134079134080134081134082134083134084134085134086134087134088134089134090134091134092134093134094134095134096134097134098134099134100134101134102134103134104134105134106134107134108134109134110134111134112134113134114134115134116134117134118134119134120134121134122134123134124134125134126134127134128134129134130134131134132134133134134134135134136134137134138134139134140134141134142134143134144134145134146134147134148134149134150134151134152134153134154134155134156134157134158134159134160134161134162134163134164134165134166134167134168134169134170134171134172134173134174134175134176134177134178134179134180134181134182134183134184134185134186134187134188134189134190134191134192134193134194134195134196134197134198134199134200134201134202134203134204134205134206134207134208134209134210134211134212134213134214134215134216134217134218134219134220134221134222134223134224134225134226134227134228134229134230134231134232134233134234134235134236134237134238134239134240134241134242134243134244134245134246134247134248134249134250134251134252134253134254134255134256134257134258134259134260134261134262134263134264134265134266134267134268134269134270134271134272134273134274134275134276134277134278134279134280134281134282134283134284134285134286134287134288134289134290134291134292134293134294134295134296134297134298134299134300134301134302134303134304134305134306134307134308134309134310134311134312134313134314134315134316134317134318134319134320134321134322134323134324134325134326134327134328134329134330134331134332134333134334134335134336134337134338134339134340134341134342134343134344134345134346134347134348134349134350134351134352134353134354134355134356134357134358134359134360134361134362134363134364134365134366134367134368134369134370134371134372134373134374134375134376134377134378134379134380134381134382134383134384134385134386134387134388134389134390134391134392134393134394134395134396134397134398134399134400134401134402134403134404134405134406134407134408134409134410134411134412134413134414134415134416134417134418134419134420134421134422134423134424134425134426134427134428134429134430134431134432134433134434134435134436134437134438134439134440134441134442134443134444134445134446134447134448134449134450134451134452134453134454134455134456134457134458134459134460134461134462134463134464134465134466134467134468134469134470134471134472134473134474134475134476134477134478134479134480134481134482134483134484134485134486134487134488134489134490134491134492134493134494134495134496134497134498134499134500134501134502134503134504134505134506134507134508134509134510134511134512134513134514134515134516134517134518134519134520134521134522134523134524134525134526134527134528134529134530134531134532134533134534134535134536134537134538134539134540134541134542134543134544134545134546134547134548134549134550134551134552134553134554134555134556134557134558134559134560134561134562134563134564134565134566134567134568134569134570134571134572134573134574134575134576134577134578134579134580134581134582134583134584134585134586134587134588134589134590134591134592134593134594134595134596134597134598134599134600134601134602134603134604134605134606134607134608134609134610134611134612134613134614134615134616134617134618134619134620134621134622134623134624134625134626134627134628134629134630134631134632134633134634134635134636134637134638134639134640134641134642134643134644134645134646134647134648134649134650134651134652134653134654134655134656134657134658134659134660134661134662134663134664134665134666134667134668134669134670134671134672134673134674134675134676134677134678134679134680134681134682134683134684134685134686134687134688134689134690134691134692134693134694134695134696134697134698134699134700134701134702134703134704134705134706134707134708134709134710134711134712134713134714134715134716134717134718134719134720134721134722134723134724134725134726134727134728134729134730134731134732134733134734134735134736134737134738134739134740134741134742134743134744134745134746134747134748134749134750134751134752134753134754134755134756134757134758134759134760134761134762134763134764134765134766134767134768134769134770134771134772134773134774134775134776134777134778134779134780134781134782134783134784134785134786134787134788134789134790134791134792134793134794134795134796134797134798134799134800134801134802134803134804134805134806134807134808134809134810134811134812134813134814134815134816134817134818134819134820134821134822134823134824134825134826134827134828134829134830134831134832134833134834134835134836134837134838134839134840134841134842134843134844134845134846134847134848134849134850134851134852134853134854134855134856134857134858134859134860134861134862134863134864134865134866134867134868134869134870134871134872134873134874134875134876134877134878134879134880134881134882134883134884134885134886134887134888134889134890134891134892134893134894134895134896134897134898134899134900134901134902134903134904134905134906134907134908134909134910134911134912134913134914134915134916134917134918134919134920134921134922134923134924134925134926134927134928134929134930134931134932134933134934134935134936134937134938134939134940134941134942134943134944134945134946134947134948134949134950134951134952134953134954134955134956134957134958134959134960134961134962134963134964134965134966134967134968134969134970134971134972134973134974134975134976134977134978134979134980134981134982134983134984134985134986134987134988134989134990134991134992134993134994134995134996134997134998134999135000135001135002135003135004135005135006135007135008135009135010135011135012135013135014135015135016135017135018135019135020135021135022135023135024135025135026135027135028135029135030135031135032135033135034135035135036135037135038135039135040135041135042135043135044135045135046135047135048135049135050135051135052135053135054135055135056135057135058135059135060135061135062135063135064135065135066135067135068135069135070135071135072135073135074135075135076135077135078135079135080135081135082135083135084135085135086135087135088135089135090135091135092135093135094135095135096135097135098135099135100135101135102135103135104135105135106135107135108135109135110135111135112135113135114135115135116135117135118135119135120135121135122135123135124135125135126135127135128135129135130135131135132135133135134135135135136135137135138135139135140135141135142135143135144135145135146135147135148135149135150135151135152135153135154135155135156135157135158135159135160135161135162135163135164135165135166135167135168135169135170135171135172135173135174135175135176135177135178135179135180135181135182135183135184135185135186135187135188135189135190135191135192135193135194135195135196135197135198135199135200135201135202135203135204135205135206135207135208135209135210135211135212135213135214135215135216135217135218135219135220135221135222135223135224135225135226135227135228135229135230135231135232135233135234135235135236135237135238135239135240135241135242135243135244135245135246135247135248135249135250135251135252135253135254135255135256135257135258135259135260135261135262135263135264135265135266135267135268135269135270135271135272135273135274135275135276135277135278135279135280135281135282135283135284135285135286135287135288135289135290135291135292135293135294135295135296135297135298135299135300135301135302135303135304135305135306135307135308135309135310135311135312135313135314135315135316135317135318135319135320135321135322135323135324135325135326135327135328135329135330135331135332135333135334135335135336135337135338135339135340135341135342135343135344135345135346135347135348135349135350135351135352135353135354135355135356135357135358135359135360135361135362135363135364135365135366135367135368135369135370135371135372135373135374135375135376135377135378135379135380135381135382135383135384135385135386135387135388135389135390135391135392135393135394135395135396135397135398135399135400135401135402135403135404135405135406135407135408135409135410135411135412135413135414135415135416135417135418135419135420135421135422135423135424135425135426135427135428135429135430135431135432135433135434135435135436135437135438135439135440135441135442135443135444135445135446135447135448135449135450135451135452135453135454135455135456135457135458135459135460135461135462135463135464135465135466135467135468135469135470135471135472135473135474135475135476135477135478135479135480135481135482135483135484135485135486135487135488135489135490135491135492135493135494135495135496135497135498135499135500135501135502135503135504135505135506135507135508135509135510135511135512135513135514135515135516135517135518135519135520135521135522135523135524135525135526135527135528135529135530135531135532135533135534135535135536135537135538135539135540135541135542135543135544135545135546135547135548135549135550135551135552135553135554135555135556135557135558135559135560135561135562135563135564135565135566135567135568135569135570135571135572135573135574135575135576135577135578135579135580135581135582135583135584135585135586135587135588135589135590135591135592135593135594135595135596135597135598135599135600135601135602135603135604135605135606135607135608135609135610135611135612135613135614135615135616135617135618135619135620135621135622135623135624135625135626135627135628135629135630135631135632135633135634135635135636135637135638135639135640135641135642135643135644135645135646135647135648135649135650135651135652135653135654135655135656135657135658135659135660135661135662135663135664135665135666135667135668135669135670135671135672135673135674135675135676135677135678135679135680135681135682135683135684135685135686135687135688135689135690135691135692135693135694135695135696135697135698135699135700135701135702135703135704135705135706135707135708135709135710135711135712135713135714135715135716135717135718135719135720135721135722135723135724135725135726135727135728135729135730135731135732135733135734135735135736135737135738135739135740135741135742135743135744135745135746135747135748135749135750135751135752135753135754135755135756135757135758135759135760135761135762135763135764135765135766135767135768135769135770135771135772135773135774135775135776135777135778135779135780135781135782135783135784135785135786135787135788135789135790135791135792135793135794135795135796135797135798135799135800135801135802135803135804135805135806135807135808135809135810135811135812135813135814135815135816135817135818135819135820135821135822135823135824135825135826135827135828135829135830135831135832135833135834135835135836135837135838135839135840135841135842135843135844135845135846135847135848135849135850135851135852135853135854135855135856135857135858135859135860135861135862135863135864135865135866135867135868135869135870135871135872135873135874135875135876135877135878135879135880135881135882135883135884135885135886135887135888135889135890135891135892135893135894135895135896135897135898135899135900135901135902135903135904135905135906135907135908135909135910135911135912135913135914135915135916135917135918135919135920135921135922135923135924135925135926135927135928135929135930135931135932135933135934135935135936135937135938135939135940135941135942135943135944135945135946135947135948135949135950135951135952135953135954135955135956135957135958135959135960135961135962135963135964135965135966135967135968135969135970135971135972135973135974135975135976135977135978135979135980135981135982135983135984135985135986135987135988135989135990135991135992135993135994135995135996135997135998135999136000136001136002136003136004136005136006136007136008136009136010136011136012136013136014136015136016136017136018136019136020136021136022136023136024136025136026136027136028136029136030136031136032136033136034136035136036136037136038136039136040136041136042136043136044136045136046136047136048136049136050136051136052136053136054136055136056136057136058136059136060136061136062136063136064136065136066136067136068136069136070136071136072136073136074136075136076136077136078136079136080136081136082136083136084136085136086136087136088136089136090136091136092136093136094136095136096136097136098136099136100136101136102136103136104136105136106136107136108136109136110136111136112136113136114136115136116136117136118136119136120136121136122136123136124136125136126136127136128136129136130136131136132136133136134136135136136136137136138136139136140136141136142136143136144136145136146136147136148136149136150136151136152136153136154136155136156136157136158136159136160136161136162136163136164136165136166136167136168136169136170136171136172136173136174136175136176136177136178136179136180136181136182136183136184136185136186136187136188136189136190136191136192136193136194136195136196136197136198136199136200136201136202136203136204136205136206136207136208136209136210136211136212136213136214136215136216136217136218136219136220136221136222136223136224136225136226136227136228136229136230136231136232136233136234136235136236136237136238136239136240136241136242136243136244136245136246136247136248136249136250136251136252136253136254136255136256136257136258136259136260136261136262136263136264136265136266136267136268136269136270136271136272136273136274136275136276136277136278136279136280136281136282136283136284136285136286136287136288136289136290136291136292136293136294136295136296136297136298136299136300136301136302136303136304136305136306136307136308136309136310136311136312136313136314136315136316136317136318136319136320136321136322136323136324136325136326136327136328136329136330136331136332136333136334136335136336136337136338136339136340136341136342136343136344136345136346136347136348136349136350136351136352136353136354136355136356136357136358136359136360136361136362136363136364136365136366136367136368136369136370136371136372136373136374136375136376136377136378136379136380136381136382136383136384136385136386136387136388136389136390136391136392136393136394136395136396136397136398136399136400136401136402136403136404136405136406136407136408136409136410136411136412136413136414136415136416136417136418136419136420136421136422136423136424136425136426136427136428136429136430136431136432136433136434136435136436136437136438136439136440136441136442136443136444136445136446136447136448136449136450136451136452136453136454136455136456136457136458136459136460136461136462136463136464136465136466136467136468136469136470136471136472136473136474136475136476136477136478136479136480136481136482136483136484136485136486136487136488136489136490136491136492136493136494136495136496136497136498136499136500136501136502136503136504136505136506136507136508136509136510136511136512136513136514136515136516136517136518136519136520136521136522136523136524136525136526136527136528136529136530136531136532136533136534136535136536136537136538136539136540136541136542136543136544136545136546136547136548136549136550136551136552136553136554136555136556136557136558136559136560136561136562136563136564136565136566136567136568136569136570136571136572136573136574136575136576136577136578136579136580136581136582136583136584136585136586136587136588136589136590136591136592136593136594136595136596136597136598136599136600136601136602136603136604136605136606136607136608136609136610136611136612136613136614136615136616136617136618136619136620136621136622136623136624136625136626136627136628136629136630136631136632136633136634136635136636136637136638136639136640136641136642136643136644136645136646136647136648136649136650136651136652136653136654136655136656136657136658136659136660136661136662136663136664136665136666136667136668136669136670136671136672136673136674136675136676136677136678136679136680136681136682136683136684136685136686136687136688136689136690136691136692136693136694136695136696136697136698136699136700136701136702136703136704136705136706136707136708136709136710136711136712136713136714136715136716136717136718136719136720136721136722136723136724136725136726136727136728136729136730136731136732136733136734136735136736136737136738136739136740136741136742136743136744136745136746136747136748136749136750136751136752136753136754136755136756136757136758136759136760136761136762136763136764136765136766136767136768136769136770136771136772136773136774136775136776136777136778136779136780136781136782136783136784136785136786136787136788136789136790136791136792136793136794136795136796136797136798136799136800136801136802136803136804136805136806136807136808136809136810136811136812136813136814136815136816136817136818136819136820136821136822136823136824136825136826136827136828136829136830136831136832136833136834136835136836136837136838136839136840136841136842136843136844136845136846136847136848136849136850136851136852136853136854136855136856136857136858136859136860136861136862136863136864136865136866136867136868136869136870136871136872136873136874136875136876136877136878136879136880136881136882136883136884136885136886136887136888136889136890136891136892136893136894136895136896136897136898136899136900136901136902136903136904136905136906136907136908136909136910136911136912136913136914136915136916136917136918136919136920136921136922136923136924136925136926136927136928136929136930136931136932136933136934136935136936136937136938136939136940136941136942136943136944136945136946136947136948136949136950136951136952136953136954136955136956136957136958136959136960136961136962136963136964136965136966136967136968136969136970136971136972136973136974136975136976136977136978136979136980136981136982136983136984136985136986136987136988136989136990136991136992136993136994136995136996136997136998136999137000137001137002137003137004137005137006137007137008137009137010137011137012137013137014137015137016137017137018137019137020137021137022137023137024137025137026137027137028137029137030137031137032137033137034137035137036137037137038137039137040137041137042137043137044137045137046137047137048137049137050137051137052137053137054137055137056137057137058137059137060137061137062137063137064137065137066137067137068137069137070137071137072137073137074137075137076137077137078137079137080137081137082137083137084137085137086137087137088137089137090137091137092137093137094137095137096137097137098137099137100137101137102137103137104137105137106137107137108137109137110137111137112137113137114137115137116137117137118137119137120137121137122137123137124137125137126137127137128137129137130137131137132137133137134137135137136137137137138137139137140137141137142137143137144137145137146137147137148137149137150137151137152137153137154137155137156137157137158137159137160137161137162137163137164137165137166137167137168137169137170137171137172137173137174137175137176137177137178137179137180137181137182137183137184137185137186137187137188137189137190137191137192137193137194137195137196137197137198137199137200137201137202137203137204137205137206137207137208137209137210137211137212137213137214137215137216137217137218137219137220137221137222137223137224137225137226137227137228137229137230137231137232137233137234137235137236137237137238137239137240137241137242137243137244137245137246137247137248137249137250137251137252137253137254137255137256137257137258137259137260137261137262137263137264137265137266137267137268137269137270137271137272137273137274137275137276137277137278137279137280137281137282137283137284137285137286137287137288137289137290137291137292137293137294137295137296137297137298137299137300137301137302137303137304137305137306137307137308137309137310137311137312137313137314137315137316137317137318137319137320137321137322137323137324137325137326137327137328137329137330137331137332137333137334137335137336137337137338137339137340137341137342137343137344137345137346137347137348137349137350137351137352137353137354137355137356137357137358137359137360137361137362137363137364137365137366137367137368137369137370137371137372137373137374137375137376137377137378137379137380137381137382137383137384137385137386137387137388137389137390137391137392137393137394137395137396137397137398137399137400137401137402137403137404137405137406137407137408137409137410137411137412137413137414137415137416137417137418137419137420137421137422137423137424137425137426137427137428137429137430137431137432137433137434137435137436137437137438137439137440137441137442137443137444137445137446137447137448137449137450137451137452137453137454137455137456137457137458137459137460137461137462137463137464137465137466137467137468137469137470137471137472137473137474137475137476137477137478137479137480137481137482137483137484137485137486137487137488137489137490137491137492137493137494137495137496137497137498137499137500137501137502137503137504137505137506137507137508137509137510137511137512137513137514137515137516137517137518137519137520137521137522137523137524137525137526137527137528137529137530137531137532137533137534137535137536137537137538137539137540137541137542137543137544137545137546137547137548137549137550137551137552137553137554137555137556137557137558137559137560137561137562137563137564137565137566137567137568137569137570137571137572137573137574137575137576137577137578137579137580137581137582137583137584137585137586137587137588137589137590137591137592137593137594137595137596137597137598137599137600137601137602137603137604137605137606137607137608137609137610137611137612137613137614137615137616137617137618137619137620137621137622137623137624137625137626137627137628137629137630137631137632137633137634137635137636137637137638137639137640137641137642137643137644137645137646137647137648137649137650137651137652137653137654137655137656137657137658137659137660137661137662137663137664137665137666137667137668137669137670137671137672137673137674137675137676137677137678137679137680137681137682137683137684137685137686137687137688137689137690137691137692137693137694137695137696137697137698137699137700137701137702137703137704137705137706137707137708137709137710137711137712137713137714137715137716137717137718137719137720137721137722137723137724137725137726137727137728137729137730137731137732137733137734137735137736137737137738137739137740137741137742137743137744137745137746137747137748137749137750137751137752137753137754137755137756137757137758137759137760137761137762137763137764137765137766137767137768137769137770137771137772137773137774137775137776137777137778137779137780137781137782137783137784137785137786137787137788137789137790137791137792137793137794137795137796137797137798137799137800137801137802137803137804137805137806137807137808137809137810137811137812137813137814137815137816137817137818137819137820137821137822137823137824137825137826137827137828137829137830137831137832137833137834137835137836137837137838137839137840137841137842137843137844137845137846137847137848137849137850137851137852137853137854137855137856137857137858137859137860137861137862137863137864137865137866137867137868137869137870137871137872137873137874137875137876137877137878137879137880137881137882137883137884137885137886137887137888137889137890137891137892137893137894137895137896137897137898137899137900137901137902137903137904137905137906137907137908137909137910137911137912137913137914137915137916137917137918137919137920137921137922137923137924137925137926137927137928137929137930137931137932137933137934137935137936137937137938137939137940137941137942137943137944137945137946137947137948137949137950137951137952137953137954137955137956137957137958137959137960137961137962137963137964137965137966137967137968137969137970137971137972137973137974137975137976137977137978137979137980137981137982137983137984137985137986137987137988137989137990137991137992137993137994137995137996137997137998137999138000138001138002138003138004138005138006138007138008138009138010138011138012138013138014138015138016138017138018138019138020138021138022138023138024138025138026138027138028138029138030138031138032138033138034138035138036138037138038138039138040138041138042138043138044138045138046138047138048138049138050138051138052138053138054138055138056138057138058138059138060138061138062138063138064138065138066138067138068138069138070138071138072138073138074138075138076138077138078138079138080138081138082138083138084138085138086138087138088138089138090138091138092138093138094138095138096138097138098138099138100138101138102138103138104138105138106138107138108138109138110138111138112138113138114138115138116138117138118138119138120138121138122138123138124138125138126138127138128138129138130138131138132138133138134138135138136138137138138138139138140138141138142138143138144138145138146138147138148138149138150138151138152138153138154138155138156138157138158138159138160138161138162138163138164138165138166138167138168138169138170138171138172138173138174138175138176138177138178138179138180138181138182138183138184138185138186138187138188138189138190138191138192138193138194138195138196138197138198138199138200138201138202138203138204138205138206138207138208138209138210138211138212138213138214138215138216138217138218138219138220138221138222138223138224138225138226138227138228138229138230138231138232138233138234138235138236138237138238138239138240138241138242138243138244138245138246138247138248138249138250138251138252138253138254138255138256138257138258138259138260138261138262138263138264138265138266138267138268138269138270138271138272138273138274138275138276138277138278138279138280138281138282138283138284138285138286138287138288138289138290138291138292138293138294138295138296138297138298138299138300138301138302138303138304138305138306138307138308138309138310138311138312138313138314138315138316138317138318138319138320138321138322138323138324138325138326138327138328138329138330138331138332138333138334138335138336138337138338138339138340138341138342138343138344138345138346138347138348138349138350138351138352138353138354138355138356138357138358138359138360138361138362138363138364138365138366138367138368138369138370138371138372138373138374138375138376138377138378138379138380138381138382138383138384138385138386138387138388138389138390138391138392138393138394138395138396138397138398138399138400138401138402138403138404138405138406138407138408138409138410138411138412138413138414138415138416138417138418138419138420138421138422138423138424138425138426138427138428138429138430138431138432138433138434138435138436138437138438138439138440138441138442138443138444138445138446138447138448138449138450138451138452138453138454138455138456138457138458138459138460138461138462138463138464138465138466138467138468138469138470138471138472138473138474138475138476138477138478138479138480138481138482138483138484138485138486138487138488138489138490138491138492138493138494138495138496138497138498138499138500138501138502138503138504138505138506138507138508138509138510138511138512138513138514138515138516138517138518138519138520138521138522138523138524138525138526138527138528138529138530138531138532138533138534138535138536138537138538138539138540138541138542138543138544138545138546138547138548138549138550138551138552138553138554138555138556138557138558138559138560138561138562138563138564138565138566138567138568138569138570138571138572138573138574138575138576138577138578138579138580138581138582138583138584138585138586138587138588138589138590138591138592138593138594138595138596138597138598138599138600138601138602138603138604138605138606138607138608138609138610138611138612138613138614138615138616138617138618138619138620138621138622138623138624138625138626138627138628138629138630138631138632138633138634138635138636138637138638138639138640138641138642138643138644138645138646138647138648138649138650138651138652138653138654138655138656138657138658138659138660138661138662138663138664138665138666138667138668138669138670138671138672138673138674138675138676138677138678138679138680138681138682138683138684138685138686138687138688138689138690138691138692138693138694138695138696138697138698138699138700138701138702138703138704138705138706138707138708138709138710138711138712138713138714138715138716138717138718138719138720138721138722138723138724138725138726138727138728138729138730138731138732138733138734138735138736138737138738138739138740138741138742138743138744138745138746138747138748138749138750138751138752138753138754138755138756138757138758138759138760138761138762138763138764138765138766138767138768138769138770138771138772138773138774138775138776138777138778138779138780138781138782138783138784138785138786138787138788138789138790138791138792138793138794138795138796138797138798138799138800138801138802138803138804138805138806138807138808138809138810138811138812138813138814138815138816138817138818138819138820138821138822138823138824138825138826138827138828138829138830138831138832138833138834138835138836138837138838138839138840138841138842138843138844138845138846138847138848138849138850138851138852138853138854138855138856138857138858138859138860138861138862138863138864138865138866138867138868138869138870138871138872138873138874138875138876138877138878138879138880138881138882138883138884138885138886138887138888138889138890138891138892138893138894138895138896138897138898138899138900138901138902138903138904138905138906138907138908138909138910138911138912138913138914138915138916138917138918138919138920138921138922138923138924138925138926138927138928138929138930138931138932138933138934138935138936138937138938138939138940138941138942138943138944138945138946138947138948138949138950138951138952138953138954138955138956138957138958138959138960138961138962138963138964138965138966138967138968138969138970138971138972138973138974138975138976138977138978138979138980138981138982138983138984138985138986138987138988138989138990138991138992138993138994138995138996138997138998138999139000139001139002139003139004139005139006139007139008139009139010139011139012139013139014139015139016139017139018139019139020139021139022139023139024139025139026139027139028139029139030139031139032139033139034139035139036139037139038139039139040139041139042139043139044139045139046139047139048139049139050139051139052139053139054139055139056139057139058139059139060139061139062139063139064139065139066139067139068139069139070139071139072139073139074139075139076139077139078139079139080139081139082139083139084139085139086139087139088139089139090139091139092139093139094139095139096139097139098139099139100139101139102139103139104139105139106139107139108139109139110139111139112139113139114139115139116139117139118139119139120139121139122139123139124139125139126139127139128139129139130139131139132139133139134139135139136139137139138139139139140139141139142139143139144139145139146139147139148139149139150139151139152139153139154139155139156139157139158139159139160139161139162139163139164139165139166139167139168139169139170139171139172139173139174139175139176139177139178139179139180139181139182139183139184139185139186139187139188139189139190139191139192139193139194139195139196139197139198139199139200139201139202139203139204139205139206139207139208139209139210139211139212139213139214139215139216139217139218139219139220139221139222139223139224139225139226139227139228139229139230139231139232139233139234139235139236139237139238139239139240139241139242139243139244139245139246139247139248139249139250139251139252139253139254139255139256139257139258139259139260139261139262139263139264139265139266139267139268139269139270139271139272139273139274139275139276139277139278139279139280139281139282139283139284139285139286139287139288139289139290139291139292139293139294139295139296139297139298139299139300139301139302139303139304139305139306139307139308139309139310139311139312139313139314139315139316139317139318139319139320139321139322139323139324139325139326139327139328139329139330139331139332139333139334139335139336139337139338139339139340139341139342139343139344139345139346139347139348139349139350139351139352139353139354139355139356139357139358139359139360139361139362139363139364139365139366139367139368139369139370139371139372139373139374139375139376139377139378139379139380139381139382139383139384139385139386139387139388139389139390139391139392139393139394139395139396139397139398139399139400139401139402139403139404139405139406139407139408139409139410139411139412139413139414139415139416139417139418139419139420139421139422139423139424139425139426139427139428139429139430139431139432139433139434139435139436139437139438139439139440139441139442139443139444139445139446139447139448139449139450139451139452139453139454139455139456139457139458139459139460139461139462139463139464139465139466139467139468139469139470139471139472139473139474139475139476139477139478139479139480139481139482139483139484139485139486139487139488139489139490139491139492139493139494139495139496139497139498139499139500139501139502139503139504139505139506139507139508139509139510139511139512139513139514139515139516139517139518139519139520139521139522139523139524139525139526139527139528139529139530139531139532139533139534139535139536139537139538139539139540139541139542139543139544139545139546139547139548139549139550139551139552139553139554139555139556139557139558139559139560139561139562139563139564139565139566139567139568139569139570139571139572139573139574139575139576139577139578139579139580139581139582139583139584139585139586139587139588139589139590139591139592139593139594139595139596139597139598139599139600139601139602139603139604139605139606139607139608139609139610139611139612139613139614139615139616139617139618139619139620139621139622139623139624139625139626139627139628139629139630139631139632139633139634139635139636139637139638139639139640139641139642139643139644139645139646139647139648139649139650139651139652139653139654139655139656139657139658139659139660139661139662139663139664139665139666139667139668139669139670139671139672139673139674139675139676139677139678139679139680139681139682139683139684139685139686139687139688139689139690139691139692139693139694139695139696139697139698139699139700139701139702139703139704139705139706139707139708139709139710139711139712139713139714139715139716139717139718139719139720139721139722139723139724139725139726139727139728139729139730139731139732139733139734139735139736139737139738139739139740139741139742139743139744139745139746139747139748139749139750139751139752139753139754139755139756139757139758139759139760139761139762139763139764139765139766139767139768139769139770139771139772139773139774139775139776139777139778139779139780139781139782139783139784139785139786139787139788139789139790139791139792139793139794139795139796139797139798139799139800139801139802139803139804139805139806139807139808139809139810139811139812139813139814139815139816139817139818139819139820139821139822139823139824139825139826139827139828139829139830139831139832139833139834139835139836139837139838139839139840139841139842139843139844139845139846139847139848139849139850139851139852139853139854139855139856139857139858139859139860139861139862139863139864139865139866139867139868139869139870139871139872139873139874139875139876139877139878139879139880139881139882139883139884139885139886139887139888139889139890139891139892139893139894139895139896139897139898139899139900139901139902139903139904139905139906139907139908139909139910139911139912139913139914139915139916139917139918139919139920139921139922139923139924139925139926139927139928139929139930139931139932139933139934139935139936139937139938139939139940139941139942139943139944139945139946139947139948139949139950139951139952139953139954139955139956139957139958139959139960139961139962139963139964139965139966139967139968139969139970139971139972139973139974139975139976139977139978139979139980139981139982139983139984139985139986139987139988139989139990139991139992139993139994139995139996139997139998139999140000140001140002140003140004140005140006140007140008140009140010140011140012140013140014140015140016140017140018140019140020140021140022140023140024140025140026140027140028140029140030140031140032140033140034140035140036140037140038140039140040140041140042140043140044140045140046140047140048140049140050140051140052140053140054140055140056140057140058140059140060140061140062140063140064140065140066140067140068140069140070140071140072140073140074140075140076140077140078140079140080140081140082140083140084140085140086140087140088140089140090140091140092140093140094140095140096140097140098140099140100140101140102140103140104140105140106140107140108140109140110140111140112140113140114140115140116140117140118140119140120140121140122140123140124140125140126140127140128140129140130140131140132140133140134140135140136140137140138140139140140140141140142140143140144140145140146140147140148140149140150140151140152140153140154140155140156140157140158140159140160140161140162140163140164140165140166140167140168140169140170140171140172140173140174140175140176140177140178140179140180140181140182140183140184140185140186140187140188140189140190140191140192140193140194140195140196140197140198140199140200140201140202140203140204140205140206140207140208140209140210140211140212140213140214140215140216140217140218140219140220140221140222140223140224140225140226140227140228140229140230140231140232140233140234140235140236140237140238140239140240140241140242140243140244140245140246140247140248140249140250140251140252140253140254140255140256140257140258140259140260140261140262140263140264140265140266140267140268140269140270140271140272140273140274140275140276140277140278140279140280140281140282140283140284140285140286140287140288140289140290140291140292140293140294140295140296140297140298140299140300140301140302140303140304140305140306140307140308140309140310140311140312140313140314140315140316140317140318140319140320140321140322140323140324140325140326140327140328140329140330140331140332140333140334140335140336140337140338140339140340140341140342140343140344140345140346140347140348140349140350140351140352140353140354140355140356140357140358140359140360140361140362140363140364140365140366140367140368140369140370140371140372140373140374140375140376140377140378140379140380140381140382140383140384140385140386140387140388140389140390140391140392140393140394140395140396140397140398140399140400140401140402140403140404140405140406140407140408140409140410140411140412140413140414140415140416140417140418140419140420140421140422140423140424140425140426140427140428140429140430140431140432140433140434140435140436140437140438140439140440140441140442140443140444140445140446140447140448140449140450140451140452140453140454140455140456140457140458140459140460140461140462140463140464140465140466140467140468140469140470140471140472140473140474140475140476140477140478140479140480140481140482140483140484140485140486140487140488140489140490140491140492140493140494140495140496140497140498140499140500140501140502140503140504140505140506140507140508140509140510140511140512140513140514140515140516140517140518140519140520140521140522140523140524140525140526140527140528140529140530140531140532140533140534140535140536140537140538140539140540140541140542140543140544140545140546140547140548140549140550140551140552140553140554140555140556140557140558140559140560140561140562140563140564140565140566140567140568140569140570140571140572140573140574140575140576140577140578140579140580140581140582140583140584140585140586140587140588140589140590140591140592140593140594140595140596140597140598140599140600140601140602140603140604140605140606140607140608140609140610140611140612140613140614140615140616140617140618140619140620140621140622140623140624140625140626140627140628140629140630140631140632140633140634140635140636140637140638140639140640140641140642140643140644140645140646140647140648140649140650140651140652140653140654140655140656140657140658140659140660140661140662140663140664140665140666140667140668140669140670140671140672140673140674140675140676140677140678140679140680140681140682140683140684140685140686140687140688140689140690140691140692140693140694140695140696140697140698140699140700140701140702140703140704140705140706140707140708140709140710140711140712140713140714140715140716140717140718140719140720140721140722140723140724140725140726140727140728140729140730140731140732140733140734140735140736140737140738140739140740140741140742140743140744140745140746140747140748140749140750140751140752140753140754140755140756140757140758140759140760140761140762140763140764140765140766140767140768140769140770140771140772140773140774140775140776140777140778140779140780140781140782140783140784140785140786140787140788140789140790140791140792140793140794140795140796140797140798140799140800140801140802140803140804140805140806140807140808140809140810140811140812140813140814140815140816140817140818140819140820140821140822140823140824140825140826140827140828140829140830140831140832140833140834140835140836140837140838140839140840140841140842140843140844140845140846140847140848140849140850140851140852140853140854140855140856140857140858140859140860140861140862140863140864140865140866140867140868140869140870140871140872140873140874140875140876140877140878140879140880140881140882140883140884140885140886140887140888140889140890140891140892140893140894140895140896140897140898140899140900140901140902140903140904140905140906140907140908140909140910140911140912140913140914140915140916140917140918140919140920140921140922140923140924140925140926140927140928140929140930140931140932140933140934140935140936140937140938140939140940140941140942140943140944140945140946140947140948140949140950140951140952140953140954140955140956140957140958140959140960140961140962140963140964140965140966140967140968140969140970140971140972140973140974140975140976140977140978140979140980140981140982140983140984140985140986140987140988140989140990140991140992140993140994140995140996140997140998140999141000141001141002141003141004141005141006141007141008141009141010141011141012141013141014141015141016141017141018141019141020141021141022141023141024141025141026141027141028141029141030141031141032141033141034141035141036141037141038141039141040141041141042141043141044141045141046141047141048141049141050141051141052141053141054141055141056141057141058141059141060141061141062141063141064141065141066141067141068141069141070141071141072141073141074141075141076141077141078141079141080141081141082141083141084141085141086141087141088141089141090141091141092141093141094141095141096141097141098141099141100141101141102141103141104141105141106141107141108141109141110141111141112141113141114141115141116141117141118141119141120141121141122141123141124141125141126141127141128141129141130141131141132141133141134141135141136141137141138141139141140141141141142141143141144141145141146141147141148141149141150141151141152141153141154141155141156141157141158141159141160141161141162141163141164141165141166141167141168141169141170141171141172141173141174141175141176141177141178141179141180141181141182141183141184141185141186141187141188141189141190141191141192141193141194141195141196141197141198141199141200141201141202141203141204141205141206141207141208141209141210141211141212141213141214141215141216141217141218141219141220141221141222141223141224141225141226141227141228141229141230141231141232141233141234141235141236141237141238141239141240141241141242141243141244141245141246141247141248141249141250141251141252141253141254141255141256141257141258141259141260141261141262141263141264141265141266141267141268141269141270141271141272141273141274141275141276141277141278141279141280141281141282141283141284141285141286141287141288141289141290141291141292141293141294141295141296141297141298141299141300141301141302141303141304141305141306141307141308141309141310141311141312141313141314141315141316141317141318141319141320141321141322141323141324141325141326141327141328141329141330141331141332141333141334141335141336141337141338141339141340141341141342141343141344141345141346141347141348141349141350141351141352141353141354141355141356141357141358141359141360141361141362141363141364141365141366141367141368141369141370141371141372141373141374141375141376141377141378141379141380141381141382141383141384141385141386141387141388141389141390141391141392141393141394141395141396141397141398141399141400141401141402141403141404141405141406141407141408141409141410141411141412141413141414141415141416141417141418141419141420141421141422141423141424141425141426141427141428141429141430141431141432141433141434141435141436141437141438141439141440141441141442141443141444141445141446141447141448141449141450141451141452141453141454141455141456141457141458141459141460141461141462141463141464141465141466141467141468141469141470141471141472141473141474141475141476141477141478141479141480141481141482141483141484141485141486141487141488141489141490141491141492141493141494141495141496141497141498141499141500141501141502141503141504141505141506141507141508141509141510141511141512141513141514141515141516141517141518141519141520141521141522141523141524141525141526141527141528141529141530141531141532141533141534141535141536141537141538141539141540141541141542141543141544141545141546141547141548141549141550141551141552141553141554141555141556141557141558141559141560141561141562141563141564141565141566141567141568141569141570141571141572141573141574141575141576141577141578141579141580141581141582141583141584141585141586141587141588141589141590141591141592141593141594141595141596141597141598141599141600141601141602141603141604141605141606141607141608141609141610141611141612141613141614141615141616141617141618141619141620141621141622141623141624141625141626141627141628141629141630141631141632141633141634141635141636141637141638141639141640141641141642141643141644141645141646141647141648141649141650141651141652141653141654141655141656141657141658141659141660141661141662141663141664141665141666141667141668141669141670141671141672141673141674141675141676141677141678141679141680141681141682141683141684141685141686141687141688141689141690141691141692141693141694141695141696141697141698141699141700141701141702141703141704141705141706141707141708141709141710141711141712141713141714141715141716141717141718141719141720141721141722141723141724141725141726141727141728141729141730141731141732141733141734141735141736141737141738141739141740141741141742141743141744141745141746141747141748141749141750141751141752141753141754141755141756141757141758141759141760141761141762141763141764141765141766141767141768141769141770141771141772141773141774141775141776141777141778141779141780141781141782141783141784141785141786141787141788141789141790141791141792141793141794141795141796141797141798141799141800141801141802141803141804141805141806141807141808141809141810141811141812141813141814141815141816141817141818141819141820141821141822141823141824141825141826141827141828141829141830141831141832141833141834141835141836141837141838141839141840141841141842141843141844141845141846141847141848141849141850141851141852141853141854141855141856141857141858141859141860141861141862141863141864141865141866141867141868141869141870141871141872141873141874141875141876141877141878141879141880141881141882141883141884141885141886141887141888141889141890141891141892141893141894141895141896141897141898141899141900141901141902141903141904141905141906141907141908141909141910141911141912141913141914141915141916141917141918141919141920141921141922141923141924141925141926141927141928141929141930141931141932141933141934141935141936141937141938141939141940141941141942141943141944141945141946141947141948141949141950141951141952141953141954141955141956141957141958141959141960141961141962141963141964141965141966141967141968141969141970141971141972141973141974141975141976141977141978141979141980141981141982141983141984141985141986141987141988141989141990141991141992141993141994141995141996141997141998141999142000142001142002142003142004142005142006142007142008142009142010142011142012142013142014142015142016142017142018142019142020142021142022142023142024142025142026142027142028142029142030142031142032142033142034142035142036142037142038142039142040142041142042142043142044142045142046142047142048142049142050142051142052142053142054142055142056142057142058142059142060142061142062142063142064142065142066142067142068142069142070142071142072142073142074142075142076142077142078142079142080142081142082142083142084142085142086142087142088142089142090142091142092142093142094142095142096142097142098142099142100142101142102142103142104142105142106142107142108142109142110142111142112142113142114142115142116142117142118142119142120142121142122142123142124142125142126142127142128142129142130142131142132142133142134142135142136142137142138142139142140142141142142142143142144142145142146142147142148142149142150142151142152142153142154142155142156142157142158142159142160142161142162142163142164142165142166142167142168142169142170142171142172142173142174142175142176142177142178142179142180142181142182142183142184142185142186142187142188142189142190142191142192142193142194142195142196142197142198142199142200142201142202142203142204142205142206142207142208142209142210142211142212142213142214142215142216142217142218142219142220142221142222142223142224142225142226142227142228142229142230142231142232142233142234142235142236142237142238142239142240142241142242142243142244142245142246142247142248142249142250142251142252142253142254142255142256142257142258142259142260142261142262142263142264142265142266142267142268142269142270142271142272142273142274142275142276142277142278142279142280142281142282142283142284142285142286142287142288142289142290142291142292142293142294142295142296142297142298142299142300142301142302142303142304142305142306142307142308142309142310142311142312142313142314142315142316142317142318142319142320142321142322142323142324142325142326142327142328142329142330142331142332142333142334142335142336142337142338142339142340142341142342142343142344142345142346142347142348142349142350142351142352142353142354142355142356142357142358142359142360142361142362142363142364142365142366142367142368142369142370142371142372142373142374142375142376142377142378142379142380142381142382142383142384142385142386142387142388142389142390142391142392142393142394142395142396142397142398142399142400142401142402142403142404142405142406142407142408142409142410142411142412142413142414142415142416142417142418142419142420142421142422142423142424142425142426142427142428142429142430142431142432142433142434142435142436142437142438142439142440142441142442142443142444142445142446142447142448142449142450142451142452142453142454142455142456142457142458142459142460142461142462142463142464142465142466142467142468142469142470142471142472142473142474142475142476142477142478142479142480142481142482142483142484142485142486142487142488142489142490142491142492142493142494142495142496142497142498142499142500142501142502142503142504142505142506142507142508142509142510142511142512142513142514142515142516142517142518142519142520142521142522142523142524142525142526142527142528142529142530142531142532142533142534142535142536142537142538142539142540142541142542142543142544142545142546142547142548142549142550142551142552142553142554142555142556142557142558142559142560142561142562142563142564142565142566142567142568142569142570142571142572142573142574142575142576142577142578142579142580142581142582142583142584142585142586142587142588142589142590142591142592142593142594142595142596142597142598142599142600142601142602142603142604142605142606142607142608142609142610142611142612142613142614142615142616142617142618142619142620142621142622142623142624142625142626142627142628142629142630142631142632142633142634142635142636142637142638142639142640142641142642142643142644142645142646142647142648142649142650142651142652142653142654142655142656142657142658142659142660142661142662142663142664142665142666142667142668142669142670142671142672142673142674142675142676142677142678142679142680142681142682142683142684142685142686142687142688142689142690142691142692142693142694142695142696142697142698142699142700142701142702142703142704142705142706142707142708142709142710142711142712142713142714142715142716142717142718142719142720142721142722142723142724142725142726142727142728142729142730142731142732142733142734142735142736142737142738142739142740142741142742142743142744142745142746142747142748142749142750142751142752142753142754142755142756142757142758142759142760142761142762142763142764142765142766142767142768142769142770142771142772142773142774142775142776142777142778142779142780142781142782142783142784142785142786142787142788142789142790142791142792142793142794142795142796142797142798142799142800142801142802142803142804142805142806142807142808142809142810142811142812142813142814142815142816142817142818142819142820142821142822142823142824142825142826142827142828142829142830142831142832142833142834142835142836142837142838142839142840142841142842142843142844142845142846142847142848142849142850142851142852142853142854142855142856142857142858142859142860142861142862142863142864142865142866142867142868142869142870142871142872142873142874142875142876142877142878142879142880142881142882142883142884142885142886142887142888142889142890142891142892142893142894142895142896142897142898142899142900142901142902142903142904142905142906142907142908142909142910142911142912142913142914142915142916142917142918142919142920142921142922142923142924142925142926142927142928142929142930142931142932142933142934142935142936142937142938142939142940142941142942142943142944142945142946142947142948142949142950142951142952142953142954142955142956142957142958142959142960142961142962142963142964142965142966142967142968142969142970142971142972142973142974142975142976142977142978142979142980142981142982142983142984142985142986142987142988142989142990142991142992142993142994142995142996142997142998142999143000143001143002143003143004143005143006143007143008143009143010143011143012143013143014143015143016143017143018143019143020143021143022143023143024143025143026143027143028143029143030143031143032143033143034143035143036143037143038143039143040143041143042143043143044143045143046143047143048143049143050143051143052143053143054143055143056143057143058143059143060143061143062143063143064143065143066143067143068143069143070143071143072143073143074143075143076143077143078143079143080143081143082143083143084143085143086143087143088143089143090143091143092143093143094143095143096143097143098143099143100143101143102143103143104143105143106143107143108143109143110143111143112143113143114143115143116143117143118143119143120143121143122143123143124143125143126143127143128143129143130143131143132143133143134143135143136143137143138143139143140143141143142143143143144143145143146143147143148143149143150143151143152143153143154143155143156143157143158143159143160143161143162143163143164143165143166143167143168143169143170143171143172143173143174143175143176143177143178143179143180143181143182143183143184143185143186143187143188143189143190143191143192143193143194143195143196143197143198143199143200143201143202143203143204143205143206143207143208143209143210143211143212143213143214143215143216143217143218143219143220143221143222143223143224143225143226143227143228143229143230143231143232143233143234143235143236143237143238143239143240143241143242143243143244143245143246143247143248143249143250143251143252143253143254143255143256143257143258143259143260143261143262143263143264143265143266143267143268143269143270143271143272143273143274143275143276143277143278143279143280143281143282143283143284143285143286143287143288143289143290143291143292143293143294143295143296143297143298143299143300143301143302143303143304143305143306143307143308143309143310143311143312143313143314143315143316143317143318143319143320143321143322143323143324143325143326143327143328143329143330143331143332143333143334143335143336143337143338143339143340143341143342143343143344143345143346143347143348143349143350143351143352143353143354143355143356143357143358143359143360143361143362143363143364143365143366143367143368143369143370143371143372143373143374143375143376143377143378143379143380143381143382143383143384143385143386143387143388143389143390143391143392143393143394143395143396143397143398143399143400143401143402143403143404143405143406143407143408143409143410143411143412143413143414143415143416143417143418143419143420143421143422143423143424143425143426143427143428143429143430143431143432143433143434143435143436143437143438143439143440143441143442143443143444143445143446143447143448143449143450143451143452143453143454143455143456143457143458143459143460143461143462143463143464143465143466143467143468143469143470143471143472143473143474143475143476143477143478143479143480143481143482143483143484143485143486143487143488143489143490143491143492143493143494143495143496143497143498143499143500143501143502143503143504143505143506143507143508143509143510143511143512143513143514143515143516143517143518143519143520143521143522143523143524143525143526143527143528143529143530143531143532143533143534143535143536143537143538143539143540143541143542143543143544143545143546143547143548143549143550143551143552143553143554143555143556143557143558143559143560143561143562143563143564143565143566143567143568143569143570143571143572143573143574143575143576143577143578143579143580143581143582143583143584143585143586143587143588143589143590143591143592143593143594143595143596143597143598143599143600143601143602143603143604143605143606143607143608143609143610143611143612143613143614143615143616143617143618143619143620143621143622143623143624143625143626143627143628143629143630143631143632143633143634143635143636143637143638143639143640143641143642143643143644143645143646143647143648143649143650143651143652143653143654143655143656143657143658143659143660143661143662143663143664143665143666143667143668143669143670143671143672143673143674143675143676143677143678143679143680143681143682143683143684143685143686143687143688143689143690143691143692143693143694143695143696143697143698143699143700143701143702143703143704143705143706143707143708143709143710143711143712143713143714143715143716143717143718143719143720143721143722143723143724143725143726143727143728143729143730143731143732143733143734143735143736143737143738143739143740143741143742143743143744143745143746143747143748143749143750143751143752143753143754143755143756143757143758143759143760143761143762143763143764143765143766143767143768143769143770143771143772143773143774143775143776143777143778143779143780143781143782143783143784143785143786143787143788143789143790143791143792143793143794143795143796143797143798143799143800143801143802143803143804143805143806143807143808143809143810143811143812143813143814143815143816143817143818143819143820143821143822143823143824143825143826143827143828143829143830143831143832143833143834143835143836143837143838143839143840143841143842143843143844143845143846143847143848143849143850143851143852143853143854143855143856143857143858143859143860143861143862143863143864143865143866143867143868143869143870143871143872143873143874143875143876143877143878143879143880143881143882143883143884143885143886143887143888143889143890143891143892143893143894143895143896143897143898143899143900143901143902143903143904143905143906143907143908143909143910143911143912143913143914143915143916143917143918143919143920143921143922143923143924143925143926143927143928143929143930143931143932143933143934143935143936143937143938143939143940143941143942143943143944143945143946143947143948143949143950143951143952143953143954143955143956143957143958143959143960143961143962143963143964143965143966143967143968143969143970143971143972143973143974143975143976143977143978143979143980143981143982143983143984143985143986143987143988143989143990143991143992143993143994143995143996143997143998143999144000144001144002144003144004144005144006144007144008144009144010144011144012144013144014144015144016144017144018144019144020144021144022144023144024144025144026144027144028144029144030144031144032144033144034144035144036144037144038144039144040144041144042144043144044144045144046144047144048144049144050144051144052144053144054144055144056144057144058144059144060144061144062144063144064144065144066144067144068144069144070144071144072144073144074144075144076144077144078144079144080144081144082144083144084144085144086144087144088144089144090144091144092144093144094144095144096144097144098144099144100144101144102144103144104144105144106144107144108144109144110144111144112144113144114144115144116144117144118144119144120144121144122144123144124144125144126144127144128144129144130144131144132144133144134144135144136144137144138144139144140144141144142144143144144144145144146144147144148144149144150144151144152144153144154144155144156144157144158144159144160144161144162144163144164144165144166144167144168144169144170144171144172144173144174144175144176144177144178144179144180144181144182144183144184144185144186144187144188144189144190144191144192144193144194144195144196144197144198144199144200144201144202144203144204144205144206144207144208144209144210144211144212144213144214144215144216144217144218144219144220144221144222144223144224144225144226144227144228144229144230144231144232144233144234144235144236144237144238144239144240144241144242144243144244144245144246144247144248144249144250144251144252144253144254144255144256144257144258144259144260144261144262144263144264144265144266144267144268144269144270144271144272144273144274144275144276144277144278144279144280144281144282144283144284144285144286144287144288144289144290144291144292144293144294144295144296144297144298144299144300144301144302144303144304144305144306144307144308144309144310144311144312144313144314144315144316144317144318144319144320144321144322144323144324144325144326144327144328144329144330144331144332144333144334144335144336144337144338144339144340144341144342144343144344144345144346144347144348144349144350144351144352144353144354144355144356144357144358144359144360144361144362144363144364144365144366144367144368144369144370144371144372144373144374144375144376144377144378144379144380144381144382144383144384144385144386144387144388144389144390144391144392144393144394144395144396144397144398144399144400144401144402144403144404144405144406144407144408144409144410144411144412144413144414144415144416144417144418144419144420144421144422144423144424144425144426144427144428144429144430144431144432144433144434144435144436144437144438144439144440144441144442144443144444144445144446144447144448144449144450144451144452144453144454144455144456144457144458144459144460144461144462144463144464144465144466144467144468144469144470144471144472144473144474144475144476144477144478144479144480144481144482144483144484144485144486144487144488144489144490144491144492144493144494144495144496144497144498144499144500144501144502144503144504144505144506144507144508144509144510144511144512144513144514144515144516144517144518144519144520144521144522144523144524144525144526144527144528144529144530144531144532144533144534144535144536144537144538144539144540144541144542144543144544144545144546144547144548144549144550144551144552144553144554144555144556144557144558144559144560144561144562144563144564144565144566144567144568144569144570144571144572144573144574144575144576144577144578144579144580144581144582144583144584144585144586144587144588144589144590144591144592144593144594144595144596144597144598144599144600144601144602144603144604144605144606144607144608144609144610144611144612144613144614144615144616144617144618144619144620144621144622144623144624144625144626144627144628144629144630144631144632144633144634144635144636144637144638144639144640144641144642144643144644144645144646144647144648144649144650144651144652144653144654144655144656144657144658144659144660144661144662144663144664144665144666144667144668144669144670144671144672144673144674144675144676144677144678144679144680144681144682144683144684144685144686144687144688144689144690144691144692144693144694144695144696144697144698144699144700144701144702144703144704144705144706144707144708144709144710144711144712144713144714144715144716144717144718144719144720144721144722144723144724144725144726144727144728144729144730144731144732144733144734144735144736144737144738144739144740144741144742144743144744144745144746144747144748144749144750144751144752144753144754144755144756144757144758144759144760144761144762144763144764144765144766144767144768144769144770144771144772144773144774144775144776144777144778144779144780144781144782144783144784144785144786144787144788144789144790144791144792144793144794144795144796144797144798144799144800144801144802144803144804144805144806144807144808144809144810144811144812144813144814144815144816144817144818144819144820144821144822144823144824144825144826144827144828144829144830144831144832144833144834144835144836144837144838144839144840144841144842144843144844144845144846144847144848144849144850144851144852144853144854144855144856144857144858144859144860144861144862144863144864144865144866144867144868144869144870144871144872144873144874144875144876144877144878144879144880144881144882144883144884144885144886144887144888144889144890144891144892144893144894144895144896144897144898144899144900144901144902144903144904144905144906144907144908144909144910144911144912144913144914144915144916144917144918144919144920144921144922144923144924144925144926144927144928144929144930144931144932144933144934144935144936144937144938144939144940144941144942144943144944144945144946144947144948144949144950144951144952144953144954144955144956144957144958144959144960144961144962144963144964144965144966144967144968144969144970144971144972144973144974144975144976144977144978144979144980144981144982144983144984144985144986144987144988144989144990144991144992144993144994144995144996144997144998144999145000145001145002145003145004145005145006145007145008145009145010145011145012145013145014145015145016145017145018145019145020145021145022145023145024145025145026145027145028145029145030145031145032145033145034145035145036145037145038145039145040145041145042145043145044145045145046145047145048145049145050145051145052145053145054145055145056145057145058145059145060145061145062145063145064145065145066145067145068145069145070145071145072145073145074145075145076145077145078145079145080145081145082145083145084145085145086145087145088145089145090145091145092145093145094145095145096145097145098145099145100145101145102145103145104145105145106145107145108145109145110145111145112145113145114145115145116145117145118145119145120145121145122145123145124145125145126145127145128145129145130145131145132145133145134145135145136145137145138145139145140145141145142145143145144145145145146145147145148145149145150145151145152145153145154145155145156145157145158145159145160145161145162145163145164145165145166145167145168145169145170145171145172145173145174145175145176145177145178145179145180145181145182145183145184145185145186145187145188145189145190145191145192145193145194145195145196145197145198145199145200145201145202145203145204145205145206145207145208145209145210145211145212145213145214145215145216145217145218145219145220145221145222145223145224145225145226145227145228145229145230145231145232145233145234145235145236145237145238145239145240145241145242145243145244145245145246145247145248145249145250145251145252145253145254145255145256145257145258145259145260145261145262145263145264145265145266145267145268145269145270145271145272145273145274145275145276145277145278145279145280145281145282145283145284145285145286145287145288145289145290145291145292145293145294145295145296145297145298145299145300145301145302145303145304145305145306145307145308145309145310145311145312145313145314145315145316145317145318145319145320145321145322145323145324145325145326145327145328145329145330145331145332145333145334145335145336145337145338145339145340145341145342145343145344145345145346145347145348145349145350145351145352145353145354145355145356145357145358145359145360145361145362145363145364145365145366145367145368145369145370145371145372145373145374145375145376145377145378145379145380145381145382145383145384145385145386145387145388145389145390145391145392145393145394145395145396145397145398145399145400145401145402145403145404145405145406145407145408145409145410145411145412145413145414145415145416145417145418145419145420145421145422145423145424145425145426145427145428145429145430145431145432145433145434145435145436145437145438145439145440145441145442145443145444145445145446145447145448145449145450145451145452145453145454145455145456145457145458145459145460145461145462145463145464145465145466145467145468145469145470145471145472145473145474145475145476145477145478145479145480145481145482145483145484145485145486145487145488145489145490145491145492145493145494145495145496145497145498145499145500145501145502145503145504145505145506145507145508145509145510145511145512145513145514145515145516145517145518145519145520145521145522145523145524145525145526145527145528145529145530145531145532145533145534145535145536145537145538145539145540145541145542145543145544145545145546145547145548145549145550145551145552145553145554145555145556145557145558145559145560145561145562145563145564145565145566145567145568145569145570145571145572145573145574145575145576145577145578145579145580145581145582145583145584145585145586145587145588145589145590145591145592145593145594145595145596145597145598145599145600145601145602145603145604145605145606145607145608145609145610145611145612145613145614145615145616145617145618145619145620145621145622145623145624145625145626145627145628145629145630145631145632145633145634145635145636145637145638145639145640145641145642145643145644145645145646145647145648145649145650145651145652145653145654145655145656145657145658145659145660145661145662145663145664145665145666145667145668145669145670145671145672145673145674145675145676145677145678145679145680145681145682145683145684145685145686145687145688145689145690145691145692145693145694145695145696145697145698145699145700145701145702145703145704145705145706145707145708145709145710145711145712145713145714145715145716145717145718145719145720145721145722145723145724145725145726145727145728145729145730145731145732145733145734145735145736145737145738145739145740145741145742145743145744145745145746145747145748145749145750145751145752145753145754145755145756145757145758145759145760145761145762145763145764145765145766145767145768145769145770145771145772145773145774145775145776145777145778145779145780145781145782145783145784145785145786145787145788145789145790145791145792145793145794145795145796145797145798145799145800145801145802145803145804145805145806145807145808145809145810145811145812145813145814145815145816145817145818145819145820145821145822145823145824145825145826145827145828145829145830145831145832145833145834145835145836145837145838145839145840145841145842145843145844145845145846145847145848145849145850145851145852145853145854145855145856145857145858145859145860145861145862145863145864145865145866145867145868145869145870145871145872145873145874145875145876145877145878145879145880145881145882145883145884145885145886145887145888145889145890145891145892145893145894145895145896145897145898145899145900145901145902145903145904145905145906145907145908145909145910145911145912145913145914145915145916145917145918145919145920145921145922145923145924145925145926145927145928145929145930145931145932145933145934145935145936145937145938145939145940145941145942145943145944145945145946145947145948145949145950145951145952145953145954145955145956145957145958145959145960145961145962145963145964145965145966145967145968145969145970145971145972145973145974145975145976145977145978145979145980145981145982145983145984145985145986145987145988145989145990145991145992145993145994145995145996145997145998145999146000146001146002146003146004146005146006146007146008146009146010146011146012146013146014146015146016146017146018146019146020146021146022146023146024146025146026146027146028146029146030146031146032146033146034146035146036146037146038146039146040146041146042146043146044146045146046146047146048146049146050146051146052146053146054146055146056146057146058146059146060146061146062146063146064146065146066146067146068146069146070146071146072146073146074146075146076146077146078146079146080146081146082146083146084146085146086146087146088146089146090146091146092146093146094146095146096146097146098146099146100146101146102146103146104146105146106146107146108146109146110146111146112146113146114146115146116146117146118146119146120146121146122146123146124146125146126146127146128146129146130146131146132146133146134146135146136146137146138146139146140146141146142146143146144146145146146146147146148146149146150146151146152146153146154146155146156146157146158146159146160146161146162146163146164146165146166146167146168146169146170146171146172146173146174146175146176146177146178146179146180146181146182146183146184146185146186146187146188146189146190146191146192146193146194146195146196146197146198146199146200146201146202146203146204146205146206146207146208146209146210146211146212146213146214146215146216146217146218146219146220146221146222146223146224146225146226146227146228146229146230146231146232146233146234146235146236146237146238146239146240146241146242146243146244146245146246146247146248146249146250146251146252146253146254146255146256146257146258146259146260146261146262146263146264146265146266146267146268146269146270146271146272146273146274146275146276146277146278146279146280146281146282146283146284146285146286146287146288146289146290146291146292146293146294146295146296146297146298146299146300146301146302146303146304146305146306146307146308146309146310146311146312146313146314146315146316146317146318146319146320146321146322146323146324146325146326146327146328146329146330146331146332146333146334146335146336146337146338146339146340146341146342146343146344146345146346146347146348146349146350146351146352146353146354146355146356146357146358146359146360146361146362146363146364146365146366146367146368146369146370146371146372146373146374146375146376146377146378146379146380146381146382146383146384146385146386146387146388146389146390146391146392146393146394146395146396146397146398146399146400146401146402146403146404146405146406146407146408146409146410146411146412146413146414146415146416146417146418146419146420146421146422146423146424146425146426146427146428146429146430146431146432146433146434146435146436146437146438146439146440146441146442146443146444146445146446146447146448146449146450146451146452146453146454146455146456146457146458146459146460146461146462146463146464146465146466146467146468146469146470146471146472146473146474146475146476146477146478146479146480146481146482146483146484146485146486146487146488146489146490146491146492146493146494146495146496146497146498146499146500146501146502146503146504146505146506146507146508146509146510146511146512146513146514146515146516146517146518146519146520146521146522146523146524146525146526146527146528146529146530146531146532146533146534146535146536146537146538146539146540146541146542146543146544146545146546146547146548146549146550146551146552146553146554146555146556146557146558146559146560146561146562146563146564146565146566146567146568146569146570146571146572146573146574146575146576146577146578146579146580146581146582146583146584146585146586146587146588146589146590146591146592146593146594146595146596146597146598146599146600146601146602146603146604146605146606146607146608146609146610146611146612146613146614146615146616146617146618146619146620146621146622146623146624146625146626146627146628146629146630146631146632146633146634146635146636146637146638146639146640146641146642146643146644146645146646146647146648146649146650146651146652146653146654146655146656146657146658146659146660146661146662146663146664146665146666146667146668146669146670146671146672146673146674146675146676146677146678146679146680146681146682146683146684146685146686146687146688146689146690146691146692146693146694146695146696146697146698146699146700146701146702146703146704146705146706146707146708146709146710146711146712146713146714146715146716146717146718146719146720146721146722146723146724146725146726146727146728146729146730146731146732146733146734146735146736146737146738146739146740146741146742146743146744146745146746146747146748146749146750146751146752146753146754146755146756146757146758146759146760146761146762146763146764146765146766146767146768146769146770146771146772146773146774146775146776146777146778146779146780146781146782146783146784146785146786146787146788146789146790146791146792146793146794146795146796146797146798146799146800146801146802146803146804146805146806146807146808146809146810146811146812146813146814146815146816146817146818146819146820146821146822146823146824146825146826146827146828146829146830146831146832146833146834146835146836146837146838146839146840146841146842146843146844146845146846146847146848146849146850146851146852146853146854146855146856146857146858146859146860146861146862146863146864146865146866146867146868146869146870146871146872146873146874146875146876146877146878146879146880146881146882146883146884146885146886146887146888146889146890146891146892146893146894146895146896146897146898146899146900146901146902146903146904146905146906146907146908146909146910146911146912146913146914146915146916146917146918146919146920146921146922146923146924146925146926146927146928146929146930146931146932146933146934146935146936146937146938146939146940146941146942146943146944146945146946146947146948146949146950146951146952146953146954146955146956146957146958146959146960146961146962146963146964146965146966146967146968146969146970146971146972146973146974146975146976146977146978146979146980146981146982146983146984146985146986146987146988146989146990146991146992146993146994146995146996146997146998146999147000147001147002147003147004147005147006147007147008147009147010147011147012147013147014147015147016147017147018147019147020147021147022147023147024147025147026147027147028147029147030147031147032147033147034147035147036147037147038147039147040147041147042147043147044147045147046147047147048147049147050147051147052147053147054147055147056147057147058147059147060147061147062147063147064147065147066147067147068147069147070147071147072147073147074147075147076147077147078147079147080147081147082147083147084147085147086147087147088147089147090147091147092147093147094147095147096147097147098147099147100147101147102147103147104147105147106147107147108147109147110147111147112147113147114147115147116147117147118147119147120147121147122147123147124147125147126147127147128147129147130147131147132147133147134147135147136147137147138147139147140147141147142147143147144147145147146147147147148147149147150147151147152147153147154147155147156147157147158147159147160147161147162147163147164147165147166147167147168147169147170147171147172147173147174147175147176147177147178147179147180147181147182147183147184147185147186147187147188147189147190147191147192147193147194147195147196147197147198147199147200147201147202147203147204147205147206147207147208147209147210147211147212147213147214147215147216147217147218147219147220147221147222147223147224147225147226147227147228147229147230147231147232147233147234147235147236147237147238147239147240147241147242147243147244147245147246147247147248147249147250147251147252147253147254147255147256147257147258147259147260147261147262147263147264147265147266147267147268147269147270147271147272147273147274147275147276147277147278147279147280147281147282147283147284147285147286147287147288147289147290147291147292147293147294147295147296147297147298147299147300147301147302147303147304147305147306147307147308147309147310147311147312147313147314147315147316147317147318147319147320147321147322147323147324147325147326147327147328147329147330147331147332147333147334147335147336147337147338147339147340147341147342147343147344147345147346147347147348147349147350147351147352147353147354147355147356147357147358147359147360147361147362147363147364147365147366147367147368147369147370147371147372147373147374147375147376147377147378147379147380147381147382147383147384147385147386147387147388147389147390147391147392147393147394147395147396147397147398147399147400147401147402147403147404147405147406147407147408147409147410147411147412147413147414147415147416147417147418147419147420147421147422147423147424147425147426147427147428147429147430147431147432147433147434147435147436147437147438147439147440147441147442147443147444147445147446147447147448147449147450147451147452147453147454147455147456147457147458147459147460147461147462147463147464147465147466147467147468147469147470147471147472147473147474147475147476147477147478147479147480147481147482147483147484147485147486147487147488147489147490147491147492147493147494147495147496147497147498147499147500147501147502147503147504147505147506147507147508147509147510147511147512147513147514147515147516147517147518147519147520147521147522147523147524147525147526147527147528147529147530147531147532147533147534147535147536147537147538147539147540147541147542147543147544147545147546147547147548147549147550147551147552147553147554147555147556147557147558147559147560147561147562147563147564147565147566147567147568147569147570147571147572147573147574147575147576147577147578147579147580147581147582147583147584147585147586147587147588147589147590147591147592147593147594147595147596147597147598147599147600147601147602147603147604147605147606147607147608147609147610147611147612147613147614147615147616147617147618147619147620147621147622147623147624147625147626147627147628147629147630147631147632147633147634147635147636147637147638147639147640147641147642147643147644147645147646147647147648147649147650147651147652147653147654147655147656147657147658147659147660147661147662147663147664147665147666147667147668147669147670147671147672147673147674147675147676147677147678147679147680147681147682147683147684147685147686147687147688147689147690147691147692147693147694147695147696147697147698147699147700147701147702147703147704147705147706147707147708147709147710147711147712147713147714147715147716147717147718147719147720147721147722147723147724147725147726147727147728147729147730147731147732147733147734147735147736147737147738147739147740147741147742147743147744147745147746147747147748147749147750147751147752147753147754147755147756147757147758147759147760147761147762147763147764147765147766147767147768147769147770147771147772147773147774147775147776147777147778147779147780147781147782147783147784147785147786147787147788147789147790147791147792147793147794147795147796147797147798147799147800147801147802147803147804147805147806147807147808147809147810147811147812147813147814147815147816147817147818147819147820147821147822147823147824147825147826147827147828147829147830147831147832147833147834147835147836147837147838147839147840147841147842147843147844
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // install a JSONP callback for chunk loading
  3. /******/ var parentJsonpFunction = window["webpackJsonp"];
  4. /******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {
  5. /******/ // add "moreModules" to the modules object,
  6. /******/ // then flag all "chunkIds" as loaded and fire callback
  7. /******/ var moduleId, chunkId, i = 0, resolves = [], result;
  8. /******/ for(;i < chunkIds.length; i++) {
  9. /******/ chunkId = chunkIds[i];
  10. /******/ if(installedChunks[chunkId]) {
  11. /******/ resolves.push(installedChunks[chunkId][0]);
  12. /******/ }
  13. /******/ installedChunks[chunkId] = 0;
  14. /******/ }
  15. /******/ for(moduleId in moreModules) {
  16. /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
  17. /******/ modules[moduleId] = moreModules[moduleId];
  18. /******/ }
  19. /******/ }
  20. /******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);
  21. /******/ while(resolves.length) {
  22. /******/ resolves.shift()();
  23. /******/ }
  24. /******/ if(executeModules) {
  25. /******/ for(i=0; i < executeModules.length; i++) {
  26. /******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]);
  27. /******/ }
  28. /******/ }
  29. /******/ return result;
  30. /******/ };
  31. /******/
  32. /******/ // The module cache
  33. /******/ var installedModules = {};
  34. /******/
  35. /******/ // objects to store loaded and loading chunks
  36. /******/ var installedChunks = {
  37. /******/ 7: 0
  38. /******/ };
  39. /******/
  40. /******/ // The require function
  41. /******/ function __webpack_require__(moduleId) {
  42. /******/
  43. /******/ // Check if module is in cache
  44. /******/ if(installedModules[moduleId]) {
  45. /******/ return installedModules[moduleId].exports;
  46. /******/ }
  47. /******/ // Create a new module (and put it into the cache)
  48. /******/ var module = installedModules[moduleId] = {
  49. /******/ i: moduleId,
  50. /******/ l: false,
  51. /******/ exports: {}
  52. /******/ };
  53. /******/
  54. /******/ // Execute the module function
  55. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  56. /******/
  57. /******/ // Flag the module as loaded
  58. /******/ module.l = true;
  59. /******/
  60. /******/ // Return the exports of the module
  61. /******/ return module.exports;
  62. /******/ }
  63. /******/
  64. /******/ // This file contains only the entry chunk.
  65. /******/ // The chunk loading function for additional chunks
  66. /******/ __webpack_require__.e = function requireEnsure(chunkId) {
  67. /******/ var installedChunkData = installedChunks[chunkId];
  68. /******/ if(installedChunkData === 0) {
  69. /******/ return new Promise(function(resolve) { resolve(); });
  70. /******/ }
  71. /******/
  72. /******/ // a Promise means "currently loading".
  73. /******/ if(installedChunkData) {
  74. /******/ return installedChunkData[2];
  75. /******/ }
  76. /******/
  77. /******/ // setup Promise in chunk cache
  78. /******/ var promise = new Promise(function(resolve, reject) {
  79. /******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
  80. /******/ });
  81. /******/ installedChunkData[2] = promise;
  82. /******/
  83. /******/ // start chunk loading
  84. /******/ var head = document.getElementsByTagName('head')[0];
  85. /******/ var script = document.createElement('script');
  86. /******/ script.type = 'text/javascript';
  87. /******/ script.charset = 'utf-8';
  88. /******/ script.async = true;
  89. /******/ script.timeout = 120000;
  90. /******/
  91. /******/ if (__webpack_require__.nc) {
  92. /******/ script.setAttribute("nonce", __webpack_require__.nc);
  93. /******/ }
  94. /******/ script.src = __webpack_require__.p + "" + chunkId + ".js";
  95. /******/ var timeout = setTimeout(onScriptComplete, 120000);
  96. /******/ script.onerror = script.onload = onScriptComplete;
  97. /******/ function onScriptComplete() {
  98. /******/ // avoid mem leaks in IE.
  99. /******/ script.onerror = script.onload = null;
  100. /******/ clearTimeout(timeout);
  101. /******/ var chunk = installedChunks[chunkId];
  102. /******/ if(chunk !== 0) {
  103. /******/ if(chunk) {
  104. /******/ chunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));
  105. /******/ }
  106. /******/ installedChunks[chunkId] = undefined;
  107. /******/ }
  108. /******/ };
  109. /******/ head.appendChild(script);
  110. /******/
  111. /******/ return promise;
  112. /******/ };
  113. /******/
  114. /******/ // expose the modules object (__webpack_modules__)
  115. /******/ __webpack_require__.m = modules;
  116. /******/
  117. /******/ // expose the module cache
  118. /******/ __webpack_require__.c = installedModules;
  119. /******/
  120. /******/ // define getter function for harmony exports
  121. /******/ __webpack_require__.d = function(exports, name, getter) {
  122. /******/ if(!__webpack_require__.o(exports, name)) {
  123. /******/ Object.defineProperty(exports, name, {
  124. /******/ configurable: false,
  125. /******/ enumerable: true,
  126. /******/ get: getter
  127. /******/ });
  128. /******/ }
  129. /******/ };
  130. /******/
  131. /******/ // getDefaultExport function for compatibility with non-harmony modules
  132. /******/ __webpack_require__.n = function(module) {
  133. /******/ var getter = module && module.__esModule ?
  134. /******/ function getDefault() { return module['default']; } :
  135. /******/ function getModuleExports() { return module; };
  136. /******/ __webpack_require__.d(getter, 'a', getter);
  137. /******/ return getter;
  138. /******/ };
  139. /******/
  140. /******/ // Object.prototype.hasOwnProperty.call
  141. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  142. /******/
  143. /******/ // __webpack_public_path__
  144. /******/ __webpack_require__.p = "build/";
  145. /******/
  146. /******/ // on error function for async loading
  147. /******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
  148. /******/ })
  149. /************************************************************************/
  150. /******/ ([
  151. /* 0 */
  152. /***/ (function(module, exports, __webpack_require__) {
  153. "use strict";
  154. var root_1 = __webpack_require__(19);
  155. var toSubscriber_1 = __webpack_require__(353);
  156. var observable_1 = __webpack_require__(64);
  157. var pipe_1 = __webpack_require__(87);
  158. /**
  159. * A representation of any set of values over any amount of time. This is the most basic building block
  160. * of RxJS.
  161. *
  162. * @class Observable<T>
  163. */
  164. var Observable = (function () {
  165. /**
  166. * @constructor
  167. * @param {Function} subscribe the function that is called when the Observable is
  168. * initially subscribed to. This function is given a Subscriber, to which new values
  169. * can be `next`ed, or an `error` method can be called to raise an error, or
  170. * `complete` can be called to notify of a successful completion.
  171. */
  172. function Observable(subscribe) {
  173. this._isScalar = false;
  174. if (subscribe) {
  175. this._subscribe = subscribe;
  176. }
  177. }
  178. /**
  179. * Creates a new Observable, with this Observable as the source, and the passed
  180. * operator defined as the new observable's operator.
  181. * @method lift
  182. * @param {Operator} operator the operator defining the operation to take on the observable
  183. * @return {Observable} a new observable with the Operator applied
  184. */
  185. Observable.prototype.lift = function (operator) {
  186. var observable = new Observable();
  187. observable.source = this;
  188. observable.operator = operator;
  189. return observable;
  190. };
  191. /**
  192. * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.
  193. *
  194. * <span class="informal">Use it when you have all these Observables, but still nothing is happening.</span>
  195. *
  196. * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It
  197. * might be for example a function that you passed to a {@link create} static factory, but most of the time it is
  198. * a library implementation, which defines what and when will be emitted by an Observable. This means that calling
  199. * `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often
  200. * thought.
  201. *
  202. * Apart from starting the execution of an Observable, this method allows you to listen for values
  203. * that an Observable emits, as well as for when it completes or errors. You can achieve this in two
  204. * following ways.
  205. *
  206. * The first way is creating an object that implements {@link Observer} interface. It should have methods
  207. * defined by that interface, but note that it should be just a regular JavaScript object, which you can create
  208. * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular do
  209. * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also
  210. * that your object does not have to implement all methods. If you find yourself creating a method that doesn't
  211. * do anything, you can simply omit it. Note however, that if `error` method is not provided, all errors will
  212. * be left uncaught.
  213. *
  214. * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.
  215. * This means you can provide three functions as arguments to `subscribe`, where first function is equivalent
  216. * of a `next` method, second of an `error` method and third of a `complete` method. Just as in case of Observer,
  217. * if you do not need to listen for something, you can omit a function, preferably by passing `undefined` or `null`,
  218. * since `subscribe` recognizes these functions by where they were placed in function call. When it comes
  219. * to `error` function, just as before, if not provided, errors emitted by an Observable will be thrown.
  220. *
  221. * Whatever style of calling `subscribe` you use, in both cases it returns a Subscription object.
  222. * This object allows you to call `unsubscribe` on it, which in turn will stop work that an Observable does and will clean
  223. * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback
  224. * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.
  225. *
  226. * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.
  227. * It is an Observable itself that decides when these functions will be called. For example {@link of}
  228. * by default emits all its values synchronously. Always check documentation for how given Observable
  229. * will behave when subscribed and if its default behavior can be modified with a {@link Scheduler}.
  230. *
  231. * @example <caption>Subscribe with an Observer</caption>
  232. * const sumObserver = {
  233. * sum: 0,
  234. * next(value) {
  235. * console.log('Adding: ' + value);
  236. * this.sum = this.sum + value;
  237. * },
  238. * error() { // We actually could just remove this method,
  239. * }, // since we do not really care about errors right now.
  240. * complete() {
  241. * console.log('Sum equals: ' + this.sum);
  242. * }
  243. * };
  244. *
  245. * Rx.Observable.of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.
  246. * .subscribe(sumObserver);
  247. *
  248. * // Logs:
  249. * // "Adding: 1"
  250. * // "Adding: 2"
  251. * // "Adding: 3"
  252. * // "Sum equals: 6"
  253. *
  254. *
  255. * @example <caption>Subscribe with functions</caption>
  256. * let sum = 0;
  257. *
  258. * Rx.Observable.of(1, 2, 3)
  259. * .subscribe(
  260. * function(value) {
  261. * console.log('Adding: ' + value);
  262. * sum = sum + value;
  263. * },
  264. * undefined,
  265. * function() {
  266. * console.log('Sum equals: ' + sum);
  267. * }
  268. * );
  269. *
  270. * // Logs:
  271. * // "Adding: 1"
  272. * // "Adding: 2"
  273. * // "Adding: 3"
  274. * // "Sum equals: 6"
  275. *
  276. *
  277. * @example <caption>Cancel a subscription</caption>
  278. * const subscription = Rx.Observable.interval(1000).subscribe(
  279. * num => console.log(num),
  280. * undefined,
  281. * () => console.log('completed!') // Will not be called, even
  282. * ); // when cancelling subscription
  283. *
  284. *
  285. * setTimeout(() => {
  286. * subscription.unsubscribe();
  287. * console.log('unsubscribed!');
  288. * }, 2500);
  289. *
  290. * // Logs:
  291. * // 0 after 1s
  292. * // 1 after 2s
  293. * // "unsubscribed!" after 2.5s
  294. *
  295. *
  296. * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,
  297. * or the first of three possible handlers, which is the handler for each value emitted from the subscribed
  298. * Observable.
  299. * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,
  300. * the error will be thrown as unhandled.
  301. * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.
  302. * @return {ISubscription} a subscription reference to the registered handlers
  303. * @method subscribe
  304. */
  305. Observable.prototype.subscribe = function (observerOrNext, error, complete) {
  306. var operator = this.operator;
  307. var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);
  308. if (operator) {
  309. operator.call(sink, this.source);
  310. }
  311. else {
  312. sink.add(this.source || !sink.syncErrorThrowable ? this._subscribe(sink) : this._trySubscribe(sink));
  313. }
  314. if (sink.syncErrorThrowable) {
  315. sink.syncErrorThrowable = false;
  316. if (sink.syncErrorThrown) {
  317. throw sink.syncErrorValue;
  318. }
  319. }
  320. return sink;
  321. };
  322. Observable.prototype._trySubscribe = function (sink) {
  323. try {
  324. return this._subscribe(sink);
  325. }
  326. catch (err) {
  327. sink.syncErrorThrown = true;
  328. sink.syncErrorValue = err;
  329. sink.error(err);
  330. }
  331. };
  332. /**
  333. * @method forEach
  334. * @param {Function} next a handler for each value emitted by the observable
  335. * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise
  336. * @return {Promise} a promise that either resolves on observable completion or
  337. * rejects with the handled error
  338. */
  339. Observable.prototype.forEach = function (next, PromiseCtor) {
  340. var _this = this;
  341. if (!PromiseCtor) {
  342. if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {
  343. PromiseCtor = root_1.root.Rx.config.Promise;
  344. }
  345. else if (root_1.root.Promise) {
  346. PromiseCtor = root_1.root.Promise;
  347. }
  348. }
  349. if (!PromiseCtor) {
  350. throw new Error('no Promise impl found');
  351. }
  352. return new PromiseCtor(function (resolve, reject) {
  353. // Must be declared in a separate statement to avoid a RefernceError when
  354. // accessing subscription below in the closure due to Temporal Dead Zone.
  355. var subscription;
  356. subscription = _this.subscribe(function (value) {
  357. if (subscription) {
  358. // if there is a subscription, then we can surmise
  359. // the next handling is asynchronous. Any errors thrown
  360. // need to be rejected explicitly and unsubscribe must be
  361. // called manually
  362. try {
  363. next(value);
  364. }
  365. catch (err) {
  366. reject(err);
  367. subscription.unsubscribe();
  368. }
  369. }
  370. else {
  371. // if there is NO subscription, then we're getting a nexted
  372. // value synchronously during subscription. We can just call it.
  373. // If it errors, Observable's `subscribe` will ensure the
  374. // unsubscription logic is called, then synchronously rethrow the error.
  375. // After that, Promise will trap the error and send it
  376. // down the rejection path.
  377. next(value);
  378. }
  379. }, reject, resolve);
  380. });
  381. };
  382. /** @deprecated internal use only */ Observable.prototype._subscribe = function (subscriber) {
  383. return this.source.subscribe(subscriber);
  384. };
  385. /**
  386. * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable
  387. * @method Symbol.observable
  388. * @return {Observable} this instance of the observable
  389. */
  390. Observable.prototype[observable_1.observable] = function () {
  391. return this;
  392. };
  393. /* tslint:enable:max-line-length */
  394. /**
  395. * Used to stitch together functional operators into a chain.
  396. * @method pipe
  397. * @return {Observable} the Observable result of all of the operators having
  398. * been called in the order they were passed in.
  399. *
  400. * @example
  401. *
  402. * import { map, filter, scan } from 'rxjs/operators';
  403. *
  404. * Rx.Observable.interval(1000)
  405. * .pipe(
  406. * filter(x => x % 2 === 0),
  407. * map(x => x + x),
  408. * scan((acc, x) => acc + x)
  409. * )
  410. * .subscribe(x => console.log(x))
  411. */
  412. Observable.prototype.pipe = function () {
  413. var operations = [];
  414. for (var _i = 0; _i < arguments.length; _i++) {
  415. operations[_i - 0] = arguments[_i];
  416. }
  417. if (operations.length === 0) {
  418. return this;
  419. }
  420. return pipe_1.pipeFromArray(operations)(this);
  421. };
  422. /* tslint:enable:max-line-length */
  423. Observable.prototype.toPromise = function (PromiseCtor) {
  424. var _this = this;
  425. if (!PromiseCtor) {
  426. if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {
  427. PromiseCtor = root_1.root.Rx.config.Promise;
  428. }
  429. else if (root_1.root.Promise) {
  430. PromiseCtor = root_1.root.Promise;
  431. }
  432. }
  433. if (!PromiseCtor) {
  434. throw new Error('no Promise impl found');
  435. }
  436. return new PromiseCtor(function (resolve, reject) {
  437. var value;
  438. _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
  439. });
  440. };
  441. // HACK: Since TypeScript inherits static properties too, we have to
  442. // fight against TypeScript here so Subject can have a different static create signature
  443. /**
  444. * Creates a new cold Observable by calling the Observable constructor
  445. * @static true
  446. * @owner Observable
  447. * @method create
  448. * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
  449. * @return {Observable} a new cold observable
  450. */
  451. Observable.create = function (subscribe) {
  452. return new Observable(subscribe);
  453. };
  454. return Observable;
  455. }());
  456. exports.Observable = Observable;
  457. //# sourceMappingURL=Observable.js.map
  458. /***/ }),
  459. /* 1 */
  460. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  461. "use strict";
  462. /* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export createPlatform */
  463. /* unused harmony export assertPlatform */
  464. /* unused harmony export destroyPlatform */
  465. /* unused harmony export getPlatform */
  466. /* unused harmony export PlatformRef */
  467. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return ApplicationRef; });
  468. /* unused harmony export enableProdMode */
  469. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_16", function() { return isDevMode; });
  470. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_13", function() { return createPlatformFactory; });
  471. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return NgProbeToken; });
  472. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return APP_ID; });
  473. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return PACKAGE_ROOT_URL; });
  474. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return PLATFORM_INITIALIZER; });
  475. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return PLATFORM_ID; });
  476. /* unused harmony export APP_BOOTSTRAP_LISTENER */
  477. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return APP_INITIALIZER; });
  478. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ApplicationInitStatus; });
  479. /* unused harmony export DebugElement */
  480. /* unused harmony export DebugNode */
  481. /* unused harmony export asNativeElements */
  482. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_15", function() { return getDebugNode; });
  483. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return Testability; });
  484. /* unused harmony export TestabilityRegistry */
  485. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_18", function() { return setTestabilityGetter; });
  486. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return TRANSLATIONS; });
  487. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return TRANSLATIONS_FORMAT; });
  488. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return LOCALE_ID; });
  489. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return MissingTranslationStrategy; });
  490. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return ApplicationModule; });
  491. /* unused harmony export wtfCreateScope */
  492. /* unused harmony export wtfLeave */
  493. /* unused harmony export wtfStartTimeRange */
  494. /* unused harmony export wtfEndTimeRange */
  495. /* unused harmony export Type */
  496. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return EventEmitter; });
  497. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return ErrorHandler; });
  498. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return Sanitizer; });
  499. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return SecurityContext; });
  500. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ANALYZE_FOR_ENTRY_COMPONENTS; });
  501. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return Attribute; });
  502. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return ContentChild; });
  503. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return ContentChildren; });
  504. /* unused harmony export Query */
  505. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return ViewChild; });
  506. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_9", function() { return ViewChildren; });
  507. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return Component; });
  508. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return Directive; });
  509. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return HostBinding; });
  510. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return HostListener; });
  511. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return Input; });
  512. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return Output; });
  513. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return Pipe; });
  514. /* unused harmony export CUSTOM_ELEMENTS_SCHEMA */
  515. /* unused harmony export NO_ERRORS_SCHEMA */
  516. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return NgModule; });
  517. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_11", function() { return ViewEncapsulation; });
  518. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return Version; });
  519. /* unused harmony export VERSION */
  520. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_14", function() { return forwardRef; });
  521. /* unused harmony export resolveForwardRef */
  522. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return Injector; });
  523. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return ReflectiveInjector; });
  524. /* unused harmony export ResolvedReflectiveFactory */
  525. /* unused harmony export ReflectiveKey */
  526. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return InjectionToken; });
  527. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return Inject; });
  528. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return Optional; });
  529. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return Injectable; });
  530. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return Self; });
  531. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return SkipSelf; });
  532. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return Host; });
  533. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return NgZone; });
  534. /* unused harmony export RenderComponentType */
  535. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return Renderer; });
  536. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return Renderer2; });
  537. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return RendererFactory2; });
  538. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return RendererStyleFlags2; });
  539. /* unused harmony export RootRenderer */
  540. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return COMPILER_OPTIONS; });
  541. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return Compiler; });
  542. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return CompilerFactory; });
  543. /* unused harmony export ModuleWithComponentFactories */
  544. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return ComponentFactory; });
  545. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return ComponentRef; });
  546. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return ComponentFactoryResolver; });
  547. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return ElementRef; });
  548. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return NgModuleFactory; });
  549. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return NgModuleRef; });
  550. /* unused harmony export NgModuleFactoryLoader */
  551. /* unused harmony export getModuleFactory */
  552. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return QueryList; });
  553. /* unused harmony export SystemJsNgModuleLoader */
  554. /* unused harmony export SystemJsNgModuleLoaderConfig */
  555. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return TemplateRef; });
  556. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_10", function() { return ViewContainerRef; });
  557. /* unused harmony export EmbeddedViewRef */
  558. /* unused harmony export ViewRef */
  559. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return ChangeDetectionStrategy; });
  560. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return ChangeDetectorRef; });
  561. /* unused harmony export DefaultIterableDiffer */
  562. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return IterableDiffers; });
  563. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return KeyValueDiffers; });
  564. /* unused harmony export SimpleChange */
  565. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_12", function() { return WrappedValue; });
  566. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_17", function() { return platformCore; });
  567. /* unused harmony export ɵALLOW_MULTIPLE_PLATFORMS */
  568. /* unused harmony export ɵAPP_ID_RANDOM_PROVIDER */
  569. /* unused harmony export ɵdevModeEqual */
  570. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_33", function() { return isListLikeIterable; });
  571. /* unused harmony export ɵChangeDetectorStatus */
  572. /* unused harmony export ɵisDefaultChangeDetectionStrategy */
  573. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_20", function() { return Console; });
  574. /* unused harmony export ɵComponentFactory */
  575. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_19", function() { return CodegenComponentFactoryResolver; });
  576. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_23", function() { return ReflectionCapabilities; });
  577. /* unused harmony export ɵRenderDebugInfo */
  578. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_30", function() { return _global; });
  579. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_36", function() { return looseIdentical; });
  580. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_48", function() { return stringify; });
  581. /* unused harmony export ɵmakeDecorator */
  582. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_34", function() { return isObservable; });
  583. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_35", function() { return isPromise; });
  584. /* unused harmony export ɵclearOverrides */
  585. /* unused harmony export ɵoverrideComponentView */
  586. /* unused harmony export ɵoverrideProvider */
  587. /* unused harmony export ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR */
  588. /* unused harmony export ɵdefineComponent */
  589. /* unused harmony export ɵdetectChanges */
  590. /* unused harmony export ɵrenderComponent */
  591. /* unused harmony export ɵC */
  592. /* unused harmony export ɵD */
  593. /* unused harmony export ɵE */
  594. /* unused harmony export ɵT */
  595. /* unused harmony export ɵV */
  596. /* unused harmony export ɵb */
  597. /* unused harmony export ɵb1 */
  598. /* unused harmony export ɵc */
  599. /* unused harmony export ɵcR */
  600. /* unused harmony export ɵcr */
  601. /* unused harmony export ɵe */
  602. /* unused harmony export ɵp */
  603. /* unused harmony export ɵs */
  604. /* unused harmony export ɵt */
  605. /* unused harmony export ɵv */
  606. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_47", function() { return registerModuleFactory; });
  607. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_21", function() { return EMPTY_ARRAY; });
  608. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_22", function() { return EMPTY_MAP; });
  609. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_24", function() { return anchorDef; });
  610. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_25", function() { return createComponentFactory; });
  611. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_26", function() { return createNgModuleFactory; });
  612. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_27", function() { return createRendererType2; });
  613. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_28", function() { return directiveDef; });
  614. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_29", function() { return elementDef; });
  615. /* unused harmony export ɵelementEventFullName */
  616. /* unused harmony export ɵgetComponentViewDefinitionFactory */
  617. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_31", function() { return inlineInterpolate; });
  618. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_32", function() { return interpolate; });
  619. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_37", function() { return moduleDef; });
  620. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_38", function() { return moduleProvideDef; });
  621. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_39", function() { return ngContentDef; });
  622. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_40", function() { return nodeValue; });
  623. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_42", function() { return pipeDef; });
  624. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_45", function() { return providerDef; });
  625. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_41", function() { return pureArrayDef; });
  626. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_43", function() { return pureObjectDef; });
  627. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_44", function() { return purePipeDef; });
  628. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_46", function() { return queryDef; });
  629. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_49", function() { return textDef; });
  630. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_50", function() { return unwrapValue; });
  631. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_51", function() { return viewDef; });
  632. /* unused harmony export AUTO_STYLE */
  633. /* unused harmony export trigger */
  634. /* unused harmony export animate */
  635. /* unused harmony export group */
  636. /* unused harmony export sequence */
  637. /* unused harmony export style */
  638. /* unused harmony export state */
  639. /* unused harmony export keyframes */
  640. /* unused harmony export transition */
  641. /* unused harmony export ɵbf */
  642. /* unused harmony export ɵbg */
  643. /* unused harmony export ɵbk */
  644. /* unused harmony export ɵbh */
  645. /* unused harmony export ɵbj */
  646. /* unused harmony export ɵbi */
  647. /* unused harmony export ɵbl */
  648. /* unused harmony export ɵbe */
  649. /* unused harmony export ɵn */
  650. /* unused harmony export ɵo */
  651. /* unused harmony export ɵq */
  652. /* unused harmony export ɵi */
  653. /* unused harmony export ɵj */
  654. /* unused harmony export ɵk */
  655. /* unused harmony export ɵl */
  656. /* unused harmony export ɵm */
  657. /* unused harmony export ɵf */
  658. /* unused harmony export ɵg */
  659. /* unused harmony export ɵh */
  660. /* unused harmony export ɵr */
  661. /* unused harmony export ɵw */
  662. /* unused harmony export ɵu */
  663. /* unused harmony export ɵz */
  664. /* unused harmony export ɵx */
  665. /* unused harmony export ɵy */
  666. /* unused harmony export ɵbc */
  667. /* unused harmony export ɵa */
  668. /* unused harmony export ɵd */
  669. /* unused harmony export ɵba */
  670. /* unused harmony export ɵbb */
  671. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(38);
  672. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__ = __webpack_require__(0);
  673. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__);
  674. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_merge__ = __webpack_require__(44);
  675. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_merge__);
  676. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_operator_share__ = __webpack_require__(160);
  677. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_operator_share___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_operator_share__);
  678. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__ = __webpack_require__(12);
  679. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__);
  680. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_Subscription__ = __webpack_require__(14);
  681. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rxjs_Subscription___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_rxjs_Subscription__);
  682. /**
  683. * @license Angular v5.2.11
  684. * (c) 2010-2018 Google, Inc. https://angular.io/
  685. * License: MIT
  686. */
  687. /**
  688. * @fileoverview added by tsickle
  689. * @suppress {checkTypes} checked by tsc
  690. */
  691. /**
  692. * @license
  693. * Copyright Google Inc. All Rights Reserved.
  694. *
  695. * Use of this source code is governed by an MIT-style license that can be
  696. * found in the LICENSE file at https://angular.io/license
  697. */
  698. /**
  699. * Creates a token that can be used in a DI Provider.
  700. *
  701. * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
  702. * runtime representation) such as when injecting an interface, callable type, array or
  703. * parametrized type.
  704. *
  705. * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
  706. * the `Injector`. This provides additional level of type safety.
  707. *
  708. * ```
  709. * interface MyInterface {...}
  710. * var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));
  711. * // myInterface is inferred to be MyInterface.
  712. * ```
  713. *
  714. * ### Example
  715. *
  716. * {\@example core/di/ts/injector_spec.ts region='InjectionToken'}
  717. *
  718. * \@stable
  719. * @template T
  720. */
  721. var InjectionToken = /** @class */ (function () {
  722. function InjectionToken(_desc) {
  723. this._desc = _desc;
  724. /**
  725. * \@internal
  726. */
  727. this.ngMetadataName = 'InjectionToken';
  728. }
  729. /**
  730. * @return {?}
  731. */
  732. InjectionToken.prototype.toString = /**
  733. * @return {?}
  734. */
  735. function () { return "InjectionToken " + this._desc; };
  736. return InjectionToken;
  737. }());
  738. /**
  739. * @fileoverview added by tsickle
  740. * @suppress {checkTypes} checked by tsc
  741. */
  742. /**
  743. * @license
  744. * Copyright Google Inc. All Rights Reserved.
  745. *
  746. * Use of this source code is governed by an MIT-style license that can be
  747. * found in the LICENSE file at https://angular.io/license
  748. */
  749. /**
  750. * An interface implemented by all Angular type decorators, which allows them to be used as ES7
  751. * decorators as well as
  752. * Angular DSL syntax.
  753. *
  754. * ES7 syntax:
  755. *
  756. * ```
  757. * \@ng.Component({...})
  758. * class MyClass {...}
  759. * ```
  760. * \@stable
  761. * @record
  762. */
  763. var ANNOTATIONS = '__annotations__';
  764. var PARAMETERS = '__paramaters__';
  765. var PROP_METADATA = '__prop__metadata__';
  766. /**
  767. * @suppress {globalThis}
  768. * @param {?} name
  769. * @param {?=} props
  770. * @param {?=} parentClass
  771. * @param {?=} chainFn
  772. * @return {?}
  773. */
  774. function makeDecorator(name, props, parentClass, chainFn) {
  775. var /** @type {?} */ metaCtor = makeMetadataCtor(props);
  776. /**
  777. * @param {?} objOrType
  778. * @return {?}
  779. */
  780. function DecoratorFactory(objOrType) {
  781. if (this instanceof DecoratorFactory) {
  782. metaCtor.call(this, objOrType);
  783. return this;
  784. }
  785. var /** @type {?} */ annotationInstance = new (/** @type {?} */ (DecoratorFactory))(objOrType);
  786. var /** @type {?} */ TypeDecorator = /** @type {?} */ (function TypeDecorator(cls) {
  787. // Use of Object.defineProperty is important since it creates non-enumerable property which
  788. // prevents the property is copied during subclassing.
  789. var /** @type {?} */ annotations = cls.hasOwnProperty(ANNOTATIONS) ?
  790. (/** @type {?} */ (cls))[ANNOTATIONS] :
  791. Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];
  792. annotations.push(annotationInstance);
  793. return cls;
  794. });
  795. if (chainFn)
  796. chainFn(TypeDecorator);
  797. return TypeDecorator;
  798. }
  799. if (parentClass) {
  800. DecoratorFactory.prototype = Object.create(parentClass.prototype);
  801. }
  802. DecoratorFactory.prototype.ngMetadataName = name;
  803. (/** @type {?} */ (DecoratorFactory)).annotationCls = DecoratorFactory;
  804. return /** @type {?} */ (DecoratorFactory);
  805. }
  806. /**
  807. * @param {?=} props
  808. * @return {?}
  809. */
  810. function makeMetadataCtor(props) {
  811. return function ctor() {
  812. var args = [];
  813. for (var _i = 0; _i < arguments.length; _i++) {
  814. args[_i] = arguments[_i];
  815. }
  816. if (props) {
  817. var /** @type {?} */ values = props.apply(void 0, args);
  818. for (var /** @type {?} */ propName in values) {
  819. this[propName] = values[propName];
  820. }
  821. }
  822. };
  823. }
  824. /**
  825. * @param {?} name
  826. * @param {?=} props
  827. * @param {?=} parentClass
  828. * @return {?}
  829. */
  830. function makeParamDecorator(name, props, parentClass) {
  831. var /** @type {?} */ metaCtor = makeMetadataCtor(props);
  832. /**
  833. * @param {...?} args
  834. * @return {?}
  835. */
  836. function ParamDecoratorFactory() {
  837. var args = [];
  838. for (var _i = 0; _i < arguments.length; _i++) {
  839. args[_i] = arguments[_i];
  840. }
  841. if (this instanceof ParamDecoratorFactory) {
  842. metaCtor.apply(this, args);
  843. return this;
  844. }
  845. var /** @type {?} */ annotationInstance = new ((_a = (/** @type {?} */ (ParamDecoratorFactory))).bind.apply(_a, [void 0].concat(args)))();
  846. (/** @type {?} */ (ParamDecorator)).annotation = annotationInstance;
  847. return ParamDecorator;
  848. /**
  849. * @param {?} cls
  850. * @param {?} unusedKey
  851. * @param {?} index
  852. * @return {?}
  853. */
  854. function ParamDecorator(cls, unusedKey, index) {
  855. // Use of Object.defineProperty is important since it creates non-enumerable property which
  856. // prevents the property is copied during subclassing.
  857. var /** @type {?} */ parameters = cls.hasOwnProperty(PARAMETERS) ?
  858. (/** @type {?} */ (cls))[PARAMETERS] :
  859. Object.defineProperty(cls, PARAMETERS, { value: [] })[PARAMETERS];
  860. // there might be gaps if some in between parameters do not have annotations.
  861. // we pad with nulls.
  862. while (parameters.length <= index) {
  863. parameters.push(null);
  864. }
  865. (parameters[index] = parameters[index] || []).push(annotationInstance);
  866. return cls;
  867. }
  868. var _a;
  869. }
  870. if (parentClass) {
  871. ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);
  872. }
  873. ParamDecoratorFactory.prototype.ngMetadataName = name;
  874. (/** @type {?} */ (ParamDecoratorFactory)).annotationCls = ParamDecoratorFactory;
  875. return ParamDecoratorFactory;
  876. }
  877. /**
  878. * @param {?} name
  879. * @param {?=} props
  880. * @param {?=} parentClass
  881. * @return {?}
  882. */
  883. function makePropDecorator(name, props, parentClass) {
  884. var /** @type {?} */ metaCtor = makeMetadataCtor(props);
  885. /**
  886. * @param {...?} args
  887. * @return {?}
  888. */
  889. function PropDecoratorFactory() {
  890. var args = [];
  891. for (var _i = 0; _i < arguments.length; _i++) {
  892. args[_i] = arguments[_i];
  893. }
  894. if (this instanceof PropDecoratorFactory) {
  895. metaCtor.apply(this, args);
  896. return this;
  897. }
  898. var /** @type {?} */ decoratorInstance = new ((_a = (/** @type {?} */ (PropDecoratorFactory))).bind.apply(_a, [void 0].concat(args)))();
  899. return function PropDecorator(target, name) {
  900. var /** @type {?} */ constructor = target.constructor;
  901. // Use of Object.defineProperty is important since it creates non-enumerable property which
  902. // prevents the property is copied during subclassing.
  903. var /** @type {?} */ meta = constructor.hasOwnProperty(PROP_METADATA) ?
  904. (/** @type {?} */ (constructor))[PROP_METADATA] :
  905. Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];
  906. meta[name] = meta.hasOwnProperty(name) && meta[name] || [];
  907. meta[name].unshift(decoratorInstance);
  908. };
  909. var _a;
  910. }
  911. if (parentClass) {
  912. PropDecoratorFactory.prototype = Object.create(parentClass.prototype);
  913. }
  914. PropDecoratorFactory.prototype.ngMetadataName = name;
  915. (/** @type {?} */ (PropDecoratorFactory)).annotationCls = PropDecoratorFactory;
  916. return PropDecoratorFactory;
  917. }
  918. /**
  919. * @fileoverview added by tsickle
  920. * @suppress {checkTypes} checked by tsc
  921. */
  922. /**
  923. * @license
  924. * Copyright Google Inc. All Rights Reserved.
  925. *
  926. * Use of this source code is governed by an MIT-style license that can be
  927. * found in the LICENSE file at https://angular.io/license
  928. */
  929. /**
  930. * This token can be used to create a virtual provider that will populate the
  931. * `entryComponents` fields of components and ng modules based on its `useValue`.
  932. * All components that are referenced in the `useValue` value (either directly
  933. * or in a nested array or map) will be added to the `entryComponents` property.
  934. *
  935. * ### Example
  936. * The following example shows how the router can populate the `entryComponents`
  937. * field of an NgModule based on the router configuration which refers
  938. * to components.
  939. *
  940. * ```typescript
  941. * // helper function inside the router
  942. * function provideRoutes(routes) {
  943. * return [
  944. * {provide: ROUTES, useValue: routes},
  945. * {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}
  946. * ];
  947. * }
  948. *
  949. * // user code
  950. * let routes = [
  951. * {path: '/root', component: RootComp},
  952. * {path: '/teams', component: TeamsComp}
  953. * ];
  954. *
  955. * \@NgModule({
  956. * providers: [provideRoutes(routes)]
  957. * })
  958. * class ModuleWithRoutes {}
  959. * ```
  960. *
  961. * \@experimental
  962. */
  963. var ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');
  964. /**
  965. * Type of the Attribute decorator / constructor function.
  966. *
  967. * \@stable
  968. * @record
  969. */
  970. /**
  971. * Attribute decorator and metadata.
  972. *
  973. * \@stable
  974. * \@Annotation
  975. */
  976. var Attribute = makeParamDecorator('Attribute', function (attributeName) { return ({ attributeName: attributeName }); });
  977. /**
  978. * Base class for query metadata.
  979. *
  980. * See {\@link ContentChildren}, {\@link ContentChild}, {\@link ViewChildren}, {\@link ViewChild} for
  981. * more information.
  982. *
  983. * \@stable
  984. * @abstract
  985. */
  986. var Query = /** @class */ (function () {
  987. function Query() {
  988. }
  989. return Query;
  990. }());
  991. /**
  992. * Type of the ContentChildren decorator / constructor function.
  993. *
  994. * See {\@link ContentChildren}.
  995. *
  996. * \@stable
  997. * @record
  998. */
  999. /**
  1000. * ContentChildren decorator and metadata.
  1001. *
  1002. * \@stable
  1003. * \@Annotation
  1004. */
  1005. var ContentChildren = makePropDecorator('ContentChildren', function (selector, data) {
  1006. if (data === void 0) { data = {}; }
  1007. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: false, isViewQuery: false, descendants: false }, data));
  1008. }, Query);
  1009. /**
  1010. * Type of the ContentChild decorator / constructor function.
  1011. *
  1012. *
  1013. * \@stable
  1014. * @record
  1015. */
  1016. /**
  1017. * ContentChild decorator and metadata.
  1018. *
  1019. * \@stable
  1020. * \@Annotation
  1021. */
  1022. var ContentChild = makePropDecorator('ContentChild', function (selector, data) {
  1023. if (data === void 0) { data = {}; }
  1024. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: true, isViewQuery: false, descendants: true }, data));
  1025. }, Query);
  1026. /**
  1027. * Type of the ViewChildren decorator / constructor function.
  1028. *
  1029. * See {\@link ViewChildren}.
  1030. *
  1031. * \@stable
  1032. * @record
  1033. */
  1034. /**
  1035. * ViewChildren decorator and metadata.
  1036. *
  1037. * \@stable
  1038. * \@Annotation
  1039. */
  1040. var ViewChildren = makePropDecorator('ViewChildren', function (selector, data) {
  1041. if (data === void 0) { data = {}; }
  1042. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: false, isViewQuery: true, descendants: true }, data));
  1043. }, Query);
  1044. /**
  1045. * Type of the ViewChild decorator / constructor function.
  1046. *
  1047. * See {\@link ViewChild}
  1048. *
  1049. * \@stable
  1050. * @record
  1051. */
  1052. /**
  1053. * ViewChild decorator and metadata.
  1054. *
  1055. * \@stable
  1056. * \@Annotation
  1057. */
  1058. var ViewChild = makePropDecorator('ViewChild', function (selector, data) {
  1059. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: true, isViewQuery: true, descendants: true }, data));
  1060. }, Query);
  1061. /**
  1062. * @fileoverview added by tsickle
  1063. * @suppress {checkTypes} checked by tsc
  1064. */
  1065. /**
  1066. * @license
  1067. * Copyright Google Inc. All Rights Reserved.
  1068. *
  1069. * Use of this source code is governed by an MIT-style license that can be
  1070. * found in the LICENSE file at https://angular.io/license
  1071. */
  1072. /** @enum {number} */
  1073. var ChangeDetectionStrategy = {
  1074. /**
  1075. * `OnPush` means that the change detector's mode will be initially set to `CheckOnce`.
  1076. */
  1077. OnPush: 0,
  1078. /**
  1079. * `Default` means that the change detector's mode will be initially set to `CheckAlways`.
  1080. */
  1081. Default: 1,
  1082. };
  1083. ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = "OnPush";
  1084. ChangeDetectionStrategy[ChangeDetectionStrategy.Default] = "Default";
  1085. /** @enum {number} */
  1086. var ChangeDetectorStatus = {
  1087. /**
  1088. * `CheckOnce` means that after calling detectChanges the mode of the change detector
  1089. * will become `Checked`.
  1090. */
  1091. CheckOnce: 0,
  1092. /**
  1093. * `Checked` means that the change detector should be skipped until its mode changes to
  1094. * `CheckOnce`.
  1095. */
  1096. Checked: 1,
  1097. /**
  1098. * `CheckAlways` means that after calling detectChanges the mode of the change detector
  1099. * will remain `CheckAlways`.
  1100. */
  1101. CheckAlways: 2,
  1102. /**
  1103. * `Detached` means that the change detector sub tree is not a part of the main tree and
  1104. * should be skipped.
  1105. */
  1106. Detached: 3,
  1107. /**
  1108. * `Errored` means that the change detector encountered an error checking a binding
  1109. * or calling a directive lifecycle method and is now in an inconsistent state. Change
  1110. * detectors in this state will no longer detect changes.
  1111. */
  1112. Errored: 4,
  1113. /**
  1114. * `Destroyed` means that the change detector is destroyed.
  1115. */
  1116. Destroyed: 5,
  1117. };
  1118. ChangeDetectorStatus[ChangeDetectorStatus.CheckOnce] = "CheckOnce";
  1119. ChangeDetectorStatus[ChangeDetectorStatus.Checked] = "Checked";
  1120. ChangeDetectorStatus[ChangeDetectorStatus.CheckAlways] = "CheckAlways";
  1121. ChangeDetectorStatus[ChangeDetectorStatus.Detached] = "Detached";
  1122. ChangeDetectorStatus[ChangeDetectorStatus.Errored] = "Errored";
  1123. ChangeDetectorStatus[ChangeDetectorStatus.Destroyed] = "Destroyed";
  1124. /**
  1125. * @param {?} changeDetectionStrategy
  1126. * @return {?}
  1127. */
  1128. function isDefaultChangeDetectionStrategy(changeDetectionStrategy) {
  1129. return changeDetectionStrategy == null ||
  1130. changeDetectionStrategy === ChangeDetectionStrategy.Default;
  1131. }
  1132. /**
  1133. * @fileoverview added by tsickle
  1134. * @suppress {checkTypes} checked by tsc
  1135. */
  1136. /**
  1137. * @license
  1138. * Copyright Google Inc. All Rights Reserved.
  1139. *
  1140. * Use of this source code is governed by an MIT-style license that can be
  1141. * found in the LICENSE file at https://angular.io/license
  1142. */
  1143. /**
  1144. * Type of the Directive decorator / constructor function.
  1145. *
  1146. * \@stable
  1147. * @record
  1148. */
  1149. /**
  1150. * Directive decorator and metadata.
  1151. *
  1152. * \@stable
  1153. * \@Annotation
  1154. */
  1155. var Directive = makeDecorator('Directive', function (dir) {
  1156. if (dir === void 0) { dir = {}; }
  1157. return dir;
  1158. });
  1159. /**
  1160. * Type of the Component decorator / constructor function.
  1161. *
  1162. * \@stable
  1163. * @record
  1164. */
  1165. /**
  1166. * Component decorator and metadata.
  1167. *
  1168. * \@stable
  1169. * \@Annotation
  1170. */
  1171. var Component = makeDecorator('Component', function (c) {
  1172. if (c === void 0) { c = {}; }
  1173. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ changeDetection: ChangeDetectionStrategy.Default }, c));
  1174. }, Directive);
  1175. /**
  1176. * Type of the Pipe decorator / constructor function.
  1177. *
  1178. * \@stable
  1179. * @record
  1180. */
  1181. /**
  1182. * Pipe decorator and metadata.
  1183. *
  1184. * \@stable
  1185. * \@Annotation
  1186. */
  1187. var Pipe = makeDecorator('Pipe', function (p) { return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ pure: true }, p)); });
  1188. /**
  1189. * Type of the Input decorator / constructor function.
  1190. *
  1191. * \@stable
  1192. * @record
  1193. */
  1194. /**
  1195. * Input decorator and metadata.
  1196. *
  1197. * \@stable
  1198. * \@Annotation
  1199. */
  1200. var Input = makePropDecorator('Input', function (bindingPropertyName) { return ({ bindingPropertyName: bindingPropertyName }); });
  1201. /**
  1202. * Type of the Output decorator / constructor function.
  1203. *
  1204. * \@stable
  1205. * @record
  1206. */
  1207. /**
  1208. * Output decorator and metadata.
  1209. *
  1210. * \@stable
  1211. * \@Annotation
  1212. */
  1213. var Output = makePropDecorator('Output', function (bindingPropertyName) { return ({ bindingPropertyName: bindingPropertyName }); });
  1214. /**
  1215. * Type of the HostBinding decorator / constructor function.
  1216. *
  1217. * \@stable
  1218. * @record
  1219. */
  1220. /**
  1221. * HostBinding decorator and metadata.
  1222. *
  1223. * \@stable
  1224. * \@Annotation
  1225. */
  1226. var HostBinding = makePropDecorator('HostBinding', function (hostPropertyName) { return ({ hostPropertyName: hostPropertyName }); });
  1227. /**
  1228. * Type of the HostListener decorator / constructor function.
  1229. *
  1230. * \@stable
  1231. * @record
  1232. */
  1233. /**
  1234. * HostListener decorator and metadata.
  1235. *
  1236. * \@stable
  1237. * \@Annotation
  1238. */
  1239. var HostListener = makePropDecorator('HostListener', function (eventName, args) { return ({ eventName: eventName, args: args }); });
  1240. /**
  1241. * @fileoverview added by tsickle
  1242. * @suppress {checkTypes} checked by tsc
  1243. */
  1244. /**
  1245. * @license
  1246. * Copyright Google Inc. All Rights Reserved.
  1247. *
  1248. * Use of this source code is governed by an MIT-style license that can be
  1249. * found in the LICENSE file at https://angular.io/license
  1250. */
  1251. /**
  1252. * A wrapper around a module that also includes the providers.
  1253. *
  1254. * \@stable
  1255. * @record
  1256. */
  1257. /**
  1258. * Interface for schema definitions in \@NgModules.
  1259. *
  1260. * \@experimental
  1261. * @record
  1262. */
  1263. /**
  1264. * Defines a schema that will allow:
  1265. * - any non-Angular elements with a `-` in their name,
  1266. * - any properties on elements with a `-` in their name which is the common rule for custom
  1267. * elements.
  1268. *
  1269. * \@stable
  1270. */
  1271. var CUSTOM_ELEMENTS_SCHEMA = {
  1272. name: 'custom-elements'
  1273. };
  1274. /**
  1275. * Defines a schema that will allow any property on any element.
  1276. *
  1277. * \@experimental
  1278. */
  1279. var NO_ERRORS_SCHEMA = {
  1280. name: 'no-errors-schema'
  1281. };
  1282. /**
  1283. * Type of the NgModule decorator / constructor function.
  1284. *
  1285. * \@stable
  1286. * @record
  1287. */
  1288. /**
  1289. * NgModule decorator and metadata.
  1290. *
  1291. * \@stable
  1292. * \@Annotation
  1293. */
  1294. var NgModule = makeDecorator('NgModule', function (ngModule) { return ngModule; });
  1295. /**
  1296. * @fileoverview added by tsickle
  1297. * @suppress {checkTypes} checked by tsc
  1298. */
  1299. /**
  1300. * @license
  1301. * Copyright Google Inc. All Rights Reserved.
  1302. *
  1303. * Use of this source code is governed by an MIT-style license that can be
  1304. * found in the LICENSE file at https://angular.io/license
  1305. */
  1306. /** @enum {number} */
  1307. var ViewEncapsulation = {
  1308. /**
  1309. * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host
  1310. * Element and pre-processing the style rules provided via {@link Component#styles styles} or
  1311. * {@link Component#styleUrls styleUrls}, and adding the new Host Element attribute to all
  1312. * selectors.
  1313. *
  1314. * This is the default option.
  1315. */
  1316. Emulated: 0,
  1317. /**
  1318. * Use the native encapsulation mechanism of the renderer.
  1319. *
  1320. * For the DOM this means using [Shadow DOM](https://w3c.github.io/webcomponents/spec/shadow/) and
  1321. * creating a ShadowRoot for Component's Host Element.
  1322. */
  1323. Native: 1,
  1324. /**
  1325. * Don't provide any template or style encapsulation.
  1326. */
  1327. None: 2,
  1328. };
  1329. ViewEncapsulation[ViewEncapsulation.Emulated] = "Emulated";
  1330. ViewEncapsulation[ViewEncapsulation.Native] = "Native";
  1331. ViewEncapsulation[ViewEncapsulation.None] = "None";
  1332. /**
  1333. * @fileoverview added by tsickle
  1334. * @suppress {checkTypes} checked by tsc
  1335. */
  1336. /**
  1337. * @license
  1338. * Copyright Google Inc. All Rights Reserved.
  1339. *
  1340. * Use of this source code is governed by an MIT-style license that can be
  1341. * found in the LICENSE file at https://angular.io/license
  1342. */
  1343. /**
  1344. * @fileoverview added by tsickle
  1345. * @suppress {checkTypes} checked by tsc
  1346. */
  1347. /**
  1348. * @license
  1349. * Copyright Google Inc. All Rights Reserved.
  1350. *
  1351. * Use of this source code is governed by an MIT-style license that can be
  1352. * found in the LICENSE file at https://angular.io/license
  1353. */
  1354. /**
  1355. * \@whatItDoes Represents the version of Angular
  1356. *
  1357. * \@stable
  1358. */
  1359. var Version = /** @class */ (function () {
  1360. function Version(full) {
  1361. this.full = full;
  1362. this.major = full.split('.')[0];
  1363. this.minor = full.split('.')[1];
  1364. this.patch = full.split('.').slice(2).join('.');
  1365. }
  1366. return Version;
  1367. }());
  1368. /**
  1369. * \@stable
  1370. */
  1371. var VERSION = new Version('5.2.11');
  1372. /**
  1373. * @fileoverview added by tsickle
  1374. * @suppress {checkTypes} checked by tsc
  1375. */
  1376. /**
  1377. * @license
  1378. * Copyright Google Inc. All Rights Reserved.
  1379. *
  1380. * Use of this source code is governed by an MIT-style license that can be
  1381. * found in the LICENSE file at https://angular.io/license
  1382. */
  1383. /**
  1384. * Type of the Inject decorator / constructor function.
  1385. *
  1386. * \@stable
  1387. * @record
  1388. */
  1389. /**
  1390. * Inject decorator and metadata.
  1391. *
  1392. * \@stable
  1393. * \@Annotation
  1394. */
  1395. var Inject = makeParamDecorator('Inject', function (token) { return ({ token: token }); });
  1396. /**
  1397. * Type of the Optional decorator / constructor function.
  1398. *
  1399. * \@stable
  1400. * @record
  1401. */
  1402. /**
  1403. * Optional decorator and metadata.
  1404. *
  1405. * \@stable
  1406. * \@Annotation
  1407. */
  1408. var Optional = makeParamDecorator('Optional');
  1409. /**
  1410. * Type of the Injectable decorator / constructor function.
  1411. *
  1412. * \@stable
  1413. * @record
  1414. */
  1415. /**
  1416. * Injectable decorator and metadata.
  1417. *
  1418. * \@stable
  1419. * \@Annotation
  1420. */
  1421. var Injectable = makeDecorator('Injectable');
  1422. /**
  1423. * Type of the Self decorator / constructor function.
  1424. *
  1425. * \@stable
  1426. * @record
  1427. */
  1428. /**
  1429. * Self decorator and metadata.
  1430. *
  1431. * \@stable
  1432. * \@Annotation
  1433. */
  1434. var Self = makeParamDecorator('Self');
  1435. /**
  1436. * Type of the SkipSelf decorator / constructor function.
  1437. *
  1438. * \@stable
  1439. * @record
  1440. */
  1441. /**
  1442. * SkipSelf decorator and metadata.
  1443. *
  1444. * \@stable
  1445. * \@Annotation
  1446. */
  1447. var SkipSelf = makeParamDecorator('SkipSelf');
  1448. /**
  1449. * Type of the Host decorator / constructor function.
  1450. *
  1451. * \@stable
  1452. * @record
  1453. */
  1454. /**
  1455. * Host decorator and metadata.
  1456. *
  1457. * \@stable
  1458. * \@Annotation
  1459. */
  1460. var Host = makeParamDecorator('Host');
  1461. /**
  1462. * @fileoverview added by tsickle
  1463. * @suppress {checkTypes} checked by tsc
  1464. */
  1465. /**
  1466. * @license
  1467. * Copyright Google Inc. All Rights Reserved.
  1468. *
  1469. * Use of this source code is governed by an MIT-style license that can be
  1470. * found in the LICENSE file at https://angular.io/license
  1471. */
  1472. var __window = typeof window !== 'undefined' && window;
  1473. var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
  1474. self instanceof WorkerGlobalScope && self;
  1475. var __global = typeof global !== 'undefined' && global;
  1476. var _global = __window || __global || __self;
  1477. var promise = Promise.resolve(0);
  1478. var _symbolIterator = null;
  1479. /**
  1480. * @return {?}
  1481. */
  1482. function getSymbolIterator() {
  1483. if (!_symbolIterator) {
  1484. var /** @type {?} */ Symbol_1 = _global['Symbol'];
  1485. if (Symbol_1 && Symbol_1.iterator) {
  1486. _symbolIterator = Symbol_1.iterator;
  1487. }
  1488. else {
  1489. // es6-shim specific logic
  1490. var /** @type {?} */ keys = Object.getOwnPropertyNames(Map.prototype);
  1491. for (var /** @type {?} */ i = 0; i < keys.length; ++i) {
  1492. var /** @type {?} */ key = keys[i];
  1493. if (key !== 'entries' && key !== 'size' &&
  1494. (/** @type {?} */ (Map)).prototype[key] === Map.prototype['entries']) {
  1495. _symbolIterator = key;
  1496. }
  1497. }
  1498. }
  1499. }
  1500. return _symbolIterator;
  1501. }
  1502. /**
  1503. * @param {?} fn
  1504. * @return {?}
  1505. */
  1506. function scheduleMicroTask(fn) {
  1507. if (typeof Zone === 'undefined') {
  1508. // use promise to schedule microTask instead of use Zone
  1509. promise.then(function () { fn && fn.apply(null, null); });
  1510. }
  1511. else {
  1512. Zone.current.scheduleMicroTask('scheduleMicrotask', fn);
  1513. }
  1514. }
  1515. /**
  1516. * @param {?} a
  1517. * @param {?} b
  1518. * @return {?}
  1519. */
  1520. function looseIdentical(a, b) {
  1521. return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b);
  1522. }
  1523. /**
  1524. * @param {?} token
  1525. * @return {?}
  1526. */
  1527. function stringify(token) {
  1528. if (typeof token === 'string') {
  1529. return token;
  1530. }
  1531. if (token instanceof Array) {
  1532. return '[' + token.map(stringify).join(', ') + ']';
  1533. }
  1534. if (token == null) {
  1535. return '' + token;
  1536. }
  1537. if (token.overriddenName) {
  1538. return "" + token.overriddenName;
  1539. }
  1540. if (token.name) {
  1541. return "" + token.name;
  1542. }
  1543. var /** @type {?} */ res = token.toString();
  1544. if (res == null) {
  1545. return '' + res;
  1546. }
  1547. var /** @type {?} */ newLineIndex = res.indexOf('\n');
  1548. return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
  1549. }
  1550. /**
  1551. * @fileoverview added by tsickle
  1552. * @suppress {checkTypes} checked by tsc
  1553. */
  1554. /**
  1555. * @license
  1556. * Copyright Google Inc. All Rights Reserved.
  1557. *
  1558. * Use of this source code is governed by an MIT-style license that can be
  1559. * found in the LICENSE file at https://angular.io/license
  1560. */
  1561. /**
  1562. * An interface that a function passed into {\@link forwardRef} has to implement.
  1563. *
  1564. * ### Example
  1565. *
  1566. * {\@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref_fn'}
  1567. * \@experimental
  1568. * @record
  1569. */
  1570. /**
  1571. * Allows to refer to references which are not yet defined.
  1572. *
  1573. * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of
  1574. * DI is declared,
  1575. * but not yet defined. It is also used when the `token` which we use when creating a query is not
  1576. * yet defined.
  1577. *
  1578. * ### Example
  1579. * {\@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}
  1580. * \@experimental
  1581. * @param {?} forwardRefFn
  1582. * @return {?}
  1583. */
  1584. function forwardRef(forwardRefFn) {
  1585. (/** @type {?} */ (forwardRefFn)).__forward_ref__ = forwardRef;
  1586. (/** @type {?} */ (forwardRefFn)).toString = function () { return stringify(this()); };
  1587. return (/** @type {?} */ (/** @type {?} */ (forwardRefFn)));
  1588. }
  1589. /**
  1590. * Lazily retrieves the reference value from a forwardRef.
  1591. *
  1592. * Acts as the identity function when given a non-forward-ref value.
  1593. *
  1594. * ### Example ([live demo](http://plnkr.co/edit/GU72mJrk1fiodChcmiDR?p=preview))
  1595. *
  1596. * {\@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}
  1597. *
  1598. * See: {\@link forwardRef}
  1599. * \@experimental
  1600. * @param {?} type
  1601. * @return {?}
  1602. */
  1603. function resolveForwardRef(type) {
  1604. if (typeof type === 'function' && type.hasOwnProperty('__forward_ref__') &&
  1605. type.__forward_ref__ === forwardRef) {
  1606. return (/** @type {?} */ (type))();
  1607. }
  1608. else {
  1609. return type;
  1610. }
  1611. }
  1612. /**
  1613. * @fileoverview added by tsickle
  1614. * @suppress {checkTypes} checked by tsc
  1615. */
  1616. /**
  1617. * @license
  1618. * Copyright Google Inc. All Rights Reserved.
  1619. *
  1620. * Use of this source code is governed by an MIT-style license that can be
  1621. * found in the LICENSE file at https://angular.io/license
  1622. */
  1623. var SOURCE = '__source';
  1624. var _THROW_IF_NOT_FOUND = new Object();
  1625. var THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
  1626. var _NullInjector = /** @class */ (function () {
  1627. function _NullInjector() {
  1628. }
  1629. /**
  1630. * @param {?} token
  1631. * @param {?=} notFoundValue
  1632. * @return {?}
  1633. */
  1634. _NullInjector.prototype.get = /**
  1635. * @param {?} token
  1636. * @param {?=} notFoundValue
  1637. * @return {?}
  1638. */
  1639. function (token, notFoundValue) {
  1640. if (notFoundValue === void 0) { notFoundValue = _THROW_IF_NOT_FOUND; }
  1641. if (notFoundValue === _THROW_IF_NOT_FOUND) {
  1642. throw new Error("NullInjectorError: No provider for " + stringify(token) + "!");
  1643. }
  1644. return notFoundValue;
  1645. };
  1646. return _NullInjector;
  1647. }());
  1648. /**
  1649. * \@whatItDoes Injector interface
  1650. * \@howToUse
  1651. * ```
  1652. * const injector: Injector = ...;
  1653. * injector.get(...);
  1654. * ```
  1655. *
  1656. * \@description
  1657. * For more details, see the {\@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
  1658. *
  1659. * ### Example
  1660. *
  1661. * {\@example core/di/ts/injector_spec.ts region='Injector'}
  1662. *
  1663. * `Injector` returns itself when given `Injector` as a token:
  1664. * {\@example core/di/ts/injector_spec.ts region='injectInjector'}
  1665. *
  1666. * \@stable
  1667. * @abstract
  1668. */
  1669. var Injector = /** @class */ (function () {
  1670. function Injector() {
  1671. }
  1672. /**
  1673. * Create a new Injector which is configure using `StaticProvider`s.
  1674. *
  1675. * ### Example
  1676. *
  1677. * {@example core/di/ts/provider_spec.ts region='ConstructorProvider'}
  1678. */
  1679. /**
  1680. * Create a new Injector which is configure using `StaticProvider`s.
  1681. *
  1682. * ### Example
  1683. *
  1684. * {\@example core/di/ts/provider_spec.ts region='ConstructorProvider'}
  1685. * @param {?} options
  1686. * @param {?=} parent
  1687. * @return {?}
  1688. */
  1689. Injector.create = /**
  1690. * Create a new Injector which is configure using `StaticProvider`s.
  1691. *
  1692. * ### Example
  1693. *
  1694. * {\@example core/di/ts/provider_spec.ts region='ConstructorProvider'}
  1695. * @param {?} options
  1696. * @param {?=} parent
  1697. * @return {?}
  1698. */
  1699. function (options, parent) {
  1700. if (Array.isArray(options)) {
  1701. return new StaticInjector(options, parent);
  1702. }
  1703. else {
  1704. return new StaticInjector(options.providers, options.parent, options.name || null);
  1705. }
  1706. };
  1707. Injector.THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
  1708. Injector.NULL = new _NullInjector();
  1709. return Injector;
  1710. }());
  1711. var IDENT = function (value) {
  1712. return value;
  1713. };
  1714. var EMPTY = /** @type {?} */ ([]);
  1715. var CIRCULAR = IDENT;
  1716. var MULTI_PROVIDER_FN = function () {
  1717. return Array.prototype.slice.call(arguments);
  1718. };
  1719. var GET_PROPERTY_NAME = /** @type {?} */ ({});
  1720. var ɵ2 = GET_PROPERTY_NAME;
  1721. var USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ2 });
  1722. var NG_TOKEN_PATH = 'ngTokenPath';
  1723. var NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
  1724. var NULL_INJECTOR = Injector.NULL;
  1725. var NEW_LINE = /\n/gm;
  1726. var NO_NEW_LINE = 'ɵ';
  1727. var StaticInjector = /** @class */ (function () {
  1728. function StaticInjector(providers, parent, source) {
  1729. if (parent === void 0) { parent = NULL_INJECTOR; }
  1730. if (source === void 0) { source = null; }
  1731. this.parent = parent;
  1732. this.source = source;
  1733. var /** @type {?} */ records = this._records = new Map();
  1734. records.set(Injector, /** @type {?} */ ({ token: Injector, fn: IDENT, deps: EMPTY, value: this, useNew: false }));
  1735. recursivelyProcessProviders(records, providers);
  1736. }
  1737. /**
  1738. * @param {?} token
  1739. * @param {?=} notFoundValue
  1740. * @return {?}
  1741. */
  1742. StaticInjector.prototype.get = /**
  1743. * @param {?} token
  1744. * @param {?=} notFoundValue
  1745. * @return {?}
  1746. */
  1747. function (token, notFoundValue) {
  1748. var /** @type {?} */ record = this._records.get(token);
  1749. try {
  1750. return tryResolveToken(token, record, this._records, this.parent, notFoundValue);
  1751. }
  1752. catch (/** @type {?} */ e) {
  1753. var /** @type {?} */ tokenPath = e[NG_TEMP_TOKEN_PATH];
  1754. if (token[SOURCE]) {
  1755. tokenPath.unshift(token[SOURCE]);
  1756. }
  1757. e.message = formatError('\n' + e.message, tokenPath, this.source);
  1758. e[NG_TOKEN_PATH] = tokenPath;
  1759. e[NG_TEMP_TOKEN_PATH] = null;
  1760. throw e;
  1761. }
  1762. };
  1763. /**
  1764. * @return {?}
  1765. */
  1766. StaticInjector.prototype.toString = /**
  1767. * @return {?}
  1768. */
  1769. function () {
  1770. var /** @type {?} */ tokens = /** @type {?} */ ([]), /** @type {?} */ records = this._records;
  1771. records.forEach(function (v, token) { return tokens.push(stringify(token)); });
  1772. return "StaticInjector[" + tokens.join(', ') + "]";
  1773. };
  1774. return StaticInjector;
  1775. }());
  1776. /**
  1777. * @param {?} provider
  1778. * @return {?}
  1779. */
  1780. function resolveProvider(provider) {
  1781. var /** @type {?} */ deps = computeDeps(provider);
  1782. var /** @type {?} */ fn = IDENT;
  1783. var /** @type {?} */ value = EMPTY;
  1784. var /** @type {?} */ useNew = false;
  1785. var /** @type {?} */ provide = resolveForwardRef(provider.provide);
  1786. if (USE_VALUE in provider) {
  1787. // We need to use USE_VALUE in provider since provider.useValue could be defined as undefined.
  1788. value = (/** @type {?} */ (provider)).useValue;
  1789. }
  1790. else if ((/** @type {?} */ (provider)).useFactory) {
  1791. fn = (/** @type {?} */ (provider)).useFactory;
  1792. }
  1793. else if ((/** @type {?} */ (provider)).useExisting) {
  1794. // Just use IDENT
  1795. }
  1796. else if ((/** @type {?} */ (provider)).useClass) {
  1797. useNew = true;
  1798. fn = resolveForwardRef((/** @type {?} */ (provider)).useClass);
  1799. }
  1800. else if (typeof provide == 'function') {
  1801. useNew = true;
  1802. fn = provide;
  1803. }
  1804. else {
  1805. throw staticError('StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable', provider);
  1806. }
  1807. return { deps: deps, fn: fn, useNew: useNew, value: value };
  1808. }
  1809. /**
  1810. * @param {?} token
  1811. * @return {?}
  1812. */
  1813. function multiProviderMixError(token) {
  1814. return staticError('Cannot mix multi providers and regular providers', token);
  1815. }
  1816. /**
  1817. * @param {?} records
  1818. * @param {?} provider
  1819. * @return {?}
  1820. */
  1821. function recursivelyProcessProviders(records, provider) {
  1822. if (provider) {
  1823. provider = resolveForwardRef(provider);
  1824. if (provider instanceof Array) {
  1825. // if we have an array recurse into the array
  1826. for (var /** @type {?} */ i = 0; i < provider.length; i++) {
  1827. recursivelyProcessProviders(records, provider[i]);
  1828. }
  1829. }
  1830. else if (typeof provider === 'function') {
  1831. // Functions were supported in ReflectiveInjector, but are not here. For safety give useful
  1832. // error messages
  1833. throw staticError('Function/Class not supported', provider);
  1834. }
  1835. else if (provider && typeof provider === 'object' && provider.provide) {
  1836. // At this point we have what looks like a provider: {provide: ?, ....}
  1837. var /** @type {?} */ token = resolveForwardRef(provider.provide);
  1838. var /** @type {?} */ resolvedProvider = resolveProvider(provider);
  1839. if (provider.multi === true) {
  1840. // This is a multi provider.
  1841. var /** @type {?} */ multiProvider = records.get(token);
  1842. if (multiProvider) {
  1843. if (multiProvider.fn !== MULTI_PROVIDER_FN) {
  1844. throw multiProviderMixError(token);
  1845. }
  1846. }
  1847. else {
  1848. // Create a placeholder factory which will look up the constituents of the multi provider.
  1849. records.set(token, multiProvider = /** @type {?} */ ({
  1850. token: provider.provide,
  1851. deps: [],
  1852. useNew: false,
  1853. fn: MULTI_PROVIDER_FN,
  1854. value: EMPTY
  1855. }));
  1856. }
  1857. // Treat the provider as the token.
  1858. token = provider;
  1859. multiProvider.deps.push({ token: token, options: 6 /* Default */ });
  1860. }
  1861. var /** @type {?} */ record = records.get(token);
  1862. if (record && record.fn == MULTI_PROVIDER_FN) {
  1863. throw multiProviderMixError(token);
  1864. }
  1865. records.set(token, resolvedProvider);
  1866. }
  1867. else {
  1868. throw staticError('Unexpected provider', provider);
  1869. }
  1870. }
  1871. }
  1872. /**
  1873. * @param {?} token
  1874. * @param {?} record
  1875. * @param {?} records
  1876. * @param {?} parent
  1877. * @param {?} notFoundValue
  1878. * @return {?}
  1879. */
  1880. function tryResolveToken(token, record, records, parent, notFoundValue) {
  1881. try {
  1882. return resolveToken(token, record, records, parent, notFoundValue);
  1883. }
  1884. catch (/** @type {?} */ e) {
  1885. // ensure that 'e' is of type Error.
  1886. if (!(e instanceof Error)) {
  1887. e = new Error(e);
  1888. }
  1889. var /** @type {?} */ path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];
  1890. path.unshift(token);
  1891. if (record && record.value == CIRCULAR) {
  1892. // Reset the Circular flag.
  1893. record.value = EMPTY;
  1894. }
  1895. throw e;
  1896. }
  1897. }
  1898. /**
  1899. * @param {?} token
  1900. * @param {?} record
  1901. * @param {?} records
  1902. * @param {?} parent
  1903. * @param {?} notFoundValue
  1904. * @return {?}
  1905. */
  1906. function resolveToken(token, record, records, parent, notFoundValue) {
  1907. var /** @type {?} */ value;
  1908. if (record) {
  1909. // If we don't have a record, this implies that we don't own the provider hence don't know how
  1910. // to resolve it.
  1911. value = record.value;
  1912. if (value == CIRCULAR) {
  1913. throw Error(NO_NEW_LINE + 'Circular dependency');
  1914. }
  1915. else if (value === EMPTY) {
  1916. record.value = CIRCULAR;
  1917. var /** @type {?} */ obj = undefined;
  1918. var /** @type {?} */ useNew = record.useNew;
  1919. var /** @type {?} */ fn = record.fn;
  1920. var /** @type {?} */ depRecords = record.deps;
  1921. var /** @type {?} */ deps = EMPTY;
  1922. if (depRecords.length) {
  1923. deps = [];
  1924. for (var /** @type {?} */ i = 0; i < depRecords.length; i++) {
  1925. var /** @type {?} */ depRecord = depRecords[i];
  1926. var /** @type {?} */ options = depRecord.options;
  1927. var /** @type {?} */ childRecord = options & 2 /* CheckSelf */ ? records.get(depRecord.token) : undefined;
  1928. deps.push(tryResolveToken(
  1929. // Current Token to resolve
  1930. depRecord.token, childRecord, records,
  1931. // If we don't know how to resolve dependency and we should not check parent for it,
  1932. // than pass in Null injector.
  1933. !childRecord && !(options & 4 /* CheckParent */) ? NULL_INJECTOR : parent, options & 1 /* Optional */ ? null : Injector.THROW_IF_NOT_FOUND));
  1934. }
  1935. }
  1936. record.value = value = useNew ? new ((_a = (/** @type {?} */ (fn))).bind.apply(_a, [void 0].concat(deps)))() : fn.apply(obj, deps);
  1937. }
  1938. }
  1939. else {
  1940. value = parent.get(token, notFoundValue);
  1941. }
  1942. return value;
  1943. var _a;
  1944. }
  1945. /**
  1946. * @param {?} provider
  1947. * @return {?}
  1948. */
  1949. function computeDeps(provider) {
  1950. var /** @type {?} */ deps = EMPTY;
  1951. var /** @type {?} */ providerDeps = (/** @type {?} */ (provider)).deps;
  1952. if (providerDeps && providerDeps.length) {
  1953. deps = [];
  1954. for (var /** @type {?} */ i = 0; i < providerDeps.length; i++) {
  1955. var /** @type {?} */ options = 6;
  1956. var /** @type {?} */ token = resolveForwardRef(providerDeps[i]);
  1957. if (token instanceof Array) {
  1958. for (var /** @type {?} */ j = 0, /** @type {?} */ annotations = token; j < annotations.length; j++) {
  1959. var /** @type {?} */ annotation = annotations[j];
  1960. if (annotation instanceof Optional || annotation == Optional) {
  1961. options = options | 1 /* Optional */;
  1962. }
  1963. else if (annotation instanceof SkipSelf || annotation == SkipSelf) {
  1964. options = options & ~2 /* CheckSelf */;
  1965. }
  1966. else if (annotation instanceof Self || annotation == Self) {
  1967. options = options & ~4 /* CheckParent */;
  1968. }
  1969. else if (annotation instanceof Inject) {
  1970. token = (/** @type {?} */ (annotation)).token;
  1971. }
  1972. else {
  1973. token = resolveForwardRef(annotation);
  1974. }
  1975. }
  1976. }
  1977. deps.push({ token: token, options: options });
  1978. }
  1979. }
  1980. else if ((/** @type {?} */ (provider)).useExisting) {
  1981. var /** @type {?} */ token = resolveForwardRef((/** @type {?} */ (provider)).useExisting);
  1982. deps = [{ token: token, options: 6 /* Default */ }];
  1983. }
  1984. else if (!providerDeps && !(USE_VALUE in provider)) {
  1985. // useValue & useExisting are the only ones which are exempt from deps all others need it.
  1986. throw staticError('\'deps\' required', provider);
  1987. }
  1988. return deps;
  1989. }
  1990. /**
  1991. * @param {?} text
  1992. * @param {?} obj
  1993. * @param {?=} source
  1994. * @return {?}
  1995. */
  1996. function formatError(text, obj, source) {
  1997. if (source === void 0) { source = null; }
  1998. text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;
  1999. var /** @type {?} */ context = stringify(obj);
  2000. if (obj instanceof Array) {
  2001. context = obj.map(stringify).join(' -> ');
  2002. }
  2003. else if (typeof obj === 'object') {
  2004. var /** @type {?} */ parts = /** @type {?} */ ([]);
  2005. for (var /** @type {?} */ key in obj) {
  2006. if (obj.hasOwnProperty(key)) {
  2007. var /** @type {?} */ value = obj[key];
  2008. parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));
  2009. }
  2010. }
  2011. context = "{" + parts.join(', ') + "}";
  2012. }
  2013. return "StaticInjectorError" + (source ? '(' + source + ')' : '') + "[" + context + "]: " + text.replace(NEW_LINE, '\n ');
  2014. }
  2015. /**
  2016. * @param {?} text
  2017. * @param {?} obj
  2018. * @return {?}
  2019. */
  2020. function staticError(text, obj) {
  2021. return new Error(formatError(text, obj));
  2022. }
  2023. /**
  2024. * @template T
  2025. * @param {?} objWithPropertyToExtract
  2026. * @return {?}
  2027. */
  2028. function getClosureSafeProperty(objWithPropertyToExtract) {
  2029. for (var /** @type {?} */ key in objWithPropertyToExtract) {
  2030. if (objWithPropertyToExtract[key] === GET_PROPERTY_NAME) {
  2031. return key;
  2032. }
  2033. }
  2034. throw Error('!prop');
  2035. }
  2036. /**
  2037. * @fileoverview added by tsickle
  2038. * @suppress {checkTypes} checked by tsc
  2039. */
  2040. /**
  2041. * @license
  2042. * Copyright Google Inc. All Rights Reserved.
  2043. *
  2044. * Use of this source code is governed by an MIT-style license that can be
  2045. * found in the LICENSE file at https://angular.io/license
  2046. */
  2047. var ERROR_DEBUG_CONTEXT = 'ngDebugContext';
  2048. var ERROR_ORIGINAL_ERROR = 'ngOriginalError';
  2049. var ERROR_LOGGER = 'ngErrorLogger';
  2050. /**
  2051. * @param {?} error
  2052. * @return {?}
  2053. */
  2054. /**
  2055. * @param {?} error
  2056. * @return {?}
  2057. */
  2058. function getDebugContext(error) {
  2059. return (/** @type {?} */ (error))[ERROR_DEBUG_CONTEXT];
  2060. }
  2061. /**
  2062. * @param {?} error
  2063. * @return {?}
  2064. */
  2065. function getOriginalError(error) {
  2066. return (/** @type {?} */ (error))[ERROR_ORIGINAL_ERROR];
  2067. }
  2068. /**
  2069. * @param {?} error
  2070. * @return {?}
  2071. */
  2072. function getErrorLogger(error) {
  2073. return (/** @type {?} */ (error))[ERROR_LOGGER] || defaultErrorLogger;
  2074. }
  2075. /**
  2076. * @param {?} console
  2077. * @param {...?} values
  2078. * @return {?}
  2079. */
  2080. function defaultErrorLogger(console) {
  2081. var values = [];
  2082. for (var _i = 1; _i < arguments.length; _i++) {
  2083. values[_i - 1] = arguments[_i];
  2084. }
  2085. console.error.apply(console, values);
  2086. }
  2087. /**
  2088. * @fileoverview added by tsickle
  2089. * @suppress {checkTypes} checked by tsc
  2090. */
  2091. /**
  2092. * @license
  2093. * Copyright Google Inc. All Rights Reserved.
  2094. *
  2095. * Use of this source code is governed by an MIT-style license that can be
  2096. * found in the LICENSE file at https://angular.io/license
  2097. */
  2098. /**
  2099. * \@whatItDoes Provides a hook for centralized exception handling.
  2100. *
  2101. * \@description
  2102. *
  2103. * The default implementation of `ErrorHandler` prints error messages to the `console`. To
  2104. * intercept error handling, write a custom exception handler that replaces this default as
  2105. * appropriate for your app.
  2106. *
  2107. * ### Example
  2108. *
  2109. * ```
  2110. * class MyErrorHandler implements ErrorHandler {
  2111. * handleError(error) {
  2112. * // do something with the exception
  2113. * }
  2114. * }
  2115. *
  2116. * \@NgModule({
  2117. * providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]
  2118. * })
  2119. * class MyModule {}
  2120. * ```
  2121. *
  2122. * \@stable
  2123. */
  2124. var ErrorHandler = /** @class */ (function () {
  2125. function ErrorHandler() {
  2126. /**
  2127. * \@internal
  2128. */
  2129. this._console = console;
  2130. }
  2131. /**
  2132. * @param {?} error
  2133. * @return {?}
  2134. */
  2135. ErrorHandler.prototype.handleError = /**
  2136. * @param {?} error
  2137. * @return {?}
  2138. */
  2139. function (error) {
  2140. var /** @type {?} */ originalError = this._findOriginalError(error);
  2141. var /** @type {?} */ context = this._findContext(error);
  2142. // Note: Browser consoles show the place from where console.error was called.
  2143. // We can use this to give users additional information about the error.
  2144. var /** @type {?} */ errorLogger = getErrorLogger(error);
  2145. errorLogger(this._console, "ERROR", error);
  2146. if (originalError) {
  2147. errorLogger(this._console, "ORIGINAL ERROR", originalError);
  2148. }
  2149. if (context) {
  2150. errorLogger(this._console, 'ERROR CONTEXT', context);
  2151. }
  2152. };
  2153. /** @internal */
  2154. /**
  2155. * \@internal
  2156. * @param {?} error
  2157. * @return {?}
  2158. */
  2159. ErrorHandler.prototype._findContext = /**
  2160. * \@internal
  2161. * @param {?} error
  2162. * @return {?}
  2163. */
  2164. function (error) {
  2165. if (error) {
  2166. return getDebugContext(error) ? getDebugContext(error) :
  2167. this._findContext(getOriginalError(error));
  2168. }
  2169. return null;
  2170. };
  2171. /** @internal */
  2172. /**
  2173. * \@internal
  2174. * @param {?} error
  2175. * @return {?}
  2176. */
  2177. ErrorHandler.prototype._findOriginalError = /**
  2178. * \@internal
  2179. * @param {?} error
  2180. * @return {?}
  2181. */
  2182. function (error) {
  2183. var /** @type {?} */ e = getOriginalError(error);
  2184. while (e && getOriginalError(e)) {
  2185. e = getOriginalError(e);
  2186. }
  2187. return e;
  2188. };
  2189. return ErrorHandler;
  2190. }());
  2191. /**
  2192. * @param {?} message
  2193. * @param {?} originalError
  2194. * @return {?}
  2195. */
  2196. function wrappedError(message, originalError) {
  2197. var /** @type {?} */ msg = message + " caused by: " + (originalError instanceof Error ? originalError.message : originalError);
  2198. var /** @type {?} */ error = Error(msg);
  2199. (/** @type {?} */ (error))[ERROR_ORIGINAL_ERROR] = originalError;
  2200. return error;
  2201. }
  2202. /**
  2203. * @fileoverview added by tsickle
  2204. * @suppress {checkTypes} checked by tsc
  2205. */
  2206. /**
  2207. * @license
  2208. * Copyright Google Inc. All Rights Reserved.
  2209. *
  2210. * Use of this source code is governed by an MIT-style license that can be
  2211. * found in the LICENSE file at https://angular.io/license
  2212. */
  2213. /**
  2214. * @param {?} keys
  2215. * @return {?}
  2216. */
  2217. function findFirstClosedCycle(keys) {
  2218. var /** @type {?} */ res = [];
  2219. for (var /** @type {?} */ i = 0; i < keys.length; ++i) {
  2220. if (res.indexOf(keys[i]) > -1) {
  2221. res.push(keys[i]);
  2222. return res;
  2223. }
  2224. res.push(keys[i]);
  2225. }
  2226. return res;
  2227. }
  2228. /**
  2229. * @param {?} keys
  2230. * @return {?}
  2231. */
  2232. function constructResolvingPath(keys) {
  2233. if (keys.length > 1) {
  2234. var /** @type {?} */ reversed = findFirstClosedCycle(keys.slice().reverse());
  2235. var /** @type {?} */ tokenStrs = reversed.map(function (k) { return stringify(k.token); });
  2236. return ' (' + tokenStrs.join(' -> ') + ')';
  2237. }
  2238. return '';
  2239. }
  2240. /**
  2241. * @record
  2242. */
  2243. /**
  2244. * @param {?} injector
  2245. * @param {?} key
  2246. * @param {?} constructResolvingMessage
  2247. * @param {?=} originalError
  2248. * @return {?}
  2249. */
  2250. function injectionError(injector, key, constructResolvingMessage, originalError) {
  2251. var /** @type {?} */ keys = [key];
  2252. var /** @type {?} */ errMsg = constructResolvingMessage(keys);
  2253. var /** @type {?} */ error = /** @type {?} */ ((originalError ? wrappedError(errMsg, originalError) : Error(errMsg)));
  2254. error.addKey = addKey;
  2255. error.keys = keys;
  2256. error.injectors = [injector];
  2257. error.constructResolvingMessage = constructResolvingMessage;
  2258. (/** @type {?} */ (error))[ERROR_ORIGINAL_ERROR] = originalError;
  2259. return error;
  2260. }
  2261. /**
  2262. * @this {?}
  2263. * @param {?} injector
  2264. * @param {?} key
  2265. * @return {?}
  2266. */
  2267. function addKey(injector, key) {
  2268. this.injectors.push(injector);
  2269. this.keys.push(key);
  2270. // Note: This updated message won't be reflected in the `.stack` property
  2271. this.message = this.constructResolvingMessage(this.keys);
  2272. }
  2273. /**
  2274. * Thrown when trying to retrieve a dependency by key from {\@link Injector}, but the
  2275. * {\@link Injector} does not have a {\@link Provider} for the given key.
  2276. *
  2277. * ### Example ([live demo](http://plnkr.co/edit/vq8D3FRB9aGbnWJqtEPE?p=preview))
  2278. *
  2279. * ```typescript
  2280. * class A {
  2281. * constructor(b:B) {}
  2282. * }
  2283. *
  2284. * expect(() => Injector.resolveAndCreate([A])).toThrowError();
  2285. * ```
  2286. * @param {?} injector
  2287. * @param {?} key
  2288. * @return {?}
  2289. */
  2290. function noProviderError(injector, key) {
  2291. return injectionError(injector, key, function (keys) {
  2292. var /** @type {?} */ first = stringify(keys[0].token);
  2293. return "No provider for " + first + "!" + constructResolvingPath(keys);
  2294. });
  2295. }
  2296. /**
  2297. * Thrown when dependencies form a cycle.
  2298. *
  2299. * ### Example ([live demo](http://plnkr.co/edit/wYQdNos0Tzql3ei1EV9j?p=info))
  2300. *
  2301. * ```typescript
  2302. * var injector = Injector.resolveAndCreate([
  2303. * {provide: "one", useFactory: (two) => "two", deps: [[new Inject("two")]]},
  2304. * {provide: "two", useFactory: (one) => "one", deps: [[new Inject("one")]]}
  2305. * ]);
  2306. *
  2307. * expect(() => injector.get("one")).toThrowError();
  2308. * ```
  2309. *
  2310. * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.
  2311. * @param {?} injector
  2312. * @param {?} key
  2313. * @return {?}
  2314. */
  2315. function cyclicDependencyError(injector, key) {
  2316. return injectionError(injector, key, function (keys) {
  2317. return "Cannot instantiate cyclic dependency!" + constructResolvingPath(keys);
  2318. });
  2319. }
  2320. /**
  2321. * Thrown when a constructing type returns with an Error.
  2322. *
  2323. * The `InstantiationError` class contains the original error plus the dependency graph which caused
  2324. * this object to be instantiated.
  2325. *
  2326. * ### Example ([live demo](http://plnkr.co/edit/7aWYdcqTQsP0eNqEdUAf?p=preview))
  2327. *
  2328. * ```typescript
  2329. * class A {
  2330. * constructor() {
  2331. * throw new Error('message');
  2332. * }
  2333. * }
  2334. *
  2335. * var injector = Injector.resolveAndCreate([A]);
  2336. * try {
  2337. * injector.get(A);
  2338. * } catch (e) {
  2339. * expect(e instanceof InstantiationError).toBe(true);
  2340. * expect(e.originalException.message).toEqual("message");
  2341. * expect(e.originalStack).toBeDefined();
  2342. * }
  2343. * ```
  2344. * @param {?} injector
  2345. * @param {?} originalException
  2346. * @param {?} originalStack
  2347. * @param {?} key
  2348. * @return {?}
  2349. */
  2350. function instantiationError(injector, originalException, originalStack, key) {
  2351. return injectionError(injector, key, function (keys) {
  2352. var /** @type {?} */ first = stringify(keys[0].token);
  2353. return originalException.message + ": Error during instantiation of " + first + "!" + constructResolvingPath(keys) + ".";
  2354. }, originalException);
  2355. }
  2356. /**
  2357. * Thrown when an object other then {\@link Provider} (or `Type`) is passed to {\@link Injector}
  2358. * creation.
  2359. *
  2360. * ### Example ([live demo](http://plnkr.co/edit/YatCFbPAMCL0JSSQ4mvH?p=preview))
  2361. *
  2362. * ```typescript
  2363. * expect(() => Injector.resolveAndCreate(["not a type"])).toThrowError();
  2364. * ```
  2365. * @param {?} provider
  2366. * @return {?}
  2367. */
  2368. function invalidProviderError(provider) {
  2369. return Error("Invalid provider - only instances of Provider and Type are allowed, got: " + provider);
  2370. }
  2371. /**
  2372. * Thrown when the class has no annotation information.
  2373. *
  2374. * Lack of annotation information prevents the {\@link Injector} from determining which dependencies
  2375. * need to be injected into the constructor.
  2376. *
  2377. * ### Example ([live demo](http://plnkr.co/edit/rHnZtlNS7vJOPQ6pcVkm?p=preview))
  2378. *
  2379. * ```typescript
  2380. * class A {
  2381. * constructor(b) {}
  2382. * }
  2383. *
  2384. * expect(() => Injector.resolveAndCreate([A])).toThrowError();
  2385. * ```
  2386. *
  2387. * This error is also thrown when the class not marked with {\@link Injectable} has parameter types.
  2388. *
  2389. * ```typescript
  2390. * class B {}
  2391. *
  2392. * class A {
  2393. * constructor(b:B) {} // no information about the parameter types of A is available at runtime.
  2394. * }
  2395. *
  2396. * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();
  2397. * ```
  2398. * \@stable
  2399. * @param {?} typeOrFunc
  2400. * @param {?} params
  2401. * @return {?}
  2402. */
  2403. function noAnnotationError(typeOrFunc, params) {
  2404. var /** @type {?} */ signature = [];
  2405. for (var /** @type {?} */ i = 0, /** @type {?} */ ii = params.length; i < ii; i++) {
  2406. var /** @type {?} */ parameter = params[i];
  2407. if (!parameter || parameter.length == 0) {
  2408. signature.push('?');
  2409. }
  2410. else {
  2411. signature.push(parameter.map(stringify).join(' '));
  2412. }
  2413. }
  2414. return Error('Cannot resolve all parameters for \'' + stringify(typeOrFunc) + '\'(' +
  2415. signature.join(', ') + '). ' +
  2416. 'Make sure that all the parameters are decorated with Inject or have valid type annotations and that \'' +
  2417. stringify(typeOrFunc) + '\' is decorated with Injectable.');
  2418. }
  2419. /**
  2420. * Thrown when getting an object by index.
  2421. *
  2422. * ### Example ([live demo](http://plnkr.co/edit/bRs0SX2OTQiJzqvjgl8P?p=preview))
  2423. *
  2424. * ```typescript
  2425. * class A {}
  2426. *
  2427. * var injector = Injector.resolveAndCreate([A]);
  2428. *
  2429. * expect(() => injector.getAt(100)).toThrowError();
  2430. * ```
  2431. * \@stable
  2432. * @param {?} index
  2433. * @return {?}
  2434. */
  2435. function outOfBoundsError(index) {
  2436. return Error("Index " + index + " is out-of-bounds.");
  2437. }
  2438. /**
  2439. * Thrown when a multi provider and a regular provider are bound to the same token.
  2440. *
  2441. * ### Example
  2442. *
  2443. * ```typescript
  2444. * expect(() => Injector.resolveAndCreate([
  2445. * { provide: "Strings", useValue: "string1", multi: true},
  2446. * { provide: "Strings", useValue: "string2", multi: false}
  2447. * ])).toThrowError();
  2448. * ```
  2449. * @param {?} provider1
  2450. * @param {?} provider2
  2451. * @return {?}
  2452. */
  2453. function mixingMultiProvidersWithRegularProvidersError(provider1, provider2) {
  2454. return Error("Cannot mix multi providers and regular providers, got: " + provider1 + " " + provider2);
  2455. }
  2456. /**
  2457. * @fileoverview added by tsickle
  2458. * @suppress {checkTypes} checked by tsc
  2459. */
  2460. /**
  2461. * @license
  2462. * Copyright Google Inc. All Rights Reserved.
  2463. *
  2464. * Use of this source code is governed by an MIT-style license that can be
  2465. * found in the LICENSE file at https://angular.io/license
  2466. */
  2467. /**
  2468. * A unique object used for retrieving items from the {\@link ReflectiveInjector}.
  2469. *
  2470. * Keys have:
  2471. * - a system-wide unique `id`.
  2472. * - a `token`.
  2473. *
  2474. * `Key` is used internally by {\@link ReflectiveInjector} because its system-wide unique `id` allows
  2475. * the
  2476. * injector to store created objects in a more efficient way.
  2477. *
  2478. * `Key` should not be created directly. {\@link ReflectiveInjector} creates keys automatically when
  2479. * resolving
  2480. * providers.
  2481. * @deprecated No replacement
  2482. */
  2483. var ReflectiveKey = /** @class */ (function () {
  2484. /**
  2485. * Private
  2486. */
  2487. function ReflectiveKey(token, id) {
  2488. this.token = token;
  2489. this.id = id;
  2490. if (!token) {
  2491. throw new Error('Token must be defined!');
  2492. }
  2493. this.displayName = stringify(this.token);
  2494. }
  2495. /**
  2496. * Retrieves a `Key` for a token.
  2497. */
  2498. /**
  2499. * Retrieves a `Key` for a token.
  2500. * @param {?} token
  2501. * @return {?}
  2502. */
  2503. ReflectiveKey.get = /**
  2504. * Retrieves a `Key` for a token.
  2505. * @param {?} token
  2506. * @return {?}
  2507. */
  2508. function (token) {
  2509. return _globalKeyRegistry.get(resolveForwardRef(token));
  2510. };
  2511. Object.defineProperty(ReflectiveKey, "numberOfKeys", {
  2512. /**
  2513. * @returns the number of keys registered in the system.
  2514. */
  2515. get: /**
  2516. * @return {?} the number of keys registered in the system.
  2517. */
  2518. function () { return _globalKeyRegistry.numberOfKeys; },
  2519. enumerable: true,
  2520. configurable: true
  2521. });
  2522. return ReflectiveKey;
  2523. }());
  2524. var KeyRegistry = /** @class */ (function () {
  2525. function KeyRegistry() {
  2526. this._allKeys = new Map();
  2527. }
  2528. /**
  2529. * @param {?} token
  2530. * @return {?}
  2531. */
  2532. KeyRegistry.prototype.get = /**
  2533. * @param {?} token
  2534. * @return {?}
  2535. */
  2536. function (token) {
  2537. if (token instanceof ReflectiveKey)
  2538. return token;
  2539. if (this._allKeys.has(token)) {
  2540. return /** @type {?} */ ((this._allKeys.get(token)));
  2541. }
  2542. var /** @type {?} */ newKey = new ReflectiveKey(token, ReflectiveKey.numberOfKeys);
  2543. this._allKeys.set(token, newKey);
  2544. return newKey;
  2545. };
  2546. Object.defineProperty(KeyRegistry.prototype, "numberOfKeys", {
  2547. get: /**
  2548. * @return {?}
  2549. */
  2550. function () { return this._allKeys.size; },
  2551. enumerable: true,
  2552. configurable: true
  2553. });
  2554. return KeyRegistry;
  2555. }());
  2556. var _globalKeyRegistry = new KeyRegistry();
  2557. /**
  2558. * @fileoverview added by tsickle
  2559. * @suppress {checkTypes} checked by tsc
  2560. */
  2561. /**
  2562. * @license
  2563. * Copyright Google Inc. All Rights Reserved.
  2564. *
  2565. * Use of this source code is governed by an MIT-style license that can be
  2566. * found in the LICENSE file at https://angular.io/license
  2567. */
  2568. /**
  2569. * \@whatItDoes Represents a type that a Component or other object is instances of.
  2570. *
  2571. * \@description
  2572. *
  2573. * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by
  2574. * the `MyCustomComponent` constructor function.
  2575. *
  2576. * \@stable
  2577. */
  2578. var Type = Function;
  2579. /**
  2580. * @param {?} v
  2581. * @return {?}
  2582. */
  2583. function isType(v) {
  2584. return typeof v === 'function';
  2585. }
  2586. /**
  2587. * @fileoverview added by tsickle
  2588. * @suppress {checkTypes} checked by tsc
  2589. */
  2590. /**
  2591. * @license
  2592. * Copyright Google Inc. All Rights Reserved.
  2593. *
  2594. * Use of this source code is governed by an MIT-style license that can be
  2595. * found in the LICENSE file at https://angular.io/license
  2596. */
  2597. /**
  2598. * Attention: These regex has to hold even if the code is minified!
  2599. */
  2600. var DELEGATE_CTOR = /^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*arguments\)/;
  2601. var INHERITED_CLASS = /^class\s+[A-Za-z\d$_]*\s*extends\s+[A-Za-z\d$_]+\s*{/;
  2602. var INHERITED_CLASS_WITH_CTOR = /^class\s+[A-Za-z\d$_]*\s*extends\s+[A-Za-z\d$_]+\s*{[\s\S]*constructor\s*\(/;
  2603. var ReflectionCapabilities = /** @class */ (function () {
  2604. function ReflectionCapabilities(reflect) {
  2605. this._reflect = reflect || _global['Reflect'];
  2606. }
  2607. /**
  2608. * @return {?}
  2609. */
  2610. ReflectionCapabilities.prototype.isReflectionEnabled = /**
  2611. * @return {?}
  2612. */
  2613. function () { return true; };
  2614. /**
  2615. * @template T
  2616. * @param {?} t
  2617. * @return {?}
  2618. */
  2619. ReflectionCapabilities.prototype.factory = /**
  2620. * @template T
  2621. * @param {?} t
  2622. * @return {?}
  2623. */
  2624. function (t) { return function () {
  2625. var args = [];
  2626. for (var _i = 0; _i < arguments.length; _i++) {
  2627. args[_i] = arguments[_i];
  2628. }
  2629. return new (t.bind.apply(t, [void 0].concat(args)))();
  2630. }; };
  2631. /** @internal */
  2632. /**
  2633. * \@internal
  2634. * @param {?} paramTypes
  2635. * @param {?} paramAnnotations
  2636. * @return {?}
  2637. */
  2638. ReflectionCapabilities.prototype._zipTypesAndAnnotations = /**
  2639. * \@internal
  2640. * @param {?} paramTypes
  2641. * @param {?} paramAnnotations
  2642. * @return {?}
  2643. */
  2644. function (paramTypes, paramAnnotations) {
  2645. var /** @type {?} */ result;
  2646. if (typeof paramTypes === 'undefined') {
  2647. result = new Array(paramAnnotations.length);
  2648. }
  2649. else {
  2650. result = new Array(paramTypes.length);
  2651. }
  2652. for (var /** @type {?} */ i = 0; i < result.length; i++) {
  2653. // TS outputs Object for parameters without types, while Traceur omits
  2654. // the annotations. For now we preserve the Traceur behavior to aid
  2655. // migration, but this can be revisited.
  2656. if (typeof paramTypes === 'undefined') {
  2657. result[i] = [];
  2658. }
  2659. else if (paramTypes[i] != Object) {
  2660. result[i] = [paramTypes[i]];
  2661. }
  2662. else {
  2663. result[i] = [];
  2664. }
  2665. if (paramAnnotations && paramAnnotations[i] != null) {
  2666. result[i] = result[i].concat(paramAnnotations[i]);
  2667. }
  2668. }
  2669. return result;
  2670. };
  2671. /**
  2672. * @param {?} type
  2673. * @param {?} parentCtor
  2674. * @return {?}
  2675. */
  2676. ReflectionCapabilities.prototype._ownParameters = /**
  2677. * @param {?} type
  2678. * @param {?} parentCtor
  2679. * @return {?}
  2680. */
  2681. function (type, parentCtor) {
  2682. var /** @type {?} */ typeStr = type.toString();
  2683. // If we have no decorators, we only have function.length as metadata.
  2684. // In that case, to detect whether a child class declared an own constructor or not,
  2685. // we need to look inside of that constructor to check whether it is
  2686. // just calling the parent.
  2687. // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439
  2688. // that sets 'design:paramtypes' to []
  2689. // if a class inherits from another class but has no ctor declared itself.
  2690. if (DELEGATE_CTOR.exec(typeStr) ||
  2691. (INHERITED_CLASS.exec(typeStr) && !INHERITED_CLASS_WITH_CTOR.exec(typeStr))) {
  2692. return null;
  2693. }
  2694. // Prefer the direct API.
  2695. if ((/** @type {?} */ (type)).parameters && (/** @type {?} */ (type)).parameters !== parentCtor.parameters) {
  2696. return (/** @type {?} */ (type)).parameters;
  2697. }
  2698. // API of tsickle for lowering decorators to properties on the class.
  2699. var /** @type {?} */ tsickleCtorParams = (/** @type {?} */ (type)).ctorParameters;
  2700. if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {
  2701. // Newer tsickle uses a function closure
  2702. // Retain the non-function case for compatibility with older tsickle
  2703. var /** @type {?} */ ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;
  2704. var /** @type {?} */ paramTypes_1 = ctorParameters.map(function (ctorParam) { return ctorParam && ctorParam.type; });
  2705. var /** @type {?} */ paramAnnotations_1 = ctorParameters.map(function (ctorParam) {
  2706. return ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators);
  2707. });
  2708. return this._zipTypesAndAnnotations(paramTypes_1, paramAnnotations_1);
  2709. }
  2710. // API for metadata created by invoking the decorators.
  2711. var /** @type {?} */ paramAnnotations = type.hasOwnProperty(PARAMETERS) && (/** @type {?} */ (type))[PARAMETERS];
  2712. var /** @type {?} */ paramTypes = this._reflect && this._reflect.getOwnMetadata &&
  2713. this._reflect.getOwnMetadata('design:paramtypes', type);
  2714. if (paramTypes || paramAnnotations) {
  2715. return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);
  2716. }
  2717. // If a class has no decorators, at least create metadata
  2718. // based on function.length.
  2719. // Note: We know that this is a real constructor as we checked
  2720. // the content of the constructor above.
  2721. return new Array((/** @type {?} */ (type.length))).fill(undefined);
  2722. };
  2723. /**
  2724. * @param {?} type
  2725. * @return {?}
  2726. */
  2727. ReflectionCapabilities.prototype.parameters = /**
  2728. * @param {?} type
  2729. * @return {?}
  2730. */
  2731. function (type) {
  2732. // Note: only report metadata if we have at least one class decorator
  2733. // to stay in sync with the static reflector.
  2734. if (!isType(type)) {
  2735. return [];
  2736. }
  2737. var /** @type {?} */ parentCtor = getParentCtor(type);
  2738. var /** @type {?} */ parameters = this._ownParameters(type, parentCtor);
  2739. if (!parameters && parentCtor !== Object) {
  2740. parameters = this.parameters(parentCtor);
  2741. }
  2742. return parameters || [];
  2743. };
  2744. /**
  2745. * @param {?} typeOrFunc
  2746. * @param {?} parentCtor
  2747. * @return {?}
  2748. */
  2749. ReflectionCapabilities.prototype._ownAnnotations = /**
  2750. * @param {?} typeOrFunc
  2751. * @param {?} parentCtor
  2752. * @return {?}
  2753. */
  2754. function (typeOrFunc, parentCtor) {
  2755. // Prefer the direct API.
  2756. if ((/** @type {?} */ (typeOrFunc)).annotations && (/** @type {?} */ (typeOrFunc)).annotations !== parentCtor.annotations) {
  2757. var /** @type {?} */ annotations = (/** @type {?} */ (typeOrFunc)).annotations;
  2758. if (typeof annotations === 'function' && annotations.annotations) {
  2759. annotations = annotations.annotations;
  2760. }
  2761. return annotations;
  2762. }
  2763. // API of tsickle for lowering decorators to properties on the class.
  2764. if ((/** @type {?} */ (typeOrFunc)).decorators && (/** @type {?} */ (typeOrFunc)).decorators !== parentCtor.decorators) {
  2765. return convertTsickleDecoratorIntoMetadata((/** @type {?} */ (typeOrFunc)).decorators);
  2766. }
  2767. // API for metadata created by invoking the decorators.
  2768. if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {
  2769. return (/** @type {?} */ (typeOrFunc))[ANNOTATIONS];
  2770. }
  2771. return null;
  2772. };
  2773. /**
  2774. * @param {?} typeOrFunc
  2775. * @return {?}
  2776. */
  2777. ReflectionCapabilities.prototype.annotations = /**
  2778. * @param {?} typeOrFunc
  2779. * @return {?}
  2780. */
  2781. function (typeOrFunc) {
  2782. if (!isType(typeOrFunc)) {
  2783. return [];
  2784. }
  2785. var /** @type {?} */ parentCtor = getParentCtor(typeOrFunc);
  2786. var /** @type {?} */ ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];
  2787. var /** @type {?} */ parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];
  2788. return parentAnnotations.concat(ownAnnotations);
  2789. };
  2790. /**
  2791. * @param {?} typeOrFunc
  2792. * @param {?} parentCtor
  2793. * @return {?}
  2794. */
  2795. ReflectionCapabilities.prototype._ownPropMetadata = /**
  2796. * @param {?} typeOrFunc
  2797. * @param {?} parentCtor
  2798. * @return {?}
  2799. */
  2800. function (typeOrFunc, parentCtor) {
  2801. // Prefer the direct API.
  2802. if ((/** @type {?} */ (typeOrFunc)).propMetadata &&
  2803. (/** @type {?} */ (typeOrFunc)).propMetadata !== parentCtor.propMetadata) {
  2804. var /** @type {?} */ propMetadata = (/** @type {?} */ (typeOrFunc)).propMetadata;
  2805. if (typeof propMetadata === 'function' && propMetadata.propMetadata) {
  2806. propMetadata = propMetadata.propMetadata;
  2807. }
  2808. return propMetadata;
  2809. }
  2810. // API of tsickle for lowering decorators to properties on the class.
  2811. if ((/** @type {?} */ (typeOrFunc)).propDecorators &&
  2812. (/** @type {?} */ (typeOrFunc)).propDecorators !== parentCtor.propDecorators) {
  2813. var /** @type {?} */ propDecorators_1 = (/** @type {?} */ (typeOrFunc)).propDecorators;
  2814. var /** @type {?} */ propMetadata_1 = /** @type {?} */ ({});
  2815. Object.keys(propDecorators_1).forEach(function (prop) {
  2816. propMetadata_1[prop] = convertTsickleDecoratorIntoMetadata(propDecorators_1[prop]);
  2817. });
  2818. return propMetadata_1;
  2819. }
  2820. // API for metadata created by invoking the decorators.
  2821. if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {
  2822. return (/** @type {?} */ (typeOrFunc))[PROP_METADATA];
  2823. }
  2824. return null;
  2825. };
  2826. /**
  2827. * @param {?} typeOrFunc
  2828. * @return {?}
  2829. */
  2830. ReflectionCapabilities.prototype.propMetadata = /**
  2831. * @param {?} typeOrFunc
  2832. * @return {?}
  2833. */
  2834. function (typeOrFunc) {
  2835. if (!isType(typeOrFunc)) {
  2836. return {};
  2837. }
  2838. var /** @type {?} */ parentCtor = getParentCtor(typeOrFunc);
  2839. var /** @type {?} */ propMetadata = {};
  2840. if (parentCtor !== Object) {
  2841. var /** @type {?} */ parentPropMetadata_1 = this.propMetadata(parentCtor);
  2842. Object.keys(parentPropMetadata_1).forEach(function (propName) {
  2843. propMetadata[propName] = parentPropMetadata_1[propName];
  2844. });
  2845. }
  2846. var /** @type {?} */ ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);
  2847. if (ownPropMetadata) {
  2848. Object.keys(ownPropMetadata).forEach(function (propName) {
  2849. var /** @type {?} */ decorators = [];
  2850. if (propMetadata.hasOwnProperty(propName)) {
  2851. decorators.push.apply(decorators, propMetadata[propName]);
  2852. }
  2853. decorators.push.apply(decorators, ownPropMetadata[propName]);
  2854. propMetadata[propName] = decorators;
  2855. });
  2856. }
  2857. return propMetadata;
  2858. };
  2859. /**
  2860. * @param {?} type
  2861. * @param {?} lcProperty
  2862. * @return {?}
  2863. */
  2864. ReflectionCapabilities.prototype.hasLifecycleHook = /**
  2865. * @param {?} type
  2866. * @param {?} lcProperty
  2867. * @return {?}
  2868. */
  2869. function (type, lcProperty) {
  2870. return type instanceof Type && lcProperty in type.prototype;
  2871. };
  2872. /**
  2873. * @param {?} type
  2874. * @return {?}
  2875. */
  2876. ReflectionCapabilities.prototype.guards = /**
  2877. * @param {?} type
  2878. * @return {?}
  2879. */
  2880. function (type) { return {}; };
  2881. /**
  2882. * @param {?} name
  2883. * @return {?}
  2884. */
  2885. ReflectionCapabilities.prototype.getter = /**
  2886. * @param {?} name
  2887. * @return {?}
  2888. */
  2889. function (name) { return /** @type {?} */ (new Function('o', 'return o.' + name + ';')); };
  2890. /**
  2891. * @param {?} name
  2892. * @return {?}
  2893. */
  2894. ReflectionCapabilities.prototype.setter = /**
  2895. * @param {?} name
  2896. * @return {?}
  2897. */
  2898. function (name) {
  2899. return /** @type {?} */ (new Function('o', 'v', 'return o.' + name + ' = v;'));
  2900. };
  2901. /**
  2902. * @param {?} name
  2903. * @return {?}
  2904. */
  2905. ReflectionCapabilities.prototype.method = /**
  2906. * @param {?} name
  2907. * @return {?}
  2908. */
  2909. function (name) {
  2910. var /** @type {?} */ functionBody = "if (!o." + name + ") throw new Error('\"" + name + "\" is undefined');\n return o." + name + ".apply(o, args);";
  2911. return /** @type {?} */ (new Function('o', 'args', functionBody));
  2912. };
  2913. // There is not a concept of import uri in Js, but this is useful in developing Dart applications.
  2914. /**
  2915. * @param {?} type
  2916. * @return {?}
  2917. */
  2918. ReflectionCapabilities.prototype.importUri = /**
  2919. * @param {?} type
  2920. * @return {?}
  2921. */
  2922. function (type) {
  2923. // StaticSymbol
  2924. if (typeof type === 'object' && type['filePath']) {
  2925. return type['filePath'];
  2926. }
  2927. // Runtime type
  2928. return "./" + stringify(type);
  2929. };
  2930. /**
  2931. * @param {?} type
  2932. * @return {?}
  2933. */
  2934. ReflectionCapabilities.prototype.resourceUri = /**
  2935. * @param {?} type
  2936. * @return {?}
  2937. */
  2938. function (type) { return "./" + stringify(type); };
  2939. /**
  2940. * @param {?} name
  2941. * @param {?} moduleUrl
  2942. * @param {?} members
  2943. * @param {?} runtime
  2944. * @return {?}
  2945. */
  2946. ReflectionCapabilities.prototype.resolveIdentifier = /**
  2947. * @param {?} name
  2948. * @param {?} moduleUrl
  2949. * @param {?} members
  2950. * @param {?} runtime
  2951. * @return {?}
  2952. */
  2953. function (name, moduleUrl, members, runtime) {
  2954. return runtime;
  2955. };
  2956. /**
  2957. * @param {?} enumIdentifier
  2958. * @param {?} name
  2959. * @return {?}
  2960. */
  2961. ReflectionCapabilities.prototype.resolveEnum = /**
  2962. * @param {?} enumIdentifier
  2963. * @param {?} name
  2964. * @return {?}
  2965. */
  2966. function (enumIdentifier, name) { return enumIdentifier[name]; };
  2967. return ReflectionCapabilities;
  2968. }());
  2969. /**
  2970. * @param {?} decoratorInvocations
  2971. * @return {?}
  2972. */
  2973. function convertTsickleDecoratorIntoMetadata(decoratorInvocations) {
  2974. if (!decoratorInvocations) {
  2975. return [];
  2976. }
  2977. return decoratorInvocations.map(function (decoratorInvocation) {
  2978. var /** @type {?} */ decoratorType = decoratorInvocation.type;
  2979. var /** @type {?} */ annotationCls = decoratorType.annotationCls;
  2980. var /** @type {?} */ annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];
  2981. return new (annotationCls.bind.apply(annotationCls, [void 0].concat(annotationArgs)))();
  2982. });
  2983. }
  2984. /**
  2985. * @param {?} ctor
  2986. * @return {?}
  2987. */
  2988. function getParentCtor(ctor) {
  2989. var /** @type {?} */ parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;
  2990. var /** @type {?} */ parentCtor = parentProto ? parentProto.constructor : null;
  2991. // Note: We always use `Object` as the null value
  2992. // to simplify checking later on.
  2993. return parentCtor || Object;
  2994. }
  2995. /**
  2996. * @fileoverview added by tsickle
  2997. * @suppress {checkTypes} checked by tsc
  2998. */
  2999. /**
  3000. * @license
  3001. * Copyright Google Inc. All Rights Reserved.
  3002. *
  3003. * Use of this source code is governed by an MIT-style license that can be
  3004. * found in the LICENSE file at https://angular.io/license
  3005. */
  3006. /**
  3007. * Provides access to reflection data about symbols. Used internally by Angular
  3008. * to power dependency injection and compilation.
  3009. */
  3010. var Reflector = /** @class */ (function () {
  3011. function Reflector(reflectionCapabilities) {
  3012. this.reflectionCapabilities = reflectionCapabilities;
  3013. }
  3014. /**
  3015. * @param {?} caps
  3016. * @return {?}
  3017. */
  3018. Reflector.prototype.updateCapabilities = /**
  3019. * @param {?} caps
  3020. * @return {?}
  3021. */
  3022. function (caps) { this.reflectionCapabilities = caps; };
  3023. /**
  3024. * @param {?} type
  3025. * @return {?}
  3026. */
  3027. Reflector.prototype.factory = /**
  3028. * @param {?} type
  3029. * @return {?}
  3030. */
  3031. function (type) { return this.reflectionCapabilities.factory(type); };
  3032. /**
  3033. * @param {?} typeOrFunc
  3034. * @return {?}
  3035. */
  3036. Reflector.prototype.parameters = /**
  3037. * @param {?} typeOrFunc
  3038. * @return {?}
  3039. */
  3040. function (typeOrFunc) {
  3041. return this.reflectionCapabilities.parameters(typeOrFunc);
  3042. };
  3043. /**
  3044. * @param {?} typeOrFunc
  3045. * @return {?}
  3046. */
  3047. Reflector.prototype.annotations = /**
  3048. * @param {?} typeOrFunc
  3049. * @return {?}
  3050. */
  3051. function (typeOrFunc) {
  3052. return this.reflectionCapabilities.annotations(typeOrFunc);
  3053. };
  3054. /**
  3055. * @param {?} typeOrFunc
  3056. * @return {?}
  3057. */
  3058. Reflector.prototype.propMetadata = /**
  3059. * @param {?} typeOrFunc
  3060. * @return {?}
  3061. */
  3062. function (typeOrFunc) {
  3063. return this.reflectionCapabilities.propMetadata(typeOrFunc);
  3064. };
  3065. /**
  3066. * @param {?} type
  3067. * @param {?} lcProperty
  3068. * @return {?}
  3069. */
  3070. Reflector.prototype.hasLifecycleHook = /**
  3071. * @param {?} type
  3072. * @param {?} lcProperty
  3073. * @return {?}
  3074. */
  3075. function (type, lcProperty) {
  3076. return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
  3077. };
  3078. /**
  3079. * @param {?} name
  3080. * @return {?}
  3081. */
  3082. Reflector.prototype.getter = /**
  3083. * @param {?} name
  3084. * @return {?}
  3085. */
  3086. function (name) { return this.reflectionCapabilities.getter(name); };
  3087. /**
  3088. * @param {?} name
  3089. * @return {?}
  3090. */
  3091. Reflector.prototype.setter = /**
  3092. * @param {?} name
  3093. * @return {?}
  3094. */
  3095. function (name) { return this.reflectionCapabilities.setter(name); };
  3096. /**
  3097. * @param {?} name
  3098. * @return {?}
  3099. */
  3100. Reflector.prototype.method = /**
  3101. * @param {?} name
  3102. * @return {?}
  3103. */
  3104. function (name) { return this.reflectionCapabilities.method(name); };
  3105. /**
  3106. * @param {?} type
  3107. * @return {?}
  3108. */
  3109. Reflector.prototype.importUri = /**
  3110. * @param {?} type
  3111. * @return {?}
  3112. */
  3113. function (type) { return this.reflectionCapabilities.importUri(type); };
  3114. /**
  3115. * @param {?} type
  3116. * @return {?}
  3117. */
  3118. Reflector.prototype.resourceUri = /**
  3119. * @param {?} type
  3120. * @return {?}
  3121. */
  3122. function (type) { return this.reflectionCapabilities.resourceUri(type); };
  3123. /**
  3124. * @param {?} name
  3125. * @param {?} moduleUrl
  3126. * @param {?} members
  3127. * @param {?} runtime
  3128. * @return {?}
  3129. */
  3130. Reflector.prototype.resolveIdentifier = /**
  3131. * @param {?} name
  3132. * @param {?} moduleUrl
  3133. * @param {?} members
  3134. * @param {?} runtime
  3135. * @return {?}
  3136. */
  3137. function (name, moduleUrl, members, runtime) {
  3138. return this.reflectionCapabilities.resolveIdentifier(name, moduleUrl, members, runtime);
  3139. };
  3140. /**
  3141. * @param {?} identifier
  3142. * @param {?} name
  3143. * @return {?}
  3144. */
  3145. Reflector.prototype.resolveEnum = /**
  3146. * @param {?} identifier
  3147. * @param {?} name
  3148. * @return {?}
  3149. */
  3150. function (identifier, name) {
  3151. return this.reflectionCapabilities.resolveEnum(identifier, name);
  3152. };
  3153. return Reflector;
  3154. }());
  3155. /**
  3156. * @fileoverview added by tsickle
  3157. * @suppress {checkTypes} checked by tsc
  3158. */
  3159. /**
  3160. * @license
  3161. * Copyright Google Inc. All Rights Reserved.
  3162. *
  3163. * Use of this source code is governed by an MIT-style license that can be
  3164. * found in the LICENSE file at https://angular.io/license
  3165. */
  3166. /**
  3167. * The {\@link Reflector} used internally in Angular to access metadata
  3168. * about symbols.
  3169. */
  3170. var reflector = new Reflector(new ReflectionCapabilities());
  3171. /**
  3172. * @fileoverview added by tsickle
  3173. * @suppress {checkTypes} checked by tsc
  3174. */
  3175. /**
  3176. * @license
  3177. * Copyright Google Inc. All Rights Reserved.
  3178. *
  3179. * Use of this source code is governed by an MIT-style license that can be
  3180. * found in the LICENSE file at https://angular.io/license
  3181. */
  3182. /**
  3183. * `Dependency` is used by the framework to extend DI.
  3184. * This is internal to Angular and should not be used directly.
  3185. */
  3186. var ReflectiveDependency = /** @class */ (function () {
  3187. function ReflectiveDependency(key, optional, visibility) {
  3188. this.key = key;
  3189. this.optional = optional;
  3190. this.visibility = visibility;
  3191. }
  3192. /**
  3193. * @param {?} key
  3194. * @return {?}
  3195. */
  3196. ReflectiveDependency.fromKey = /**
  3197. * @param {?} key
  3198. * @return {?}
  3199. */
  3200. function (key) {
  3201. return new ReflectiveDependency(key, false, null);
  3202. };
  3203. return ReflectiveDependency;
  3204. }());
  3205. var _EMPTY_LIST = [];
  3206. /**
  3207. * An internal resolved representation of a {\@link Provider} used by the {\@link Injector}.
  3208. *
  3209. * It is usually created automatically by `Injector.resolveAndCreate`.
  3210. *
  3211. * It can be created manually, as follows:
  3212. *
  3213. * ### Example ([live demo](http://plnkr.co/edit/RfEnhh8kUEI0G3qsnIeT?p%3Dpreview&p=preview))
  3214. *
  3215. * ```typescript
  3216. * var resolvedProviders = Injector.resolve([{ provide: 'message', useValue: 'Hello' }]);
  3217. * var injector = Injector.fromResolvedProviders(resolvedProviders);
  3218. *
  3219. * expect(injector.get('message')).toEqual('Hello');
  3220. * ```
  3221. *
  3222. * \@experimental
  3223. * @record
  3224. */
  3225. var ResolvedReflectiveProvider_ = /** @class */ (function () {
  3226. function ResolvedReflectiveProvider_(key, resolvedFactories, multiProvider) {
  3227. this.key = key;
  3228. this.resolvedFactories = resolvedFactories;
  3229. this.multiProvider = multiProvider;
  3230. this.resolvedFactory = this.resolvedFactories[0];
  3231. }
  3232. return ResolvedReflectiveProvider_;
  3233. }());
  3234. /**
  3235. * An internal resolved representation of a factory function created by resolving {\@link
  3236. * Provider}.
  3237. * \@experimental
  3238. */
  3239. var ResolvedReflectiveFactory = /** @class */ (function () {
  3240. function ResolvedReflectiveFactory(factory, dependencies) {
  3241. this.factory = factory;
  3242. this.dependencies = dependencies;
  3243. }
  3244. return ResolvedReflectiveFactory;
  3245. }());
  3246. /**
  3247. * Resolve a single provider.
  3248. * @param {?} provider
  3249. * @return {?}
  3250. */
  3251. function resolveReflectiveFactory(provider) {
  3252. var /** @type {?} */ factoryFn;
  3253. var /** @type {?} */ resolvedDeps;
  3254. if (provider.useClass) {
  3255. var /** @type {?} */ useClass = resolveForwardRef(provider.useClass);
  3256. factoryFn = reflector.factory(useClass);
  3257. resolvedDeps = _dependenciesFor(useClass);
  3258. }
  3259. else if (provider.useExisting) {
  3260. factoryFn = function (aliasInstance) { return aliasInstance; };
  3261. resolvedDeps = [ReflectiveDependency.fromKey(ReflectiveKey.get(provider.useExisting))];
  3262. }
  3263. else if (provider.useFactory) {
  3264. factoryFn = provider.useFactory;
  3265. resolvedDeps = constructDependencies(provider.useFactory, provider.deps);
  3266. }
  3267. else {
  3268. factoryFn = function () { return provider.useValue; };
  3269. resolvedDeps = _EMPTY_LIST;
  3270. }
  3271. return new ResolvedReflectiveFactory(factoryFn, resolvedDeps);
  3272. }
  3273. /**
  3274. * Converts the {\@link Provider} into {\@link ResolvedProvider}.
  3275. *
  3276. * {\@link Injector} internally only uses {\@link ResolvedProvider}, {\@link Provider} contains
  3277. * convenience provider syntax.
  3278. * @param {?} provider
  3279. * @return {?}
  3280. */
  3281. function resolveReflectiveProvider(provider) {
  3282. return new ResolvedReflectiveProvider_(ReflectiveKey.get(provider.provide), [resolveReflectiveFactory(provider)], provider.multi || false);
  3283. }
  3284. /**
  3285. * Resolve a list of Providers.
  3286. * @param {?} providers
  3287. * @return {?}
  3288. */
  3289. function resolveReflectiveProviders(providers) {
  3290. var /** @type {?} */ normalized = _normalizeProviders(providers, []);
  3291. var /** @type {?} */ resolved = normalized.map(resolveReflectiveProvider);
  3292. var /** @type {?} */ resolvedProviderMap = mergeResolvedReflectiveProviders(resolved, new Map());
  3293. return Array.from(resolvedProviderMap.values());
  3294. }
  3295. /**
  3296. * Merges a list of ResolvedProviders into a list where
  3297. * each key is contained exactly once and multi providers
  3298. * have been merged.
  3299. * @param {?} providers
  3300. * @param {?} normalizedProvidersMap
  3301. * @return {?}
  3302. */
  3303. function mergeResolvedReflectiveProviders(providers, normalizedProvidersMap) {
  3304. for (var /** @type {?} */ i = 0; i < providers.length; i++) {
  3305. var /** @type {?} */ provider = providers[i];
  3306. var /** @type {?} */ existing = normalizedProvidersMap.get(provider.key.id);
  3307. if (existing) {
  3308. if (provider.multiProvider !== existing.multiProvider) {
  3309. throw mixingMultiProvidersWithRegularProvidersError(existing, provider);
  3310. }
  3311. if (provider.multiProvider) {
  3312. for (var /** @type {?} */ j = 0; j < provider.resolvedFactories.length; j++) {
  3313. existing.resolvedFactories.push(provider.resolvedFactories[j]);
  3314. }
  3315. }
  3316. else {
  3317. normalizedProvidersMap.set(provider.key.id, provider);
  3318. }
  3319. }
  3320. else {
  3321. var /** @type {?} */ resolvedProvider = void 0;
  3322. if (provider.multiProvider) {
  3323. resolvedProvider = new ResolvedReflectiveProvider_(provider.key, provider.resolvedFactories.slice(), provider.multiProvider);
  3324. }
  3325. else {
  3326. resolvedProvider = provider;
  3327. }
  3328. normalizedProvidersMap.set(provider.key.id, resolvedProvider);
  3329. }
  3330. }
  3331. return normalizedProvidersMap;
  3332. }
  3333. /**
  3334. * @param {?} providers
  3335. * @param {?} res
  3336. * @return {?}
  3337. */
  3338. function _normalizeProviders(providers, res) {
  3339. providers.forEach(function (b) {
  3340. if (b instanceof Type) {
  3341. res.push({ provide: b, useClass: b });
  3342. }
  3343. else if (b && typeof b == 'object' && (/** @type {?} */ (b)).provide !== undefined) {
  3344. res.push(/** @type {?} */ (b));
  3345. }
  3346. else if (b instanceof Array) {
  3347. _normalizeProviders(b, res);
  3348. }
  3349. else {
  3350. throw invalidProviderError(b);
  3351. }
  3352. });
  3353. return res;
  3354. }
  3355. /**
  3356. * @param {?} typeOrFunc
  3357. * @param {?=} dependencies
  3358. * @return {?}
  3359. */
  3360. function constructDependencies(typeOrFunc, dependencies) {
  3361. if (!dependencies) {
  3362. return _dependenciesFor(typeOrFunc);
  3363. }
  3364. else {
  3365. var /** @type {?} */ params_1 = dependencies.map(function (t) { return [t]; });
  3366. return dependencies.map(function (t) { return _extractToken(typeOrFunc, t, params_1); });
  3367. }
  3368. }
  3369. /**
  3370. * @param {?} typeOrFunc
  3371. * @return {?}
  3372. */
  3373. function _dependenciesFor(typeOrFunc) {
  3374. var /** @type {?} */ params = reflector.parameters(typeOrFunc);
  3375. if (!params)
  3376. return [];
  3377. if (params.some(function (p) { return p == null; })) {
  3378. throw noAnnotationError(typeOrFunc, params);
  3379. }
  3380. return params.map(function (p) { return _extractToken(typeOrFunc, p, params); });
  3381. }
  3382. /**
  3383. * @param {?} typeOrFunc
  3384. * @param {?} metadata
  3385. * @param {?} params
  3386. * @return {?}
  3387. */
  3388. function _extractToken(typeOrFunc, metadata, params) {
  3389. var /** @type {?} */ token = null;
  3390. var /** @type {?} */ optional = false;
  3391. if (!Array.isArray(metadata)) {
  3392. if (metadata instanceof Inject) {
  3393. return _createDependency(metadata.token, optional, null);
  3394. }
  3395. else {
  3396. return _createDependency(metadata, optional, null);
  3397. }
  3398. }
  3399. var /** @type {?} */ visibility = null;
  3400. for (var /** @type {?} */ i = 0; i < metadata.length; ++i) {
  3401. var /** @type {?} */ paramMetadata = metadata[i];
  3402. if (paramMetadata instanceof Type) {
  3403. token = paramMetadata;
  3404. }
  3405. else if (paramMetadata instanceof Inject) {
  3406. token = paramMetadata.token;
  3407. }
  3408. else if (paramMetadata instanceof Optional) {
  3409. optional = true;
  3410. }
  3411. else if (paramMetadata instanceof Self || paramMetadata instanceof SkipSelf) {
  3412. visibility = paramMetadata;
  3413. }
  3414. else if (paramMetadata instanceof InjectionToken) {
  3415. token = paramMetadata;
  3416. }
  3417. }
  3418. token = resolveForwardRef(token);
  3419. if (token != null) {
  3420. return _createDependency(token, optional, visibility);
  3421. }
  3422. else {
  3423. throw noAnnotationError(typeOrFunc, params);
  3424. }
  3425. }
  3426. /**
  3427. * @param {?} token
  3428. * @param {?} optional
  3429. * @param {?} visibility
  3430. * @return {?}
  3431. */
  3432. function _createDependency(token, optional, visibility) {
  3433. return new ReflectiveDependency(ReflectiveKey.get(token), optional, visibility);
  3434. }
  3435. /**
  3436. * @fileoverview added by tsickle
  3437. * @suppress {checkTypes} checked by tsc
  3438. */
  3439. /**
  3440. * @license
  3441. * Copyright Google Inc. All Rights Reserved.
  3442. *
  3443. * Use of this source code is governed by an MIT-style license that can be
  3444. * found in the LICENSE file at https://angular.io/license
  3445. */
  3446. // Threshold for the dynamic version
  3447. var UNDEFINED = new Object();
  3448. /**
  3449. * A ReflectiveDependency injection container used for instantiating objects and resolving
  3450. * dependencies.
  3451. *
  3452. * An `Injector` is a replacement for a `new` operator, which can automatically resolve the
  3453. * constructor dependencies.
  3454. *
  3455. * In typical use, application code asks for the dependencies in the constructor and they are
  3456. * resolved by the `Injector`.
  3457. *
  3458. * ### Example ([live demo](http://plnkr.co/edit/jzjec0?p=preview))
  3459. *
  3460. * The following example creates an `Injector` configured to create `Engine` and `Car`.
  3461. *
  3462. * ```typescript
  3463. * \@Injectable()
  3464. * class Engine {
  3465. * }
  3466. *
  3467. * \@Injectable()
  3468. * class Car {
  3469. * constructor(public engine:Engine) {}
  3470. * }
  3471. *
  3472. * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
  3473. * var car = injector.get(Car);
  3474. * expect(car instanceof Car).toBe(true);
  3475. * expect(car.engine instanceof Engine).toBe(true);
  3476. * ```
  3477. *
  3478. * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`
  3479. * resolve all of the object's dependencies automatically.
  3480. *
  3481. * @deprecated from v5 - slow and brings in a lot of code, Use `Injector.create` instead.
  3482. * @abstract
  3483. */
  3484. var ReflectiveInjector = /** @class */ (function () {
  3485. function ReflectiveInjector() {
  3486. }
  3487. /**
  3488. * Turns an array of provider definitions into an array of resolved providers.
  3489. *
  3490. * A resolution is a process of flattening multiple nested arrays and converting individual
  3491. * providers into an array of {@link ResolvedReflectiveProvider}s.
  3492. *
  3493. * ### Example ([live demo](http://plnkr.co/edit/AiXTHi?p=preview))
  3494. *
  3495. * ```typescript
  3496. * @Injectable()
  3497. * class Engine {
  3498. * }
  3499. *
  3500. * @Injectable()
  3501. * class Car {
  3502. * constructor(public engine:Engine) {}
  3503. * }
  3504. *
  3505. * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);
  3506. *
  3507. * expect(providers.length).toEqual(2);
  3508. *
  3509. * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
  3510. * expect(providers[0].key.displayName).toBe("Car");
  3511. * expect(providers[0].dependencies.length).toEqual(1);
  3512. * expect(providers[0].factory).toBeDefined();
  3513. *
  3514. * expect(providers[1].key.displayName).toBe("Engine");
  3515. * });
  3516. * ```
  3517. *
  3518. * See {@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders} for more info.
  3519. */
  3520. /**
  3521. * Turns an array of provider definitions into an array of resolved providers.
  3522. *
  3523. * A resolution is a process of flattening multiple nested arrays and converting individual
  3524. * providers into an array of {\@link ResolvedReflectiveProvider}s.
  3525. *
  3526. * ### Example ([live demo](http://plnkr.co/edit/AiXTHi?p=preview))
  3527. *
  3528. * ```typescript
  3529. * \@Injectable()
  3530. * class Engine {
  3531. * }
  3532. *
  3533. * \@Injectable()
  3534. * class Car {
  3535. * constructor(public engine:Engine) {}
  3536. * }
  3537. *
  3538. * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);
  3539. *
  3540. * expect(providers.length).toEqual(2);
  3541. *
  3542. * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
  3543. * expect(providers[0].key.displayName).toBe("Car");
  3544. * expect(providers[0].dependencies.length).toEqual(1);
  3545. * expect(providers[0].factory).toBeDefined();
  3546. *
  3547. * expect(providers[1].key.displayName).toBe("Engine");
  3548. * });
  3549. * ```
  3550. *
  3551. * See {\@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders} for more info.
  3552. * @param {?} providers
  3553. * @return {?}
  3554. */
  3555. ReflectiveInjector.resolve = /**
  3556. * Turns an array of provider definitions into an array of resolved providers.
  3557. *
  3558. * A resolution is a process of flattening multiple nested arrays and converting individual
  3559. * providers into an array of {\@link ResolvedReflectiveProvider}s.
  3560. *
  3561. * ### Example ([live demo](http://plnkr.co/edit/AiXTHi?p=preview))
  3562. *
  3563. * ```typescript
  3564. * \@Injectable()
  3565. * class Engine {
  3566. * }
  3567. *
  3568. * \@Injectable()
  3569. * class Car {
  3570. * constructor(public engine:Engine) {}
  3571. * }
  3572. *
  3573. * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);
  3574. *
  3575. * expect(providers.length).toEqual(2);
  3576. *
  3577. * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
  3578. * expect(providers[0].key.displayName).toBe("Car");
  3579. * expect(providers[0].dependencies.length).toEqual(1);
  3580. * expect(providers[0].factory).toBeDefined();
  3581. *
  3582. * expect(providers[1].key.displayName).toBe("Engine");
  3583. * });
  3584. * ```
  3585. *
  3586. * See {\@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders} for more info.
  3587. * @param {?} providers
  3588. * @return {?}
  3589. */
  3590. function (providers) {
  3591. return resolveReflectiveProviders(providers);
  3592. };
  3593. /**
  3594. * Resolves an array of providers and creates an injector from those providers.
  3595. *
  3596. * The passed-in providers can be an array of `Type`, {@link Provider},
  3597. * or a recursive array of more providers.
  3598. *
  3599. * ### Example ([live demo](http://plnkr.co/edit/ePOccA?p=preview))
  3600. *
  3601. * ```typescript
  3602. * @Injectable()
  3603. * class Engine {
  3604. * }
  3605. *
  3606. * @Injectable()
  3607. * class Car {
  3608. * constructor(public engine:Engine) {}
  3609. * }
  3610. *
  3611. * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
  3612. * expect(injector.get(Car) instanceof Car).toBe(true);
  3613. * ```
  3614. *
  3615. * This function is slower than the corresponding `fromResolvedProviders`
  3616. * because it needs to resolve the passed-in providers first.
  3617. * See {@link ReflectiveInjector#resolve resolve} and
  3618. * {@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders}.
  3619. */
  3620. /**
  3621. * Resolves an array of providers and creates an injector from those providers.
  3622. *
  3623. * The passed-in providers can be an array of `Type`, {\@link Provider},
  3624. * or a recursive array of more providers.
  3625. *
  3626. * ### Example ([live demo](http://plnkr.co/edit/ePOccA?p=preview))
  3627. *
  3628. * ```typescript
  3629. * \@Injectable()
  3630. * class Engine {
  3631. * }
  3632. *
  3633. * \@Injectable()
  3634. * class Car {
  3635. * constructor(public engine:Engine) {}
  3636. * }
  3637. *
  3638. * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
  3639. * expect(injector.get(Car) instanceof Car).toBe(true);
  3640. * ```
  3641. *
  3642. * This function is slower than the corresponding `fromResolvedProviders`
  3643. * because it needs to resolve the passed-in providers first.
  3644. * See {\@link ReflectiveInjector#resolve resolve} and
  3645. * {\@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders}.
  3646. * @param {?} providers
  3647. * @param {?=} parent
  3648. * @return {?}
  3649. */
  3650. ReflectiveInjector.resolveAndCreate = /**
  3651. * Resolves an array of providers and creates an injector from those providers.
  3652. *
  3653. * The passed-in providers can be an array of `Type`, {\@link Provider},
  3654. * or a recursive array of more providers.
  3655. *
  3656. * ### Example ([live demo](http://plnkr.co/edit/ePOccA?p=preview))
  3657. *
  3658. * ```typescript
  3659. * \@Injectable()
  3660. * class Engine {
  3661. * }
  3662. *
  3663. * \@Injectable()
  3664. * class Car {
  3665. * constructor(public engine:Engine) {}
  3666. * }
  3667. *
  3668. * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
  3669. * expect(injector.get(Car) instanceof Car).toBe(true);
  3670. * ```
  3671. *
  3672. * This function is slower than the corresponding `fromResolvedProviders`
  3673. * because it needs to resolve the passed-in providers first.
  3674. * See {\@link ReflectiveInjector#resolve resolve} and
  3675. * {\@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders}.
  3676. * @param {?} providers
  3677. * @param {?=} parent
  3678. * @return {?}
  3679. */
  3680. function (providers, parent) {
  3681. var /** @type {?} */ ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);
  3682. return ReflectiveInjector.fromResolvedProviders(ResolvedReflectiveProviders, parent);
  3683. };
  3684. /**
  3685. * Creates an injector from previously resolved providers.
  3686. *
  3687. * This API is the recommended way to construct injectors in performance-sensitive parts.
  3688. *
  3689. * ### Example ([live demo](http://plnkr.co/edit/KrSMci?p=preview))
  3690. *
  3691. * ```typescript
  3692. * @Injectable()
  3693. * class Engine {
  3694. * }
  3695. *
  3696. * @Injectable()
  3697. * class Car {
  3698. * constructor(public engine:Engine) {}
  3699. * }
  3700. *
  3701. * var providers = ReflectiveInjector.resolve([Car, Engine]);
  3702. * var injector = ReflectiveInjector.fromResolvedProviders(providers);
  3703. * expect(injector.get(Car) instanceof Car).toBe(true);
  3704. * ```
  3705. * @experimental
  3706. */
  3707. /**
  3708. * Creates an injector from previously resolved providers.
  3709. *
  3710. * This API is the recommended way to construct injectors in performance-sensitive parts.
  3711. *
  3712. * ### Example ([live demo](http://plnkr.co/edit/KrSMci?p=preview))
  3713. *
  3714. * ```typescript
  3715. * \@Injectable()
  3716. * class Engine {
  3717. * }
  3718. *
  3719. * \@Injectable()
  3720. * class Car {
  3721. * constructor(public engine:Engine) {}
  3722. * }
  3723. *
  3724. * var providers = ReflectiveInjector.resolve([Car, Engine]);
  3725. * var injector = ReflectiveInjector.fromResolvedProviders(providers);
  3726. * expect(injector.get(Car) instanceof Car).toBe(true);
  3727. * ```
  3728. * \@experimental
  3729. * @param {?} providers
  3730. * @param {?=} parent
  3731. * @return {?}
  3732. */
  3733. ReflectiveInjector.fromResolvedProviders = /**
  3734. * Creates an injector from previously resolved providers.
  3735. *
  3736. * This API is the recommended way to construct injectors in performance-sensitive parts.
  3737. *
  3738. * ### Example ([live demo](http://plnkr.co/edit/KrSMci?p=preview))
  3739. *
  3740. * ```typescript
  3741. * \@Injectable()
  3742. * class Engine {
  3743. * }
  3744. *
  3745. * \@Injectable()
  3746. * class Car {
  3747. * constructor(public engine:Engine) {}
  3748. * }
  3749. *
  3750. * var providers = ReflectiveInjector.resolve([Car, Engine]);
  3751. * var injector = ReflectiveInjector.fromResolvedProviders(providers);
  3752. * expect(injector.get(Car) instanceof Car).toBe(true);
  3753. * ```
  3754. * \@experimental
  3755. * @param {?} providers
  3756. * @param {?=} parent
  3757. * @return {?}
  3758. */
  3759. function (providers, parent) {
  3760. return new ReflectiveInjector_(providers, parent);
  3761. };
  3762. return ReflectiveInjector;
  3763. }());
  3764. var ReflectiveInjector_ = /** @class */ (function () {
  3765. /**
  3766. * Private
  3767. */
  3768. function ReflectiveInjector_(_providers, _parent) {
  3769. /**
  3770. * \@internal
  3771. */
  3772. this._constructionCounter = 0;
  3773. this._providers = _providers;
  3774. this.parent = _parent || null;
  3775. var /** @type {?} */ len = _providers.length;
  3776. this.keyIds = new Array(len);
  3777. this.objs = new Array(len);
  3778. for (var /** @type {?} */ i = 0; i < len; i++) {
  3779. this.keyIds[i] = _providers[i].key.id;
  3780. this.objs[i] = UNDEFINED;
  3781. }
  3782. }
  3783. /**
  3784. * @param {?} token
  3785. * @param {?=} notFoundValue
  3786. * @return {?}
  3787. */
  3788. ReflectiveInjector_.prototype.get = /**
  3789. * @param {?} token
  3790. * @param {?=} notFoundValue
  3791. * @return {?}
  3792. */
  3793. function (token, notFoundValue) {
  3794. if (notFoundValue === void 0) { notFoundValue = THROW_IF_NOT_FOUND; }
  3795. return this._getByKey(ReflectiveKey.get(token), null, notFoundValue);
  3796. };
  3797. /**
  3798. * @param {?} providers
  3799. * @return {?}
  3800. */
  3801. ReflectiveInjector_.prototype.resolveAndCreateChild = /**
  3802. * @param {?} providers
  3803. * @return {?}
  3804. */
  3805. function (providers) {
  3806. var /** @type {?} */ ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);
  3807. return this.createChildFromResolved(ResolvedReflectiveProviders);
  3808. };
  3809. /**
  3810. * @param {?} providers
  3811. * @return {?}
  3812. */
  3813. ReflectiveInjector_.prototype.createChildFromResolved = /**
  3814. * @param {?} providers
  3815. * @return {?}
  3816. */
  3817. function (providers) {
  3818. var /** @type {?} */ inj = new ReflectiveInjector_(providers);
  3819. (/** @type {?} */ (inj)).parent = this;
  3820. return inj;
  3821. };
  3822. /**
  3823. * @param {?} provider
  3824. * @return {?}
  3825. */
  3826. ReflectiveInjector_.prototype.resolveAndInstantiate = /**
  3827. * @param {?} provider
  3828. * @return {?}
  3829. */
  3830. function (provider) {
  3831. return this.instantiateResolved(ReflectiveInjector.resolve([provider])[0]);
  3832. };
  3833. /**
  3834. * @param {?} provider
  3835. * @return {?}
  3836. */
  3837. ReflectiveInjector_.prototype.instantiateResolved = /**
  3838. * @param {?} provider
  3839. * @return {?}
  3840. */
  3841. function (provider) {
  3842. return this._instantiateProvider(provider);
  3843. };
  3844. /**
  3845. * @param {?} index
  3846. * @return {?}
  3847. */
  3848. ReflectiveInjector_.prototype.getProviderAtIndex = /**
  3849. * @param {?} index
  3850. * @return {?}
  3851. */
  3852. function (index) {
  3853. if (index < 0 || index >= this._providers.length) {
  3854. throw outOfBoundsError(index);
  3855. }
  3856. return this._providers[index];
  3857. };
  3858. /** @internal */
  3859. /**
  3860. * \@internal
  3861. * @param {?} provider
  3862. * @return {?}
  3863. */
  3864. ReflectiveInjector_.prototype._new = /**
  3865. * \@internal
  3866. * @param {?} provider
  3867. * @return {?}
  3868. */
  3869. function (provider) {
  3870. if (this._constructionCounter++ > this._getMaxNumberOfObjects()) {
  3871. throw cyclicDependencyError(this, provider.key);
  3872. }
  3873. return this._instantiateProvider(provider);
  3874. };
  3875. /**
  3876. * @return {?}
  3877. */
  3878. ReflectiveInjector_.prototype._getMaxNumberOfObjects = /**
  3879. * @return {?}
  3880. */
  3881. function () { return this.objs.length; };
  3882. /**
  3883. * @param {?} provider
  3884. * @return {?}
  3885. */
  3886. ReflectiveInjector_.prototype._instantiateProvider = /**
  3887. * @param {?} provider
  3888. * @return {?}
  3889. */
  3890. function (provider) {
  3891. if (provider.multiProvider) {
  3892. var /** @type {?} */ res = new Array(provider.resolvedFactories.length);
  3893. for (var /** @type {?} */ i = 0; i < provider.resolvedFactories.length; ++i) {
  3894. res[i] = this._instantiate(provider, provider.resolvedFactories[i]);
  3895. }
  3896. return res;
  3897. }
  3898. else {
  3899. return this._instantiate(provider, provider.resolvedFactories[0]);
  3900. }
  3901. };
  3902. /**
  3903. * @param {?} provider
  3904. * @param {?} ResolvedReflectiveFactory
  3905. * @return {?}
  3906. */
  3907. ReflectiveInjector_.prototype._instantiate = /**
  3908. * @param {?} provider
  3909. * @param {?} ResolvedReflectiveFactory
  3910. * @return {?}
  3911. */
  3912. function (provider, ResolvedReflectiveFactory$$1) {
  3913. var _this = this;
  3914. var /** @type {?} */ factory = ResolvedReflectiveFactory$$1.factory;
  3915. var /** @type {?} */ deps;
  3916. try {
  3917. deps =
  3918. ResolvedReflectiveFactory$$1.dependencies.map(function (dep) { return _this._getByReflectiveDependency(dep); });
  3919. }
  3920. catch (/** @type {?} */ e) {
  3921. if (e.addKey) {
  3922. e.addKey(this, provider.key);
  3923. }
  3924. throw e;
  3925. }
  3926. var /** @type {?} */ obj;
  3927. try {
  3928. obj = factory.apply(void 0, deps);
  3929. }
  3930. catch (/** @type {?} */ e) {
  3931. throw instantiationError(this, e, e.stack, provider.key);
  3932. }
  3933. return obj;
  3934. };
  3935. /**
  3936. * @param {?} dep
  3937. * @return {?}
  3938. */
  3939. ReflectiveInjector_.prototype._getByReflectiveDependency = /**
  3940. * @param {?} dep
  3941. * @return {?}
  3942. */
  3943. function (dep) {
  3944. return this._getByKey(dep.key, dep.visibility, dep.optional ? null : THROW_IF_NOT_FOUND);
  3945. };
  3946. /**
  3947. * @param {?} key
  3948. * @param {?} visibility
  3949. * @param {?} notFoundValue
  3950. * @return {?}
  3951. */
  3952. ReflectiveInjector_.prototype._getByKey = /**
  3953. * @param {?} key
  3954. * @param {?} visibility
  3955. * @param {?} notFoundValue
  3956. * @return {?}
  3957. */
  3958. function (key, visibility, notFoundValue) {
  3959. if (key === ReflectiveInjector_.INJECTOR_KEY) {
  3960. return this;
  3961. }
  3962. if (visibility instanceof Self) {
  3963. return this._getByKeySelf(key, notFoundValue);
  3964. }
  3965. else {
  3966. return this._getByKeyDefault(key, notFoundValue, visibility);
  3967. }
  3968. };
  3969. /**
  3970. * @param {?} keyId
  3971. * @return {?}
  3972. */
  3973. ReflectiveInjector_.prototype._getObjByKeyId = /**
  3974. * @param {?} keyId
  3975. * @return {?}
  3976. */
  3977. function (keyId) {
  3978. for (var /** @type {?} */ i = 0; i < this.keyIds.length; i++) {
  3979. if (this.keyIds[i] === keyId) {
  3980. if (this.objs[i] === UNDEFINED) {
  3981. this.objs[i] = this._new(this._providers[i]);
  3982. }
  3983. return this.objs[i];
  3984. }
  3985. }
  3986. return UNDEFINED;
  3987. };
  3988. /** @internal */
  3989. /**
  3990. * \@internal
  3991. * @param {?} key
  3992. * @param {?} notFoundValue
  3993. * @return {?}
  3994. */
  3995. ReflectiveInjector_.prototype._throwOrNull = /**
  3996. * \@internal
  3997. * @param {?} key
  3998. * @param {?} notFoundValue
  3999. * @return {?}
  4000. */
  4001. function (key, notFoundValue) {
  4002. if (notFoundValue !== THROW_IF_NOT_FOUND) {
  4003. return notFoundValue;
  4004. }
  4005. else {
  4006. throw noProviderError(this, key);
  4007. }
  4008. };
  4009. /** @internal */
  4010. /**
  4011. * \@internal
  4012. * @param {?} key
  4013. * @param {?} notFoundValue
  4014. * @return {?}
  4015. */
  4016. ReflectiveInjector_.prototype._getByKeySelf = /**
  4017. * \@internal
  4018. * @param {?} key
  4019. * @param {?} notFoundValue
  4020. * @return {?}
  4021. */
  4022. function (key, notFoundValue) {
  4023. var /** @type {?} */ obj = this._getObjByKeyId(key.id);
  4024. return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, notFoundValue);
  4025. };
  4026. /** @internal */
  4027. /**
  4028. * \@internal
  4029. * @param {?} key
  4030. * @param {?} notFoundValue
  4031. * @param {?} visibility
  4032. * @return {?}
  4033. */
  4034. ReflectiveInjector_.prototype._getByKeyDefault = /**
  4035. * \@internal
  4036. * @param {?} key
  4037. * @param {?} notFoundValue
  4038. * @param {?} visibility
  4039. * @return {?}
  4040. */
  4041. function (key, notFoundValue, visibility) {
  4042. var /** @type {?} */ inj;
  4043. if (visibility instanceof SkipSelf) {
  4044. inj = this.parent;
  4045. }
  4046. else {
  4047. inj = this;
  4048. }
  4049. while (inj instanceof ReflectiveInjector_) {
  4050. var /** @type {?} */ inj_ = /** @type {?} */ (inj);
  4051. var /** @type {?} */ obj = inj_._getObjByKeyId(key.id);
  4052. if (obj !== UNDEFINED)
  4053. return obj;
  4054. inj = inj_.parent;
  4055. }
  4056. if (inj !== null) {
  4057. return inj.get(key.token, notFoundValue);
  4058. }
  4059. else {
  4060. return this._throwOrNull(key, notFoundValue);
  4061. }
  4062. };
  4063. Object.defineProperty(ReflectiveInjector_.prototype, "displayName", {
  4064. get: /**
  4065. * @return {?}
  4066. */
  4067. function () {
  4068. var /** @type {?} */ providers = _mapProviders(this, function (b) { return ' "' + b.key.displayName + '" '; })
  4069. .join(', ');
  4070. return "ReflectiveInjector(providers: [" + providers + "])";
  4071. },
  4072. enumerable: true,
  4073. configurable: true
  4074. });
  4075. /**
  4076. * @return {?}
  4077. */
  4078. ReflectiveInjector_.prototype.toString = /**
  4079. * @return {?}
  4080. */
  4081. function () { return this.displayName; };
  4082. ReflectiveInjector_.INJECTOR_KEY = ReflectiveKey.get(Injector);
  4083. return ReflectiveInjector_;
  4084. }());
  4085. /**
  4086. * @param {?} injector
  4087. * @param {?} fn
  4088. * @return {?}
  4089. */
  4090. function _mapProviders(injector, fn) {
  4091. var /** @type {?} */ res = new Array(injector._providers.length);
  4092. for (var /** @type {?} */ i = 0; i < injector._providers.length; ++i) {
  4093. res[i] = fn(injector.getProviderAtIndex(i));
  4094. }
  4095. return res;
  4096. }
  4097. /**
  4098. * @fileoverview added by tsickle
  4099. * @suppress {checkTypes} checked by tsc
  4100. */
  4101. /**
  4102. * @license
  4103. * Copyright Google Inc. All Rights Reserved.
  4104. *
  4105. * Use of this source code is governed by an MIT-style license that can be
  4106. * found in the LICENSE file at https://angular.io/license
  4107. */
  4108. /**
  4109. * @module
  4110. * @description
  4111. * The `di` module provides dependency injection container services.
  4112. */
  4113. /**
  4114. * @fileoverview added by tsickle
  4115. * @suppress {checkTypes} checked by tsc
  4116. */
  4117. /**
  4118. * @license
  4119. * Copyright Google Inc. All Rights Reserved.
  4120. *
  4121. * Use of this source code is governed by an MIT-style license that can be
  4122. * found in the LICENSE file at https://angular.io/license
  4123. */
  4124. /**
  4125. * Determine if the argument is shaped like a Promise
  4126. * @param {?} obj
  4127. * @return {?}
  4128. */
  4129. function isPromise(obj) {
  4130. // allow any Promise/A+ compliant thenable.
  4131. // It's up to the caller to ensure that obj.then conforms to the spec
  4132. return !!obj && typeof obj.then === 'function';
  4133. }
  4134. /**
  4135. * Determine if the argument is an Observable
  4136. * @param {?} obj
  4137. * @return {?}
  4138. */
  4139. function isObservable(obj) {
  4140. // TODO: use Symbol.observable when https://github.com/ReactiveX/rxjs/issues/2415 will be resolved
  4141. return !!obj && typeof obj.subscribe === 'function';
  4142. }
  4143. /**
  4144. * @fileoverview added by tsickle
  4145. * @suppress {checkTypes} checked by tsc
  4146. */
  4147. /**
  4148. * @license
  4149. * Copyright Google Inc. All Rights Reserved.
  4150. *
  4151. * Use of this source code is governed by an MIT-style license that can be
  4152. * found in the LICENSE file at https://angular.io/license
  4153. */
  4154. /**
  4155. * A function that will be executed when an application is initialized.
  4156. * \@experimental
  4157. */
  4158. var APP_INITIALIZER = new InjectionToken('Application Initializer');
  4159. /**
  4160. * A class that reflects the state of running {\@link APP_INITIALIZER}s.
  4161. *
  4162. * \@experimental
  4163. */
  4164. var ApplicationInitStatus = /** @class */ (function () {
  4165. function ApplicationInitStatus(appInits) {
  4166. var _this = this;
  4167. this.appInits = appInits;
  4168. this.initialized = false;
  4169. this.done = false;
  4170. this.donePromise = new Promise(function (res, rej) {
  4171. _this.resolve = res;
  4172. _this.reject = rej;
  4173. });
  4174. }
  4175. /** @internal */
  4176. /**
  4177. * \@internal
  4178. * @return {?}
  4179. */
  4180. ApplicationInitStatus.prototype.runInitializers = /**
  4181. * \@internal
  4182. * @return {?}
  4183. */
  4184. function () {
  4185. var _this = this;
  4186. if (this.initialized) {
  4187. return;
  4188. }
  4189. var /** @type {?} */ asyncInitPromises = [];
  4190. var /** @type {?} */ complete = function () {
  4191. (/** @type {?} */ (_this)).done = true;
  4192. _this.resolve();
  4193. };
  4194. if (this.appInits) {
  4195. for (var /** @type {?} */ i = 0; i < this.appInits.length; i++) {
  4196. var /** @type {?} */ initResult = this.appInits[i]();
  4197. if (isPromise(initResult)) {
  4198. asyncInitPromises.push(initResult);
  4199. }
  4200. }
  4201. }
  4202. Promise.all(asyncInitPromises).then(function () { complete(); }).catch(function (e) { _this.reject(e); });
  4203. if (asyncInitPromises.length === 0) {
  4204. complete();
  4205. }
  4206. this.initialized = true;
  4207. };
  4208. ApplicationInitStatus.decorators = [
  4209. { type: Injectable },
  4210. ];
  4211. /** @nocollapse */
  4212. ApplicationInitStatus.ctorParameters = function () { return [
  4213. { type: Array, decorators: [{ type: Inject, args: [APP_INITIALIZER,] }, { type: Optional },] },
  4214. ]; };
  4215. return ApplicationInitStatus;
  4216. }());
  4217. /**
  4218. * @fileoverview added by tsickle
  4219. * @suppress {checkTypes} checked by tsc
  4220. */
  4221. /**
  4222. * @license
  4223. * Copyright Google Inc. All Rights Reserved.
  4224. *
  4225. * Use of this source code is governed by an MIT-style license that can be
  4226. * found in the LICENSE file at https://angular.io/license
  4227. */
  4228. /**
  4229. * A DI Token representing a unique string id assigned to the application by Angular and used
  4230. * primarily for prefixing application attributes and CSS styles when
  4231. * {\@link ViewEncapsulation#Emulated ViewEncapsulation.Emulated} is being used.
  4232. *
  4233. * If you need to avoid randomly generated value to be used as an application id, you can provide
  4234. * a custom value via a DI provider <!-- TODO: provider --> configuring the root {\@link Injector}
  4235. * using this token.
  4236. * \@experimental
  4237. */
  4238. var APP_ID = new InjectionToken('AppId');
  4239. /**
  4240. * @return {?}
  4241. */
  4242. function _appIdRandomProviderFactory() {
  4243. return "" + _randomChar() + _randomChar() + _randomChar();
  4244. }
  4245. /**
  4246. * Providers that will generate a random APP_ID_TOKEN.
  4247. * \@experimental
  4248. */
  4249. var APP_ID_RANDOM_PROVIDER = {
  4250. provide: APP_ID,
  4251. useFactory: _appIdRandomProviderFactory,
  4252. deps: /** @type {?} */ ([]),
  4253. };
  4254. /**
  4255. * @return {?}
  4256. */
  4257. function _randomChar() {
  4258. return String.fromCharCode(97 + Math.floor(Math.random() * 25));
  4259. }
  4260. /**
  4261. * A function that will be executed when a platform is initialized.
  4262. * \@experimental
  4263. */
  4264. var PLATFORM_INITIALIZER = new InjectionToken('Platform Initializer');
  4265. /**
  4266. * A token that indicates an opaque platform id.
  4267. * \@experimental
  4268. */
  4269. var PLATFORM_ID = new InjectionToken('Platform ID');
  4270. /**
  4271. * All callbacks provided via this token will be called for every component that is bootstrapped.
  4272. * Signature of the callback:
  4273. *
  4274. * `(componentRef: ComponentRef) => void`.
  4275. *
  4276. * \@experimental
  4277. */
  4278. var APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
  4279. /**
  4280. * A token which indicates the root directory of the application
  4281. * \@experimental
  4282. */
  4283. var PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
  4284. /**
  4285. * @fileoverview added by tsickle
  4286. * @suppress {checkTypes} checked by tsc
  4287. */
  4288. /**
  4289. * @license
  4290. * Copyright Google Inc. All Rights Reserved.
  4291. *
  4292. * Use of this source code is governed by an MIT-style license that can be
  4293. * found in the LICENSE file at https://angular.io/license
  4294. */
  4295. var Console = /** @class */ (function () {
  4296. function Console() {
  4297. }
  4298. /**
  4299. * @param {?} message
  4300. * @return {?}
  4301. */
  4302. Console.prototype.log = /**
  4303. * @param {?} message
  4304. * @return {?}
  4305. */
  4306. function (message) {
  4307. // tslint:disable-next-line:no-console
  4308. console.log(message);
  4309. };
  4310. // Note: for reporting errors use `DOM.logError()` as it is platform specific
  4311. /**
  4312. * @param {?} message
  4313. * @return {?}
  4314. */
  4315. Console.prototype.warn = /**
  4316. * @param {?} message
  4317. * @return {?}
  4318. */
  4319. function (message) {
  4320. // tslint:disable-next-line:no-console
  4321. console.warn(message);
  4322. };
  4323. Console.decorators = [
  4324. { type: Injectable },
  4325. ];
  4326. /** @nocollapse */
  4327. Console.ctorParameters = function () { return []; };
  4328. return Console;
  4329. }());
  4330. /**
  4331. * @fileoverview added by tsickle
  4332. * @suppress {checkTypes} checked by tsc
  4333. */
  4334. /**
  4335. * @license
  4336. * Copyright Google Inc. All Rights Reserved.
  4337. *
  4338. * Use of this source code is governed by an MIT-style license that can be
  4339. * found in the LICENSE file at https://angular.io/license
  4340. */
  4341. /**
  4342. * Combination of NgModuleFactory and ComponentFactorys.
  4343. *
  4344. * \@experimental
  4345. * @template T
  4346. */
  4347. var ModuleWithComponentFactories = /** @class */ (function () {
  4348. function ModuleWithComponentFactories(ngModuleFactory, componentFactories) {
  4349. this.ngModuleFactory = ngModuleFactory;
  4350. this.componentFactories = componentFactories;
  4351. }
  4352. return ModuleWithComponentFactories;
  4353. }());
  4354. /**
  4355. * @return {?}
  4356. */
  4357. function _throwError() {
  4358. throw new Error("Runtime compiler is not loaded");
  4359. }
  4360. /**
  4361. * Low-level service for running the angular compiler during runtime
  4362. * to create {\@link ComponentFactory}s, which
  4363. * can later be used to create and render a Component instance.
  4364. *
  4365. * Each `\@NgModule` provides an own `Compiler` to its injector,
  4366. * that will use the directives/pipes of the ng module for compilation
  4367. * of components.
  4368. * \@stable
  4369. */
  4370. var Compiler = /** @class */ (function () {
  4371. function Compiler() {
  4372. }
  4373. /**
  4374. * Compiles the given NgModule and all of its components. All templates of the components listed
  4375. * in `entryComponents` have to be inlined.
  4376. */
  4377. /**
  4378. * Compiles the given NgModule and all of its components. All templates of the components listed
  4379. * in `entryComponents` have to be inlined.
  4380. * @template T
  4381. * @param {?} moduleType
  4382. * @return {?}
  4383. */
  4384. Compiler.prototype.compileModuleSync = /**
  4385. * Compiles the given NgModule and all of its components. All templates of the components listed
  4386. * in `entryComponents` have to be inlined.
  4387. * @template T
  4388. * @param {?} moduleType
  4389. * @return {?}
  4390. */
  4391. function (moduleType) { throw _throwError(); };
  4392. /**
  4393. * Compiles the given NgModule and all of its components
  4394. */
  4395. /**
  4396. * Compiles the given NgModule and all of its components
  4397. * @template T
  4398. * @param {?} moduleType
  4399. * @return {?}
  4400. */
  4401. Compiler.prototype.compileModuleAsync = /**
  4402. * Compiles the given NgModule and all of its components
  4403. * @template T
  4404. * @param {?} moduleType
  4405. * @return {?}
  4406. */
  4407. function (moduleType) { throw _throwError(); };
  4408. /**
  4409. * Same as {@link #compileModuleSync} but also creates ComponentFactories for all components.
  4410. */
  4411. /**
  4412. * Same as {\@link #compileModuleSync} but also creates ComponentFactories for all components.
  4413. * @template T
  4414. * @param {?} moduleType
  4415. * @return {?}
  4416. */
  4417. Compiler.prototype.compileModuleAndAllComponentsSync = /**
  4418. * Same as {\@link #compileModuleSync} but also creates ComponentFactories for all components.
  4419. * @template T
  4420. * @param {?} moduleType
  4421. * @return {?}
  4422. */
  4423. function (moduleType) {
  4424. throw _throwError();
  4425. };
  4426. /**
  4427. * Same as {@link #compileModuleAsync} but also creates ComponentFactories for all components.
  4428. */
  4429. /**
  4430. * Same as {\@link #compileModuleAsync} but also creates ComponentFactories for all components.
  4431. * @template T
  4432. * @param {?} moduleType
  4433. * @return {?}
  4434. */
  4435. Compiler.prototype.compileModuleAndAllComponentsAsync = /**
  4436. * Same as {\@link #compileModuleAsync} but also creates ComponentFactories for all components.
  4437. * @template T
  4438. * @param {?} moduleType
  4439. * @return {?}
  4440. */
  4441. function (moduleType) {
  4442. throw _throwError();
  4443. };
  4444. /**
  4445. * Clears all caches.
  4446. */
  4447. /**
  4448. * Clears all caches.
  4449. * @return {?}
  4450. */
  4451. Compiler.prototype.clearCache = /**
  4452. * Clears all caches.
  4453. * @return {?}
  4454. */
  4455. function () { };
  4456. /**
  4457. * Clears the cache for the given component/ngModule.
  4458. */
  4459. /**
  4460. * Clears the cache for the given component/ngModule.
  4461. * @param {?} type
  4462. * @return {?}
  4463. */
  4464. Compiler.prototype.clearCacheFor = /**
  4465. * Clears the cache for the given component/ngModule.
  4466. * @param {?} type
  4467. * @return {?}
  4468. */
  4469. function (type) { };
  4470. Compiler.decorators = [
  4471. { type: Injectable },
  4472. ];
  4473. /** @nocollapse */
  4474. Compiler.ctorParameters = function () { return []; };
  4475. return Compiler;
  4476. }());
  4477. /**
  4478. * Token to provide CompilerOptions in the platform injector.
  4479. *
  4480. * \@experimental
  4481. */
  4482. var COMPILER_OPTIONS = new InjectionToken('compilerOptions');
  4483. /**
  4484. * A factory for creating a Compiler
  4485. *
  4486. * \@experimental
  4487. * @abstract
  4488. */
  4489. var CompilerFactory = /** @class */ (function () {
  4490. function CompilerFactory() {
  4491. }
  4492. return CompilerFactory;
  4493. }());
  4494. /**
  4495. * @fileoverview added by tsickle
  4496. * @suppress {checkTypes} checked by tsc
  4497. */
  4498. /**
  4499. * @license
  4500. * Copyright Google Inc. All Rights Reserved.
  4501. *
  4502. * Use of this source code is governed by an MIT-style license that can be
  4503. * found in the LICENSE file at https://angular.io/license
  4504. */
  4505. /**
  4506. * Represents an instance of a Component created via a {\@link ComponentFactory}.
  4507. *
  4508. * `ComponentRef` provides access to the Component Instance as well other objects related to this
  4509. * Component Instance and allows you to destroy the Component Instance via the {\@link #destroy}
  4510. * method.
  4511. * \@stable
  4512. * @abstract
  4513. * @template C
  4514. */
  4515. var ComponentRef = /** @class */ (function () {
  4516. function ComponentRef() {
  4517. }
  4518. return ComponentRef;
  4519. }());
  4520. /**
  4521. * \@stable
  4522. * @abstract
  4523. * @template C
  4524. */
  4525. var ComponentFactory = /** @class */ (function () {
  4526. function ComponentFactory() {
  4527. }
  4528. return ComponentFactory;
  4529. }());
  4530. /**
  4531. * @fileoverview added by tsickle
  4532. * @suppress {checkTypes} checked by tsc
  4533. */
  4534. /**
  4535. * @license
  4536. * Copyright Google Inc. All Rights Reserved.
  4537. *
  4538. * Use of this source code is governed by an MIT-style license that can be
  4539. * found in the LICENSE file at https://angular.io/license
  4540. */
  4541. /**
  4542. * @param {?} component
  4543. * @return {?}
  4544. */
  4545. function noComponentFactoryError(component) {
  4546. var /** @type {?} */ error = Error("No component factory found for " + stringify(component) + ". Did you add it to @NgModule.entryComponents?");
  4547. (/** @type {?} */ (error))[ERROR_COMPONENT] = component;
  4548. return error;
  4549. }
  4550. var ERROR_COMPONENT = 'ngComponent';
  4551. /**
  4552. * @param {?} error
  4553. * @return {?}
  4554. */
  4555. var _NullComponentFactoryResolver = /** @class */ (function () {
  4556. function _NullComponentFactoryResolver() {
  4557. }
  4558. /**
  4559. * @template T
  4560. * @param {?} component
  4561. * @return {?}
  4562. */
  4563. _NullComponentFactoryResolver.prototype.resolveComponentFactory = /**
  4564. * @template T
  4565. * @param {?} component
  4566. * @return {?}
  4567. */
  4568. function (component) {
  4569. throw noComponentFactoryError(component);
  4570. };
  4571. return _NullComponentFactoryResolver;
  4572. }());
  4573. /**
  4574. * \@stable
  4575. * @abstract
  4576. */
  4577. var ComponentFactoryResolver = /** @class */ (function () {
  4578. function ComponentFactoryResolver() {
  4579. }
  4580. ComponentFactoryResolver.NULL = new _NullComponentFactoryResolver();
  4581. return ComponentFactoryResolver;
  4582. }());
  4583. var CodegenComponentFactoryResolver = /** @class */ (function () {
  4584. function CodegenComponentFactoryResolver(factories, _parent, _ngModule) {
  4585. this._parent = _parent;
  4586. this._ngModule = _ngModule;
  4587. this._factories = new Map();
  4588. for (var /** @type {?} */ i = 0; i < factories.length; i++) {
  4589. var /** @type {?} */ factory = factories[i];
  4590. this._factories.set(factory.componentType, factory);
  4591. }
  4592. }
  4593. /**
  4594. * @template T
  4595. * @param {?} component
  4596. * @return {?}
  4597. */
  4598. CodegenComponentFactoryResolver.prototype.resolveComponentFactory = /**
  4599. * @template T
  4600. * @param {?} component
  4601. * @return {?}
  4602. */
  4603. function (component) {
  4604. var /** @type {?} */ factory = this._factories.get(component);
  4605. if (!factory && this._parent) {
  4606. factory = this._parent.resolveComponentFactory(component);
  4607. }
  4608. if (!factory) {
  4609. throw noComponentFactoryError(component);
  4610. }
  4611. return new ComponentFactoryBoundToModule(factory, this._ngModule);
  4612. };
  4613. return CodegenComponentFactoryResolver;
  4614. }());
  4615. /**
  4616. * @template C
  4617. */
  4618. var ComponentFactoryBoundToModule = /** @class */ (function (_super) {
  4619. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ComponentFactoryBoundToModule, _super);
  4620. function ComponentFactoryBoundToModule(factory, ngModule) {
  4621. var _this = _super.call(this) || this;
  4622. _this.factory = factory;
  4623. _this.ngModule = ngModule;
  4624. _this.selector = factory.selector;
  4625. _this.componentType = factory.componentType;
  4626. _this.ngContentSelectors = factory.ngContentSelectors;
  4627. _this.inputs = factory.inputs;
  4628. _this.outputs = factory.outputs;
  4629. return _this;
  4630. }
  4631. /**
  4632. * @param {?} injector
  4633. * @param {?=} projectableNodes
  4634. * @param {?=} rootSelectorOrNode
  4635. * @param {?=} ngModule
  4636. * @return {?}
  4637. */
  4638. ComponentFactoryBoundToModule.prototype.create = /**
  4639. * @param {?} injector
  4640. * @param {?=} projectableNodes
  4641. * @param {?=} rootSelectorOrNode
  4642. * @param {?=} ngModule
  4643. * @return {?}
  4644. */
  4645. function (injector, projectableNodes, rootSelectorOrNode, ngModule) {
  4646. return this.factory.create(injector, projectableNodes, rootSelectorOrNode, ngModule || this.ngModule);
  4647. };
  4648. return ComponentFactoryBoundToModule;
  4649. }(ComponentFactory));
  4650. /**
  4651. * @fileoverview added by tsickle
  4652. * @suppress {checkTypes} checked by tsc
  4653. */
  4654. /**
  4655. * @license
  4656. * Copyright Google Inc. All Rights Reserved.
  4657. *
  4658. * Use of this source code is governed by an MIT-style license that can be
  4659. * found in the LICENSE file at https://angular.io/license
  4660. */
  4661. /**
  4662. * Represents an instance of an NgModule created via a {\@link NgModuleFactory}.
  4663. *
  4664. * `NgModuleRef` provides access to the NgModule Instance as well other objects related to this
  4665. * NgModule Instance.
  4666. *
  4667. * \@stable
  4668. * @abstract
  4669. * @template T
  4670. */
  4671. var NgModuleRef = /** @class */ (function () {
  4672. function NgModuleRef() {
  4673. }
  4674. return NgModuleRef;
  4675. }());
  4676. /**
  4677. * @record
  4678. * @template T
  4679. */
  4680. /**
  4681. * \@experimental
  4682. * @abstract
  4683. * @template T
  4684. */
  4685. var NgModuleFactory = /** @class */ (function () {
  4686. function NgModuleFactory() {
  4687. }
  4688. return NgModuleFactory;
  4689. }());
  4690. /**
  4691. * @fileoverview added by tsickle
  4692. * @suppress {checkTypes} checked by tsc
  4693. */
  4694. /**
  4695. * @license
  4696. * Copyright Google Inc. All Rights Reserved.
  4697. *
  4698. * Use of this source code is governed by an MIT-style license that can be
  4699. * found in the LICENSE file at https://angular.io/license
  4700. */
  4701. /**
  4702. * A scope function for the Web Tracing Framework (WTF).
  4703. *
  4704. * \@experimental
  4705. * @record
  4706. */
  4707. /**
  4708. * @record
  4709. */
  4710. /**
  4711. * @record
  4712. */
  4713. var trace;
  4714. var events;
  4715. /**
  4716. * @return {?}
  4717. */
  4718. function detectWTF() {
  4719. var /** @type {?} */ wtf = (/** @type {?} */ (_global /** TODO #9100 */) /** TODO #9100 */)['wtf'];
  4720. if (wtf) {
  4721. trace = wtf['trace'];
  4722. if (trace) {
  4723. events = trace['events'];
  4724. return true;
  4725. }
  4726. }
  4727. return false;
  4728. }
  4729. /**
  4730. * @param {?} signature
  4731. * @param {?=} flags
  4732. * @return {?}
  4733. */
  4734. function createScope(signature, flags) {
  4735. if (flags === void 0) { flags = null; }
  4736. return events.createScope(signature, flags);
  4737. }
  4738. /**
  4739. * @template T
  4740. * @param {?} scope
  4741. * @param {?=} returnValue
  4742. * @return {?}
  4743. */
  4744. function leave(scope, returnValue) {
  4745. trace.leaveScope(scope, returnValue);
  4746. return returnValue;
  4747. }
  4748. /**
  4749. * @param {?} rangeType
  4750. * @param {?} action
  4751. * @return {?}
  4752. */
  4753. function startTimeRange(rangeType, action) {
  4754. return trace.beginTimeRange(rangeType, action);
  4755. }
  4756. /**
  4757. * @param {?} range
  4758. * @return {?}
  4759. */
  4760. function endTimeRange(range) {
  4761. trace.endTimeRange(range);
  4762. }
  4763. /**
  4764. * @fileoverview added by tsickle
  4765. * @suppress {checkTypes} checked by tsc
  4766. */
  4767. /**
  4768. * @license
  4769. * Copyright Google Inc. All Rights Reserved.
  4770. *
  4771. * Use of this source code is governed by an MIT-style license that can be
  4772. * found in the LICENSE file at https://angular.io/license
  4773. */
  4774. /**
  4775. * True if WTF is enabled.
  4776. */
  4777. var wtfEnabled = detectWTF();
  4778. /**
  4779. * @param {?=} arg0
  4780. * @param {?=} arg1
  4781. * @return {?}
  4782. */
  4783. function noopScope(arg0, arg1) {
  4784. return null;
  4785. }
  4786. /**
  4787. * Create trace scope.
  4788. *
  4789. * Scopes must be strictly nested and are analogous to stack frames, but
  4790. * do not have to follow the stack frames. Instead it is recommended that they follow logical
  4791. * nesting. You may want to use
  4792. * [Event
  4793. * Signatures](http://google.github.io/tracing-framework/instrumenting-code.html#custom-events)
  4794. * as they are defined in WTF.
  4795. *
  4796. * Used to mark scope entry. The return value is used to leave the scope.
  4797. *
  4798. * var myScope = wtfCreateScope('MyClass#myMethod(ascii someVal)');
  4799. *
  4800. * someMethod() {
  4801. * var s = myScope('Foo'); // 'Foo' gets stored in tracing UI
  4802. * // DO SOME WORK HERE
  4803. * return wtfLeave(s, 123); // Return value 123
  4804. * }
  4805. *
  4806. * Note, adding try-finally block around the work to ensure that `wtfLeave` gets called can
  4807. * negatively impact the performance of your application. For this reason we recommend that
  4808. * you don't add them to ensure that `wtfLeave` gets called. In production `wtfLeave` is a noop and
  4809. * so try-finally block has no value. When debugging perf issues, skipping `wtfLeave`, do to
  4810. * exception, will produce incorrect trace, but presence of exception signifies logic error which
  4811. * needs to be fixed before the app should be profiled. Add try-finally only when you expect that
  4812. * an exception is expected during normal execution while profiling.
  4813. *
  4814. * \@experimental
  4815. */
  4816. var wtfCreateScope = wtfEnabled ? createScope : function (signature, flags) { return noopScope; };
  4817. /**
  4818. * Used to mark end of Scope.
  4819. *
  4820. * - `scope` to end.
  4821. * - `returnValue` (optional) to be passed to the WTF.
  4822. *
  4823. * Returns the `returnValue for easy chaining.
  4824. * \@experimental
  4825. */
  4826. var wtfLeave = wtfEnabled ? leave : function (s, r) { return r; };
  4827. /**
  4828. * Used to mark Async start. Async are similar to scope but they don't have to be strictly nested.
  4829. * The return value is used in the call to [endAsync]. Async ranges only work if WTF has been
  4830. * enabled.
  4831. *
  4832. * someMethod() {
  4833. * var s = wtfStartTimeRange('HTTP:GET', 'some.url');
  4834. * var future = new Future.delay(5).then((_) {
  4835. * wtfEndTimeRange(s);
  4836. * });
  4837. * }
  4838. * \@experimental
  4839. */
  4840. var wtfStartTimeRange = wtfEnabled ? startTimeRange : function (rangeType, action) { return null; };
  4841. /**
  4842. * Ends a async time range operation.
  4843. * [range] is the return value from [wtfStartTimeRange] Async ranges only work if WTF has been
  4844. * enabled.
  4845. * \@experimental
  4846. */
  4847. var wtfEndTimeRange = wtfEnabled ? endTimeRange : function (r) { return null; };
  4848. /**
  4849. * @fileoverview added by tsickle
  4850. * @suppress {checkTypes} checked by tsc
  4851. */
  4852. /**
  4853. * @license
  4854. * Copyright Google Inc. All Rights Reserved.
  4855. *
  4856. * Use of this source code is governed by an MIT-style license that can be
  4857. * found in the LICENSE file at https://angular.io/license
  4858. */
  4859. /**
  4860. * Use by directives and components to emit custom Events.
  4861. *
  4862. * ### Examples
  4863. *
  4864. * In the following example, `Zippy` alternatively emits `open` and `close` events when its
  4865. * title gets clicked:
  4866. *
  4867. * ```
  4868. * \@Component({
  4869. * selector: 'zippy',
  4870. * template: `
  4871. * <div class="zippy">
  4872. * <div (click)="toggle()">Toggle</div>
  4873. * <div [hidden]="!visible">
  4874. * <ng-content></ng-content>
  4875. * </div>
  4876. * </div>`})
  4877. * export class Zippy {
  4878. * visible: boolean = true;
  4879. * \@Output() open: EventEmitter<any> = new EventEmitter();
  4880. * \@Output() close: EventEmitter<any> = new EventEmitter();
  4881. *
  4882. * toggle() {
  4883. * this.visible = !this.visible;
  4884. * if (this.visible) {
  4885. * this.open.emit(null);
  4886. * } else {
  4887. * this.close.emit(null);
  4888. * }
  4889. * }
  4890. * }
  4891. * ```
  4892. *
  4893. * The events payload can be accessed by the parameter `$event` on the components output event
  4894. * handler:
  4895. *
  4896. * ```
  4897. * <zippy (open)="onOpen($event)" (close)="onClose($event)"></zippy>
  4898. * ```
  4899. *
  4900. * Uses Rx.Observable but provides an adapter to make it work as specified here:
  4901. * https://github.com/jhusain/observable-spec
  4902. *
  4903. * Once a reference implementation of the spec is available, switch to it.
  4904. * \@stable
  4905. * @template T
  4906. */
  4907. var EventEmitter = /** @class */ (function (_super) {
  4908. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(EventEmitter, _super);
  4909. /**
  4910. * Creates an instance of {@link EventEmitter}, which depending on `isAsync`,
  4911. * delivers events synchronously or asynchronously.
  4912. *
  4913. * @param isAsync By default, events are delivered synchronously (default value: `false`).
  4914. * Set to `true` for asynchronous event delivery.
  4915. */
  4916. function EventEmitter(isAsync) {
  4917. if (isAsync === void 0) { isAsync = false; }
  4918. var _this = _super.call(this) || this;
  4919. _this.__isAsync = isAsync;
  4920. return _this;
  4921. }
  4922. /**
  4923. * @param {?=} value
  4924. * @return {?}
  4925. */
  4926. EventEmitter.prototype.emit = /**
  4927. * @param {?=} value
  4928. * @return {?}
  4929. */
  4930. function (value) { _super.prototype.next.call(this, value); };
  4931. /**
  4932. * @param {?=} generatorOrNext
  4933. * @param {?=} error
  4934. * @param {?=} complete
  4935. * @return {?}
  4936. */
  4937. EventEmitter.prototype.subscribe = /**
  4938. * @param {?=} generatorOrNext
  4939. * @param {?=} error
  4940. * @param {?=} complete
  4941. * @return {?}
  4942. */
  4943. function (generatorOrNext, error, complete) {
  4944. var /** @type {?} */ schedulerFn;
  4945. var /** @type {?} */ errorFn = function (err) { return null; };
  4946. var /** @type {?} */ completeFn = function () { return null; };
  4947. if (generatorOrNext && typeof generatorOrNext === 'object') {
  4948. schedulerFn = this.__isAsync ? function (value) {
  4949. setTimeout(function () { return generatorOrNext.next(value); });
  4950. } : function (value) { generatorOrNext.next(value); };
  4951. if (generatorOrNext.error) {
  4952. errorFn = this.__isAsync ? function (err) { setTimeout(function () { return generatorOrNext.error(err); }); } :
  4953. function (err) { generatorOrNext.error(err); };
  4954. }
  4955. if (generatorOrNext.complete) {
  4956. completeFn = this.__isAsync ? function () { setTimeout(function () { return generatorOrNext.complete(); }); } :
  4957. function () { generatorOrNext.complete(); };
  4958. }
  4959. }
  4960. else {
  4961. schedulerFn = this.__isAsync ? function (value) { setTimeout(function () { return generatorOrNext(value); }); } :
  4962. function (value) { generatorOrNext(value); };
  4963. if (error) {
  4964. errorFn =
  4965. this.__isAsync ? function (err) { setTimeout(function () { return error(err); }); } : function (err) { error(err); };
  4966. }
  4967. if (complete) {
  4968. completeFn =
  4969. this.__isAsync ? function () { setTimeout(function () { return complete(); }); } : function () { complete(); };
  4970. }
  4971. }
  4972. var /** @type {?} */ sink = _super.prototype.subscribe.call(this, schedulerFn, errorFn, completeFn);
  4973. if (generatorOrNext instanceof __WEBPACK_IMPORTED_MODULE_5_rxjs_Subscription__["Subscription"]) {
  4974. generatorOrNext.add(sink);
  4975. }
  4976. return sink;
  4977. };
  4978. return EventEmitter;
  4979. }(__WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__["Subject"]));
  4980. /**
  4981. * @fileoverview added by tsickle
  4982. * @suppress {checkTypes} checked by tsc
  4983. */
  4984. /**
  4985. * @license
  4986. * Copyright Google Inc. All Rights Reserved.
  4987. *
  4988. * Use of this source code is governed by an MIT-style license that can be
  4989. * found in the LICENSE file at https://angular.io/license
  4990. */
  4991. /**
  4992. * An injectable service for executing work inside or outside of the Angular zone.
  4993. *
  4994. * The most common use of this service is to optimize performance when starting a work consisting of
  4995. * one or more asynchronous tasks that don't require UI updates or error handling to be handled by
  4996. * Angular. Such tasks can be kicked off via {\@link #runOutsideAngular} and if needed, these tasks
  4997. * can reenter the Angular zone via {\@link #run}.
  4998. *
  4999. * <!-- TODO: add/fix links to:
  5000. * - docs explaining zones and the use of zones in Angular and change-detection
  5001. * - link to runOutsideAngular/run (throughout this file!)
  5002. * -->
  5003. *
  5004. * ### Example
  5005. *
  5006. * ```
  5007. * import {Component, NgZone} from '\@angular/core';
  5008. * import {NgIf} from '\@angular/common';
  5009. *
  5010. * \@Component({
  5011. * selector: 'ng-zone-demo',
  5012. * template: `
  5013. * <h2>Demo: NgZone</h2>
  5014. *
  5015. * <p>Progress: {{progress}}%</p>
  5016. * <p *ngIf="progress >= 100">Done processing {{label}} of Angular zone!</p>
  5017. *
  5018. * <button (click)="processWithinAngularZone()">Process within Angular zone</button>
  5019. * <button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
  5020. * `,
  5021. * })
  5022. * export class NgZoneDemo {
  5023. * progress: number = 0;
  5024. * label: string;
  5025. *
  5026. * constructor(private _ngZone: NgZone) {}
  5027. *
  5028. * // Loop inside the Angular zone
  5029. * // so the UI DOES refresh after each setTimeout cycle
  5030. * processWithinAngularZone() {
  5031. * this.label = 'inside';
  5032. * this.progress = 0;
  5033. * this._increaseProgress(() => console.log('Inside Done!'));
  5034. * }
  5035. *
  5036. * // Loop outside of the Angular zone
  5037. * // so the UI DOES NOT refresh after each setTimeout cycle
  5038. * processOutsideOfAngularZone() {
  5039. * this.label = 'outside';
  5040. * this.progress = 0;
  5041. * this._ngZone.runOutsideAngular(() => {
  5042. * this._increaseProgress(() => {
  5043. * // reenter the Angular zone and display done
  5044. * this._ngZone.run(() => { console.log('Outside Done!'); });
  5045. * });
  5046. * });
  5047. * }
  5048. *
  5049. * _increaseProgress(doneCallback: () => void) {
  5050. * this.progress += 1;
  5051. * console.log(`Current progress: ${this.progress}%`);
  5052. *
  5053. * if (this.progress < 100) {
  5054. * window.setTimeout(() => this._increaseProgress(doneCallback), 10);
  5055. * } else {
  5056. * doneCallback();
  5057. * }
  5058. * }
  5059. * }
  5060. * ```
  5061. *
  5062. * \@experimental
  5063. */
  5064. var NgZone = /** @class */ (function () {
  5065. function NgZone(_a) {
  5066. var _b = _a.enableLongStackTrace, enableLongStackTrace = _b === void 0 ? false : _b;
  5067. this.hasPendingMicrotasks = false;
  5068. this.hasPendingMacrotasks = false;
  5069. /**
  5070. * Whether there are no outstanding microtasks or macrotasks.
  5071. */
  5072. this.isStable = true;
  5073. /**
  5074. * Notifies when code enters Angular Zone. This gets fired first on VM Turn.
  5075. */
  5076. this.onUnstable = new EventEmitter(false);
  5077. /**
  5078. * Notifies when there is no more microtasks enqueued in the current VM Turn.
  5079. * This is a hint for Angular to do change detection, which may enqueue more microtasks.
  5080. * For this reason this event can fire multiple times per VM Turn.
  5081. */
  5082. this.onMicrotaskEmpty = new EventEmitter(false);
  5083. /**
  5084. * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which
  5085. * implies we are about to relinquish VM turn.
  5086. * This event gets called just once.
  5087. */
  5088. this.onStable = new EventEmitter(false);
  5089. /**
  5090. * Notifies that an error has been delivered.
  5091. */
  5092. this.onError = new EventEmitter(false);
  5093. if (typeof Zone == 'undefined') {
  5094. throw new Error("In this configuration Angular requires Zone.js");
  5095. }
  5096. Zone.assertZonePatched();
  5097. var /** @type {?} */ self = /** @type {?} */ ((this));
  5098. self._nesting = 0;
  5099. self._outer = self._inner = Zone.current;
  5100. if ((/** @type {?} */ (Zone))['wtfZoneSpec']) {
  5101. self._inner = self._inner.fork((/** @type {?} */ (Zone))['wtfZoneSpec']);
  5102. }
  5103. if (enableLongStackTrace && (/** @type {?} */ (Zone))['longStackTraceZoneSpec']) {
  5104. self._inner = self._inner.fork((/** @type {?} */ (Zone))['longStackTraceZoneSpec']);
  5105. }
  5106. forkInnerZoneWithAngularBehavior(self);
  5107. }
  5108. /**
  5109. * @return {?}
  5110. */
  5111. NgZone.isInAngularZone = /**
  5112. * @return {?}
  5113. */
  5114. function () { return Zone.current.get('isAngularZone') === true; };
  5115. /**
  5116. * @return {?}
  5117. */
  5118. NgZone.assertInAngularZone = /**
  5119. * @return {?}
  5120. */
  5121. function () {
  5122. if (!NgZone.isInAngularZone()) {
  5123. throw new Error('Expected to be in Angular Zone, but it is not!');
  5124. }
  5125. };
  5126. /**
  5127. * @return {?}
  5128. */
  5129. NgZone.assertNotInAngularZone = /**
  5130. * @return {?}
  5131. */
  5132. function () {
  5133. if (NgZone.isInAngularZone()) {
  5134. throw new Error('Expected to not be in Angular Zone, but it is!');
  5135. }
  5136. };
  5137. /**
  5138. * Executes the `fn` function synchronously within the Angular zone and returns value returned by
  5139. * the function.
  5140. *
  5141. * Running functions via `run` allows you to reenter Angular zone from a task that was executed
  5142. * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
  5143. *
  5144. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5145. * within the Angular zone.
  5146. *
  5147. * If a synchronous error happens it will be rethrown and not reported via `onError`.
  5148. */
  5149. /**
  5150. * Executes the `fn` function synchronously within the Angular zone and returns value returned by
  5151. * the function.
  5152. *
  5153. * Running functions via `run` allows you to reenter Angular zone from a task that was executed
  5154. * outside of the Angular zone (typically started via {\@link #runOutsideAngular}).
  5155. *
  5156. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5157. * within the Angular zone.
  5158. *
  5159. * If a synchronous error happens it will be rethrown and not reported via `onError`.
  5160. * @template T
  5161. * @param {?} fn
  5162. * @param {?=} applyThis
  5163. * @param {?=} applyArgs
  5164. * @return {?}
  5165. */
  5166. NgZone.prototype.run = /**
  5167. * Executes the `fn` function synchronously within the Angular zone and returns value returned by
  5168. * the function.
  5169. *
  5170. * Running functions via `run` allows you to reenter Angular zone from a task that was executed
  5171. * outside of the Angular zone (typically started via {\@link #runOutsideAngular}).
  5172. *
  5173. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5174. * within the Angular zone.
  5175. *
  5176. * If a synchronous error happens it will be rethrown and not reported via `onError`.
  5177. * @template T
  5178. * @param {?} fn
  5179. * @param {?=} applyThis
  5180. * @param {?=} applyArgs
  5181. * @return {?}
  5182. */
  5183. function (fn, applyThis, applyArgs) {
  5184. return /** @type {?} */ ((/** @type {?} */ ((this)))._inner.run(fn, applyThis, applyArgs));
  5185. };
  5186. /**
  5187. * Executes the `fn` function synchronously within the Angular zone as a task and returns value
  5188. * returned by the function.
  5189. *
  5190. * Running functions via `run` allows you to reenter Angular zone from a task that was executed
  5191. * outside of the Angular zone (typically started via {@link #runOutsideAngular}).
  5192. *
  5193. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5194. * within the Angular zone.
  5195. *
  5196. * If a synchronous error happens it will be rethrown and not reported via `onError`.
  5197. */
  5198. /**
  5199. * Executes the `fn` function synchronously within the Angular zone as a task and returns value
  5200. * returned by the function.
  5201. *
  5202. * Running functions via `run` allows you to reenter Angular zone from a task that was executed
  5203. * outside of the Angular zone (typically started via {\@link #runOutsideAngular}).
  5204. *
  5205. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5206. * within the Angular zone.
  5207. *
  5208. * If a synchronous error happens it will be rethrown and not reported via `onError`.
  5209. * @template T
  5210. * @param {?} fn
  5211. * @param {?=} applyThis
  5212. * @param {?=} applyArgs
  5213. * @param {?=} name
  5214. * @return {?}
  5215. */
  5216. NgZone.prototype.runTask = /**
  5217. * Executes the `fn` function synchronously within the Angular zone as a task and returns value
  5218. * returned by the function.
  5219. *
  5220. * Running functions via `run` allows you to reenter Angular zone from a task that was executed
  5221. * outside of the Angular zone (typically started via {\@link #runOutsideAngular}).
  5222. *
  5223. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5224. * within the Angular zone.
  5225. *
  5226. * If a synchronous error happens it will be rethrown and not reported via `onError`.
  5227. * @template T
  5228. * @param {?} fn
  5229. * @param {?=} applyThis
  5230. * @param {?=} applyArgs
  5231. * @param {?=} name
  5232. * @return {?}
  5233. */
  5234. function (fn, applyThis, applyArgs, name) {
  5235. var /** @type {?} */ zone = (/** @type {?} */ ((this)))._inner;
  5236. var /** @type {?} */ task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);
  5237. try {
  5238. return /** @type {?} */ (zone.runTask(task, applyThis, applyArgs));
  5239. }
  5240. finally {
  5241. zone.cancelTask(task);
  5242. }
  5243. };
  5244. /**
  5245. * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
  5246. * rethrown.
  5247. */
  5248. /**
  5249. * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
  5250. * rethrown.
  5251. * @template T
  5252. * @param {?} fn
  5253. * @param {?=} applyThis
  5254. * @param {?=} applyArgs
  5255. * @return {?}
  5256. */
  5257. NgZone.prototype.runGuarded = /**
  5258. * Same as `run`, except that synchronous errors are caught and forwarded via `onError` and not
  5259. * rethrown.
  5260. * @template T
  5261. * @param {?} fn
  5262. * @param {?=} applyThis
  5263. * @param {?=} applyArgs
  5264. * @return {?}
  5265. */
  5266. function (fn, applyThis, applyArgs) {
  5267. return /** @type {?} */ ((/** @type {?} */ ((this)))._inner.runGuarded(fn, applyThis, applyArgs));
  5268. };
  5269. /**
  5270. * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
  5271. * the function.
  5272. *
  5273. * Running functions via {@link #runOutsideAngular} allows you to escape Angular's zone and do
  5274. * work that
  5275. * doesn't trigger Angular change-detection or is subject to Angular's error handling.
  5276. *
  5277. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5278. * outside of the Angular zone.
  5279. *
  5280. * Use {@link #run} to reenter the Angular zone and do work that updates the application model.
  5281. */
  5282. /**
  5283. * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
  5284. * the function.
  5285. *
  5286. * Running functions via {\@link #runOutsideAngular} allows you to escape Angular's zone and do
  5287. * work that
  5288. * doesn't trigger Angular change-detection or is subject to Angular's error handling.
  5289. *
  5290. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5291. * outside of the Angular zone.
  5292. *
  5293. * Use {\@link #run} to reenter the Angular zone and do work that updates the application model.
  5294. * @template T
  5295. * @param {?} fn
  5296. * @return {?}
  5297. */
  5298. NgZone.prototype.runOutsideAngular = /**
  5299. * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by
  5300. * the function.
  5301. *
  5302. * Running functions via {\@link #runOutsideAngular} allows you to escape Angular's zone and do
  5303. * work that
  5304. * doesn't trigger Angular change-detection or is subject to Angular's error handling.
  5305. *
  5306. * Any future tasks or microtasks scheduled from within this function will continue executing from
  5307. * outside of the Angular zone.
  5308. *
  5309. * Use {\@link #run} to reenter the Angular zone and do work that updates the application model.
  5310. * @template T
  5311. * @param {?} fn
  5312. * @return {?}
  5313. */
  5314. function (fn) {
  5315. return /** @type {?} */ ((/** @type {?} */ ((this)))._outer.run(fn));
  5316. };
  5317. return NgZone;
  5318. }());
  5319. /**
  5320. * @return {?}
  5321. */
  5322. function noop() { }
  5323. var EMPTY_PAYLOAD = {};
  5324. /**
  5325. * @param {?} zone
  5326. * @return {?}
  5327. */
  5328. function checkStable(zone) {
  5329. if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {
  5330. try {
  5331. zone._nesting++;
  5332. zone.onMicrotaskEmpty.emit(null);
  5333. }
  5334. finally {
  5335. zone._nesting--;
  5336. if (!zone.hasPendingMicrotasks) {
  5337. try {
  5338. zone.runOutsideAngular(function () { return zone.onStable.emit(null); });
  5339. }
  5340. finally {
  5341. zone.isStable = true;
  5342. }
  5343. }
  5344. }
  5345. }
  5346. }
  5347. /**
  5348. * @param {?} zone
  5349. * @return {?}
  5350. */
  5351. function forkInnerZoneWithAngularBehavior(zone) {
  5352. zone._inner = zone._inner.fork({
  5353. name: 'angular',
  5354. properties: /** @type {?} */ ({ 'isAngularZone': true }),
  5355. onInvokeTask: function (delegate, current, target, task, applyThis, applyArgs) {
  5356. try {
  5357. onEnter(zone);
  5358. return delegate.invokeTask(target, task, applyThis, applyArgs);
  5359. }
  5360. finally {
  5361. onLeave(zone);
  5362. }
  5363. },
  5364. onInvoke: function (delegate, current, target, callback, applyThis, applyArgs, source) {
  5365. try {
  5366. onEnter(zone);
  5367. return delegate.invoke(target, callback, applyThis, applyArgs, source);
  5368. }
  5369. finally {
  5370. onLeave(zone);
  5371. }
  5372. },
  5373. onHasTask: function (delegate, current, target, hasTaskState) {
  5374. delegate.hasTask(target, hasTaskState);
  5375. if (current === target) {
  5376. // We are only interested in hasTask events which originate from our zone
  5377. // (A child hasTask event is not interesting to us)
  5378. if (hasTaskState.change == 'microTask') {
  5379. zone.hasPendingMicrotasks = hasTaskState.microTask;
  5380. checkStable(zone);
  5381. }
  5382. else if (hasTaskState.change == 'macroTask') {
  5383. zone.hasPendingMacrotasks = hasTaskState.macroTask;
  5384. }
  5385. }
  5386. },
  5387. onHandleError: function (delegate, current, target, error) {
  5388. delegate.handleError(target, error);
  5389. zone.runOutsideAngular(function () { return zone.onError.emit(error); });
  5390. return false;
  5391. }
  5392. });
  5393. }
  5394. /**
  5395. * @param {?} zone
  5396. * @return {?}
  5397. */
  5398. function onEnter(zone) {
  5399. zone._nesting++;
  5400. if (zone.isStable) {
  5401. zone.isStable = false;
  5402. zone.onUnstable.emit(null);
  5403. }
  5404. }
  5405. /**
  5406. * @param {?} zone
  5407. * @return {?}
  5408. */
  5409. function onLeave(zone) {
  5410. zone._nesting--;
  5411. checkStable(zone);
  5412. }
  5413. /**
  5414. * Provides a noop implementation of `NgZone` which does nothing. This zone requires explicit calls
  5415. * to framework to perform rendering.
  5416. */
  5417. var NoopNgZone = /** @class */ (function () {
  5418. function NoopNgZone() {
  5419. this.hasPendingMicrotasks = false;
  5420. this.hasPendingMacrotasks = false;
  5421. this.isStable = true;
  5422. this.onUnstable = new EventEmitter();
  5423. this.onMicrotaskEmpty = new EventEmitter();
  5424. this.onStable = new EventEmitter();
  5425. this.onError = new EventEmitter();
  5426. }
  5427. /**
  5428. * @param {?} fn
  5429. * @return {?}
  5430. */
  5431. NoopNgZone.prototype.run = /**
  5432. * @param {?} fn
  5433. * @return {?}
  5434. */
  5435. function (fn) { return fn(); };
  5436. /**
  5437. * @param {?} fn
  5438. * @return {?}
  5439. */
  5440. NoopNgZone.prototype.runGuarded = /**
  5441. * @param {?} fn
  5442. * @return {?}
  5443. */
  5444. function (fn) { return fn(); };
  5445. /**
  5446. * @param {?} fn
  5447. * @return {?}
  5448. */
  5449. NoopNgZone.prototype.runOutsideAngular = /**
  5450. * @param {?} fn
  5451. * @return {?}
  5452. */
  5453. function (fn) { return fn(); };
  5454. /**
  5455. * @template T
  5456. * @param {?} fn
  5457. * @return {?}
  5458. */
  5459. NoopNgZone.prototype.runTask = /**
  5460. * @template T
  5461. * @param {?} fn
  5462. * @return {?}
  5463. */
  5464. function (fn) { return fn(); };
  5465. return NoopNgZone;
  5466. }());
  5467. /**
  5468. * @fileoverview added by tsickle
  5469. * @suppress {checkTypes} checked by tsc
  5470. */
  5471. /**
  5472. * @license
  5473. * Copyright Google Inc. All Rights Reserved.
  5474. *
  5475. * Use of this source code is governed by an MIT-style license that can be
  5476. * found in the LICENSE file at https://angular.io/license
  5477. */
  5478. /**
  5479. * The Testability service provides testing hooks that can be accessed from
  5480. * the browser and by services such as Protractor. Each bootstrapped Angular
  5481. * application on the page will have an instance of Testability.
  5482. * \@experimental
  5483. */
  5484. var Testability = /** @class */ (function () {
  5485. function Testability(_ngZone) {
  5486. this._ngZone = _ngZone;
  5487. /**
  5488. * \@internal
  5489. */
  5490. this._pendingCount = 0;
  5491. /**
  5492. * \@internal
  5493. */
  5494. this._isZoneStable = true;
  5495. /**
  5496. * Whether any work was done since the last 'whenStable' callback. This is
  5497. * useful to detect if this could have potentially destabilized another
  5498. * component while it is stabilizing.
  5499. * \@internal
  5500. */
  5501. this._didWork = false;
  5502. /**
  5503. * \@internal
  5504. */
  5505. this._callbacks = [];
  5506. this._watchAngularEvents();
  5507. }
  5508. /** @internal */
  5509. /**
  5510. * \@internal
  5511. * @return {?}
  5512. */
  5513. Testability.prototype._watchAngularEvents = /**
  5514. * \@internal
  5515. * @return {?}
  5516. */
  5517. function () {
  5518. var _this = this;
  5519. this._ngZone.onUnstable.subscribe({
  5520. next: function () {
  5521. _this._didWork = true;
  5522. _this._isZoneStable = false;
  5523. }
  5524. });
  5525. this._ngZone.runOutsideAngular(function () {
  5526. _this._ngZone.onStable.subscribe({
  5527. next: function () {
  5528. NgZone.assertNotInAngularZone();
  5529. scheduleMicroTask(function () {
  5530. _this._isZoneStable = true;
  5531. _this._runCallbacksIfReady();
  5532. });
  5533. }
  5534. });
  5535. });
  5536. };
  5537. /**
  5538. * Increases the number of pending request
  5539. */
  5540. /**
  5541. * Increases the number of pending request
  5542. * @return {?}
  5543. */
  5544. Testability.prototype.increasePendingRequestCount = /**
  5545. * Increases the number of pending request
  5546. * @return {?}
  5547. */
  5548. function () {
  5549. this._pendingCount += 1;
  5550. this._didWork = true;
  5551. return this._pendingCount;
  5552. };
  5553. /**
  5554. * Decreases the number of pending request
  5555. */
  5556. /**
  5557. * Decreases the number of pending request
  5558. * @return {?}
  5559. */
  5560. Testability.prototype.decreasePendingRequestCount = /**
  5561. * Decreases the number of pending request
  5562. * @return {?}
  5563. */
  5564. function () {
  5565. this._pendingCount -= 1;
  5566. if (this._pendingCount < 0) {
  5567. throw new Error('pending async requests below zero');
  5568. }
  5569. this._runCallbacksIfReady();
  5570. return this._pendingCount;
  5571. };
  5572. /**
  5573. * Whether an associated application is stable
  5574. */
  5575. /**
  5576. * Whether an associated application is stable
  5577. * @return {?}
  5578. */
  5579. Testability.prototype.isStable = /**
  5580. * Whether an associated application is stable
  5581. * @return {?}
  5582. */
  5583. function () {
  5584. return this._isZoneStable && this._pendingCount == 0 && !this._ngZone.hasPendingMacrotasks;
  5585. };
  5586. /** @internal */
  5587. /**
  5588. * \@internal
  5589. * @return {?}
  5590. */
  5591. Testability.prototype._runCallbacksIfReady = /**
  5592. * \@internal
  5593. * @return {?}
  5594. */
  5595. function () {
  5596. var _this = this;
  5597. if (this.isStable()) {
  5598. // Schedules the call backs in a new frame so that it is always async.
  5599. scheduleMicroTask(function () {
  5600. while (_this._callbacks.length !== 0) {
  5601. (/** @type {?} */ ((_this._callbacks.pop())))(_this._didWork);
  5602. }
  5603. _this._didWork = false;
  5604. });
  5605. }
  5606. else {
  5607. // Not Ready
  5608. this._didWork = true;
  5609. }
  5610. };
  5611. /**
  5612. * Run callback when the application is stable
  5613. * @param callback function to be called after the application is stable
  5614. */
  5615. /**
  5616. * Run callback when the application is stable
  5617. * @param {?} callback function to be called after the application is stable
  5618. * @return {?}
  5619. */
  5620. Testability.prototype.whenStable = /**
  5621. * Run callback when the application is stable
  5622. * @param {?} callback function to be called after the application is stable
  5623. * @return {?}
  5624. */
  5625. function (callback) {
  5626. this._callbacks.push(callback);
  5627. this._runCallbacksIfReady();
  5628. };
  5629. /**
  5630. * Get the number of pending requests
  5631. */
  5632. /**
  5633. * Get the number of pending requests
  5634. * @return {?}
  5635. */
  5636. Testability.prototype.getPendingRequestCount = /**
  5637. * Get the number of pending requests
  5638. * @return {?}
  5639. */
  5640. function () { return this._pendingCount; };
  5641. /**
  5642. * Find providers by name
  5643. * @param using The root element to search from
  5644. * @param provider The name of binding variable
  5645. * @param exactMatch Whether using exactMatch
  5646. */
  5647. /**
  5648. * Find providers by name
  5649. * @param {?} using The root element to search from
  5650. * @param {?} provider The name of binding variable
  5651. * @param {?} exactMatch Whether using exactMatch
  5652. * @return {?}
  5653. */
  5654. Testability.prototype.findProviders = /**
  5655. * Find providers by name
  5656. * @param {?} using The root element to search from
  5657. * @param {?} provider The name of binding variable
  5658. * @param {?} exactMatch Whether using exactMatch
  5659. * @return {?}
  5660. */
  5661. function (using, provider, exactMatch) {
  5662. // TODO(juliemr): implement.
  5663. return [];
  5664. };
  5665. Testability.decorators = [
  5666. { type: Injectable },
  5667. ];
  5668. /** @nocollapse */
  5669. Testability.ctorParameters = function () { return [
  5670. { type: NgZone, },
  5671. ]; };
  5672. return Testability;
  5673. }());
  5674. /**
  5675. * A global registry of {\@link Testability} instances for specific elements.
  5676. * \@experimental
  5677. */
  5678. var TestabilityRegistry = /** @class */ (function () {
  5679. function TestabilityRegistry() {
  5680. /**
  5681. * \@internal
  5682. */
  5683. this._applications = new Map();
  5684. _testabilityGetter.addToWindow(this);
  5685. }
  5686. /**
  5687. * Registers an application with a testability hook so that it can be tracked
  5688. * @param token token of application, root element
  5689. * @param testability Testability hook
  5690. */
  5691. /**
  5692. * Registers an application with a testability hook so that it can be tracked
  5693. * @param {?} token token of application, root element
  5694. * @param {?} testability Testability hook
  5695. * @return {?}
  5696. */
  5697. TestabilityRegistry.prototype.registerApplication = /**
  5698. * Registers an application with a testability hook so that it can be tracked
  5699. * @param {?} token token of application, root element
  5700. * @param {?} testability Testability hook
  5701. * @return {?}
  5702. */
  5703. function (token, testability) {
  5704. this._applications.set(token, testability);
  5705. };
  5706. /**
  5707. * Unregisters an application.
  5708. * @param token token of application, root element
  5709. */
  5710. /**
  5711. * Unregisters an application.
  5712. * @param {?} token token of application, root element
  5713. * @return {?}
  5714. */
  5715. TestabilityRegistry.prototype.unregisterApplication = /**
  5716. * Unregisters an application.
  5717. * @param {?} token token of application, root element
  5718. * @return {?}
  5719. */
  5720. function (token) { this._applications.delete(token); };
  5721. /**
  5722. * Unregisters all applications
  5723. */
  5724. /**
  5725. * Unregisters all applications
  5726. * @return {?}
  5727. */
  5728. TestabilityRegistry.prototype.unregisterAllApplications = /**
  5729. * Unregisters all applications
  5730. * @return {?}
  5731. */
  5732. function () { this._applications.clear(); };
  5733. /**
  5734. * Get a testability hook associated with the application
  5735. * @param elem root element
  5736. */
  5737. /**
  5738. * Get a testability hook associated with the application
  5739. * @param {?} elem root element
  5740. * @return {?}
  5741. */
  5742. TestabilityRegistry.prototype.getTestability = /**
  5743. * Get a testability hook associated with the application
  5744. * @param {?} elem root element
  5745. * @return {?}
  5746. */
  5747. function (elem) { return this._applications.get(elem) || null; };
  5748. /**
  5749. * Get all registered testabilities
  5750. */
  5751. /**
  5752. * Get all registered testabilities
  5753. * @return {?}
  5754. */
  5755. TestabilityRegistry.prototype.getAllTestabilities = /**
  5756. * Get all registered testabilities
  5757. * @return {?}
  5758. */
  5759. function () { return Array.from(this._applications.values()); };
  5760. /**
  5761. * Get all registered applications(root elements)
  5762. */
  5763. /**
  5764. * Get all registered applications(root elements)
  5765. * @return {?}
  5766. */
  5767. TestabilityRegistry.prototype.getAllRootElements = /**
  5768. * Get all registered applications(root elements)
  5769. * @return {?}
  5770. */
  5771. function () { return Array.from(this._applications.keys()); };
  5772. /**
  5773. * Find testability of a node in the Tree
  5774. * @param elem node
  5775. * @param findInAncestors whether finding testability in ancestors if testability was not found in
  5776. * current node
  5777. */
  5778. /**
  5779. * Find testability of a node in the Tree
  5780. * @param {?} elem node
  5781. * @param {?=} findInAncestors whether finding testability in ancestors if testability was not found in
  5782. * current node
  5783. * @return {?}
  5784. */
  5785. TestabilityRegistry.prototype.findTestabilityInTree = /**
  5786. * Find testability of a node in the Tree
  5787. * @param {?} elem node
  5788. * @param {?=} findInAncestors whether finding testability in ancestors if testability was not found in
  5789. * current node
  5790. * @return {?}
  5791. */
  5792. function (elem, findInAncestors) {
  5793. if (findInAncestors === void 0) { findInAncestors = true; }
  5794. return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors);
  5795. };
  5796. TestabilityRegistry.decorators = [
  5797. { type: Injectable },
  5798. ];
  5799. /** @nocollapse */
  5800. TestabilityRegistry.ctorParameters = function () { return []; };
  5801. return TestabilityRegistry;
  5802. }());
  5803. /**
  5804. * Adapter interface for retrieving the `Testability` service associated for a
  5805. * particular context.
  5806. *
  5807. * \@experimental Testability apis are primarily intended to be used by e2e test tool vendors like
  5808. * the Protractor team.
  5809. * @record
  5810. */
  5811. var _NoopGetTestability = /** @class */ (function () {
  5812. function _NoopGetTestability() {
  5813. }
  5814. /**
  5815. * @param {?} registry
  5816. * @return {?}
  5817. */
  5818. _NoopGetTestability.prototype.addToWindow = /**
  5819. * @param {?} registry
  5820. * @return {?}
  5821. */
  5822. function (registry) { };
  5823. /**
  5824. * @param {?} registry
  5825. * @param {?} elem
  5826. * @param {?} findInAncestors
  5827. * @return {?}
  5828. */
  5829. _NoopGetTestability.prototype.findTestabilityInTree = /**
  5830. * @param {?} registry
  5831. * @param {?} elem
  5832. * @param {?} findInAncestors
  5833. * @return {?}
  5834. */
  5835. function (registry, elem, findInAncestors) {
  5836. return null;
  5837. };
  5838. return _NoopGetTestability;
  5839. }());
  5840. /**
  5841. * Set the {\@link GetTestability} implementation used by the Angular testing framework.
  5842. * \@experimental
  5843. * @param {?} getter
  5844. * @return {?}
  5845. */
  5846. function setTestabilityGetter(getter) {
  5847. _testabilityGetter = getter;
  5848. }
  5849. var _testabilityGetter = new _NoopGetTestability();
  5850. /**
  5851. * @fileoverview added by tsickle
  5852. * @suppress {checkTypes} checked by tsc
  5853. */
  5854. /**
  5855. * @license
  5856. * Copyright Google Inc. All Rights Reserved.
  5857. *
  5858. * Use of this source code is governed by an MIT-style license that can be
  5859. * found in the LICENSE file at https://angular.io/license
  5860. */
  5861. var _devMode = true;
  5862. var _runModeLocked = false;
  5863. var _platform;
  5864. var ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');
  5865. /**
  5866. * Disable Angular's development mode, which turns off assertions and other
  5867. * checks within the framework.
  5868. *
  5869. * One important assertion this disables verifies that a change detection pass
  5870. * does not result in additional changes to any bindings (also known as
  5871. * unidirectional data flow).
  5872. *
  5873. * \@stable
  5874. * @return {?}
  5875. */
  5876. function enableProdMode() {
  5877. if (_runModeLocked) {
  5878. throw new Error('Cannot enable prod mode after platform setup.');
  5879. }
  5880. _devMode = false;
  5881. }
  5882. /**
  5883. * Returns whether Angular is in development mode. After called once,
  5884. * the value is locked and won't change any more.
  5885. *
  5886. * By default, this is true, unless a user calls `enableProdMode` before calling this.
  5887. *
  5888. * \@experimental APIs related to application bootstrap are currently under review.
  5889. * @return {?}
  5890. */
  5891. function isDevMode() {
  5892. _runModeLocked = true;
  5893. return _devMode;
  5894. }
  5895. /**
  5896. * A token for third-party components that can register themselves with NgProbe.
  5897. *
  5898. * \@experimental
  5899. */
  5900. var NgProbeToken = /** @class */ (function () {
  5901. function NgProbeToken(name, token) {
  5902. this.name = name;
  5903. this.token = token;
  5904. }
  5905. return NgProbeToken;
  5906. }());
  5907. /**
  5908. * Creates a platform.
  5909. * Platforms have to be eagerly created via this function.
  5910. *
  5911. * \@experimental APIs related to application bootstrap are currently under review.
  5912. * @param {?} injector
  5913. * @return {?}
  5914. */
  5915. function createPlatform(injector) {
  5916. if (_platform && !_platform.destroyed &&
  5917. !_platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
  5918. throw new Error('There can be only one platform. Destroy the previous one to create a new one.');
  5919. }
  5920. _platform = injector.get(PlatformRef);
  5921. var /** @type {?} */ inits = injector.get(PLATFORM_INITIALIZER, null);
  5922. if (inits)
  5923. inits.forEach(function (init) { return init(); });
  5924. return _platform;
  5925. }
  5926. /**
  5927. * Creates a factory for a platform
  5928. *
  5929. * \@experimental APIs related to application bootstrap are currently under review.
  5930. * @param {?} parentPlatformFactory
  5931. * @param {?} name
  5932. * @param {?=} providers
  5933. * @return {?}
  5934. */
  5935. function createPlatformFactory(parentPlatformFactory, name, providers) {
  5936. if (providers === void 0) { providers = []; }
  5937. var /** @type {?} */ desc = "Platform: " + name;
  5938. var /** @type {?} */ marker = new InjectionToken(desc);
  5939. return function (extraProviders) {
  5940. if (extraProviders === void 0) { extraProviders = []; }
  5941. var /** @type {?} */ platform = getPlatform();
  5942. if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
  5943. if (parentPlatformFactory) {
  5944. parentPlatformFactory(providers.concat(extraProviders).concat({ provide: marker, useValue: true }));
  5945. }
  5946. else {
  5947. var /** @type {?} */ injectedProviders = providers.concat(extraProviders).concat({ provide: marker, useValue: true });
  5948. createPlatform(Injector.create({ providers: injectedProviders, name: desc }));
  5949. }
  5950. }
  5951. return assertPlatform(marker);
  5952. };
  5953. }
  5954. /**
  5955. * Checks that there currently is a platform which contains the given token as a provider.
  5956. *
  5957. * \@experimental APIs related to application bootstrap are currently under review.
  5958. * @param {?} requiredToken
  5959. * @return {?}
  5960. */
  5961. function assertPlatform(requiredToken) {
  5962. var /** @type {?} */ platform = getPlatform();
  5963. if (!platform) {
  5964. throw new Error('No platform exists!');
  5965. }
  5966. if (!platform.injector.get(requiredToken, null)) {
  5967. throw new Error('A platform with a different configuration has been created. Please destroy it first.');
  5968. }
  5969. return platform;
  5970. }
  5971. /**
  5972. * Destroy the existing platform.
  5973. *
  5974. * \@experimental APIs related to application bootstrap are currently under review.
  5975. * @return {?}
  5976. */
  5977. function destroyPlatform() {
  5978. if (_platform && !_platform.destroyed) {
  5979. _platform.destroy();
  5980. }
  5981. }
  5982. /**
  5983. * Returns the current platform.
  5984. *
  5985. * \@experimental APIs related to application bootstrap are currently under review.
  5986. * @return {?}
  5987. */
  5988. function getPlatform() {
  5989. return _platform && !_platform.destroyed ? _platform : null;
  5990. }
  5991. /**
  5992. * Provides additional options to the bootstraping process.
  5993. *
  5994. * \@stable
  5995. * @record
  5996. */
  5997. /**
  5998. * The Angular platform is the entry point for Angular on a web page. Each page
  5999. * has exactly one platform, and services (such as reflection) which are common
  6000. * to every Angular application running on the page are bound in its scope.
  6001. *
  6002. * A page's platform is initialized implicitly when a platform is created via a platform factory
  6003. * (e.g. {\@link platformBrowser}), or explicitly by calling the {\@link createPlatform} function.
  6004. *
  6005. * \@stable
  6006. */
  6007. var PlatformRef = /** @class */ (function () {
  6008. /** @internal */
  6009. function PlatformRef(_injector) {
  6010. this._injector = _injector;
  6011. this._modules = [];
  6012. this._destroyListeners = [];
  6013. this._destroyed = false;
  6014. }
  6015. /**
  6016. * Creates an instance of an `@NgModule` for the given platform
  6017. * for offline compilation.
  6018. *
  6019. * ## Simple Example
  6020. *
  6021. * ```typescript
  6022. * my_module.ts:
  6023. *
  6024. * @NgModule({
  6025. * imports: [BrowserModule]
  6026. * })
  6027. * class MyModule {}
  6028. *
  6029. * main.ts:
  6030. * import {MyModuleNgFactory} from './my_module.ngfactory';
  6031. * import {platformBrowser} from '@angular/platform-browser';
  6032. *
  6033. * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
  6034. * ```
  6035. *
  6036. * @experimental APIs related to application bootstrap are currently under review.
  6037. */
  6038. /**
  6039. * Creates an instance of an `\@NgModule` for the given platform
  6040. * for offline compilation.
  6041. *
  6042. * ## Simple Example
  6043. *
  6044. * ```typescript
  6045. * my_module.ts:
  6046. *
  6047. * \@NgModule({
  6048. * imports: [BrowserModule]
  6049. * })
  6050. * class MyModule {}
  6051. *
  6052. * main.ts:
  6053. * import {MyModuleNgFactory} from './my_module.ngfactory';
  6054. * import {platformBrowser} from '\@angular/platform-browser';
  6055. *
  6056. * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
  6057. * ```
  6058. *
  6059. * \@experimental APIs related to application bootstrap are currently under review.
  6060. * @template M
  6061. * @param {?} moduleFactory
  6062. * @param {?=} options
  6063. * @return {?}
  6064. */
  6065. PlatformRef.prototype.bootstrapModuleFactory = /**
  6066. * Creates an instance of an `\@NgModule` for the given platform
  6067. * for offline compilation.
  6068. *
  6069. * ## Simple Example
  6070. *
  6071. * ```typescript
  6072. * my_module.ts:
  6073. *
  6074. * \@NgModule({
  6075. * imports: [BrowserModule]
  6076. * })
  6077. * class MyModule {}
  6078. *
  6079. * main.ts:
  6080. * import {MyModuleNgFactory} from './my_module.ngfactory';
  6081. * import {platformBrowser} from '\@angular/platform-browser';
  6082. *
  6083. * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);
  6084. * ```
  6085. *
  6086. * \@experimental APIs related to application bootstrap are currently under review.
  6087. * @template M
  6088. * @param {?} moduleFactory
  6089. * @param {?=} options
  6090. * @return {?}
  6091. */
  6092. function (moduleFactory, options) {
  6093. var _this = this;
  6094. // Note: We need to create the NgZone _before_ we instantiate the module,
  6095. // as instantiating the module creates some providers eagerly.
  6096. // So we create a mini parent injector that just contains the new NgZone and
  6097. // pass that as parent to the NgModuleFactory.
  6098. var /** @type {?} */ ngZoneOption = options ? options.ngZone : undefined;
  6099. var /** @type {?} */ ngZone = getNgZone(ngZoneOption);
  6100. var /** @type {?} */ providers = [{ provide: NgZone, useValue: ngZone }];
  6101. // Attention: Don't use ApplicationRef.run here,
  6102. // as we want to be sure that all possible constructor calls are inside `ngZone.run`!
  6103. return ngZone.run(function () {
  6104. var /** @type {?} */ ngZoneInjector = Injector.create({ providers: providers, parent: _this.injector, name: moduleFactory.moduleType.name });
  6105. var /** @type {?} */ moduleRef = /** @type {?} */ (moduleFactory.create(ngZoneInjector));
  6106. var /** @type {?} */ exceptionHandler = moduleRef.injector.get(ErrorHandler, null);
  6107. if (!exceptionHandler) {
  6108. throw new Error('No ErrorHandler. Is platform module (BrowserModule) included?');
  6109. }
  6110. moduleRef.onDestroy(function () { return remove(_this._modules, moduleRef); }); /** @type {?} */
  6111. ((ngZone)).runOutsideAngular(function () { return ((ngZone)).onError.subscribe({ next: function (error) { exceptionHandler.handleError(error); } }); });
  6112. return _callAndReportToErrorHandler(exceptionHandler, /** @type {?} */ ((ngZone)), function () {
  6113. var /** @type {?} */ initStatus = moduleRef.injector.get(ApplicationInitStatus);
  6114. initStatus.runInitializers();
  6115. return initStatus.donePromise.then(function () {
  6116. _this._moduleDoBootstrap(moduleRef);
  6117. return moduleRef;
  6118. });
  6119. });
  6120. });
  6121. };
  6122. /**
  6123. * Creates an instance of an `@NgModule` for a given platform using the given runtime compiler.
  6124. *
  6125. * ## Simple Example
  6126. *
  6127. * ```typescript
  6128. * @NgModule({
  6129. * imports: [BrowserModule]
  6130. * })
  6131. * class MyModule {}
  6132. *
  6133. * let moduleRef = platformBrowser().bootstrapModule(MyModule);
  6134. * ```
  6135. * @stable
  6136. */
  6137. /**
  6138. * Creates an instance of an `\@NgModule` for a given platform using the given runtime compiler.
  6139. *
  6140. * ## Simple Example
  6141. *
  6142. * ```typescript
  6143. * \@NgModule({
  6144. * imports: [BrowserModule]
  6145. * })
  6146. * class MyModule {}
  6147. *
  6148. * let moduleRef = platformBrowser().bootstrapModule(MyModule);
  6149. * ```
  6150. * \@stable
  6151. * @template M
  6152. * @param {?} moduleType
  6153. * @param {?=} compilerOptions
  6154. * @return {?}
  6155. */
  6156. PlatformRef.prototype.bootstrapModule = /**
  6157. * Creates an instance of an `\@NgModule` for a given platform using the given runtime compiler.
  6158. *
  6159. * ## Simple Example
  6160. *
  6161. * ```typescript
  6162. * \@NgModule({
  6163. * imports: [BrowserModule]
  6164. * })
  6165. * class MyModule {}
  6166. *
  6167. * let moduleRef = platformBrowser().bootstrapModule(MyModule);
  6168. * ```
  6169. * \@stable
  6170. * @template M
  6171. * @param {?} moduleType
  6172. * @param {?=} compilerOptions
  6173. * @return {?}
  6174. */
  6175. function (moduleType, compilerOptions) {
  6176. var _this = this;
  6177. if (compilerOptions === void 0) { compilerOptions = []; }
  6178. var /** @type {?} */ compilerFactory = this.injector.get(CompilerFactory);
  6179. var /** @type {?} */ options = optionsReducer({}, compilerOptions);
  6180. var /** @type {?} */ compiler = compilerFactory.createCompiler([options]);
  6181. return compiler.compileModuleAsync(moduleType)
  6182. .then(function (moduleFactory) { return _this.bootstrapModuleFactory(moduleFactory, options); });
  6183. };
  6184. /**
  6185. * @param {?} moduleRef
  6186. * @return {?}
  6187. */
  6188. PlatformRef.prototype._moduleDoBootstrap = /**
  6189. * @param {?} moduleRef
  6190. * @return {?}
  6191. */
  6192. function (moduleRef) {
  6193. var /** @type {?} */ appRef = /** @type {?} */ (moduleRef.injector.get(ApplicationRef));
  6194. if (moduleRef._bootstrapComponents.length > 0) {
  6195. moduleRef._bootstrapComponents.forEach(function (f) { return appRef.bootstrap(f); });
  6196. }
  6197. else if (moduleRef.instance.ngDoBootstrap) {
  6198. moduleRef.instance.ngDoBootstrap(appRef);
  6199. }
  6200. else {
  6201. throw new Error("The module " + stringify(moduleRef.instance.constructor) + " was bootstrapped, but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. " +
  6202. "Please define one of these.");
  6203. }
  6204. this._modules.push(moduleRef);
  6205. };
  6206. /**
  6207. * Register a listener to be called when the platform is disposed.
  6208. */
  6209. /**
  6210. * Register a listener to be called when the platform is disposed.
  6211. * @param {?} callback
  6212. * @return {?}
  6213. */
  6214. PlatformRef.prototype.onDestroy = /**
  6215. * Register a listener to be called when the platform is disposed.
  6216. * @param {?} callback
  6217. * @return {?}
  6218. */
  6219. function (callback) { this._destroyListeners.push(callback); };
  6220. Object.defineProperty(PlatformRef.prototype, "injector", {
  6221. /**
  6222. * Retrieve the platform {@link Injector}, which is the parent injector for
  6223. * every Angular application on the page and provides singleton providers.
  6224. */
  6225. get: /**
  6226. * Retrieve the platform {\@link Injector}, which is the parent injector for
  6227. * every Angular application on the page and provides singleton providers.
  6228. * @return {?}
  6229. */
  6230. function () { return this._injector; },
  6231. enumerable: true,
  6232. configurable: true
  6233. });
  6234. /**
  6235. * Destroy the Angular platform and all Angular applications on the page.
  6236. */
  6237. /**
  6238. * Destroy the Angular platform and all Angular applications on the page.
  6239. * @return {?}
  6240. */
  6241. PlatformRef.prototype.destroy = /**
  6242. * Destroy the Angular platform and all Angular applications on the page.
  6243. * @return {?}
  6244. */
  6245. function () {
  6246. if (this._destroyed) {
  6247. throw new Error('The platform has already been destroyed!');
  6248. }
  6249. this._modules.slice().forEach(function (module) { return module.destroy(); });
  6250. this._destroyListeners.forEach(function (listener) { return listener(); });
  6251. this._destroyed = true;
  6252. };
  6253. Object.defineProperty(PlatformRef.prototype, "destroyed", {
  6254. get: /**
  6255. * @return {?}
  6256. */
  6257. function () { return this._destroyed; },
  6258. enumerable: true,
  6259. configurable: true
  6260. });
  6261. PlatformRef.decorators = [
  6262. { type: Injectable },
  6263. ];
  6264. /** @nocollapse */
  6265. PlatformRef.ctorParameters = function () { return [
  6266. { type: Injector, },
  6267. ]; };
  6268. return PlatformRef;
  6269. }());
  6270. /**
  6271. * @param {?=} ngZoneOption
  6272. * @return {?}
  6273. */
  6274. function getNgZone(ngZoneOption) {
  6275. var /** @type {?} */ ngZone;
  6276. if (ngZoneOption === 'noop') {
  6277. ngZone = new NoopNgZone();
  6278. }
  6279. else {
  6280. ngZone = (ngZoneOption === 'zone.js' ? undefined : ngZoneOption) ||
  6281. new NgZone({ enableLongStackTrace: isDevMode() });
  6282. }
  6283. return ngZone;
  6284. }
  6285. /**
  6286. * @param {?} errorHandler
  6287. * @param {?} ngZone
  6288. * @param {?} callback
  6289. * @return {?}
  6290. */
  6291. function _callAndReportToErrorHandler(errorHandler, ngZone, callback) {
  6292. try {
  6293. var /** @type {?} */ result = callback();
  6294. if (isPromise(result)) {
  6295. return result.catch(function (e) {
  6296. ngZone.runOutsideAngular(function () { return errorHandler.handleError(e); });
  6297. // rethrow as the exception handler might not do it
  6298. throw e;
  6299. });
  6300. }
  6301. return result;
  6302. }
  6303. catch (/** @type {?} */ e) {
  6304. ngZone.runOutsideAngular(function () { return errorHandler.handleError(e); });
  6305. // rethrow as the exception handler might not do it
  6306. throw e;
  6307. }
  6308. }
  6309. /**
  6310. * @template T
  6311. * @param {?} dst
  6312. * @param {?} objs
  6313. * @return {?}
  6314. */
  6315. function optionsReducer(dst, objs) {
  6316. if (Array.isArray(objs)) {
  6317. dst = objs.reduce(optionsReducer, dst);
  6318. }
  6319. else {
  6320. dst = Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, dst, (/** @type {?} */ (objs)));
  6321. }
  6322. return dst;
  6323. }
  6324. /**
  6325. * A reference to an Angular application running on a page.
  6326. *
  6327. * \@stable
  6328. */
  6329. var ApplicationRef = /** @class */ (function () {
  6330. /** @internal */
  6331. function ApplicationRef(_zone, _console, _injector, _exceptionHandler, _componentFactoryResolver, _initStatus) {
  6332. var _this = this;
  6333. this._zone = _zone;
  6334. this._console = _console;
  6335. this._injector = _injector;
  6336. this._exceptionHandler = _exceptionHandler;
  6337. this._componentFactoryResolver = _componentFactoryResolver;
  6338. this._initStatus = _initStatus;
  6339. this._bootstrapListeners = [];
  6340. this._views = [];
  6341. this._runningTick = false;
  6342. this._enforceNoNewChanges = false;
  6343. this._stable = true;
  6344. /**
  6345. * Get a list of component types registered to this application.
  6346. * This list is populated even before the component is created.
  6347. */
  6348. this.componentTypes = [];
  6349. /**
  6350. * Get a list of components registered to this application.
  6351. */
  6352. this.components = [];
  6353. this._enforceNoNewChanges = isDevMode();
  6354. this._zone.onMicrotaskEmpty.subscribe({ next: function () { _this._zone.run(function () { _this.tick(); }); } });
  6355. var /** @type {?} */ isCurrentlyStable = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__["Observable"](function (observer) {
  6356. _this._stable = _this._zone.isStable && !_this._zone.hasPendingMacrotasks &&
  6357. !_this._zone.hasPendingMicrotasks;
  6358. _this._zone.runOutsideAngular(function () {
  6359. observer.next(_this._stable);
  6360. observer.complete();
  6361. });
  6362. });
  6363. var /** @type {?} */ isStable = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__["Observable"](function (observer) {
  6364. // Create the subscription to onStable outside the Angular Zone so that
  6365. // the callback is run outside the Angular Zone.
  6366. var /** @type {?} */ stableSub;
  6367. _this._zone.runOutsideAngular(function () {
  6368. stableSub = _this._zone.onStable.subscribe(function () {
  6369. NgZone.assertNotInAngularZone();
  6370. // Check whether there are no pending macro/micro tasks in the next tick
  6371. // to allow for NgZone to update the state.
  6372. scheduleMicroTask(function () {
  6373. if (!_this._stable && !_this._zone.hasPendingMacrotasks &&
  6374. !_this._zone.hasPendingMicrotasks) {
  6375. _this._stable = true;
  6376. observer.next(true);
  6377. }
  6378. });
  6379. });
  6380. });
  6381. var /** @type {?} */ unstableSub = _this._zone.onUnstable.subscribe(function () {
  6382. NgZone.assertInAngularZone();
  6383. if (_this._stable) {
  6384. _this._stable = false;
  6385. _this._zone.runOutsideAngular(function () { observer.next(false); });
  6386. }
  6387. });
  6388. return function () {
  6389. stableSub.unsubscribe();
  6390. unstableSub.unsubscribe();
  6391. };
  6392. });
  6393. (/** @type {?} */ (this)).isStable =
  6394. Object(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_merge__["merge"])(isCurrentlyStable, __WEBPACK_IMPORTED_MODULE_3_rxjs_operator_share__["share"].call(isStable));
  6395. }
  6396. /**
  6397. * Bootstrap a new component at the root level of the application.
  6398. *
  6399. * ### Bootstrap process
  6400. *
  6401. * When bootstrapping a new root component into an application, Angular mounts the
  6402. * specified application component onto DOM elements identified by the [componentType]'s
  6403. * selector and kicks off automatic change detection to finish initializing the component.
  6404. *
  6405. * Optionally, a component can be mounted onto a DOM element that does not match the
  6406. * [componentType]'s selector.
  6407. *
  6408. * ### Example
  6409. * {@example core/ts/platform/platform.ts region='longform'}
  6410. */
  6411. /**
  6412. * Bootstrap a new component at the root level of the application.
  6413. *
  6414. * ### Bootstrap process
  6415. *
  6416. * When bootstrapping a new root component into an application, Angular mounts the
  6417. * specified application component onto DOM elements identified by the [componentType]'s
  6418. * selector and kicks off automatic change detection to finish initializing the component.
  6419. *
  6420. * Optionally, a component can be mounted onto a DOM element that does not match the
  6421. * [componentType]'s selector.
  6422. *
  6423. * ### Example
  6424. * {\@example core/ts/platform/platform.ts region='longform'}
  6425. * @template C
  6426. * @param {?} componentOrFactory
  6427. * @param {?=} rootSelectorOrNode
  6428. * @return {?}
  6429. */
  6430. ApplicationRef.prototype.bootstrap = /**
  6431. * Bootstrap a new component at the root level of the application.
  6432. *
  6433. * ### Bootstrap process
  6434. *
  6435. * When bootstrapping a new root component into an application, Angular mounts the
  6436. * specified application component onto DOM elements identified by the [componentType]'s
  6437. * selector and kicks off automatic change detection to finish initializing the component.
  6438. *
  6439. * Optionally, a component can be mounted onto a DOM element that does not match the
  6440. * [componentType]'s selector.
  6441. *
  6442. * ### Example
  6443. * {\@example core/ts/platform/platform.ts region='longform'}
  6444. * @template C
  6445. * @param {?} componentOrFactory
  6446. * @param {?=} rootSelectorOrNode
  6447. * @return {?}
  6448. */
  6449. function (componentOrFactory, rootSelectorOrNode) {
  6450. var _this = this;
  6451. if (!this._initStatus.done) {
  6452. throw new Error('Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.');
  6453. }
  6454. var /** @type {?} */ componentFactory;
  6455. if (componentOrFactory instanceof ComponentFactory) {
  6456. componentFactory = componentOrFactory;
  6457. }
  6458. else {
  6459. componentFactory =
  6460. /** @type {?} */ ((this._componentFactoryResolver.resolveComponentFactory(componentOrFactory)));
  6461. }
  6462. this.componentTypes.push(componentFactory.componentType);
  6463. // Create a factory associated with the current module if it's not bound to some other
  6464. var /** @type {?} */ ngModule = componentFactory instanceof ComponentFactoryBoundToModule ?
  6465. null :
  6466. this._injector.get(NgModuleRef);
  6467. var /** @type {?} */ selectorOrNode = rootSelectorOrNode || componentFactory.selector;
  6468. var /** @type {?} */ compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);
  6469. compRef.onDestroy(function () { _this._unloadComponent(compRef); });
  6470. var /** @type {?} */ testability = compRef.injector.get(Testability, null);
  6471. if (testability) {
  6472. compRef.injector.get(TestabilityRegistry)
  6473. .registerApplication(compRef.location.nativeElement, testability);
  6474. }
  6475. this._loadComponent(compRef);
  6476. if (isDevMode()) {
  6477. this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode.");
  6478. }
  6479. return compRef;
  6480. };
  6481. /**
  6482. * Invoke this method to explicitly process change detection and its side-effects.
  6483. *
  6484. * In development mode, `tick()` also performs a second change detection cycle to ensure that no
  6485. * further changes are detected. If additional changes are picked up during this second cycle,
  6486. * bindings in the app have side-effects that cannot be resolved in a single change detection
  6487. * pass.
  6488. * In this case, Angular throws an error, since an Angular application can only have one change
  6489. * detection pass during which all change detection must complete.
  6490. */
  6491. /**
  6492. * Invoke this method to explicitly process change detection and its side-effects.
  6493. *
  6494. * In development mode, `tick()` also performs a second change detection cycle to ensure that no
  6495. * further changes are detected. If additional changes are picked up during this second cycle,
  6496. * bindings in the app have side-effects that cannot be resolved in a single change detection
  6497. * pass.
  6498. * In this case, Angular throws an error, since an Angular application can only have one change
  6499. * detection pass during which all change detection must complete.
  6500. * @return {?}
  6501. */
  6502. ApplicationRef.prototype.tick = /**
  6503. * Invoke this method to explicitly process change detection and its side-effects.
  6504. *
  6505. * In development mode, `tick()` also performs a second change detection cycle to ensure that no
  6506. * further changes are detected. If additional changes are picked up during this second cycle,
  6507. * bindings in the app have side-effects that cannot be resolved in a single change detection
  6508. * pass.
  6509. * In this case, Angular throws an error, since an Angular application can only have one change
  6510. * detection pass during which all change detection must complete.
  6511. * @return {?}
  6512. */
  6513. function () {
  6514. var _this = this;
  6515. if (this._runningTick) {
  6516. throw new Error('ApplicationRef.tick is called recursively');
  6517. }
  6518. var /** @type {?} */ scope = ApplicationRef._tickScope();
  6519. try {
  6520. this._runningTick = true;
  6521. this._views.forEach(function (view) { return view.detectChanges(); });
  6522. if (this._enforceNoNewChanges) {
  6523. this._views.forEach(function (view) { return view.checkNoChanges(); });
  6524. }
  6525. }
  6526. catch (/** @type {?} */ e) {
  6527. // Attention: Don't rethrow as it could cancel subscriptions to Observables!
  6528. this._zone.runOutsideAngular(function () { return _this._exceptionHandler.handleError(e); });
  6529. }
  6530. finally {
  6531. this._runningTick = false;
  6532. wtfLeave(scope);
  6533. }
  6534. };
  6535. /**
  6536. * Attaches a view so that it will be dirty checked.
  6537. * The view will be automatically detached when it is destroyed.
  6538. * This will throw if the view is already attached to a ViewContainer.
  6539. */
  6540. /**
  6541. * Attaches a view so that it will be dirty checked.
  6542. * The view will be automatically detached when it is destroyed.
  6543. * This will throw if the view is already attached to a ViewContainer.
  6544. * @param {?} viewRef
  6545. * @return {?}
  6546. */
  6547. ApplicationRef.prototype.attachView = /**
  6548. * Attaches a view so that it will be dirty checked.
  6549. * The view will be automatically detached when it is destroyed.
  6550. * This will throw if the view is already attached to a ViewContainer.
  6551. * @param {?} viewRef
  6552. * @return {?}
  6553. */
  6554. function (viewRef) {
  6555. var /** @type {?} */ view = (/** @type {?} */ (viewRef));
  6556. this._views.push(view);
  6557. view.attachToAppRef(this);
  6558. };
  6559. /**
  6560. * Detaches a view from dirty checking again.
  6561. */
  6562. /**
  6563. * Detaches a view from dirty checking again.
  6564. * @param {?} viewRef
  6565. * @return {?}
  6566. */
  6567. ApplicationRef.prototype.detachView = /**
  6568. * Detaches a view from dirty checking again.
  6569. * @param {?} viewRef
  6570. * @return {?}
  6571. */
  6572. function (viewRef) {
  6573. var /** @type {?} */ view = (/** @type {?} */ (viewRef));
  6574. remove(this._views, view);
  6575. view.detachFromAppRef();
  6576. };
  6577. /**
  6578. * @param {?} componentRef
  6579. * @return {?}
  6580. */
  6581. ApplicationRef.prototype._loadComponent = /**
  6582. * @param {?} componentRef
  6583. * @return {?}
  6584. */
  6585. function (componentRef) {
  6586. this.attachView(componentRef.hostView);
  6587. this.tick();
  6588. this.components.push(componentRef);
  6589. // Get the listeners lazily to prevent DI cycles.
  6590. var /** @type {?} */ listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []).concat(this._bootstrapListeners);
  6591. listeners.forEach(function (listener) { return listener(componentRef); });
  6592. };
  6593. /**
  6594. * @param {?} componentRef
  6595. * @return {?}
  6596. */
  6597. ApplicationRef.prototype._unloadComponent = /**
  6598. * @param {?} componentRef
  6599. * @return {?}
  6600. */
  6601. function (componentRef) {
  6602. this.detachView(componentRef.hostView);
  6603. remove(this.components, componentRef);
  6604. };
  6605. /** @internal */
  6606. /**
  6607. * \@internal
  6608. * @return {?}
  6609. */
  6610. ApplicationRef.prototype.ngOnDestroy = /**
  6611. * \@internal
  6612. * @return {?}
  6613. */
  6614. function () {
  6615. // TODO(alxhub): Dispose of the NgZone.
  6616. this._views.slice().forEach(function (view) { return view.destroy(); });
  6617. };
  6618. Object.defineProperty(ApplicationRef.prototype, "viewCount", {
  6619. /**
  6620. * Returns the number of attached views.
  6621. */
  6622. get: /**
  6623. * Returns the number of attached views.
  6624. * @return {?}
  6625. */
  6626. function () { return this._views.length; },
  6627. enumerable: true,
  6628. configurable: true
  6629. });
  6630. /**
  6631. * \@internal
  6632. */
  6633. ApplicationRef._tickScope = wtfCreateScope('ApplicationRef#tick()');
  6634. ApplicationRef.decorators = [
  6635. { type: Injectable },
  6636. ];
  6637. /** @nocollapse */
  6638. ApplicationRef.ctorParameters = function () { return [
  6639. { type: NgZone, },
  6640. { type: Console, },
  6641. { type: Injector, },
  6642. { type: ErrorHandler, },
  6643. { type: ComponentFactoryResolver, },
  6644. { type: ApplicationInitStatus, },
  6645. ]; };
  6646. return ApplicationRef;
  6647. }());
  6648. /**
  6649. * @template T
  6650. * @param {?} list
  6651. * @param {?} el
  6652. * @return {?}
  6653. */
  6654. function remove(list, el) {
  6655. var /** @type {?} */ index = list.indexOf(el);
  6656. if (index > -1) {
  6657. list.splice(index, 1);
  6658. }
  6659. }
  6660. /**
  6661. * @fileoverview added by tsickle
  6662. * @suppress {checkTypes} checked by tsc
  6663. */
  6664. /**
  6665. * @license
  6666. * Copyright Google Inc. All Rights Reserved.
  6667. *
  6668. * Use of this source code is governed by an MIT-style license that can be
  6669. * found in the LICENSE file at https://angular.io/license
  6670. */
  6671. /**
  6672. * @fileoverview added by tsickle
  6673. * @suppress {checkTypes} checked by tsc
  6674. */
  6675. /**
  6676. * @license
  6677. * Copyright Google Inc. All Rights Reserved.
  6678. *
  6679. * Use of this source code is governed by an MIT-style license that can be
  6680. * found in the LICENSE file at https://angular.io/license
  6681. */
  6682. /**
  6683. * @deprecated Use `RendererType2` (and `Renderer2`) instead.
  6684. */
  6685. var RenderComponentType = /** @class */ (function () {
  6686. function RenderComponentType(id, templateUrl, slotCount, encapsulation, styles, animations) {
  6687. this.id = id;
  6688. this.templateUrl = templateUrl;
  6689. this.slotCount = slotCount;
  6690. this.encapsulation = encapsulation;
  6691. this.styles = styles;
  6692. this.animations = animations;
  6693. }
  6694. return RenderComponentType;
  6695. }());
  6696. /**
  6697. * @deprecated Debug info is handeled internally in the view engine now.
  6698. * @abstract
  6699. */
  6700. var RenderDebugInfo = /** @class */ (function () {
  6701. function RenderDebugInfo() {
  6702. }
  6703. return RenderDebugInfo;
  6704. }());
  6705. /**
  6706. * @deprecated Use the `Renderer2` instead.
  6707. * @record
  6708. */
  6709. /**
  6710. * @deprecated Use the `Renderer2` instead.
  6711. * @abstract
  6712. */
  6713. var Renderer = /** @class */ (function () {
  6714. function Renderer() {
  6715. }
  6716. return Renderer;
  6717. }());
  6718. var Renderer2Interceptor = new InjectionToken('Renderer2Interceptor');
  6719. /**
  6720. * Injectable service that provides a low-level interface for modifying the UI.
  6721. *
  6722. * Use this service to bypass Angular's templating and make custom UI changes that can't be
  6723. * expressed declaratively. For example if you need to set a property or an attribute whose name is
  6724. * not statically known, use {\@link Renderer#setElementProperty setElementProperty} or
  6725. * {\@link Renderer#setElementAttribute setElementAttribute} respectively.
  6726. *
  6727. * If you are implementing a custom renderer, you must implement this interface.
  6728. *
  6729. * The default Renderer implementation is `DomRenderer`. Also available is `WebWorkerRenderer`.
  6730. *
  6731. * @deprecated Use `RendererFactory2` instead.
  6732. * @abstract
  6733. */
  6734. var RootRenderer = /** @class */ (function () {
  6735. function RootRenderer() {
  6736. }
  6737. return RootRenderer;
  6738. }());
  6739. /**
  6740. * \@experimental
  6741. * @record
  6742. */
  6743. /**
  6744. * \@experimental
  6745. * @abstract
  6746. */
  6747. var RendererFactory2 = /** @class */ (function () {
  6748. function RendererFactory2() {
  6749. }
  6750. return RendererFactory2;
  6751. }());
  6752. /** @enum {number} */
  6753. var RendererStyleFlags2 = {
  6754. Important: 1,
  6755. DashCase: 2,
  6756. };
  6757. RendererStyleFlags2[RendererStyleFlags2.Important] = "Important";
  6758. RendererStyleFlags2[RendererStyleFlags2.DashCase] = "DashCase";
  6759. /**
  6760. * \@experimental
  6761. * @abstract
  6762. */
  6763. var Renderer2 = /** @class */ (function () {
  6764. function Renderer2() {
  6765. }
  6766. return Renderer2;
  6767. }());
  6768. /**
  6769. * @fileoverview added by tsickle
  6770. * @suppress {checkTypes} checked by tsc
  6771. */
  6772. /**
  6773. * @license
  6774. * Copyright Google Inc. All Rights Reserved.
  6775. *
  6776. * Use of this source code is governed by an MIT-style license that can be
  6777. * found in the LICENSE file at https://angular.io/license
  6778. */
  6779. /**
  6780. * @fileoverview added by tsickle
  6781. * @suppress {checkTypes} checked by tsc
  6782. */
  6783. /**
  6784. * @license
  6785. * Copyright Google Inc. All Rights Reserved.
  6786. *
  6787. * Use of this source code is governed by an MIT-style license that can be
  6788. * found in the LICENSE file at https://angular.io/license
  6789. */
  6790. /**
  6791. * A wrapper around a native element inside of a View.
  6792. *
  6793. * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM
  6794. * element.
  6795. *
  6796. * \@security Permitting direct access to the DOM can make your application more vulnerable to
  6797. * XSS attacks. Carefully review any use of `ElementRef` in your code. For more detail, see the
  6798. * [Security Guide](http://g.co/ng/security).
  6799. *
  6800. * \@stable
  6801. */
  6802. var ElementRef = /** @class */ (function () {
  6803. function ElementRef(nativeElement) {
  6804. this.nativeElement = nativeElement;
  6805. }
  6806. return ElementRef;
  6807. }());
  6808. /**
  6809. * @fileoverview added by tsickle
  6810. * @suppress {checkTypes} checked by tsc
  6811. */
  6812. /**
  6813. * @license
  6814. * Copyright Google Inc. All Rights Reserved.
  6815. *
  6816. * Use of this source code is governed by an MIT-style license that can be
  6817. * found in the LICENSE file at https://angular.io/license
  6818. */
  6819. /**
  6820. * Used to load ng module factories.
  6821. * \@stable
  6822. * @abstract
  6823. */
  6824. var NgModuleFactoryLoader = /** @class */ (function () {
  6825. function NgModuleFactoryLoader() {
  6826. }
  6827. return NgModuleFactoryLoader;
  6828. }());
  6829. var moduleFactories = new Map();
  6830. /**
  6831. * Registers a loaded module. Should only be called from generated NgModuleFactory code.
  6832. * \@experimental
  6833. * @param {?} id
  6834. * @param {?} factory
  6835. * @return {?}
  6836. */
  6837. function registerModuleFactory(id, factory) {
  6838. var /** @type {?} */ existing = moduleFactories.get(id);
  6839. if (existing) {
  6840. throw new Error("Duplicate module registered for " + id + " - " + existing.moduleType.name + " vs " + factory.moduleType.name);
  6841. }
  6842. moduleFactories.set(id, factory);
  6843. }
  6844. /**
  6845. * @return {?}
  6846. */
  6847. /**
  6848. * Returns the NgModuleFactory with the given id, if it exists and has been loaded.
  6849. * Factories for modules that do not specify an `id` cannot be retrieved. Throws if the module
  6850. * cannot be found.
  6851. * \@experimental
  6852. * @param {?} id
  6853. * @return {?}
  6854. */
  6855. function getModuleFactory(id) {
  6856. var /** @type {?} */ factory = moduleFactories.get(id);
  6857. if (!factory)
  6858. throw new Error("No module with ID " + id + " loaded");
  6859. return factory;
  6860. }
  6861. /**
  6862. * @fileoverview added by tsickle
  6863. * @suppress {checkTypes} checked by tsc
  6864. */
  6865. /**
  6866. * @license
  6867. * Copyright Google Inc. All Rights Reserved.
  6868. *
  6869. * Use of this source code is governed by an MIT-style license that can be
  6870. * found in the LICENSE file at https://angular.io/license
  6871. */
  6872. /**
  6873. * An unmodifiable list of items that Angular keeps up to date when the state
  6874. * of the application changes.
  6875. *
  6876. * The type of object that {\@link ViewChildren}, {\@link ContentChildren}, and {\@link QueryList}
  6877. * provide.
  6878. *
  6879. * Implements an iterable interface, therefore it can be used in both ES6
  6880. * javascript `for (var i of items)` loops as well as in Angular templates with
  6881. * `*ngFor="let i of myList"`.
  6882. *
  6883. * Changes can be observed by subscribing to the changes `Observable`.
  6884. *
  6885. * NOTE: In the future this class will implement an `Observable` interface.
  6886. *
  6887. * ### Example ([live demo](http://plnkr.co/edit/RX8sJnQYl9FWuSCWme5z?p=preview))
  6888. * ```typescript
  6889. * \@Component({...})
  6890. * class Container {
  6891. * \@ViewChildren(Item) items:QueryList<Item>;
  6892. * }
  6893. * ```
  6894. * \@stable
  6895. * @template T
  6896. */
  6897. var QueryList = /** @class */ (function () {
  6898. function QueryList() {
  6899. this.dirty = true;
  6900. this._results = [];
  6901. this.changes = new EventEmitter();
  6902. this.length = 0;
  6903. }
  6904. /**
  6905. * See
  6906. * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
  6907. */
  6908. /**
  6909. * See
  6910. * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
  6911. * @template U
  6912. * @param {?} fn
  6913. * @return {?}
  6914. */
  6915. QueryList.prototype.map = /**
  6916. * See
  6917. * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
  6918. * @template U
  6919. * @param {?} fn
  6920. * @return {?}
  6921. */
  6922. function (fn) { return this._results.map(fn); };
  6923. /**
  6924. * See
  6925. * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
  6926. */
  6927. /**
  6928. * See
  6929. * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
  6930. * @param {?} fn
  6931. * @return {?}
  6932. */
  6933. QueryList.prototype.filter = /**
  6934. * See
  6935. * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
  6936. * @param {?} fn
  6937. * @return {?}
  6938. */
  6939. function (fn) {
  6940. return this._results.filter(fn);
  6941. };
  6942. /**
  6943. * See
  6944. * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
  6945. */
  6946. /**
  6947. * See
  6948. * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
  6949. * @param {?} fn
  6950. * @return {?}
  6951. */
  6952. QueryList.prototype.find = /**
  6953. * See
  6954. * [Array.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
  6955. * @param {?} fn
  6956. * @return {?}
  6957. */
  6958. function (fn) {
  6959. return this._results.find(fn);
  6960. };
  6961. /**
  6962. * See
  6963. * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
  6964. */
  6965. /**
  6966. * See
  6967. * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
  6968. * @template U
  6969. * @param {?} fn
  6970. * @param {?} init
  6971. * @return {?}
  6972. */
  6973. QueryList.prototype.reduce = /**
  6974. * See
  6975. * [Array.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
  6976. * @template U
  6977. * @param {?} fn
  6978. * @param {?} init
  6979. * @return {?}
  6980. */
  6981. function (fn, init) {
  6982. return this._results.reduce(fn, init);
  6983. };
  6984. /**
  6985. * See
  6986. * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
  6987. */
  6988. /**
  6989. * See
  6990. * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
  6991. * @param {?} fn
  6992. * @return {?}
  6993. */
  6994. QueryList.prototype.forEach = /**
  6995. * See
  6996. * [Array.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)
  6997. * @param {?} fn
  6998. * @return {?}
  6999. */
  7000. function (fn) { this._results.forEach(fn); };
  7001. /**
  7002. * See
  7003. * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
  7004. */
  7005. /**
  7006. * See
  7007. * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
  7008. * @param {?} fn
  7009. * @return {?}
  7010. */
  7011. QueryList.prototype.some = /**
  7012. * See
  7013. * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)
  7014. * @param {?} fn
  7015. * @return {?}
  7016. */
  7017. function (fn) {
  7018. return this._results.some(fn);
  7019. };
  7020. /**
  7021. * @return {?}
  7022. */
  7023. QueryList.prototype.toArray = /**
  7024. * @return {?}
  7025. */
  7026. function () { return this._results.slice(); };
  7027. /**
  7028. * @return {?}
  7029. */
  7030. QueryList.prototype[getSymbolIterator()] = /**
  7031. * @return {?}
  7032. */
  7033. function () { return (/** @type {?} */ (this._results))[getSymbolIterator()](); };
  7034. /**
  7035. * @return {?}
  7036. */
  7037. QueryList.prototype.toString = /**
  7038. * @return {?}
  7039. */
  7040. function () { return this._results.toString(); };
  7041. /**
  7042. * @param {?} res
  7043. * @return {?}
  7044. */
  7045. QueryList.prototype.reset = /**
  7046. * @param {?} res
  7047. * @return {?}
  7048. */
  7049. function (res) {
  7050. this._results = flatten(res);
  7051. (/** @type {?} */ (this)).dirty = false;
  7052. (/** @type {?} */ (this)).length = this._results.length;
  7053. (/** @type {?} */ (this)).last = this._results[this.length - 1];
  7054. (/** @type {?} */ (this)).first = this._results[0];
  7055. };
  7056. /**
  7057. * @return {?}
  7058. */
  7059. QueryList.prototype.notifyOnChanges = /**
  7060. * @return {?}
  7061. */
  7062. function () { (/** @type {?} */ (this.changes)).emit(this); };
  7063. /** internal */
  7064. /**
  7065. * internal
  7066. * @return {?}
  7067. */
  7068. QueryList.prototype.setDirty = /**
  7069. * internal
  7070. * @return {?}
  7071. */
  7072. function () { (/** @type {?} */ (this)).dirty = true; };
  7073. /** internal */
  7074. /**
  7075. * internal
  7076. * @return {?}
  7077. */
  7078. QueryList.prototype.destroy = /**
  7079. * internal
  7080. * @return {?}
  7081. */
  7082. function () {
  7083. (/** @type {?} */ (this.changes)).complete();
  7084. (/** @type {?} */ (this.changes)).unsubscribe();
  7085. };
  7086. return QueryList;
  7087. }());
  7088. /**
  7089. * @template T
  7090. * @param {?} list
  7091. * @return {?}
  7092. */
  7093. function flatten(list) {
  7094. return list.reduce(function (flat, item) {
  7095. var /** @type {?} */ flatItem = Array.isArray(item) ? flatten(item) : item;
  7096. return (/** @type {?} */ (flat)).concat(flatItem);
  7097. }, []);
  7098. }
  7099. /**
  7100. * @fileoverview added by tsickle
  7101. * @suppress {checkTypes} checked by tsc
  7102. */
  7103. /**
  7104. * @license
  7105. * Copyright Google Inc. All Rights Reserved.
  7106. *
  7107. * Use of this source code is governed by an MIT-style license that can be
  7108. * found in the LICENSE file at https://angular.io/license
  7109. */
  7110. var _SEPARATOR = '#';
  7111. var FACTORY_CLASS_SUFFIX = 'NgFactory';
  7112. /**
  7113. * Configuration for SystemJsNgModuleLoader.
  7114. * token.
  7115. *
  7116. * \@experimental
  7117. * @abstract
  7118. */
  7119. var SystemJsNgModuleLoaderConfig = /** @class */ (function () {
  7120. function SystemJsNgModuleLoaderConfig() {
  7121. }
  7122. return SystemJsNgModuleLoaderConfig;
  7123. }());
  7124. var DEFAULT_CONFIG = {
  7125. factoryPathPrefix: '',
  7126. factoryPathSuffix: '.ngfactory',
  7127. };
  7128. /**
  7129. * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory
  7130. * \@experimental
  7131. */
  7132. var SystemJsNgModuleLoader = /** @class */ (function () {
  7133. function SystemJsNgModuleLoader(_compiler, config) {
  7134. this._compiler = _compiler;
  7135. this._config = config || DEFAULT_CONFIG;
  7136. }
  7137. /**
  7138. * @param {?} path
  7139. * @return {?}
  7140. */
  7141. SystemJsNgModuleLoader.prototype.load = /**
  7142. * @param {?} path
  7143. * @return {?}
  7144. */
  7145. function (path) {
  7146. var /** @type {?} */ offlineMode = this._compiler instanceof Compiler;
  7147. return offlineMode ? this.loadFactory(path) : this.loadAndCompile(path);
  7148. };
  7149. /**
  7150. * @param {?} path
  7151. * @return {?}
  7152. */
  7153. SystemJsNgModuleLoader.prototype.loadAndCompile = /**
  7154. * @param {?} path
  7155. * @return {?}
  7156. */
  7157. function (path) {
  7158. var _this = this;
  7159. var _a = path.split(_SEPARATOR), module = _a[0], exportName = _a[1];
  7160. if (exportName === undefined) {
  7161. exportName = 'default';
  7162. }
  7163. return __webpack_require__(164)(module)
  7164. .then(function (module) { return module[exportName]; })
  7165. .then(function (type) { return checkNotEmpty(type, module, exportName); })
  7166. .then(function (type) { return _this._compiler.compileModuleAsync(type); });
  7167. };
  7168. /**
  7169. * @param {?} path
  7170. * @return {?}
  7171. */
  7172. SystemJsNgModuleLoader.prototype.loadFactory = /**
  7173. * @param {?} path
  7174. * @return {?}
  7175. */
  7176. function (path) {
  7177. var _a = path.split(_SEPARATOR), module = _a[0], exportName = _a[1];
  7178. var /** @type {?} */ factoryClassSuffix = FACTORY_CLASS_SUFFIX;
  7179. if (exportName === undefined) {
  7180. exportName = 'default';
  7181. factoryClassSuffix = '';
  7182. }
  7183. return __webpack_require__(164)(this._config.factoryPathPrefix + module + this._config.factoryPathSuffix)
  7184. .then(function (module) { return module[exportName + factoryClassSuffix]; })
  7185. .then(function (factory) { return checkNotEmpty(factory, module, exportName); });
  7186. };
  7187. SystemJsNgModuleLoader.decorators = [
  7188. { type: Injectable },
  7189. ];
  7190. /** @nocollapse */
  7191. SystemJsNgModuleLoader.ctorParameters = function () { return [
  7192. { type: Compiler, },
  7193. { type: SystemJsNgModuleLoaderConfig, decorators: [{ type: Optional },] },
  7194. ]; };
  7195. return SystemJsNgModuleLoader;
  7196. }());
  7197. /**
  7198. * @param {?} value
  7199. * @param {?} modulePath
  7200. * @param {?} exportName
  7201. * @return {?}
  7202. */
  7203. function checkNotEmpty(value, modulePath, exportName) {
  7204. if (!value) {
  7205. throw new Error("Cannot find '" + exportName + "' in '" + modulePath + "'");
  7206. }
  7207. return value;
  7208. }
  7209. /**
  7210. * @fileoverview added by tsickle
  7211. * @suppress {checkTypes} checked by tsc
  7212. */
  7213. /**
  7214. * @license
  7215. * Copyright Google Inc. All Rights Reserved.
  7216. *
  7217. * Use of this source code is governed by an MIT-style license that can be
  7218. * found in the LICENSE file at https://angular.io/license
  7219. */
  7220. /**
  7221. * Represents an Embedded Template that can be used to instantiate Embedded Views.
  7222. *
  7223. * You can access a `TemplateRef`, in two ways. Via a directive placed on a `<ng-template>` element
  7224. * (or directive prefixed with `*`) and have the `TemplateRef` for this Embedded View injected into
  7225. * the constructor of the directive using the `TemplateRef` Token. Alternatively you can query for
  7226. * the `TemplateRef` from a Component or a Directive via {\@link Query}.
  7227. *
  7228. * To instantiate Embedded Views based on a Template, use {\@link ViewContainerRef#
  7229. * createEmbeddedView}, which will create the View and attach it to the View Container.
  7230. * \@stable
  7231. * @abstract
  7232. * @template C
  7233. */
  7234. var TemplateRef = /** @class */ (function () {
  7235. function TemplateRef() {
  7236. }
  7237. return TemplateRef;
  7238. }());
  7239. /**
  7240. * @fileoverview added by tsickle
  7241. * @suppress {checkTypes} checked by tsc
  7242. */
  7243. /**
  7244. * @license
  7245. * Copyright Google Inc. All Rights Reserved.
  7246. *
  7247. * Use of this source code is governed by an MIT-style license that can be
  7248. * found in the LICENSE file at https://angular.io/license
  7249. */
  7250. /**
  7251. * Represents a container where one or more Views can be attached.
  7252. *
  7253. * The container can contain two kinds of Views. Host Views, created by instantiating a
  7254. * {\@link Component} via {\@link #createComponent}, and Embedded Views, created by instantiating an
  7255. * {\@link TemplateRef Embedded Template} via {\@link #createEmbeddedView}.
  7256. *
  7257. * The location of the View Container within the containing View is specified by the Anchor
  7258. * `element`. Each View Container can have only one Anchor Element and each Anchor Element can only
  7259. * have a single View Container.
  7260. *
  7261. * Root elements of Views attached to this container become siblings of the Anchor Element in
  7262. * the Rendered View.
  7263. *
  7264. * To access a `ViewContainerRef` of an Element, you can either place a {\@link Directive} injected
  7265. * with `ViewContainerRef` on the Element, or you obtain it via a {\@link ViewChild} query.
  7266. * \@stable
  7267. * @abstract
  7268. */
  7269. var ViewContainerRef = /** @class */ (function () {
  7270. function ViewContainerRef() {
  7271. }
  7272. return ViewContainerRef;
  7273. }());
  7274. /**
  7275. * @fileoverview added by tsickle
  7276. * @suppress {checkTypes} checked by tsc
  7277. */
  7278. /**
  7279. * @license
  7280. * Copyright Google Inc. All Rights Reserved.
  7281. *
  7282. * Use of this source code is governed by an MIT-style license that can be
  7283. * found in the LICENSE file at https://angular.io/license
  7284. */
  7285. /**
  7286. * \@stable
  7287. * @abstract
  7288. */
  7289. var ChangeDetectorRef = /** @class */ (function () {
  7290. function ChangeDetectorRef() {
  7291. }
  7292. return ChangeDetectorRef;
  7293. }());
  7294. /**
  7295. * @fileoverview added by tsickle
  7296. * @suppress {checkTypes} checked by tsc
  7297. */
  7298. /**
  7299. * @license
  7300. * Copyright Google Inc. All Rights Reserved.
  7301. *
  7302. * Use of this source code is governed by an MIT-style license that can be
  7303. * found in the LICENSE file at https://angular.io/license
  7304. */
  7305. /**
  7306. * \@stable
  7307. * @abstract
  7308. */
  7309. var ViewRef = /** @class */ (function (_super) {
  7310. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ViewRef, _super);
  7311. function ViewRef() {
  7312. return _super !== null && _super.apply(this, arguments) || this;
  7313. }
  7314. return ViewRef;
  7315. }(ChangeDetectorRef));
  7316. /**
  7317. * Represents an Angular View.
  7318. *
  7319. * <!-- TODO: move the next two paragraphs to the dev guide -->
  7320. * A View is a fundamental building block of the application UI. It is the smallest grouping of
  7321. * Elements which are created and destroyed together.
  7322. *
  7323. * Properties of elements in a View can change, but the structure (number and order) of elements in
  7324. * a View cannot. Changing the structure of Elements can only be done by inserting, moving or
  7325. * removing nested Views via a {\@link ViewContainerRef}. Each View can contain many View Containers.
  7326. * <!-- /TODO -->
  7327. *
  7328. * ### Example
  7329. *
  7330. * Given this template...
  7331. *
  7332. * ```
  7333. * Count: {{items.length}}
  7334. * <ul>
  7335. * <li *ngFor="let item of items">{{item}}</li>
  7336. * </ul>
  7337. * ```
  7338. *
  7339. * We have two {\@link TemplateRef}s:
  7340. *
  7341. * Outer {\@link TemplateRef}:
  7342. * ```
  7343. * Count: {{items.length}}
  7344. * <ul>
  7345. * <ng-template ngFor let-item [ngForOf]="items"></ng-template>
  7346. * </ul>
  7347. * ```
  7348. *
  7349. * Inner {\@link TemplateRef}:
  7350. * ```
  7351. * <li>{{item}}</li>
  7352. * ```
  7353. *
  7354. * Notice that the original template is broken down into two separate {\@link TemplateRef}s.
  7355. *
  7356. * The outer/inner {\@link TemplateRef}s are then assembled into views like so:
  7357. *
  7358. * ```
  7359. * <!-- ViewRef: outer-0 -->
  7360. * Count: 2
  7361. * <ul>
  7362. * <ng-template view-container-ref></ng-template>
  7363. * <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->
  7364. * <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->
  7365. * </ul>
  7366. * <!-- /ViewRef: outer-0 -->
  7367. * ```
  7368. * \@experimental
  7369. * @abstract
  7370. * @template C
  7371. */
  7372. var EmbeddedViewRef = /** @class */ (function (_super) {
  7373. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(EmbeddedViewRef, _super);
  7374. function EmbeddedViewRef() {
  7375. return _super !== null && _super.apply(this, arguments) || this;
  7376. }
  7377. return EmbeddedViewRef;
  7378. }(ViewRef));
  7379. /**
  7380. * @record
  7381. */
  7382. /**
  7383. * @fileoverview added by tsickle
  7384. * @suppress {checkTypes} checked by tsc
  7385. */
  7386. /**
  7387. * @license
  7388. * Copyright Google Inc. All Rights Reserved.
  7389. *
  7390. * Use of this source code is governed by an MIT-style license that can be
  7391. * found in the LICENSE file at https://angular.io/license
  7392. */
  7393. /**
  7394. * @fileoverview added by tsickle
  7395. * @suppress {checkTypes} checked by tsc
  7396. */
  7397. /**
  7398. * @license
  7399. * Copyright Google Inc. All Rights Reserved.
  7400. *
  7401. * Use of this source code is governed by an MIT-style license that can be
  7402. * found in the LICENSE file at https://angular.io/license
  7403. */
  7404. var EventListener = /** @class */ (function () {
  7405. function EventListener(name, callback) {
  7406. this.name = name;
  7407. this.callback = callback;
  7408. }
  7409. return EventListener;
  7410. }());
  7411. /**
  7412. * \@experimental All debugging apis are currently experimental.
  7413. */
  7414. var DebugNode = /** @class */ (function () {
  7415. function DebugNode(nativeNode, parent, _debugContext) {
  7416. this._debugContext = _debugContext;
  7417. this.nativeNode = nativeNode;
  7418. if (parent && parent instanceof DebugElement) {
  7419. parent.addChild(this);
  7420. }
  7421. else {
  7422. this.parent = null;
  7423. }
  7424. this.listeners = [];
  7425. }
  7426. Object.defineProperty(DebugNode.prototype, "injector", {
  7427. get: /**
  7428. * @return {?}
  7429. */
  7430. function () { return this._debugContext.injector; },
  7431. enumerable: true,
  7432. configurable: true
  7433. });
  7434. Object.defineProperty(DebugNode.prototype, "componentInstance", {
  7435. get: /**
  7436. * @return {?}
  7437. */
  7438. function () { return this._debugContext.component; },
  7439. enumerable: true,
  7440. configurable: true
  7441. });
  7442. Object.defineProperty(DebugNode.prototype, "context", {
  7443. get: /**
  7444. * @return {?}
  7445. */
  7446. function () { return this._debugContext.context; },
  7447. enumerable: true,
  7448. configurable: true
  7449. });
  7450. Object.defineProperty(DebugNode.prototype, "references", {
  7451. get: /**
  7452. * @return {?}
  7453. */
  7454. function () { return this._debugContext.references; },
  7455. enumerable: true,
  7456. configurable: true
  7457. });
  7458. Object.defineProperty(DebugNode.prototype, "providerTokens", {
  7459. get: /**
  7460. * @return {?}
  7461. */
  7462. function () { return this._debugContext.providerTokens; },
  7463. enumerable: true,
  7464. configurable: true
  7465. });
  7466. return DebugNode;
  7467. }());
  7468. /**
  7469. * \@experimental All debugging apis are currently experimental.
  7470. */
  7471. var DebugElement = /** @class */ (function (_super) {
  7472. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(DebugElement, _super);
  7473. function DebugElement(nativeNode, parent, _debugContext) {
  7474. var _this = _super.call(this, nativeNode, parent, _debugContext) || this;
  7475. _this.properties = {};
  7476. _this.attributes = {};
  7477. _this.classes = {};
  7478. _this.styles = {};
  7479. _this.childNodes = [];
  7480. _this.nativeElement = nativeNode;
  7481. return _this;
  7482. }
  7483. /**
  7484. * @param {?} child
  7485. * @return {?}
  7486. */
  7487. DebugElement.prototype.addChild = /**
  7488. * @param {?} child
  7489. * @return {?}
  7490. */
  7491. function (child) {
  7492. if (child) {
  7493. this.childNodes.push(child);
  7494. child.parent = this;
  7495. }
  7496. };
  7497. /**
  7498. * @param {?} child
  7499. * @return {?}
  7500. */
  7501. DebugElement.prototype.removeChild = /**
  7502. * @param {?} child
  7503. * @return {?}
  7504. */
  7505. function (child) {
  7506. var /** @type {?} */ childIndex = this.childNodes.indexOf(child);
  7507. if (childIndex !== -1) {
  7508. child.parent = null;
  7509. this.childNodes.splice(childIndex, 1);
  7510. }
  7511. };
  7512. /**
  7513. * @param {?} child
  7514. * @param {?} newChildren
  7515. * @return {?}
  7516. */
  7517. DebugElement.prototype.insertChildrenAfter = /**
  7518. * @param {?} child
  7519. * @param {?} newChildren
  7520. * @return {?}
  7521. */
  7522. function (child, newChildren) {
  7523. var _this = this;
  7524. var /** @type {?} */ siblingIndex = this.childNodes.indexOf(child);
  7525. if (siblingIndex !== -1) {
  7526. (_a = this.childNodes).splice.apply(_a, [siblingIndex + 1, 0].concat(newChildren));
  7527. newChildren.forEach(function (c) {
  7528. if (c.parent) {
  7529. c.parent.removeChild(c);
  7530. }
  7531. c.parent = _this;
  7532. });
  7533. }
  7534. var _a;
  7535. };
  7536. /**
  7537. * @param {?} refChild
  7538. * @param {?} newChild
  7539. * @return {?}
  7540. */
  7541. DebugElement.prototype.insertBefore = /**
  7542. * @param {?} refChild
  7543. * @param {?} newChild
  7544. * @return {?}
  7545. */
  7546. function (refChild, newChild) {
  7547. var /** @type {?} */ refIndex = this.childNodes.indexOf(refChild);
  7548. if (refIndex === -1) {
  7549. this.addChild(newChild);
  7550. }
  7551. else {
  7552. if (newChild.parent) {
  7553. newChild.parent.removeChild(newChild);
  7554. }
  7555. newChild.parent = this;
  7556. this.childNodes.splice(refIndex, 0, newChild);
  7557. }
  7558. };
  7559. /**
  7560. * @param {?} predicate
  7561. * @return {?}
  7562. */
  7563. DebugElement.prototype.query = /**
  7564. * @param {?} predicate
  7565. * @return {?}
  7566. */
  7567. function (predicate) {
  7568. var /** @type {?} */ results = this.queryAll(predicate);
  7569. return results[0] || null;
  7570. };
  7571. /**
  7572. * @param {?} predicate
  7573. * @return {?}
  7574. */
  7575. DebugElement.prototype.queryAll = /**
  7576. * @param {?} predicate
  7577. * @return {?}
  7578. */
  7579. function (predicate) {
  7580. var /** @type {?} */ matches = [];
  7581. _queryElementChildren(this, predicate, matches);
  7582. return matches;
  7583. };
  7584. /**
  7585. * @param {?} predicate
  7586. * @return {?}
  7587. */
  7588. DebugElement.prototype.queryAllNodes = /**
  7589. * @param {?} predicate
  7590. * @return {?}
  7591. */
  7592. function (predicate) {
  7593. var /** @type {?} */ matches = [];
  7594. _queryNodeChildren(this, predicate, matches);
  7595. return matches;
  7596. };
  7597. Object.defineProperty(DebugElement.prototype, "children", {
  7598. get: /**
  7599. * @return {?}
  7600. */
  7601. function () {
  7602. return /** @type {?} */ (this.childNodes.filter(function (node) { return node instanceof DebugElement; }));
  7603. },
  7604. enumerable: true,
  7605. configurable: true
  7606. });
  7607. /**
  7608. * @param {?} eventName
  7609. * @param {?} eventObj
  7610. * @return {?}
  7611. */
  7612. DebugElement.prototype.triggerEventHandler = /**
  7613. * @param {?} eventName
  7614. * @param {?} eventObj
  7615. * @return {?}
  7616. */
  7617. function (eventName, eventObj) {
  7618. this.listeners.forEach(function (listener) {
  7619. if (listener.name == eventName) {
  7620. listener.callback(eventObj);
  7621. }
  7622. });
  7623. };
  7624. return DebugElement;
  7625. }(DebugNode));
  7626. /**
  7627. * \@experimental
  7628. * @param {?} debugEls
  7629. * @return {?}
  7630. */
  7631. function asNativeElements(debugEls) {
  7632. return debugEls.map(function (el) { return el.nativeElement; });
  7633. }
  7634. /**
  7635. * @param {?} element
  7636. * @param {?} predicate
  7637. * @param {?} matches
  7638. * @return {?}
  7639. */
  7640. function _queryElementChildren(element, predicate, matches) {
  7641. element.childNodes.forEach(function (node) {
  7642. if (node instanceof DebugElement) {
  7643. if (predicate(node)) {
  7644. matches.push(node);
  7645. }
  7646. _queryElementChildren(node, predicate, matches);
  7647. }
  7648. });
  7649. }
  7650. /**
  7651. * @param {?} parentNode
  7652. * @param {?} predicate
  7653. * @param {?} matches
  7654. * @return {?}
  7655. */
  7656. function _queryNodeChildren(parentNode, predicate, matches) {
  7657. if (parentNode instanceof DebugElement) {
  7658. parentNode.childNodes.forEach(function (node) {
  7659. if (predicate(node)) {
  7660. matches.push(node);
  7661. }
  7662. if (node instanceof DebugElement) {
  7663. _queryNodeChildren(node, predicate, matches);
  7664. }
  7665. });
  7666. }
  7667. }
  7668. // Need to keep the nodes in a global Map so that multiple angular apps are supported.
  7669. var _nativeNodeToDebugNode = new Map();
  7670. /**
  7671. * \@experimental
  7672. * @param {?} nativeNode
  7673. * @return {?}
  7674. */
  7675. function getDebugNode(nativeNode) {
  7676. return _nativeNodeToDebugNode.get(nativeNode) || null;
  7677. }
  7678. /**
  7679. * @return {?}
  7680. */
  7681. /**
  7682. * @param {?} node
  7683. * @return {?}
  7684. */
  7685. function indexDebugNode(node) {
  7686. _nativeNodeToDebugNode.set(node.nativeNode, node);
  7687. }
  7688. /**
  7689. * @param {?} node
  7690. * @return {?}
  7691. */
  7692. function removeDebugNodeFromIndex(node) {
  7693. _nativeNodeToDebugNode.delete(node.nativeNode);
  7694. }
  7695. /**
  7696. * A boolean-valued function over a value, possibly including context information
  7697. * regarding that value's position in an array.
  7698. *
  7699. * \@experimental All debugging apis are currently experimental.
  7700. * @record
  7701. * @template T
  7702. */
  7703. /**
  7704. * @fileoverview added by tsickle
  7705. * @suppress {checkTypes} checked by tsc
  7706. */
  7707. /**
  7708. * @license
  7709. * Copyright Google Inc. All Rights Reserved.
  7710. *
  7711. * Use of this source code is governed by an MIT-style license that can be
  7712. * found in the LICENSE file at https://angular.io/license
  7713. */
  7714. /**
  7715. * @param {?} a
  7716. * @param {?} b
  7717. * @return {?}
  7718. */
  7719. function devModeEqual(a, b) {
  7720. var /** @type {?} */ isListLikeIterableA = isListLikeIterable(a);
  7721. var /** @type {?} */ isListLikeIterableB = isListLikeIterable(b);
  7722. if (isListLikeIterableA && isListLikeIterableB) {
  7723. return areIterablesEqual(a, b, devModeEqual);
  7724. }
  7725. else {
  7726. var /** @type {?} */ isAObject = a && (typeof a === 'object' || typeof a === 'function');
  7727. var /** @type {?} */ isBObject = b && (typeof b === 'object' || typeof b === 'function');
  7728. if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {
  7729. return true;
  7730. }
  7731. else {
  7732. return looseIdentical(a, b);
  7733. }
  7734. }
  7735. }
  7736. /**
  7737. * Indicates that the result of a {\@link Pipe} transformation has changed even though the
  7738. * reference has not changed.
  7739. *
  7740. * Wrapped values are unwrapped automatically during the change detection, and the unwrapped value
  7741. * is stored.
  7742. *
  7743. * Example:
  7744. *
  7745. * ```
  7746. * if (this._latestValue === this._latestReturnedValue) {
  7747. * return this._latestReturnedValue;
  7748. * } else {
  7749. * this._latestReturnedValue = this._latestValue;
  7750. * return WrappedValue.wrap(this._latestValue); // this will force update
  7751. * }
  7752. * ```
  7753. * \@stable
  7754. */
  7755. var WrappedValue = /** @class */ (function () {
  7756. function WrappedValue(value) {
  7757. this.wrapped = value;
  7758. }
  7759. /** Creates a wrapped value. */
  7760. /**
  7761. * Creates a wrapped value.
  7762. * @param {?} value
  7763. * @return {?}
  7764. */
  7765. WrappedValue.wrap = /**
  7766. * Creates a wrapped value.
  7767. * @param {?} value
  7768. * @return {?}
  7769. */
  7770. function (value) { return new WrappedValue(value); };
  7771. /**
  7772. * Returns the underlying value of a wrapped value.
  7773. * Returns the given `value` when it is not wrapped.
  7774. **/
  7775. /**
  7776. * Returns the underlying value of a wrapped value.
  7777. * Returns the given `value` when it is not wrapped.
  7778. *
  7779. * @param {?} value
  7780. * @return {?}
  7781. */
  7782. WrappedValue.unwrap = /**
  7783. * Returns the underlying value of a wrapped value.
  7784. * Returns the given `value` when it is not wrapped.
  7785. *
  7786. * @param {?} value
  7787. * @return {?}
  7788. */
  7789. function (value) { return WrappedValue.isWrapped(value) ? value.wrapped : value; };
  7790. /** Returns true if `value` is a wrapped value. */
  7791. /**
  7792. * Returns true if `value` is a wrapped value.
  7793. * @param {?} value
  7794. * @return {?}
  7795. */
  7796. WrappedValue.isWrapped = /**
  7797. * Returns true if `value` is a wrapped value.
  7798. * @param {?} value
  7799. * @return {?}
  7800. */
  7801. function (value) { return value instanceof WrappedValue; };
  7802. return WrappedValue;
  7803. }());
  7804. /**
  7805. * Represents a basic change from a previous to a new value.
  7806. * \@stable
  7807. */
  7808. var SimpleChange = /** @class */ (function () {
  7809. function SimpleChange(previousValue, currentValue, firstChange) {
  7810. this.previousValue = previousValue;
  7811. this.currentValue = currentValue;
  7812. this.firstChange = firstChange;
  7813. }
  7814. /**
  7815. * Check whether the new value is the first value assigned.
  7816. */
  7817. /**
  7818. * Check whether the new value is the first value assigned.
  7819. * @return {?}
  7820. */
  7821. SimpleChange.prototype.isFirstChange = /**
  7822. * Check whether the new value is the first value assigned.
  7823. * @return {?}
  7824. */
  7825. function () { return this.firstChange; };
  7826. return SimpleChange;
  7827. }());
  7828. /**
  7829. * @param {?} obj
  7830. * @return {?}
  7831. */
  7832. function isListLikeIterable(obj) {
  7833. if (!isJsObject(obj))
  7834. return false;
  7835. return Array.isArray(obj) ||
  7836. (!(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]
  7837. // JS Map are iterables but return entries as [k, v]
  7838. getSymbolIterator() in obj); // JS Iterable have a Symbol.iterator prop
  7839. }
  7840. /**
  7841. * @param {?} a
  7842. * @param {?} b
  7843. * @param {?} comparator
  7844. * @return {?}
  7845. */
  7846. function areIterablesEqual(a, b, comparator) {
  7847. var /** @type {?} */ iterator1 = a[getSymbolIterator()]();
  7848. var /** @type {?} */ iterator2 = b[getSymbolIterator()]();
  7849. while (true) {
  7850. var /** @type {?} */ item1 = iterator1.next();
  7851. var /** @type {?} */ item2 = iterator2.next();
  7852. if (item1.done && item2.done)
  7853. return true;
  7854. if (item1.done || item2.done)
  7855. return false;
  7856. if (!comparator(item1.value, item2.value))
  7857. return false;
  7858. }
  7859. }
  7860. /**
  7861. * @param {?} obj
  7862. * @param {?} fn
  7863. * @return {?}
  7864. */
  7865. function iterateListLike(obj, fn) {
  7866. if (Array.isArray(obj)) {
  7867. for (var /** @type {?} */ i = 0; i < obj.length; i++) {
  7868. fn(obj[i]);
  7869. }
  7870. }
  7871. else {
  7872. var /** @type {?} */ iterator = obj[getSymbolIterator()]();
  7873. var /** @type {?} */ item = void 0;
  7874. while (!((item = iterator.next()).done)) {
  7875. fn(item.value);
  7876. }
  7877. }
  7878. }
  7879. /**
  7880. * @param {?} o
  7881. * @return {?}
  7882. */
  7883. function isJsObject(o) {
  7884. return o !== null && (typeof o === 'function' || typeof o === 'object');
  7885. }
  7886. /**
  7887. * @fileoverview added by tsickle
  7888. * @suppress {checkTypes} checked by tsc
  7889. */
  7890. /**
  7891. * @license
  7892. * Copyright Google Inc. All Rights Reserved.
  7893. *
  7894. * Use of this source code is governed by an MIT-style license that can be
  7895. * found in the LICENSE file at https://angular.io/license
  7896. */
  7897. var DefaultIterableDifferFactory = /** @class */ (function () {
  7898. function DefaultIterableDifferFactory() {
  7899. }
  7900. /**
  7901. * @param {?} obj
  7902. * @return {?}
  7903. */
  7904. DefaultIterableDifferFactory.prototype.supports = /**
  7905. * @param {?} obj
  7906. * @return {?}
  7907. */
  7908. function (obj) { return isListLikeIterable(obj); };
  7909. /**
  7910. * @template V
  7911. * @param {?=} trackByFn
  7912. * @return {?}
  7913. */
  7914. DefaultIterableDifferFactory.prototype.create = /**
  7915. * @template V
  7916. * @param {?=} trackByFn
  7917. * @return {?}
  7918. */
  7919. function (trackByFn) {
  7920. return new DefaultIterableDiffer(trackByFn);
  7921. };
  7922. return DefaultIterableDifferFactory;
  7923. }());
  7924. var trackByIdentity = function (index, item) { return item; };
  7925. /**
  7926. * @deprecated v4.0.0 - Should not be part of public API.
  7927. * @template V
  7928. */
  7929. var DefaultIterableDiffer = /** @class */ (function () {
  7930. function DefaultIterableDiffer(trackByFn) {
  7931. this.length = 0;
  7932. this._linkedRecords = null;
  7933. this._unlinkedRecords = null;
  7934. this._previousItHead = null;
  7935. this._itHead = null;
  7936. this._itTail = null;
  7937. this._additionsHead = null;
  7938. this._additionsTail = null;
  7939. this._movesHead = null;
  7940. this._movesTail = null;
  7941. this._removalsHead = null;
  7942. this._removalsTail = null;
  7943. this._identityChangesHead = null;
  7944. this._identityChangesTail = null;
  7945. this._trackByFn = trackByFn || trackByIdentity;
  7946. }
  7947. /**
  7948. * @param {?} fn
  7949. * @return {?}
  7950. */
  7951. DefaultIterableDiffer.prototype.forEachItem = /**
  7952. * @param {?} fn
  7953. * @return {?}
  7954. */
  7955. function (fn) {
  7956. var /** @type {?} */ record;
  7957. for (record = this._itHead; record !== null; record = record._next) {
  7958. fn(record);
  7959. }
  7960. };
  7961. /**
  7962. * @param {?} fn
  7963. * @return {?}
  7964. */
  7965. DefaultIterableDiffer.prototype.forEachOperation = /**
  7966. * @param {?} fn
  7967. * @return {?}
  7968. */
  7969. function (fn) {
  7970. var /** @type {?} */ nextIt = this._itHead;
  7971. var /** @type {?} */ nextRemove = this._removalsHead;
  7972. var /** @type {?} */ addRemoveOffset = 0;
  7973. var /** @type {?} */ moveOffsets = null;
  7974. while (nextIt || nextRemove) {
  7975. // Figure out which is the next record to process
  7976. // Order: remove, add, move
  7977. var /** @type {?} */ record = !nextRemove ||
  7978. nextIt && /** @type {?} */ ((nextIt.currentIndex)) < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? /** @type {?} */
  7979. ((nextIt)) :
  7980. nextRemove;
  7981. var /** @type {?} */ adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);
  7982. var /** @type {?} */ currentIndex = record.currentIndex;
  7983. // consume the item, and adjust the addRemoveOffset and update moveDistance if necessary
  7984. if (record === nextRemove) {
  7985. addRemoveOffset--;
  7986. nextRemove = nextRemove._nextRemoved;
  7987. }
  7988. else {
  7989. nextIt = /** @type {?} */ ((nextIt))._next;
  7990. if (record.previousIndex == null) {
  7991. addRemoveOffset++;
  7992. }
  7993. else {
  7994. // INVARIANT: currentIndex < previousIndex
  7995. if (!moveOffsets)
  7996. moveOffsets = [];
  7997. var /** @type {?} */ localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;
  7998. var /** @type {?} */ localCurrentIndex = /** @type {?} */ ((currentIndex)) - addRemoveOffset;
  7999. if (localMovePreviousIndex != localCurrentIndex) {
  8000. for (var /** @type {?} */ i = 0; i < localMovePreviousIndex; i++) {
  8001. var /** @type {?} */ offset = i < moveOffsets.length ? moveOffsets[i] : (moveOffsets[i] = 0);
  8002. var /** @type {?} */ index = offset + i;
  8003. if (localCurrentIndex <= index && index < localMovePreviousIndex) {
  8004. moveOffsets[i] = offset + 1;
  8005. }
  8006. }
  8007. var /** @type {?} */ previousIndex = record.previousIndex;
  8008. moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;
  8009. }
  8010. }
  8011. }
  8012. if (adjPreviousIndex !== currentIndex) {
  8013. fn(record, adjPreviousIndex, currentIndex);
  8014. }
  8015. }
  8016. };
  8017. /**
  8018. * @param {?} fn
  8019. * @return {?}
  8020. */
  8021. DefaultIterableDiffer.prototype.forEachPreviousItem = /**
  8022. * @param {?} fn
  8023. * @return {?}
  8024. */
  8025. function (fn) {
  8026. var /** @type {?} */ record;
  8027. for (record = this._previousItHead; record !== null; record = record._nextPrevious) {
  8028. fn(record);
  8029. }
  8030. };
  8031. /**
  8032. * @param {?} fn
  8033. * @return {?}
  8034. */
  8035. DefaultIterableDiffer.prototype.forEachAddedItem = /**
  8036. * @param {?} fn
  8037. * @return {?}
  8038. */
  8039. function (fn) {
  8040. var /** @type {?} */ record;
  8041. for (record = this._additionsHead; record !== null; record = record._nextAdded) {
  8042. fn(record);
  8043. }
  8044. };
  8045. /**
  8046. * @param {?} fn
  8047. * @return {?}
  8048. */
  8049. DefaultIterableDiffer.prototype.forEachMovedItem = /**
  8050. * @param {?} fn
  8051. * @return {?}
  8052. */
  8053. function (fn) {
  8054. var /** @type {?} */ record;
  8055. for (record = this._movesHead; record !== null; record = record._nextMoved) {
  8056. fn(record);
  8057. }
  8058. };
  8059. /**
  8060. * @param {?} fn
  8061. * @return {?}
  8062. */
  8063. DefaultIterableDiffer.prototype.forEachRemovedItem = /**
  8064. * @param {?} fn
  8065. * @return {?}
  8066. */
  8067. function (fn) {
  8068. var /** @type {?} */ record;
  8069. for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
  8070. fn(record);
  8071. }
  8072. };
  8073. /**
  8074. * @param {?} fn
  8075. * @return {?}
  8076. */
  8077. DefaultIterableDiffer.prototype.forEachIdentityChange = /**
  8078. * @param {?} fn
  8079. * @return {?}
  8080. */
  8081. function (fn) {
  8082. var /** @type {?} */ record;
  8083. for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {
  8084. fn(record);
  8085. }
  8086. };
  8087. /**
  8088. * @param {?} collection
  8089. * @return {?}
  8090. */
  8091. DefaultIterableDiffer.prototype.diff = /**
  8092. * @param {?} collection
  8093. * @return {?}
  8094. */
  8095. function (collection) {
  8096. if (collection == null)
  8097. collection = [];
  8098. if (!isListLikeIterable(collection)) {
  8099. throw new Error("Error trying to diff '" + stringify(collection) + "'. Only arrays and iterables are allowed");
  8100. }
  8101. if (this.check(collection)) {
  8102. return this;
  8103. }
  8104. else {
  8105. return null;
  8106. }
  8107. };
  8108. /**
  8109. * @return {?}
  8110. */
  8111. DefaultIterableDiffer.prototype.onDestroy = /**
  8112. * @return {?}
  8113. */
  8114. function () { };
  8115. /**
  8116. * @param {?} collection
  8117. * @return {?}
  8118. */
  8119. DefaultIterableDiffer.prototype.check = /**
  8120. * @param {?} collection
  8121. * @return {?}
  8122. */
  8123. function (collection) {
  8124. var _this = this;
  8125. this._reset();
  8126. var /** @type {?} */ record = this._itHead;
  8127. var /** @type {?} */ mayBeDirty = false;
  8128. var /** @type {?} */ index;
  8129. var /** @type {?} */ item;
  8130. var /** @type {?} */ itemTrackBy;
  8131. if (Array.isArray(collection)) {
  8132. (/** @type {?} */ (this)).length = collection.length;
  8133. for (var /** @type {?} */ index_1 = 0; index_1 < this.length; index_1++) {
  8134. item = collection[index_1];
  8135. itemTrackBy = this._trackByFn(index_1, item);
  8136. if (record === null || !looseIdentical(record.trackById, itemTrackBy)) {
  8137. record = this._mismatch(record, item, itemTrackBy, index_1);
  8138. mayBeDirty = true;
  8139. }
  8140. else {
  8141. if (mayBeDirty) {
  8142. // TODO(misko): can we limit this to duplicates only?
  8143. record = this._verifyReinsertion(record, item, itemTrackBy, index_1);
  8144. }
  8145. if (!looseIdentical(record.item, item))
  8146. this._addIdentityChange(record, item);
  8147. }
  8148. record = record._next;
  8149. }
  8150. }
  8151. else {
  8152. index = 0;
  8153. iterateListLike(collection, function (item) {
  8154. itemTrackBy = _this._trackByFn(index, item);
  8155. if (record === null || !looseIdentical(record.trackById, itemTrackBy)) {
  8156. record = _this._mismatch(record, item, itemTrackBy, index);
  8157. mayBeDirty = true;
  8158. }
  8159. else {
  8160. if (mayBeDirty) {
  8161. // TODO(misko): can we limit this to duplicates only?
  8162. record = _this._verifyReinsertion(record, item, itemTrackBy, index);
  8163. }
  8164. if (!looseIdentical(record.item, item))
  8165. _this._addIdentityChange(record, item);
  8166. }
  8167. record = record._next;
  8168. index++;
  8169. });
  8170. (/** @type {?} */ (this)).length = index;
  8171. }
  8172. this._truncate(record);
  8173. (/** @type {?} */ (this)).collection = collection;
  8174. return this.isDirty;
  8175. };
  8176. Object.defineProperty(DefaultIterableDiffer.prototype, "isDirty", {
  8177. /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity
  8178. * changes.
  8179. */
  8180. get: /**
  8181. * @return {?}
  8182. */
  8183. function () {
  8184. return this._additionsHead !== null || this._movesHead !== null ||
  8185. this._removalsHead !== null || this._identityChangesHead !== null;
  8186. },
  8187. enumerable: true,
  8188. configurable: true
  8189. });
  8190. /**
  8191. * Reset the state of the change objects to show no changes. This means set previousKey to
  8192. * currentKey, and clear all of the queues (additions, moves, removals).
  8193. * Set the previousIndexes of moved and added items to their currentIndexes
  8194. * Reset the list of additions, moves and removals
  8195. *
  8196. * @internal
  8197. */
  8198. /**
  8199. * Reset the state of the change objects to show no changes. This means set previousKey to
  8200. * currentKey, and clear all of the queues (additions, moves, removals).
  8201. * Set the previousIndexes of moved and added items to their currentIndexes
  8202. * Reset the list of additions, moves and removals
  8203. *
  8204. * \@internal
  8205. * @return {?}
  8206. */
  8207. DefaultIterableDiffer.prototype._reset = /**
  8208. * Reset the state of the change objects to show no changes. This means set previousKey to
  8209. * currentKey, and clear all of the queues (additions, moves, removals).
  8210. * Set the previousIndexes of moved and added items to their currentIndexes
  8211. * Reset the list of additions, moves and removals
  8212. *
  8213. * \@internal
  8214. * @return {?}
  8215. */
  8216. function () {
  8217. if (this.isDirty) {
  8218. var /** @type {?} */ record = void 0;
  8219. var /** @type {?} */ nextRecord = void 0;
  8220. for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {
  8221. record._nextPrevious = record._next;
  8222. }
  8223. for (record = this._additionsHead; record !== null; record = record._nextAdded) {
  8224. record.previousIndex = record.currentIndex;
  8225. }
  8226. this._additionsHead = this._additionsTail = null;
  8227. for (record = this._movesHead; record !== null; record = nextRecord) {
  8228. record.previousIndex = record.currentIndex;
  8229. nextRecord = record._nextMoved;
  8230. }
  8231. this._movesHead = this._movesTail = null;
  8232. this._removalsHead = this._removalsTail = null;
  8233. this._identityChangesHead = this._identityChangesTail = null;
  8234. // TODO(vicb): when assert gets supported
  8235. // assert(!this.isDirty);
  8236. }
  8237. };
  8238. /**
  8239. * This is the core function which handles differences between collections.
  8240. *
  8241. * - `record` is the record which we saw at this position last time. If null then it is a new
  8242. * item.
  8243. * - `item` is the current item in the collection
  8244. * - `index` is the position of the item in the collection
  8245. *
  8246. * @internal
  8247. */
  8248. /**
  8249. * This is the core function which handles differences between collections.
  8250. *
  8251. * - `record` is the record which we saw at this position last time. If null then it is a new
  8252. * item.
  8253. * - `item` is the current item in the collection
  8254. * - `index` is the position of the item in the collection
  8255. *
  8256. * \@internal
  8257. * @param {?} record
  8258. * @param {?} item
  8259. * @param {?} itemTrackBy
  8260. * @param {?} index
  8261. * @return {?}
  8262. */
  8263. DefaultIterableDiffer.prototype._mismatch = /**
  8264. * This is the core function which handles differences between collections.
  8265. *
  8266. * - `record` is the record which we saw at this position last time. If null then it is a new
  8267. * item.
  8268. * - `item` is the current item in the collection
  8269. * - `index` is the position of the item in the collection
  8270. *
  8271. * \@internal
  8272. * @param {?} record
  8273. * @param {?} item
  8274. * @param {?} itemTrackBy
  8275. * @param {?} index
  8276. * @return {?}
  8277. */
  8278. function (record, item, itemTrackBy, index) {
  8279. // The previous record after which we will append the current one.
  8280. var /** @type {?} */ previousRecord;
  8281. if (record === null) {
  8282. previousRecord = this._itTail;
  8283. }
  8284. else {
  8285. previousRecord = record._prev;
  8286. // Remove the record from the collection since we know it does not match the item.
  8287. this._remove(record);
  8288. }
  8289. // Attempt to see if we have seen the item before.
  8290. record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);
  8291. if (record !== null) {
  8292. // We have seen this before, we need to move it forward in the collection.
  8293. // But first we need to check if identity changed, so we can update in view if necessary
  8294. if (!looseIdentical(record.item, item))
  8295. this._addIdentityChange(record, item);
  8296. this._moveAfter(record, previousRecord, index);
  8297. }
  8298. else {
  8299. // Never seen it, check evicted list.
  8300. record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
  8301. if (record !== null) {
  8302. // It is an item which we have evicted earlier: reinsert it back into the list.
  8303. // But first we need to check if identity changed, so we can update in view if necessary
  8304. if (!looseIdentical(record.item, item))
  8305. this._addIdentityChange(record, item);
  8306. this._reinsertAfter(record, previousRecord, index);
  8307. }
  8308. else {
  8309. // It is a new item: add it.
  8310. record =
  8311. this._addAfter(new IterableChangeRecord_(item, itemTrackBy), previousRecord, index);
  8312. }
  8313. }
  8314. return record;
  8315. };
  8316. /**
  8317. * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
  8318. *
  8319. * Use case: `[a, a]` => `[b, a, a]`
  8320. *
  8321. * If we did not have this check then the insertion of `b` would:
  8322. * 1) evict first `a`
  8323. * 2) insert `b` at `0` index.
  8324. * 3) leave `a` at index `1` as is. <-- this is wrong!
  8325. * 3) reinsert `a` at index 2. <-- this is wrong!
  8326. *
  8327. * The correct behavior is:
  8328. * 1) evict first `a`
  8329. * 2) insert `b` at `0` index.
  8330. * 3) reinsert `a` at index 1.
  8331. * 3) move `a` at from `1` to `2`.
  8332. *
  8333. *
  8334. * Double check that we have not evicted a duplicate item. We need to check if the item type may
  8335. * have already been removed:
  8336. * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
  8337. * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
  8338. * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
  8339. * at the end.
  8340. *
  8341. * @internal
  8342. */
  8343. /**
  8344. * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
  8345. *
  8346. * Use case: `[a, a]` => `[b, a, a]`
  8347. *
  8348. * If we did not have this check then the insertion of `b` would:
  8349. * 1) evict first `a`
  8350. * 2) insert `b` at `0` index.
  8351. * 3) leave `a` at index `1` as is. <-- this is wrong!
  8352. * 3) reinsert `a` at index 2. <-- this is wrong!
  8353. *
  8354. * The correct behavior is:
  8355. * 1) evict first `a`
  8356. * 2) insert `b` at `0` index.
  8357. * 3) reinsert `a` at index 1.
  8358. * 3) move `a` at from `1` to `2`.
  8359. *
  8360. *
  8361. * Double check that we have not evicted a duplicate item. We need to check if the item type may
  8362. * have already been removed:
  8363. * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
  8364. * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
  8365. * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
  8366. * at the end.
  8367. *
  8368. * \@internal
  8369. * @param {?} record
  8370. * @param {?} item
  8371. * @param {?} itemTrackBy
  8372. * @param {?} index
  8373. * @return {?}
  8374. */
  8375. DefaultIterableDiffer.prototype._verifyReinsertion = /**
  8376. * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)
  8377. *
  8378. * Use case: `[a, a]` => `[b, a, a]`
  8379. *
  8380. * If we did not have this check then the insertion of `b` would:
  8381. * 1) evict first `a`
  8382. * 2) insert `b` at `0` index.
  8383. * 3) leave `a` at index `1` as is. <-- this is wrong!
  8384. * 3) reinsert `a` at index 2. <-- this is wrong!
  8385. *
  8386. * The correct behavior is:
  8387. * 1) evict first `a`
  8388. * 2) insert `b` at `0` index.
  8389. * 3) reinsert `a` at index 1.
  8390. * 3) move `a` at from `1` to `2`.
  8391. *
  8392. *
  8393. * Double check that we have not evicted a duplicate item. We need to check if the item type may
  8394. * have already been removed:
  8395. * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted
  8396. * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a
  8397. * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'
  8398. * at the end.
  8399. *
  8400. * \@internal
  8401. * @param {?} record
  8402. * @param {?} item
  8403. * @param {?} itemTrackBy
  8404. * @param {?} index
  8405. * @return {?}
  8406. */
  8407. function (record, item, itemTrackBy, index) {
  8408. var /** @type {?} */ reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);
  8409. if (reinsertRecord !== null) {
  8410. record = this._reinsertAfter(reinsertRecord, /** @type {?} */ ((record._prev)), index);
  8411. }
  8412. else if (record.currentIndex != index) {
  8413. record.currentIndex = index;
  8414. this._addToMoves(record, index);
  8415. }
  8416. return record;
  8417. };
  8418. /**
  8419. * Get rid of any excess {@link IterableChangeRecord_}s from the previous collection
  8420. *
  8421. * - `record` The first excess {@link IterableChangeRecord_}.
  8422. *
  8423. * @internal
  8424. */
  8425. /**
  8426. * Get rid of any excess {\@link IterableChangeRecord_}s from the previous collection
  8427. *
  8428. * - `record` The first excess {\@link IterableChangeRecord_}.
  8429. *
  8430. * \@internal
  8431. * @param {?} record
  8432. * @return {?}
  8433. */
  8434. DefaultIterableDiffer.prototype._truncate = /**
  8435. * Get rid of any excess {\@link IterableChangeRecord_}s from the previous collection
  8436. *
  8437. * - `record` The first excess {\@link IterableChangeRecord_}.
  8438. *
  8439. * \@internal
  8440. * @param {?} record
  8441. * @return {?}
  8442. */
  8443. function (record) {
  8444. // Anything after that needs to be removed;
  8445. while (record !== null) {
  8446. var /** @type {?} */ nextRecord = record._next;
  8447. this._addToRemovals(this._unlink(record));
  8448. record = nextRecord;
  8449. }
  8450. if (this._unlinkedRecords !== null) {
  8451. this._unlinkedRecords.clear();
  8452. }
  8453. if (this._additionsTail !== null) {
  8454. this._additionsTail._nextAdded = null;
  8455. }
  8456. if (this._movesTail !== null) {
  8457. this._movesTail._nextMoved = null;
  8458. }
  8459. if (this._itTail !== null) {
  8460. this._itTail._next = null;
  8461. }
  8462. if (this._removalsTail !== null) {
  8463. this._removalsTail._nextRemoved = null;
  8464. }
  8465. if (this._identityChangesTail !== null) {
  8466. this._identityChangesTail._nextIdentityChange = null;
  8467. }
  8468. };
  8469. /** @internal */
  8470. /**
  8471. * \@internal
  8472. * @param {?} record
  8473. * @param {?} prevRecord
  8474. * @param {?} index
  8475. * @return {?}
  8476. */
  8477. DefaultIterableDiffer.prototype._reinsertAfter = /**
  8478. * \@internal
  8479. * @param {?} record
  8480. * @param {?} prevRecord
  8481. * @param {?} index
  8482. * @return {?}
  8483. */
  8484. function (record, prevRecord, index) {
  8485. if (this._unlinkedRecords !== null) {
  8486. this._unlinkedRecords.remove(record);
  8487. }
  8488. var /** @type {?} */ prev = record._prevRemoved;
  8489. var /** @type {?} */ next = record._nextRemoved;
  8490. if (prev === null) {
  8491. this._removalsHead = next;
  8492. }
  8493. else {
  8494. prev._nextRemoved = next;
  8495. }
  8496. if (next === null) {
  8497. this._removalsTail = prev;
  8498. }
  8499. else {
  8500. next._prevRemoved = prev;
  8501. }
  8502. this._insertAfter(record, prevRecord, index);
  8503. this._addToMoves(record, index);
  8504. return record;
  8505. };
  8506. /** @internal */
  8507. /**
  8508. * \@internal
  8509. * @param {?} record
  8510. * @param {?} prevRecord
  8511. * @param {?} index
  8512. * @return {?}
  8513. */
  8514. DefaultIterableDiffer.prototype._moveAfter = /**
  8515. * \@internal
  8516. * @param {?} record
  8517. * @param {?} prevRecord
  8518. * @param {?} index
  8519. * @return {?}
  8520. */
  8521. function (record, prevRecord, index) {
  8522. this._unlink(record);
  8523. this._insertAfter(record, prevRecord, index);
  8524. this._addToMoves(record, index);
  8525. return record;
  8526. };
  8527. /** @internal */
  8528. /**
  8529. * \@internal
  8530. * @param {?} record
  8531. * @param {?} prevRecord
  8532. * @param {?} index
  8533. * @return {?}
  8534. */
  8535. DefaultIterableDiffer.prototype._addAfter = /**
  8536. * \@internal
  8537. * @param {?} record
  8538. * @param {?} prevRecord
  8539. * @param {?} index
  8540. * @return {?}
  8541. */
  8542. function (record, prevRecord, index) {
  8543. this._insertAfter(record, prevRecord, index);
  8544. if (this._additionsTail === null) {
  8545. // TODO(vicb):
  8546. // assert(this._additionsHead === null);
  8547. this._additionsTail = this._additionsHead = record;
  8548. }
  8549. else {
  8550. // TODO(vicb):
  8551. // assert(_additionsTail._nextAdded === null);
  8552. // assert(record._nextAdded === null);
  8553. this._additionsTail = this._additionsTail._nextAdded = record;
  8554. }
  8555. return record;
  8556. };
  8557. /** @internal */
  8558. /**
  8559. * \@internal
  8560. * @param {?} record
  8561. * @param {?} prevRecord
  8562. * @param {?} index
  8563. * @return {?}
  8564. */
  8565. DefaultIterableDiffer.prototype._insertAfter = /**
  8566. * \@internal
  8567. * @param {?} record
  8568. * @param {?} prevRecord
  8569. * @param {?} index
  8570. * @return {?}
  8571. */
  8572. function (record, prevRecord, index) {
  8573. // TODO(vicb):
  8574. // assert(record != prevRecord);
  8575. // assert(record._next === null);
  8576. // assert(record._prev === null);
  8577. var /** @type {?} */ next = prevRecord === null ? this._itHead : prevRecord._next;
  8578. // TODO(vicb):
  8579. // assert(next != record);
  8580. // assert(prevRecord != record);
  8581. record._next = next;
  8582. record._prev = prevRecord;
  8583. if (next === null) {
  8584. this._itTail = record;
  8585. }
  8586. else {
  8587. next._prev = record;
  8588. }
  8589. if (prevRecord === null) {
  8590. this._itHead = record;
  8591. }
  8592. else {
  8593. prevRecord._next = record;
  8594. }
  8595. if (this._linkedRecords === null) {
  8596. this._linkedRecords = new _DuplicateMap();
  8597. }
  8598. this._linkedRecords.put(record);
  8599. record.currentIndex = index;
  8600. return record;
  8601. };
  8602. /** @internal */
  8603. /**
  8604. * \@internal
  8605. * @param {?} record
  8606. * @return {?}
  8607. */
  8608. DefaultIterableDiffer.prototype._remove = /**
  8609. * \@internal
  8610. * @param {?} record
  8611. * @return {?}
  8612. */
  8613. function (record) {
  8614. return this._addToRemovals(this._unlink(record));
  8615. };
  8616. /** @internal */
  8617. /**
  8618. * \@internal
  8619. * @param {?} record
  8620. * @return {?}
  8621. */
  8622. DefaultIterableDiffer.prototype._unlink = /**
  8623. * \@internal
  8624. * @param {?} record
  8625. * @return {?}
  8626. */
  8627. function (record) {
  8628. if (this._linkedRecords !== null) {
  8629. this._linkedRecords.remove(record);
  8630. }
  8631. var /** @type {?} */ prev = record._prev;
  8632. var /** @type {?} */ next = record._next;
  8633. // TODO(vicb):
  8634. // assert((record._prev = null) === null);
  8635. // assert((record._next = null) === null);
  8636. if (prev === null) {
  8637. this._itHead = next;
  8638. }
  8639. else {
  8640. prev._next = next;
  8641. }
  8642. if (next === null) {
  8643. this._itTail = prev;
  8644. }
  8645. else {
  8646. next._prev = prev;
  8647. }
  8648. return record;
  8649. };
  8650. /** @internal */
  8651. /**
  8652. * \@internal
  8653. * @param {?} record
  8654. * @param {?} toIndex
  8655. * @return {?}
  8656. */
  8657. DefaultIterableDiffer.prototype._addToMoves = /**
  8658. * \@internal
  8659. * @param {?} record
  8660. * @param {?} toIndex
  8661. * @return {?}
  8662. */
  8663. function (record, toIndex) {
  8664. // TODO(vicb):
  8665. // assert(record._nextMoved === null);
  8666. if (record.previousIndex === toIndex) {
  8667. return record;
  8668. }
  8669. if (this._movesTail === null) {
  8670. // TODO(vicb):
  8671. // assert(_movesHead === null);
  8672. this._movesTail = this._movesHead = record;
  8673. }
  8674. else {
  8675. // TODO(vicb):
  8676. // assert(_movesTail._nextMoved === null);
  8677. this._movesTail = this._movesTail._nextMoved = record;
  8678. }
  8679. return record;
  8680. };
  8681. /**
  8682. * @param {?} record
  8683. * @return {?}
  8684. */
  8685. DefaultIterableDiffer.prototype._addToRemovals = /**
  8686. * @param {?} record
  8687. * @return {?}
  8688. */
  8689. function (record) {
  8690. if (this._unlinkedRecords === null) {
  8691. this._unlinkedRecords = new _DuplicateMap();
  8692. }
  8693. this._unlinkedRecords.put(record);
  8694. record.currentIndex = null;
  8695. record._nextRemoved = null;
  8696. if (this._removalsTail === null) {
  8697. // TODO(vicb):
  8698. // assert(_removalsHead === null);
  8699. this._removalsTail = this._removalsHead = record;
  8700. record._prevRemoved = null;
  8701. }
  8702. else {
  8703. // TODO(vicb):
  8704. // assert(_removalsTail._nextRemoved === null);
  8705. // assert(record._nextRemoved === null);
  8706. record._prevRemoved = this._removalsTail;
  8707. this._removalsTail = this._removalsTail._nextRemoved = record;
  8708. }
  8709. return record;
  8710. };
  8711. /** @internal */
  8712. /**
  8713. * \@internal
  8714. * @param {?} record
  8715. * @param {?} item
  8716. * @return {?}
  8717. */
  8718. DefaultIterableDiffer.prototype._addIdentityChange = /**
  8719. * \@internal
  8720. * @param {?} record
  8721. * @param {?} item
  8722. * @return {?}
  8723. */
  8724. function (record, item) {
  8725. record.item = item;
  8726. if (this._identityChangesTail === null) {
  8727. this._identityChangesTail = this._identityChangesHead = record;
  8728. }
  8729. else {
  8730. this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;
  8731. }
  8732. return record;
  8733. };
  8734. return DefaultIterableDiffer;
  8735. }());
  8736. /**
  8737. * \@stable
  8738. * @template V
  8739. */
  8740. var IterableChangeRecord_ = /** @class */ (function () {
  8741. function IterableChangeRecord_(item, trackById) {
  8742. this.item = item;
  8743. this.trackById = trackById;
  8744. this.currentIndex = null;
  8745. this.previousIndex = null;
  8746. /**
  8747. * \@internal
  8748. */
  8749. this._nextPrevious = null;
  8750. /**
  8751. * \@internal
  8752. */
  8753. this._prev = null;
  8754. /**
  8755. * \@internal
  8756. */
  8757. this._next = null;
  8758. /**
  8759. * \@internal
  8760. */
  8761. this._prevDup = null;
  8762. /**
  8763. * \@internal
  8764. */
  8765. this._nextDup = null;
  8766. /**
  8767. * \@internal
  8768. */
  8769. this._prevRemoved = null;
  8770. /**
  8771. * \@internal
  8772. */
  8773. this._nextRemoved = null;
  8774. /**
  8775. * \@internal
  8776. */
  8777. this._nextAdded = null;
  8778. /**
  8779. * \@internal
  8780. */
  8781. this._nextMoved = null;
  8782. /**
  8783. * \@internal
  8784. */
  8785. this._nextIdentityChange = null;
  8786. }
  8787. return IterableChangeRecord_;
  8788. }());
  8789. /**
  8790. * @template V
  8791. */
  8792. var _DuplicateItemRecordList = /** @class */ (function () {
  8793. function _DuplicateItemRecordList() {
  8794. /**
  8795. * \@internal
  8796. */
  8797. this._head = null;
  8798. /**
  8799. * \@internal
  8800. */
  8801. this._tail = null;
  8802. }
  8803. /**
  8804. * Append the record to the list of duplicates.
  8805. *
  8806. * Note: by design all records in the list of duplicates hold the same value in record.item.
  8807. */
  8808. /**
  8809. * Append the record to the list of duplicates.
  8810. *
  8811. * Note: by design all records in the list of duplicates hold the same value in record.item.
  8812. * @param {?} record
  8813. * @return {?}
  8814. */
  8815. _DuplicateItemRecordList.prototype.add = /**
  8816. * Append the record to the list of duplicates.
  8817. *
  8818. * Note: by design all records in the list of duplicates hold the same value in record.item.
  8819. * @param {?} record
  8820. * @return {?}
  8821. */
  8822. function (record) {
  8823. if (this._head === null) {
  8824. this._head = this._tail = record;
  8825. record._nextDup = null;
  8826. record._prevDup = null;
  8827. }
  8828. else {
  8829. /** @type {?} */ ((
  8830. // TODO(vicb):
  8831. // assert(record.item == _head.item ||
  8832. // record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);
  8833. this._tail))._nextDup = record;
  8834. record._prevDup = this._tail;
  8835. record._nextDup = null;
  8836. this._tail = record;
  8837. }
  8838. };
  8839. // Returns a IterableChangeRecord_ having IterableChangeRecord_.trackById == trackById and
  8840. // IterableChangeRecord_.currentIndex >= atOrAfterIndex
  8841. /**
  8842. * @param {?} trackById
  8843. * @param {?} atOrAfterIndex
  8844. * @return {?}
  8845. */
  8846. _DuplicateItemRecordList.prototype.get = /**
  8847. * @param {?} trackById
  8848. * @param {?} atOrAfterIndex
  8849. * @return {?}
  8850. */
  8851. function (trackById, atOrAfterIndex) {
  8852. var /** @type {?} */ record;
  8853. for (record = this._head; record !== null; record = record._nextDup) {
  8854. if ((atOrAfterIndex === null || atOrAfterIndex <= /** @type {?} */ ((record.currentIndex))) &&
  8855. looseIdentical(record.trackById, trackById)) {
  8856. return record;
  8857. }
  8858. }
  8859. return null;
  8860. };
  8861. /**
  8862. * Remove one {@link IterableChangeRecord_} from the list of duplicates.
  8863. *
  8864. * Returns whether the list of duplicates is empty.
  8865. */
  8866. /**
  8867. * Remove one {\@link IterableChangeRecord_} from the list of duplicates.
  8868. *
  8869. * Returns whether the list of duplicates is empty.
  8870. * @param {?} record
  8871. * @return {?}
  8872. */
  8873. _DuplicateItemRecordList.prototype.remove = /**
  8874. * Remove one {\@link IterableChangeRecord_} from the list of duplicates.
  8875. *
  8876. * Returns whether the list of duplicates is empty.
  8877. * @param {?} record
  8878. * @return {?}
  8879. */
  8880. function (record) {
  8881. // TODO(vicb):
  8882. // assert(() {
  8883. // // verify that the record being removed is in the list.
  8884. // for (IterableChangeRecord_ cursor = _head; cursor != null; cursor = cursor._nextDup) {
  8885. // if (identical(cursor, record)) return true;
  8886. // }
  8887. // return false;
  8888. //});
  8889. var /** @type {?} */ prev = record._prevDup;
  8890. var /** @type {?} */ next = record._nextDup;
  8891. if (prev === null) {
  8892. this._head = next;
  8893. }
  8894. else {
  8895. prev._nextDup = next;
  8896. }
  8897. if (next === null) {
  8898. this._tail = prev;
  8899. }
  8900. else {
  8901. next._prevDup = prev;
  8902. }
  8903. return this._head === null;
  8904. };
  8905. return _DuplicateItemRecordList;
  8906. }());
  8907. /**
  8908. * @template V
  8909. */
  8910. var _DuplicateMap = /** @class */ (function () {
  8911. function _DuplicateMap() {
  8912. this.map = new Map();
  8913. }
  8914. /**
  8915. * @param {?} record
  8916. * @return {?}
  8917. */
  8918. _DuplicateMap.prototype.put = /**
  8919. * @param {?} record
  8920. * @return {?}
  8921. */
  8922. function (record) {
  8923. var /** @type {?} */ key = record.trackById;
  8924. var /** @type {?} */ duplicates = this.map.get(key);
  8925. if (!duplicates) {
  8926. duplicates = new _DuplicateItemRecordList();
  8927. this.map.set(key, duplicates);
  8928. }
  8929. duplicates.add(record);
  8930. };
  8931. /**
  8932. * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
  8933. * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
  8934. *
  8935. * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
  8936. * have any more `a`s needs to return the second `a`.
  8937. */
  8938. /**
  8939. * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
  8940. * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
  8941. *
  8942. * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
  8943. * have any more `a`s needs to return the second `a`.
  8944. * @param {?} trackById
  8945. * @param {?} atOrAfterIndex
  8946. * @return {?}
  8947. */
  8948. _DuplicateMap.prototype.get = /**
  8949. * Retrieve the `value` using key. Because the IterableChangeRecord_ value may be one which we
  8950. * have already iterated over, we use the `atOrAfterIndex` to pretend it is not there.
  8951. *
  8952. * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we
  8953. * have any more `a`s needs to return the second `a`.
  8954. * @param {?} trackById
  8955. * @param {?} atOrAfterIndex
  8956. * @return {?}
  8957. */
  8958. function (trackById, atOrAfterIndex) {
  8959. var /** @type {?} */ key = trackById;
  8960. var /** @type {?} */ recordList = this.map.get(key);
  8961. return recordList ? recordList.get(trackById, atOrAfterIndex) : null;
  8962. };
  8963. /**
  8964. * Removes a {@link IterableChangeRecord_} from the list of duplicates.
  8965. *
  8966. * The list of duplicates also is removed from the map if it gets empty.
  8967. */
  8968. /**
  8969. * Removes a {\@link IterableChangeRecord_} from the list of duplicates.
  8970. *
  8971. * The list of duplicates also is removed from the map if it gets empty.
  8972. * @param {?} record
  8973. * @return {?}
  8974. */
  8975. _DuplicateMap.prototype.remove = /**
  8976. * Removes a {\@link IterableChangeRecord_} from the list of duplicates.
  8977. *
  8978. * The list of duplicates also is removed from the map if it gets empty.
  8979. * @param {?} record
  8980. * @return {?}
  8981. */
  8982. function (record) {
  8983. var /** @type {?} */ key = record.trackById;
  8984. var /** @type {?} */ recordList = /** @type {?} */ ((this.map.get(key)));
  8985. // Remove the list of duplicates when it gets empty
  8986. if (recordList.remove(record)) {
  8987. this.map.delete(key);
  8988. }
  8989. return record;
  8990. };
  8991. Object.defineProperty(_DuplicateMap.prototype, "isEmpty", {
  8992. get: /**
  8993. * @return {?}
  8994. */
  8995. function () { return this.map.size === 0; },
  8996. enumerable: true,
  8997. configurable: true
  8998. });
  8999. /**
  9000. * @return {?}
  9001. */
  9002. _DuplicateMap.prototype.clear = /**
  9003. * @return {?}
  9004. */
  9005. function () { this.map.clear(); };
  9006. return _DuplicateMap;
  9007. }());
  9008. /**
  9009. * @param {?} item
  9010. * @param {?} addRemoveOffset
  9011. * @param {?} moveOffsets
  9012. * @return {?}
  9013. */
  9014. function getPreviousIndex(item, addRemoveOffset, moveOffsets) {
  9015. var /** @type {?} */ previousIndex = item.previousIndex;
  9016. if (previousIndex === null)
  9017. return previousIndex;
  9018. var /** @type {?} */ moveOffset = 0;
  9019. if (moveOffsets && previousIndex < moveOffsets.length) {
  9020. moveOffset = moveOffsets[previousIndex];
  9021. }
  9022. return previousIndex + addRemoveOffset + moveOffset;
  9023. }
  9024. /**
  9025. * @fileoverview added by tsickle
  9026. * @suppress {checkTypes} checked by tsc
  9027. */
  9028. /**
  9029. * @license
  9030. * Copyright Google Inc. All Rights Reserved.
  9031. *
  9032. * Use of this source code is governed by an MIT-style license that can be
  9033. * found in the LICENSE file at https://angular.io/license
  9034. */
  9035. /**
  9036. * @template K, V
  9037. */
  9038. var DefaultKeyValueDifferFactory = /** @class */ (function () {
  9039. function DefaultKeyValueDifferFactory() {
  9040. }
  9041. /**
  9042. * @param {?} obj
  9043. * @return {?}
  9044. */
  9045. DefaultKeyValueDifferFactory.prototype.supports = /**
  9046. * @param {?} obj
  9047. * @return {?}
  9048. */
  9049. function (obj) { return obj instanceof Map || isJsObject(obj); };
  9050. /**
  9051. * @template K, V
  9052. * @return {?}
  9053. */
  9054. DefaultKeyValueDifferFactory.prototype.create = /**
  9055. * @template K, V
  9056. * @return {?}
  9057. */
  9058. function () { return new DefaultKeyValueDiffer(); };
  9059. return DefaultKeyValueDifferFactory;
  9060. }());
  9061. /**
  9062. * @template K, V
  9063. */
  9064. var DefaultKeyValueDiffer = /** @class */ (function () {
  9065. function DefaultKeyValueDiffer() {
  9066. this._records = new Map();
  9067. this._mapHead = null;
  9068. this._appendAfter = null;
  9069. this._previousMapHead = null;
  9070. this._changesHead = null;
  9071. this._changesTail = null;
  9072. this._additionsHead = null;
  9073. this._additionsTail = null;
  9074. this._removalsHead = null;
  9075. this._removalsTail = null;
  9076. }
  9077. Object.defineProperty(DefaultKeyValueDiffer.prototype, "isDirty", {
  9078. get: /**
  9079. * @return {?}
  9080. */
  9081. function () {
  9082. return this._additionsHead !== null || this._changesHead !== null ||
  9083. this._removalsHead !== null;
  9084. },
  9085. enumerable: true,
  9086. configurable: true
  9087. });
  9088. /**
  9089. * @param {?} fn
  9090. * @return {?}
  9091. */
  9092. DefaultKeyValueDiffer.prototype.forEachItem = /**
  9093. * @param {?} fn
  9094. * @return {?}
  9095. */
  9096. function (fn) {
  9097. var /** @type {?} */ record;
  9098. for (record = this._mapHead; record !== null; record = record._next) {
  9099. fn(record);
  9100. }
  9101. };
  9102. /**
  9103. * @param {?} fn
  9104. * @return {?}
  9105. */
  9106. DefaultKeyValueDiffer.prototype.forEachPreviousItem = /**
  9107. * @param {?} fn
  9108. * @return {?}
  9109. */
  9110. function (fn) {
  9111. var /** @type {?} */ record;
  9112. for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
  9113. fn(record);
  9114. }
  9115. };
  9116. /**
  9117. * @param {?} fn
  9118. * @return {?}
  9119. */
  9120. DefaultKeyValueDiffer.prototype.forEachChangedItem = /**
  9121. * @param {?} fn
  9122. * @return {?}
  9123. */
  9124. function (fn) {
  9125. var /** @type {?} */ record;
  9126. for (record = this._changesHead; record !== null; record = record._nextChanged) {
  9127. fn(record);
  9128. }
  9129. };
  9130. /**
  9131. * @param {?} fn
  9132. * @return {?}
  9133. */
  9134. DefaultKeyValueDiffer.prototype.forEachAddedItem = /**
  9135. * @param {?} fn
  9136. * @return {?}
  9137. */
  9138. function (fn) {
  9139. var /** @type {?} */ record;
  9140. for (record = this._additionsHead; record !== null; record = record._nextAdded) {
  9141. fn(record);
  9142. }
  9143. };
  9144. /**
  9145. * @param {?} fn
  9146. * @return {?}
  9147. */
  9148. DefaultKeyValueDiffer.prototype.forEachRemovedItem = /**
  9149. * @param {?} fn
  9150. * @return {?}
  9151. */
  9152. function (fn) {
  9153. var /** @type {?} */ record;
  9154. for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
  9155. fn(record);
  9156. }
  9157. };
  9158. /**
  9159. * @param {?=} map
  9160. * @return {?}
  9161. */
  9162. DefaultKeyValueDiffer.prototype.diff = /**
  9163. * @param {?=} map
  9164. * @return {?}
  9165. */
  9166. function (map) {
  9167. if (!map) {
  9168. map = new Map();
  9169. }
  9170. else if (!(map instanceof Map || isJsObject(map))) {
  9171. throw new Error("Error trying to diff '" + stringify(map) + "'. Only maps and objects are allowed");
  9172. }
  9173. return this.check(map) ? this : null;
  9174. };
  9175. /**
  9176. * @return {?}
  9177. */
  9178. DefaultKeyValueDiffer.prototype.onDestroy = /**
  9179. * @return {?}
  9180. */
  9181. function () { };
  9182. /**
  9183. * Check the current state of the map vs the previous.
  9184. * The algorithm is optimised for when the keys do no change.
  9185. */
  9186. /**
  9187. * Check the current state of the map vs the previous.
  9188. * The algorithm is optimised for when the keys do no change.
  9189. * @param {?} map
  9190. * @return {?}
  9191. */
  9192. DefaultKeyValueDiffer.prototype.check = /**
  9193. * Check the current state of the map vs the previous.
  9194. * The algorithm is optimised for when the keys do no change.
  9195. * @param {?} map
  9196. * @return {?}
  9197. */
  9198. function (map) {
  9199. var _this = this;
  9200. this._reset();
  9201. var /** @type {?} */ insertBefore = this._mapHead;
  9202. this._appendAfter = null;
  9203. this._forEach(map, function (value, key) {
  9204. if (insertBefore && insertBefore.key === key) {
  9205. _this._maybeAddToChanges(insertBefore, value);
  9206. _this._appendAfter = insertBefore;
  9207. insertBefore = insertBefore._next;
  9208. }
  9209. else {
  9210. var /** @type {?} */ record = _this._getOrCreateRecordForKey(key, value);
  9211. insertBefore = _this._insertBeforeOrAppend(insertBefore, record);
  9212. }
  9213. });
  9214. // Items remaining at the end of the list have been deleted
  9215. if (insertBefore) {
  9216. if (insertBefore._prev) {
  9217. insertBefore._prev._next = null;
  9218. }
  9219. this._removalsHead = insertBefore;
  9220. for (var /** @type {?} */ record = insertBefore; record !== null; record = record._nextRemoved) {
  9221. if (record === this._mapHead) {
  9222. this._mapHead = null;
  9223. }
  9224. this._records.delete(record.key);
  9225. record._nextRemoved = record._next;
  9226. record.previousValue = record.currentValue;
  9227. record.currentValue = null;
  9228. record._prev = null;
  9229. record._next = null;
  9230. }
  9231. }
  9232. // Make sure tails have no next records from previous runs
  9233. if (this._changesTail)
  9234. this._changesTail._nextChanged = null;
  9235. if (this._additionsTail)
  9236. this._additionsTail._nextAdded = null;
  9237. return this.isDirty;
  9238. };
  9239. /**
  9240. * Inserts a record before `before` or append at the end of the list when `before` is null.
  9241. *
  9242. * Notes:
  9243. * - This method appends at `this._appendAfter`,
  9244. * - This method updates `this._appendAfter`,
  9245. * - The return value is the new value for the insertion pointer.
  9246. * @param {?} before
  9247. * @param {?} record
  9248. * @return {?}
  9249. */
  9250. DefaultKeyValueDiffer.prototype._insertBeforeOrAppend = /**
  9251. * Inserts a record before `before` or append at the end of the list when `before` is null.
  9252. *
  9253. * Notes:
  9254. * - This method appends at `this._appendAfter`,
  9255. * - This method updates `this._appendAfter`,
  9256. * - The return value is the new value for the insertion pointer.
  9257. * @param {?} before
  9258. * @param {?} record
  9259. * @return {?}
  9260. */
  9261. function (before, record) {
  9262. if (before) {
  9263. var /** @type {?} */ prev = before._prev;
  9264. record._next = before;
  9265. record._prev = prev;
  9266. before._prev = record;
  9267. if (prev) {
  9268. prev._next = record;
  9269. }
  9270. if (before === this._mapHead) {
  9271. this._mapHead = record;
  9272. }
  9273. this._appendAfter = before;
  9274. return before;
  9275. }
  9276. if (this._appendAfter) {
  9277. this._appendAfter._next = record;
  9278. record._prev = this._appendAfter;
  9279. }
  9280. else {
  9281. this._mapHead = record;
  9282. }
  9283. this._appendAfter = record;
  9284. return null;
  9285. };
  9286. /**
  9287. * @param {?} key
  9288. * @param {?} value
  9289. * @return {?}
  9290. */
  9291. DefaultKeyValueDiffer.prototype._getOrCreateRecordForKey = /**
  9292. * @param {?} key
  9293. * @param {?} value
  9294. * @return {?}
  9295. */
  9296. function (key, value) {
  9297. if (this._records.has(key)) {
  9298. var /** @type {?} */ record_1 = /** @type {?} */ ((this._records.get(key)));
  9299. this._maybeAddToChanges(record_1, value);
  9300. var /** @type {?} */ prev = record_1._prev;
  9301. var /** @type {?} */ next = record_1._next;
  9302. if (prev) {
  9303. prev._next = next;
  9304. }
  9305. if (next) {
  9306. next._prev = prev;
  9307. }
  9308. record_1._next = null;
  9309. record_1._prev = null;
  9310. return record_1;
  9311. }
  9312. var /** @type {?} */ record = new KeyValueChangeRecord_(key);
  9313. this._records.set(key, record);
  9314. record.currentValue = value;
  9315. this._addToAdditions(record);
  9316. return record;
  9317. };
  9318. /** @internal */
  9319. /**
  9320. * \@internal
  9321. * @return {?}
  9322. */
  9323. DefaultKeyValueDiffer.prototype._reset = /**
  9324. * \@internal
  9325. * @return {?}
  9326. */
  9327. function () {
  9328. if (this.isDirty) {
  9329. var /** @type {?} */ record = void 0;
  9330. // let `_previousMapHead` contain the state of the map before the changes
  9331. this._previousMapHead = this._mapHead;
  9332. for (record = this._previousMapHead; record !== null; record = record._next) {
  9333. record._nextPrevious = record._next;
  9334. }
  9335. // Update `record.previousValue` with the value of the item before the changes
  9336. // We need to update all changed items (that's those which have been added and changed)
  9337. for (record = this._changesHead; record !== null; record = record._nextChanged) {
  9338. record.previousValue = record.currentValue;
  9339. }
  9340. for (record = this._additionsHead; record != null; record = record._nextAdded) {
  9341. record.previousValue = record.currentValue;
  9342. }
  9343. this._changesHead = this._changesTail = null;
  9344. this._additionsHead = this._additionsTail = null;
  9345. this._removalsHead = null;
  9346. }
  9347. };
  9348. /**
  9349. * @param {?} record
  9350. * @param {?} newValue
  9351. * @return {?}
  9352. */
  9353. DefaultKeyValueDiffer.prototype._maybeAddToChanges = /**
  9354. * @param {?} record
  9355. * @param {?} newValue
  9356. * @return {?}
  9357. */
  9358. function (record, newValue) {
  9359. if (!looseIdentical(newValue, record.currentValue)) {
  9360. record.previousValue = record.currentValue;
  9361. record.currentValue = newValue;
  9362. this._addToChanges(record);
  9363. }
  9364. };
  9365. /**
  9366. * @param {?} record
  9367. * @return {?}
  9368. */
  9369. DefaultKeyValueDiffer.prototype._addToAdditions = /**
  9370. * @param {?} record
  9371. * @return {?}
  9372. */
  9373. function (record) {
  9374. if (this._additionsHead === null) {
  9375. this._additionsHead = this._additionsTail = record;
  9376. }
  9377. else {
  9378. /** @type {?} */ ((this._additionsTail))._nextAdded = record;
  9379. this._additionsTail = record;
  9380. }
  9381. };
  9382. /**
  9383. * @param {?} record
  9384. * @return {?}
  9385. */
  9386. DefaultKeyValueDiffer.prototype._addToChanges = /**
  9387. * @param {?} record
  9388. * @return {?}
  9389. */
  9390. function (record) {
  9391. if (this._changesHead === null) {
  9392. this._changesHead = this._changesTail = record;
  9393. }
  9394. else {
  9395. /** @type {?} */ ((this._changesTail))._nextChanged = record;
  9396. this._changesTail = record;
  9397. }
  9398. };
  9399. /**
  9400. * \@internal
  9401. * @template K, V
  9402. * @param {?} obj
  9403. * @param {?} fn
  9404. * @return {?}
  9405. */
  9406. DefaultKeyValueDiffer.prototype._forEach = /**
  9407. * \@internal
  9408. * @template K, V
  9409. * @param {?} obj
  9410. * @param {?} fn
  9411. * @return {?}
  9412. */
  9413. function (obj, fn) {
  9414. if (obj instanceof Map) {
  9415. obj.forEach(fn);
  9416. }
  9417. else {
  9418. Object.keys(obj).forEach(function (k) { return fn(obj[k], k); });
  9419. }
  9420. };
  9421. return DefaultKeyValueDiffer;
  9422. }());
  9423. /**
  9424. * \@stable
  9425. * @template K, V
  9426. */
  9427. var KeyValueChangeRecord_ = /** @class */ (function () {
  9428. function KeyValueChangeRecord_(key) {
  9429. this.key = key;
  9430. this.previousValue = null;
  9431. this.currentValue = null;
  9432. /**
  9433. * \@internal
  9434. */
  9435. this._nextPrevious = null;
  9436. /**
  9437. * \@internal
  9438. */
  9439. this._next = null;
  9440. /**
  9441. * \@internal
  9442. */
  9443. this._prev = null;
  9444. /**
  9445. * \@internal
  9446. */
  9447. this._nextAdded = null;
  9448. /**
  9449. * \@internal
  9450. */
  9451. this._nextRemoved = null;
  9452. /**
  9453. * \@internal
  9454. */
  9455. this._nextChanged = null;
  9456. }
  9457. return KeyValueChangeRecord_;
  9458. }());
  9459. /**
  9460. * @fileoverview added by tsickle
  9461. * @suppress {checkTypes} checked by tsc
  9462. */
  9463. /**
  9464. * @license
  9465. * Copyright Google Inc. All Rights Reserved.
  9466. *
  9467. * Use of this source code is governed by an MIT-style license that can be
  9468. * found in the LICENSE file at https://angular.io/license
  9469. */
  9470. /**
  9471. * A strategy for tracking changes over time to an iterable. Used by {\@link NgForOf} to
  9472. * respond to changes in an iterable by effecting equivalent changes in the DOM.
  9473. *
  9474. * \@stable
  9475. * @record
  9476. * @template V
  9477. */
  9478. /**
  9479. * An object describing the changes in the `Iterable` collection since last time
  9480. * `IterableDiffer#diff()` was invoked.
  9481. *
  9482. * \@stable
  9483. * @record
  9484. * @template V
  9485. */
  9486. /**
  9487. * Record representing the item change information.
  9488. *
  9489. * \@stable
  9490. * @record
  9491. * @template V
  9492. */
  9493. /**
  9494. * @deprecated v4.0.0 - Use IterableChangeRecord instead.
  9495. * @record
  9496. * @template V
  9497. */
  9498. /**
  9499. * An optional function passed into {\@link NgForOf} that defines how to track
  9500. * items in an iterable (e.g. fby index or id)
  9501. *
  9502. * \@stable
  9503. * @record
  9504. * @template T
  9505. */
  9506. /**
  9507. * Provides a factory for {\@link IterableDiffer}.
  9508. *
  9509. * \@stable
  9510. * @record
  9511. */
  9512. /**
  9513. * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.
  9514. * \@stable
  9515. */
  9516. var IterableDiffers = /** @class */ (function () {
  9517. function IterableDiffers(factories) {
  9518. this.factories = factories;
  9519. }
  9520. /**
  9521. * @param {?} factories
  9522. * @param {?=} parent
  9523. * @return {?}
  9524. */
  9525. IterableDiffers.create = /**
  9526. * @param {?} factories
  9527. * @param {?=} parent
  9528. * @return {?}
  9529. */
  9530. function (factories, parent) {
  9531. if (parent != null) {
  9532. var /** @type {?} */ copied = parent.factories.slice();
  9533. factories = factories.concat(copied);
  9534. return new IterableDiffers(factories);
  9535. }
  9536. else {
  9537. return new IterableDiffers(factories);
  9538. }
  9539. };
  9540. /**
  9541. * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the
  9542. * inherited {@link IterableDiffers} instance with the provided factories and return a new
  9543. * {@link IterableDiffers} instance.
  9544. *
  9545. * The following example shows how to extend an existing list of factories,
  9546. * which will only be applied to the injector for this component and its children.
  9547. * This step is all that's required to make a new {@link IterableDiffer} available.
  9548. *
  9549. * ### Example
  9550. *
  9551. * ```
  9552. * @Component({
  9553. * viewProviders: [
  9554. * IterableDiffers.extend([new ImmutableListDiffer()])
  9555. * ]
  9556. * })
  9557. * ```
  9558. */
  9559. /**
  9560. * Takes an array of {\@link IterableDifferFactory} and returns a provider used to extend the
  9561. * inherited {\@link IterableDiffers} instance with the provided factories and return a new
  9562. * {\@link IterableDiffers} instance.
  9563. *
  9564. * The following example shows how to extend an existing list of factories,
  9565. * which will only be applied to the injector for this component and its children.
  9566. * This step is all that's required to make a new {\@link IterableDiffer} available.
  9567. *
  9568. * ### Example
  9569. *
  9570. * ```
  9571. * \@Component({
  9572. * viewProviders: [
  9573. * IterableDiffers.extend([new ImmutableListDiffer()])
  9574. * ]
  9575. * })
  9576. * ```
  9577. * @param {?} factories
  9578. * @return {?}
  9579. */
  9580. IterableDiffers.extend = /**
  9581. * Takes an array of {\@link IterableDifferFactory} and returns a provider used to extend the
  9582. * inherited {\@link IterableDiffers} instance with the provided factories and return a new
  9583. * {\@link IterableDiffers} instance.
  9584. *
  9585. * The following example shows how to extend an existing list of factories,
  9586. * which will only be applied to the injector for this component and its children.
  9587. * This step is all that's required to make a new {\@link IterableDiffer} available.
  9588. *
  9589. * ### Example
  9590. *
  9591. * ```
  9592. * \@Component({
  9593. * viewProviders: [
  9594. * IterableDiffers.extend([new ImmutableListDiffer()])
  9595. * ]
  9596. * })
  9597. * ```
  9598. * @param {?} factories
  9599. * @return {?}
  9600. */
  9601. function (factories) {
  9602. return {
  9603. provide: IterableDiffers,
  9604. useFactory: function (parent) {
  9605. if (!parent) {
  9606. // Typically would occur when calling IterableDiffers.extend inside of dependencies passed
  9607. // to
  9608. // bootstrap(), which would override default pipes instead of extending them.
  9609. throw new Error('Cannot extend IterableDiffers without a parent injector');
  9610. }
  9611. return IterableDiffers.create(factories, parent);
  9612. },
  9613. // Dependency technically isn't optional, but we can provide a better error message this way.
  9614. deps: [[IterableDiffers, new SkipSelf(), new Optional()]]
  9615. };
  9616. };
  9617. /**
  9618. * @param {?} iterable
  9619. * @return {?}
  9620. */
  9621. IterableDiffers.prototype.find = /**
  9622. * @param {?} iterable
  9623. * @return {?}
  9624. */
  9625. function (iterable) {
  9626. var /** @type {?} */ factory = this.factories.find(function (f) { return f.supports(iterable); });
  9627. if (factory != null) {
  9628. return factory;
  9629. }
  9630. else {
  9631. throw new Error("Cannot find a differ supporting object '" + iterable + "' of type '" + getTypeNameForDebugging(iterable) + "'");
  9632. }
  9633. };
  9634. return IterableDiffers;
  9635. }());
  9636. /**
  9637. * @param {?} type
  9638. * @return {?}
  9639. */
  9640. function getTypeNameForDebugging(type) {
  9641. return type['name'] || typeof type;
  9642. }
  9643. /**
  9644. * @fileoverview added by tsickle
  9645. * @suppress {checkTypes} checked by tsc
  9646. */
  9647. /**
  9648. * @license
  9649. * Copyright Google Inc. All Rights Reserved.
  9650. *
  9651. * Use of this source code is governed by an MIT-style license that can be
  9652. * found in the LICENSE file at https://angular.io/license
  9653. */
  9654. /**
  9655. * A differ that tracks changes made to an object over time.
  9656. *
  9657. * \@stable
  9658. * @record
  9659. * @template K, V
  9660. */
  9661. /**
  9662. * An object describing the changes in the `Map` or `{[k:string]: string}` since last time
  9663. * `KeyValueDiffer#diff()` was invoked.
  9664. *
  9665. * \@stable
  9666. * @record
  9667. * @template K, V
  9668. */
  9669. /**
  9670. * Record representing the item change information.
  9671. *
  9672. * \@stable
  9673. * @record
  9674. * @template K, V
  9675. */
  9676. /**
  9677. * Provides a factory for {\@link KeyValueDiffer}.
  9678. *
  9679. * \@stable
  9680. * @record
  9681. */
  9682. /**
  9683. * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.
  9684. * \@stable
  9685. */
  9686. var KeyValueDiffers = /** @class */ (function () {
  9687. function KeyValueDiffers(factories) {
  9688. this.factories = factories;
  9689. }
  9690. /**
  9691. * @template S
  9692. * @param {?} factories
  9693. * @param {?=} parent
  9694. * @return {?}
  9695. */
  9696. KeyValueDiffers.create = /**
  9697. * @template S
  9698. * @param {?} factories
  9699. * @param {?=} parent
  9700. * @return {?}
  9701. */
  9702. function (factories, parent) {
  9703. if (parent) {
  9704. var /** @type {?} */ copied = parent.factories.slice();
  9705. factories = factories.concat(copied);
  9706. }
  9707. return new KeyValueDiffers(factories);
  9708. };
  9709. /**
  9710. * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the
  9711. * inherited {@link KeyValueDiffers} instance with the provided factories and return a new
  9712. * {@link KeyValueDiffers} instance.
  9713. *
  9714. * The following example shows how to extend an existing list of factories,
  9715. * which will only be applied to the injector for this component and its children.
  9716. * This step is all that's required to make a new {@link KeyValueDiffer} available.
  9717. *
  9718. * ### Example
  9719. *
  9720. * ```
  9721. * @Component({
  9722. * viewProviders: [
  9723. * KeyValueDiffers.extend([new ImmutableMapDiffer()])
  9724. * ]
  9725. * })
  9726. * ```
  9727. */
  9728. /**
  9729. * Takes an array of {\@link KeyValueDifferFactory} and returns a provider used to extend the
  9730. * inherited {\@link KeyValueDiffers} instance with the provided factories and return a new
  9731. * {\@link KeyValueDiffers} instance.
  9732. *
  9733. * The following example shows how to extend an existing list of factories,
  9734. * which will only be applied to the injector for this component and its children.
  9735. * This step is all that's required to make a new {\@link KeyValueDiffer} available.
  9736. *
  9737. * ### Example
  9738. *
  9739. * ```
  9740. * \@Component({
  9741. * viewProviders: [
  9742. * KeyValueDiffers.extend([new ImmutableMapDiffer()])
  9743. * ]
  9744. * })
  9745. * ```
  9746. * @template S
  9747. * @param {?} factories
  9748. * @return {?}
  9749. */
  9750. KeyValueDiffers.extend = /**
  9751. * Takes an array of {\@link KeyValueDifferFactory} and returns a provider used to extend the
  9752. * inherited {\@link KeyValueDiffers} instance with the provided factories and return a new
  9753. * {\@link KeyValueDiffers} instance.
  9754. *
  9755. * The following example shows how to extend an existing list of factories,
  9756. * which will only be applied to the injector for this component and its children.
  9757. * This step is all that's required to make a new {\@link KeyValueDiffer} available.
  9758. *
  9759. * ### Example
  9760. *
  9761. * ```
  9762. * \@Component({
  9763. * viewProviders: [
  9764. * KeyValueDiffers.extend([new ImmutableMapDiffer()])
  9765. * ]
  9766. * })
  9767. * ```
  9768. * @template S
  9769. * @param {?} factories
  9770. * @return {?}
  9771. */
  9772. function (factories) {
  9773. return {
  9774. provide: KeyValueDiffers,
  9775. useFactory: function (parent) {
  9776. if (!parent) {
  9777. // Typically would occur when calling KeyValueDiffers.extend inside of dependencies passed
  9778. // to bootstrap(), which would override default pipes instead of extending them.
  9779. throw new Error('Cannot extend KeyValueDiffers without a parent injector');
  9780. }
  9781. return KeyValueDiffers.create(factories, parent);
  9782. },
  9783. // Dependency technically isn't optional, but we can provide a better error message this way.
  9784. deps: [[KeyValueDiffers, new SkipSelf(), new Optional()]]
  9785. };
  9786. };
  9787. /**
  9788. * @param {?} kv
  9789. * @return {?}
  9790. */
  9791. KeyValueDiffers.prototype.find = /**
  9792. * @param {?} kv
  9793. * @return {?}
  9794. */
  9795. function (kv) {
  9796. var /** @type {?} */ factory = this.factories.find(function (f) { return f.supports(kv); });
  9797. if (factory) {
  9798. return factory;
  9799. }
  9800. throw new Error("Cannot find a differ supporting object '" + kv + "'");
  9801. };
  9802. return KeyValueDiffers;
  9803. }());
  9804. /**
  9805. * @fileoverview added by tsickle
  9806. * @suppress {checkTypes} checked by tsc
  9807. */
  9808. /**
  9809. * @license
  9810. * Copyright Google Inc. All Rights Reserved.
  9811. *
  9812. * Use of this source code is governed by an MIT-style license that can be
  9813. * found in the LICENSE file at https://angular.io/license
  9814. */
  9815. /**
  9816. * Structural diffing for `Object`s and `Map`s.
  9817. */
  9818. var keyValDiff = [new DefaultKeyValueDifferFactory()];
  9819. /**
  9820. * Structural diffing for `Iterable` types such as `Array`s.
  9821. */
  9822. var iterableDiff = [new DefaultIterableDifferFactory()];
  9823. var defaultIterableDiffers = new IterableDiffers(iterableDiff);
  9824. var defaultKeyValueDiffers = new KeyValueDiffers(keyValDiff);
  9825. /**
  9826. * @fileoverview added by tsickle
  9827. * @suppress {checkTypes} checked by tsc
  9828. */
  9829. /**
  9830. * @license
  9831. * Copyright Google Inc. All Rights Reserved.
  9832. *
  9833. * Use of this source code is governed by an MIT-style license that can be
  9834. * found in the LICENSE file at https://angular.io/license
  9835. */
  9836. /**
  9837. * @fileoverview added by tsickle
  9838. * @suppress {checkTypes} checked by tsc
  9839. */
  9840. /**
  9841. * @license
  9842. * Copyright Google Inc. All Rights Reserved.
  9843. *
  9844. * Use of this source code is governed by an MIT-style license that can be
  9845. * found in the LICENSE file at https://angular.io/license
  9846. */
  9847. var _CORE_PLATFORM_PROVIDERS = [
  9848. // Set a default platform name for platforms that don't set it explicitly.
  9849. { provide: PLATFORM_ID, useValue: 'unknown' },
  9850. { provide: PlatformRef, deps: [Injector] },
  9851. { provide: TestabilityRegistry, deps: [] },
  9852. { provide: Console, deps: [] },
  9853. ];
  9854. /**
  9855. * This platform has to be included in any other platform
  9856. *
  9857. * \@experimental
  9858. */
  9859. var platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDERS);
  9860. /**
  9861. * @fileoverview added by tsickle
  9862. * @suppress {checkTypes} checked by tsc
  9863. */
  9864. /**
  9865. * @license
  9866. * Copyright Google Inc. All Rights Reserved.
  9867. *
  9868. * Use of this source code is governed by an MIT-style license that can be
  9869. * found in the LICENSE file at https://angular.io/license
  9870. */
  9871. /**
  9872. * Provide this token to set the locale of your application.
  9873. * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
  9874. * DecimalPipe and PercentPipe) and by ICU expressions.
  9875. *
  9876. * See the {\@linkDocs guide/i18n#setting-up-locale i18n guide} for more information.
  9877. *
  9878. * ### Example
  9879. *
  9880. * ```typescript
  9881. * import { LOCALE_ID } from '\@angular/core';
  9882. * import { platformBrowserDynamic } from '\@angular/platform-browser-dynamic';
  9883. * import { AppModule } from './app/app.module';
  9884. *
  9885. * platformBrowserDynamic().bootstrapModule(AppModule, {
  9886. * providers: [{provide: LOCALE_ID, useValue: 'en-US' }]
  9887. * });
  9888. * ```
  9889. *
  9890. * \@experimental i18n support is experimental.
  9891. */
  9892. var LOCALE_ID = new InjectionToken('LocaleId');
  9893. /**
  9894. * Use this token at bootstrap to provide the content of your translation file (`xtb`,
  9895. * `xlf` or `xlf2`) when you want to translate your application in another language.
  9896. *
  9897. * See the {\@linkDocs guide/i18n#merge i18n guide} for more information.
  9898. *
  9899. * ### Example
  9900. *
  9901. * ```typescript
  9902. * import { TRANSLATIONS } from '\@angular/core';
  9903. * import { platformBrowserDynamic } from '\@angular/platform-browser-dynamic';
  9904. * import { AppModule } from './app/app.module';
  9905. *
  9906. * // content of your translation file
  9907. * const translations = '....';
  9908. *
  9909. * platformBrowserDynamic().bootstrapModule(AppModule, {
  9910. * providers: [{provide: TRANSLATIONS, useValue: translations }]
  9911. * });
  9912. * ```
  9913. *
  9914. * \@experimental i18n support is experimental.
  9915. */
  9916. var TRANSLATIONS = new InjectionToken('Translations');
  9917. /**
  9918. * Provide this token at bootstrap to set the format of your {\@link TRANSLATIONS}: `xtb`,
  9919. * `xlf` or `xlf2`.
  9920. *
  9921. * See the {\@linkDocs guide/i18n#merge i18n guide} for more information.
  9922. *
  9923. * ### Example
  9924. *
  9925. * ```typescript
  9926. * import { TRANSLATIONS_FORMAT } from '\@angular/core';
  9927. * import { platformBrowserDynamic } from '\@angular/platform-browser-dynamic';
  9928. * import { AppModule } from './app/app.module';
  9929. *
  9930. * platformBrowserDynamic().bootstrapModule(AppModule, {
  9931. * providers: [{provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }]
  9932. * });
  9933. * ```
  9934. *
  9935. * \@experimental i18n support is experimental.
  9936. */
  9937. var TRANSLATIONS_FORMAT = new InjectionToken('TranslationsFormat');
  9938. /** @enum {number} */
  9939. var MissingTranslationStrategy = {
  9940. Error: 0,
  9941. Warning: 1,
  9942. Ignore: 2,
  9943. };
  9944. MissingTranslationStrategy[MissingTranslationStrategy.Error] = "Error";
  9945. MissingTranslationStrategy[MissingTranslationStrategy.Warning] = "Warning";
  9946. MissingTranslationStrategy[MissingTranslationStrategy.Ignore] = "Ignore";
  9947. /**
  9948. * @fileoverview added by tsickle
  9949. * @suppress {checkTypes} checked by tsc
  9950. */
  9951. /**
  9952. * @license
  9953. * Copyright Google Inc. All Rights Reserved.
  9954. *
  9955. * Use of this source code is governed by an MIT-style license that can be
  9956. * found in the LICENSE file at https://angular.io/license
  9957. */
  9958. /**
  9959. * @return {?}
  9960. */
  9961. function _iterableDiffersFactory() {
  9962. return defaultIterableDiffers;
  9963. }
  9964. /**
  9965. * @return {?}
  9966. */
  9967. function _keyValueDiffersFactory() {
  9968. return defaultKeyValueDiffers;
  9969. }
  9970. /**
  9971. * @param {?=} locale
  9972. * @return {?}
  9973. */
  9974. function _localeFactory(locale) {
  9975. return locale || 'en-US';
  9976. }
  9977. /**
  9978. * This module includes the providers of \@angular/core that are needed
  9979. * to bootstrap components via `ApplicationRef`.
  9980. *
  9981. * \@experimental
  9982. */
  9983. var ApplicationModule = /** @class */ (function () {
  9984. // Inject ApplicationRef to make it eager...
  9985. function ApplicationModule(appRef) {
  9986. }
  9987. ApplicationModule.decorators = [
  9988. { type: NgModule, args: [{
  9989. providers: [
  9990. ApplicationRef,
  9991. ApplicationInitStatus,
  9992. Compiler,
  9993. APP_ID_RANDOM_PROVIDER,
  9994. { provide: IterableDiffers, useFactory: _iterableDiffersFactory },
  9995. { provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory },
  9996. {
  9997. provide: LOCALE_ID,
  9998. useFactory: _localeFactory,
  9999. deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]
  10000. },
  10001. ]
  10002. },] },
  10003. ];
  10004. /** @nocollapse */
  10005. ApplicationModule.ctorParameters = function () { return [
  10006. { type: ApplicationRef, },
  10007. ]; };
  10008. return ApplicationModule;
  10009. }());
  10010. /**
  10011. * @fileoverview added by tsickle
  10012. * @suppress {checkTypes} checked by tsc
  10013. */
  10014. /**
  10015. * @license
  10016. * Copyright Google Inc. All Rights Reserved.
  10017. *
  10018. * Use of this source code is governed by an MIT-style license that can be
  10019. * found in the LICENSE file at https://angular.io/license
  10020. */
  10021. /** @enum {number} */
  10022. var SecurityContext = {
  10023. NONE: 0,
  10024. HTML: 1,
  10025. STYLE: 2,
  10026. SCRIPT: 3,
  10027. URL: 4,
  10028. RESOURCE_URL: 5,
  10029. };
  10030. SecurityContext[SecurityContext.NONE] = "NONE";
  10031. SecurityContext[SecurityContext.HTML] = "HTML";
  10032. SecurityContext[SecurityContext.STYLE] = "STYLE";
  10033. SecurityContext[SecurityContext.SCRIPT] = "SCRIPT";
  10034. SecurityContext[SecurityContext.URL] = "URL";
  10035. SecurityContext[SecurityContext.RESOURCE_URL] = "RESOURCE_URL";
  10036. /**
  10037. * Sanitizer is used by the views to sanitize potentially dangerous values.
  10038. *
  10039. * \@stable
  10040. * @abstract
  10041. */
  10042. var Sanitizer = /** @class */ (function () {
  10043. function Sanitizer() {
  10044. }
  10045. return Sanitizer;
  10046. }());
  10047. /**
  10048. * @fileoverview added by tsickle
  10049. * @suppress {checkTypes} checked by tsc
  10050. */
  10051. /**
  10052. * @license
  10053. * Copyright Google Inc. All Rights Reserved.
  10054. *
  10055. * Use of this source code is governed by an MIT-style license that can be
  10056. * found in the LICENSE file at https://angular.io/license
  10057. */
  10058. // unsupported: template constraints.
  10059. /**
  10060. * Factory for ViewDefinitions/NgModuleDefinitions.
  10061. * We use a function so we can reexeute it in case an error happens and use the given logger
  10062. * function to log the error from the definition of the node, which is shown in all browser
  10063. * logs.
  10064. * @record
  10065. * @template D
  10066. */
  10067. /**
  10068. * Function to call console.error at the right source location. This is an indirection
  10069. * via another function as browser will log the location that actually called
  10070. * `console.error`.
  10071. * @record
  10072. */
  10073. // unsupported: template constraints.
  10074. /**
  10075. * @record
  10076. * @template DF
  10077. */
  10078. /**
  10079. * @record
  10080. */
  10081. /**
  10082. * @record
  10083. */
  10084. /**
  10085. * @record
  10086. */
  10087. /**
  10088. * @record
  10089. */
  10090. /**
  10091. * @record
  10092. */
  10093. /**
  10094. * @record
  10095. */
  10096. /**
  10097. * @record
  10098. */
  10099. /**
  10100. * A node definition in the view.
  10101. *
  10102. * Note: We use one type for all nodes so that loops that loop over all nodes
  10103. * of a ViewDefinition stay monomorphic!
  10104. * @record
  10105. */
  10106. /**
  10107. * @record
  10108. */
  10109. /**
  10110. * @record
  10111. */
  10112. /**
  10113. * @record
  10114. */
  10115. /**
  10116. * @record
  10117. */
  10118. /**
  10119. * @record
  10120. */
  10121. /**
  10122. * @record
  10123. */
  10124. /**
  10125. * @record
  10126. */
  10127. /**
  10128. * @record
  10129. */
  10130. /**
  10131. * @record
  10132. */
  10133. /**
  10134. * @record
  10135. */
  10136. /**
  10137. * @record
  10138. */
  10139. /**
  10140. * @record
  10141. */
  10142. /**
  10143. * View instance data.
  10144. * Attention: Adding fields to this is performance sensitive!
  10145. * @record
  10146. */
  10147. /**
  10148. * @param {?} view
  10149. * @param {?} priorInitState
  10150. * @param {?} newInitState
  10151. * @return {?}
  10152. */
  10153. function shiftInitState(view, priorInitState, newInitState) {
  10154. // Only update the InitState if we are currently in the prior state.
  10155. // For example, only move into CallingInit if we are in BeforeInit. Only
  10156. // move into CallingContentInit if we are in CallingInit. Normally this will
  10157. // always be true because of how checkCycle is called in checkAndUpdateView.
  10158. // However, if checkAndUpdateView is called recursively or if an exception is
  10159. // thrown while checkAndUpdateView is running, checkAndUpdateView starts over
  10160. // from the beginning. This ensures the state is monotonically increasing,
  10161. // terminating in the AfterInit state, which ensures the Init methods are called
  10162. // at least once and only once.
  10163. var /** @type {?} */ state = view.state;
  10164. var /** @type {?} */ initState = state & 1792;
  10165. if (initState === priorInitState) {
  10166. view.state = (state & ~1792 /* InitState_Mask */) | newInitState;
  10167. view.initIndex = -1;
  10168. return true;
  10169. }
  10170. return initState === newInitState;
  10171. }
  10172. /**
  10173. * @param {?} view
  10174. * @param {?} initState
  10175. * @param {?} index
  10176. * @return {?}
  10177. */
  10178. function shouldCallLifecycleInitHook(view, initState, index) {
  10179. if ((view.state & 1792 /* InitState_Mask */) === initState && view.initIndex <= index) {
  10180. view.initIndex = index + 1;
  10181. return true;
  10182. }
  10183. return false;
  10184. }
  10185. /**
  10186. * @record
  10187. */
  10188. /**
  10189. * Data for an instantiated NodeType.Text.
  10190. *
  10191. * Attention: Adding fields to this is performance sensitive!
  10192. * @record
  10193. */
  10194. /**
  10195. * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
  10196. * @param {?} view
  10197. * @param {?} index
  10198. * @return {?}
  10199. */
  10200. function asTextData(view, index) {
  10201. return /** @type {?} */ (view.nodes[index]);
  10202. }
  10203. /**
  10204. * Data for an instantiated NodeType.Element.
  10205. *
  10206. * Attention: Adding fields to this is performance sensitive!
  10207. * @record
  10208. */
  10209. /**
  10210. * @record
  10211. */
  10212. /**
  10213. * @record
  10214. */
  10215. /**
  10216. * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
  10217. * @param {?} view
  10218. * @param {?} index
  10219. * @return {?}
  10220. */
  10221. function asElementData(view, index) {
  10222. return /** @type {?} */ (view.nodes[index]);
  10223. }
  10224. /**
  10225. * Data for an instantiated NodeType.Provider.
  10226. *
  10227. * Attention: Adding fields to this is performance sensitive!
  10228. * @record
  10229. */
  10230. /**
  10231. * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
  10232. * @param {?} view
  10233. * @param {?} index
  10234. * @return {?}
  10235. */
  10236. function asProviderData(view, index) {
  10237. return /** @type {?} */ (view.nodes[index]);
  10238. }
  10239. /**
  10240. * Data for an instantiated NodeType.PureExpression.
  10241. *
  10242. * Attention: Adding fields to this is performance sensitive!
  10243. * @record
  10244. */
  10245. /**
  10246. * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
  10247. * @param {?} view
  10248. * @param {?} index
  10249. * @return {?}
  10250. */
  10251. function asPureExpressionData(view, index) {
  10252. return /** @type {?} */ (view.nodes[index]);
  10253. }
  10254. /**
  10255. * Accessor for view.nodes, enforcing that every usage site stays monomorphic.
  10256. * @param {?} view
  10257. * @param {?} index
  10258. * @return {?}
  10259. */
  10260. function asQueryList(view, index) {
  10261. return /** @type {?} */ (view.nodes[index]);
  10262. }
  10263. /**
  10264. * @record
  10265. */
  10266. /**
  10267. * @abstract
  10268. */
  10269. var DebugContext = /** @class */ (function () {
  10270. function DebugContext() {
  10271. }
  10272. return DebugContext;
  10273. }());
  10274. /**
  10275. * @record
  10276. */
  10277. /**
  10278. * This object is used to prevent cycles in the source files and to have a place where
  10279. * debug mode can hook it. It is lazily filled when `isDevMode` is known.
  10280. */
  10281. var Services = {
  10282. setCurrentNode: /** @type {?} */ ((undefined)),
  10283. createRootView: /** @type {?} */ ((undefined)),
  10284. createEmbeddedView: /** @type {?} */ ((undefined)),
  10285. createComponentView: /** @type {?} */ ((undefined)),
  10286. createNgModuleRef: /** @type {?} */ ((undefined)),
  10287. overrideProvider: /** @type {?} */ ((undefined)),
  10288. overrideComponentView: /** @type {?} */ ((undefined)),
  10289. clearOverrides: /** @type {?} */ ((undefined)),
  10290. checkAndUpdateView: /** @type {?} */ ((undefined)),
  10291. checkNoChangesView: /** @type {?} */ ((undefined)),
  10292. destroyView: /** @type {?} */ ((undefined)),
  10293. resolveDep: /** @type {?} */ ((undefined)),
  10294. createDebugContext: /** @type {?} */ ((undefined)),
  10295. handleEvent: /** @type {?} */ ((undefined)),
  10296. updateDirectives: /** @type {?} */ ((undefined)),
  10297. updateRenderer: /** @type {?} */ ((undefined)),
  10298. dirtyParentQueries: /** @type {?} */ ((undefined)),
  10299. };
  10300. /**
  10301. * @fileoverview added by tsickle
  10302. * @suppress {checkTypes} checked by tsc
  10303. */
  10304. /**
  10305. * @license
  10306. * Copyright Google Inc. All Rights Reserved.
  10307. *
  10308. * Use of this source code is governed by an MIT-style license that can be
  10309. * found in the LICENSE file at https://angular.io/license
  10310. */
  10311. /**
  10312. * @param {?} context
  10313. * @param {?} oldValue
  10314. * @param {?} currValue
  10315. * @param {?} isFirstCheck
  10316. * @return {?}
  10317. */
  10318. function expressionChangedAfterItHasBeenCheckedError(context, oldValue, currValue, isFirstCheck) {
  10319. var /** @type {?} */ msg = "ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '" + oldValue + "'. Current value: '" + currValue + "'.";
  10320. if (isFirstCheck) {
  10321. msg +=
  10322. " It seems like the view has been created after its parent and its children have been dirty checked." +
  10323. " Has it been created in a change detection hook ?";
  10324. }
  10325. return viewDebugError(msg, context);
  10326. }
  10327. /**
  10328. * @param {?} err
  10329. * @param {?} context
  10330. * @return {?}
  10331. */
  10332. function viewWrappedDebugError(err, context) {
  10333. if (!(err instanceof Error)) {
  10334. // errors that are not Error instances don't have a stack,
  10335. // so it is ok to wrap them into a new Error object...
  10336. err = new Error(err.toString());
  10337. }
  10338. _addDebugContext(err, context);
  10339. return err;
  10340. }
  10341. /**
  10342. * @param {?} msg
  10343. * @param {?} context
  10344. * @return {?}
  10345. */
  10346. function viewDebugError(msg, context) {
  10347. var /** @type {?} */ err = new Error(msg);
  10348. _addDebugContext(err, context);
  10349. return err;
  10350. }
  10351. /**
  10352. * @param {?} err
  10353. * @param {?} context
  10354. * @return {?}
  10355. */
  10356. function _addDebugContext(err, context) {
  10357. (/** @type {?} */ (err))[ERROR_DEBUG_CONTEXT] = context;
  10358. (/** @type {?} */ (err))[ERROR_LOGGER] = context.logError.bind(context);
  10359. }
  10360. /**
  10361. * @param {?} err
  10362. * @return {?}
  10363. */
  10364. function isViewDebugError(err) {
  10365. return !!getDebugContext(err);
  10366. }
  10367. /**
  10368. * @param {?} action
  10369. * @return {?}
  10370. */
  10371. function viewDestroyedError(action) {
  10372. return new Error("ViewDestroyedError: Attempt to use a destroyed view: " + action);
  10373. }
  10374. /**
  10375. * @fileoverview added by tsickle
  10376. * @suppress {checkTypes} checked by tsc
  10377. */
  10378. /**
  10379. * @license
  10380. * Copyright Google Inc. All Rights Reserved.
  10381. *
  10382. * Use of this source code is governed by an MIT-style license that can be
  10383. * found in the LICENSE file at https://angular.io/license
  10384. */
  10385. var NOOP = function () { };
  10386. var _tokenKeyCache = new Map();
  10387. /**
  10388. * @param {?} token
  10389. * @return {?}
  10390. */
  10391. function tokenKey(token) {
  10392. var /** @type {?} */ key = _tokenKeyCache.get(token);
  10393. if (!key) {
  10394. key = stringify(token) + '_' + _tokenKeyCache.size;
  10395. _tokenKeyCache.set(token, key);
  10396. }
  10397. return key;
  10398. }
  10399. /**
  10400. * @param {?} view
  10401. * @param {?} nodeIdx
  10402. * @param {?} bindingIdx
  10403. * @param {?} value
  10404. * @return {?}
  10405. */
  10406. function unwrapValue(view, nodeIdx, bindingIdx, value) {
  10407. if (WrappedValue.isWrapped(value)) {
  10408. value = WrappedValue.unwrap(value);
  10409. var /** @type {?} */ globalBindingIdx = view.def.nodes[nodeIdx].bindingIndex + bindingIdx;
  10410. var /** @type {?} */ oldValue = WrappedValue.unwrap(view.oldValues[globalBindingIdx]);
  10411. view.oldValues[globalBindingIdx] = new WrappedValue(oldValue);
  10412. }
  10413. return value;
  10414. }
  10415. var UNDEFINED_RENDERER_TYPE_ID = '$$undefined';
  10416. var EMPTY_RENDERER_TYPE_ID = '$$empty';
  10417. /**
  10418. * @param {?} values
  10419. * @return {?}
  10420. */
  10421. function createRendererType2(values) {
  10422. return {
  10423. id: UNDEFINED_RENDERER_TYPE_ID,
  10424. styles: values.styles,
  10425. encapsulation: values.encapsulation,
  10426. data: values.data
  10427. };
  10428. }
  10429. var _renderCompCount = 0;
  10430. /**
  10431. * @param {?=} type
  10432. * @return {?}
  10433. */
  10434. function resolveRendererType2(type) {
  10435. if (type && type.id === UNDEFINED_RENDERER_TYPE_ID) {
  10436. // first time we see this RendererType2. Initialize it...
  10437. var /** @type {?} */ isFilled = ((type.encapsulation != null && type.encapsulation !== ViewEncapsulation.None) ||
  10438. type.styles.length || Object.keys(type.data).length);
  10439. if (isFilled) {
  10440. type.id = "c" + _renderCompCount++;
  10441. }
  10442. else {
  10443. type.id = EMPTY_RENDERER_TYPE_ID;
  10444. }
  10445. }
  10446. if (type && type.id === EMPTY_RENDERER_TYPE_ID) {
  10447. type = null;
  10448. }
  10449. return type || null;
  10450. }
  10451. /**
  10452. * @param {?} view
  10453. * @param {?} def
  10454. * @param {?} bindingIdx
  10455. * @param {?} value
  10456. * @return {?}
  10457. */
  10458. function checkBinding(view, def, bindingIdx, value) {
  10459. var /** @type {?} */ oldValues = view.oldValues;
  10460. if ((view.state & 2 /* FirstCheck */) ||
  10461. !looseIdentical(oldValues[def.bindingIndex + bindingIdx], value)) {
  10462. return true;
  10463. }
  10464. return false;
  10465. }
  10466. /**
  10467. * @param {?} view
  10468. * @param {?} def
  10469. * @param {?} bindingIdx
  10470. * @param {?} value
  10471. * @return {?}
  10472. */
  10473. function checkAndUpdateBinding(view, def, bindingIdx, value) {
  10474. if (checkBinding(view, def, bindingIdx, value)) {
  10475. view.oldValues[def.bindingIndex + bindingIdx] = value;
  10476. return true;
  10477. }
  10478. return false;
  10479. }
  10480. /**
  10481. * @param {?} view
  10482. * @param {?} def
  10483. * @param {?} bindingIdx
  10484. * @param {?} value
  10485. * @return {?}
  10486. */
  10487. function checkBindingNoChanges(view, def, bindingIdx, value) {
  10488. var /** @type {?} */ oldValue = view.oldValues[def.bindingIndex + bindingIdx];
  10489. if ((view.state & 1 /* BeforeFirstCheck */) || !devModeEqual(oldValue, value)) {
  10490. var /** @type {?} */ bindingName = def.bindings[bindingIdx].name;
  10491. throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, def.nodeIndex), bindingName + ": " + oldValue, bindingName + ": " + value, (view.state & 1 /* BeforeFirstCheck */) !== 0);
  10492. }
  10493. }
  10494. /**
  10495. * @param {?} view
  10496. * @return {?}
  10497. */
  10498. function markParentViewsForCheck(view) {
  10499. var /** @type {?} */ currView = view;
  10500. while (currView) {
  10501. if (currView.def.flags & 2 /* OnPush */) {
  10502. currView.state |= 8 /* ChecksEnabled */;
  10503. }
  10504. currView = currView.viewContainerParent || currView.parent;
  10505. }
  10506. }
  10507. /**
  10508. * @param {?} view
  10509. * @param {?} endView
  10510. * @return {?}
  10511. */
  10512. function markParentViewsForCheckProjectedViews(view, endView) {
  10513. var /** @type {?} */ currView = view;
  10514. while (currView && currView !== endView) {
  10515. currView.state |= 64 /* CheckProjectedViews */;
  10516. currView = currView.viewContainerParent || currView.parent;
  10517. }
  10518. }
  10519. /**
  10520. * @param {?} view
  10521. * @param {?} nodeIndex
  10522. * @param {?} eventName
  10523. * @param {?} event
  10524. * @return {?}
  10525. */
  10526. function dispatchEvent(view, nodeIndex, eventName, event) {
  10527. try {
  10528. var /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];
  10529. var /** @type {?} */ startView = nodeDef.flags & 33554432 /* ComponentView */ ?
  10530. asElementData(view, nodeIndex).componentView :
  10531. view;
  10532. markParentViewsForCheck(startView);
  10533. return Services.handleEvent(view, nodeIndex, eventName, event);
  10534. }
  10535. catch (/** @type {?} */ e) {
  10536. // Attention: Don't rethrow, as it would cancel Observable subscriptions!
  10537. view.root.errorHandler.handleError(e);
  10538. }
  10539. }
  10540. /**
  10541. * @param {?} view
  10542. * @return {?}
  10543. */
  10544. function declaredViewContainer(view) {
  10545. if (view.parent) {
  10546. var /** @type {?} */ parentView = view.parent;
  10547. return asElementData(parentView, /** @type {?} */ ((view.parentNodeDef)).nodeIndex);
  10548. }
  10549. return null;
  10550. }
  10551. /**
  10552. * for component views, this is the host element.
  10553. * for embedded views, this is the index of the parent node
  10554. * that contains the view container.
  10555. * @param {?} view
  10556. * @return {?}
  10557. */
  10558. function viewParentEl(view) {
  10559. var /** @type {?} */ parentView = view.parent;
  10560. if (parentView) {
  10561. return /** @type {?} */ ((view.parentNodeDef)).parent;
  10562. }
  10563. else {
  10564. return null;
  10565. }
  10566. }
  10567. /**
  10568. * @param {?} view
  10569. * @param {?} def
  10570. * @return {?}
  10571. */
  10572. function renderNode(view, def) {
  10573. switch (def.flags & 201347067 /* Types */) {
  10574. case 1 /* TypeElement */:
  10575. return asElementData(view, def.nodeIndex).renderElement;
  10576. case 2 /* TypeText */:
  10577. return asTextData(view, def.nodeIndex).renderText;
  10578. }
  10579. }
  10580. /**
  10581. * @param {?} target
  10582. * @param {?} name
  10583. * @return {?}
  10584. */
  10585. function elementEventFullName(target, name) {
  10586. return target ? target + ":" + name : name;
  10587. }
  10588. /**
  10589. * @param {?} view
  10590. * @return {?}
  10591. */
  10592. function isComponentView(view) {
  10593. return !!view.parent && !!(/** @type {?} */ ((view.parentNodeDef)).flags & 32768 /* Component */);
  10594. }
  10595. /**
  10596. * @param {?} view
  10597. * @return {?}
  10598. */
  10599. function isEmbeddedView(view) {
  10600. return !!view.parent && !(/** @type {?} */ ((view.parentNodeDef)).flags & 32768 /* Component */);
  10601. }
  10602. /**
  10603. * @param {?} queryId
  10604. * @return {?}
  10605. */
  10606. function filterQueryId(queryId) {
  10607. return 1 << (queryId % 32);
  10608. }
  10609. /**
  10610. * @param {?} matchedQueriesDsl
  10611. * @return {?}
  10612. */
  10613. function splitMatchedQueriesDsl(matchedQueriesDsl) {
  10614. var /** @type {?} */ matchedQueries = {};
  10615. var /** @type {?} */ matchedQueryIds = 0;
  10616. var /** @type {?} */ references = {};
  10617. if (matchedQueriesDsl) {
  10618. matchedQueriesDsl.forEach(function (_a) {
  10619. var queryId = _a[0], valueType = _a[1];
  10620. if (typeof queryId === 'number') {
  10621. matchedQueries[queryId] = valueType;
  10622. matchedQueryIds |= filterQueryId(queryId);
  10623. }
  10624. else {
  10625. references[queryId] = valueType;
  10626. }
  10627. });
  10628. }
  10629. return { matchedQueries: matchedQueries, references: references, matchedQueryIds: matchedQueryIds };
  10630. }
  10631. /**
  10632. * @param {?} deps
  10633. * @param {?=} sourceName
  10634. * @return {?}
  10635. */
  10636. function splitDepsDsl(deps, sourceName) {
  10637. return deps.map(function (value) {
  10638. var /** @type {?} */ token;
  10639. var /** @type {?} */ flags;
  10640. if (Array.isArray(value)) {
  10641. flags = value[0], token = value[1];
  10642. }
  10643. else {
  10644. flags = 0 /* None */;
  10645. token = value;
  10646. }
  10647. if (token && (typeof token === 'function' || typeof token === 'object') && sourceName) {
  10648. Object.defineProperty(token, SOURCE, { value: sourceName, configurable: true });
  10649. }
  10650. return { flags: flags, token: token, tokenKey: tokenKey(token) };
  10651. });
  10652. }
  10653. /**
  10654. * @param {?} view
  10655. * @param {?} renderHost
  10656. * @param {?} def
  10657. * @return {?}
  10658. */
  10659. function getParentRenderElement(view, renderHost, def) {
  10660. var /** @type {?} */ renderParent = def.renderParent;
  10661. if (renderParent) {
  10662. if ((renderParent.flags & 1 /* TypeElement */) === 0 ||
  10663. (renderParent.flags & 33554432 /* ComponentView */) === 0 ||
  10664. (/** @type {?} */ ((renderParent.element)).componentRendererType && /** @type {?} */ ((/** @type {?} */ ((renderParent.element)).componentRendererType)).encapsulation === ViewEncapsulation.Native)) {
  10665. // only children of non components, or children of components with native encapsulation should
  10666. // be attached.
  10667. return asElementData(view, /** @type {?} */ ((def.renderParent)).nodeIndex).renderElement;
  10668. }
  10669. }
  10670. else {
  10671. return renderHost;
  10672. }
  10673. }
  10674. var DEFINITION_CACHE = new WeakMap();
  10675. /**
  10676. * @template D
  10677. * @param {?} factory
  10678. * @return {?}
  10679. */
  10680. function resolveDefinition(factory) {
  10681. var /** @type {?} */ value = /** @type {?} */ (((DEFINITION_CACHE.get(factory))));
  10682. if (!value) {
  10683. value = factory(function () { return NOOP; });
  10684. value.factory = factory;
  10685. DEFINITION_CACHE.set(factory, value);
  10686. }
  10687. return value;
  10688. }
  10689. /**
  10690. * @param {?} view
  10691. * @return {?}
  10692. */
  10693. function rootRenderNodes(view) {
  10694. var /** @type {?} */ renderNodes = [];
  10695. visitRootRenderNodes(view, 0 /* Collect */, undefined, undefined, renderNodes);
  10696. return renderNodes;
  10697. }
  10698. /**
  10699. * @param {?} view
  10700. * @param {?} action
  10701. * @param {?} parentNode
  10702. * @param {?} nextSibling
  10703. * @param {?=} target
  10704. * @return {?}
  10705. */
  10706. function visitRootRenderNodes(view, action, parentNode, nextSibling, target) {
  10707. // We need to re-compute the parent node in case the nodes have been moved around manually
  10708. if (action === 3 /* RemoveChild */) {
  10709. parentNode = view.renderer.parentNode(renderNode(view, /** @type {?} */ ((view.def.lastRenderRootNode))));
  10710. }
  10711. visitSiblingRenderNodes(view, action, 0, view.def.nodes.length - 1, parentNode, nextSibling, target);
  10712. }
  10713. /**
  10714. * @param {?} view
  10715. * @param {?} action
  10716. * @param {?} startIndex
  10717. * @param {?} endIndex
  10718. * @param {?} parentNode
  10719. * @param {?} nextSibling
  10720. * @param {?=} target
  10721. * @return {?}
  10722. */
  10723. function visitSiblingRenderNodes(view, action, startIndex, endIndex, parentNode, nextSibling, target) {
  10724. for (var /** @type {?} */ i = startIndex; i <= endIndex; i++) {
  10725. var /** @type {?} */ nodeDef = view.def.nodes[i];
  10726. if (nodeDef.flags & (1 /* TypeElement */ | 2 /* TypeText */ | 8 /* TypeNgContent */)) {
  10727. visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target);
  10728. }
  10729. // jump to next sibling
  10730. i += nodeDef.childCount;
  10731. }
  10732. }
  10733. /**
  10734. * @param {?} view
  10735. * @param {?} ngContentIndex
  10736. * @param {?} action
  10737. * @param {?} parentNode
  10738. * @param {?} nextSibling
  10739. * @param {?=} target
  10740. * @return {?}
  10741. */
  10742. function visitProjectedRenderNodes(view, ngContentIndex, action, parentNode, nextSibling, target) {
  10743. var /** @type {?} */ compView = view;
  10744. while (compView && !isComponentView(compView)) {
  10745. compView = compView.parent;
  10746. }
  10747. var /** @type {?} */ hostView = /** @type {?} */ ((compView)).parent;
  10748. var /** @type {?} */ hostElDef = viewParentEl(/** @type {?} */ ((compView)));
  10749. var /** @type {?} */ startIndex = /** @type {?} */ ((hostElDef)).nodeIndex + 1;
  10750. var /** @type {?} */ endIndex = /** @type {?} */ ((hostElDef)).nodeIndex + /** @type {?} */ ((hostElDef)).childCount;
  10751. for (var /** @type {?} */ i = startIndex; i <= endIndex; i++) {
  10752. var /** @type {?} */ nodeDef = /** @type {?} */ ((hostView)).def.nodes[i];
  10753. if (nodeDef.ngContentIndex === ngContentIndex) {
  10754. visitRenderNode(/** @type {?} */ ((hostView)), nodeDef, action, parentNode, nextSibling, target);
  10755. }
  10756. // jump to next sibling
  10757. i += nodeDef.childCount;
  10758. }
  10759. if (!/** @type {?} */ ((hostView)).parent) {
  10760. // a root view
  10761. var /** @type {?} */ projectedNodes = view.root.projectableNodes[ngContentIndex];
  10762. if (projectedNodes) {
  10763. for (var /** @type {?} */ i = 0; i < projectedNodes.length; i++) {
  10764. execRenderNodeAction(view, projectedNodes[i], action, parentNode, nextSibling, target);
  10765. }
  10766. }
  10767. }
  10768. }
  10769. /**
  10770. * @param {?} view
  10771. * @param {?} nodeDef
  10772. * @param {?} action
  10773. * @param {?} parentNode
  10774. * @param {?} nextSibling
  10775. * @param {?=} target
  10776. * @return {?}
  10777. */
  10778. function visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target) {
  10779. if (nodeDef.flags & 8 /* TypeNgContent */) {
  10780. visitProjectedRenderNodes(view, /** @type {?} */ ((nodeDef.ngContent)).index, action, parentNode, nextSibling, target);
  10781. }
  10782. else {
  10783. var /** @type {?} */ rn = renderNode(view, nodeDef);
  10784. if (action === 3 /* RemoveChild */ && (nodeDef.flags & 33554432 /* ComponentView */) &&
  10785. (nodeDef.bindingFlags & 48 /* CatSyntheticProperty */)) {
  10786. // Note: we might need to do both actions.
  10787. if (nodeDef.bindingFlags & (16 /* SyntheticProperty */)) {
  10788. execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
  10789. }
  10790. if (nodeDef.bindingFlags & (32 /* SyntheticHostProperty */)) {
  10791. var /** @type {?} */ compView = asElementData(view, nodeDef.nodeIndex).componentView;
  10792. execRenderNodeAction(compView, rn, action, parentNode, nextSibling, target);
  10793. }
  10794. }
  10795. else {
  10796. execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);
  10797. }
  10798. if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
  10799. var /** @type {?} */ embeddedViews = /** @type {?} */ ((asElementData(view, nodeDef.nodeIndex).viewContainer))._embeddedViews;
  10800. for (var /** @type {?} */ k = 0; k < embeddedViews.length; k++) {
  10801. visitRootRenderNodes(embeddedViews[k], action, parentNode, nextSibling, target);
  10802. }
  10803. }
  10804. if (nodeDef.flags & 1 /* TypeElement */ && !/** @type {?} */ ((nodeDef.element)).name) {
  10805. visitSiblingRenderNodes(view, action, nodeDef.nodeIndex + 1, nodeDef.nodeIndex + nodeDef.childCount, parentNode, nextSibling, target);
  10806. }
  10807. }
  10808. }
  10809. /**
  10810. * @param {?} view
  10811. * @param {?} renderNode
  10812. * @param {?} action
  10813. * @param {?} parentNode
  10814. * @param {?} nextSibling
  10815. * @param {?=} target
  10816. * @return {?}
  10817. */
  10818. function execRenderNodeAction(view, renderNode, action, parentNode, nextSibling, target) {
  10819. var /** @type {?} */ renderer = view.renderer;
  10820. switch (action) {
  10821. case 1 /* AppendChild */:
  10822. renderer.appendChild(parentNode, renderNode);
  10823. break;
  10824. case 2 /* InsertBefore */:
  10825. renderer.insertBefore(parentNode, renderNode, nextSibling);
  10826. break;
  10827. case 3 /* RemoveChild */:
  10828. renderer.removeChild(parentNode, renderNode);
  10829. break;
  10830. case 0 /* Collect */:
  10831. /** @type {?} */ ((target)).push(renderNode);
  10832. break;
  10833. }
  10834. }
  10835. var NS_PREFIX_RE = /^:([^:]+):(.+)$/;
  10836. /**
  10837. * @param {?} name
  10838. * @return {?}
  10839. */
  10840. function splitNamespace(name) {
  10841. if (name[0] === ':') {
  10842. var /** @type {?} */ match = /** @type {?} */ ((name.match(NS_PREFIX_RE)));
  10843. return [match[1], match[2]];
  10844. }
  10845. return ['', name];
  10846. }
  10847. /**
  10848. * @param {?} bindings
  10849. * @return {?}
  10850. */
  10851. function calcBindingFlags(bindings) {
  10852. var /** @type {?} */ flags = 0;
  10853. for (var /** @type {?} */ i = 0; i < bindings.length; i++) {
  10854. flags |= bindings[i].flags;
  10855. }
  10856. return flags;
  10857. }
  10858. /**
  10859. * @param {?} valueCount
  10860. * @param {?} constAndInterp
  10861. * @return {?}
  10862. */
  10863. function interpolate(valueCount, constAndInterp) {
  10864. var /** @type {?} */ result = '';
  10865. for (var /** @type {?} */ i = 0; i < valueCount * 2; i = i + 2) {
  10866. result = result + constAndInterp[i] + _toStringWithNull(constAndInterp[i + 1]);
  10867. }
  10868. return result + constAndInterp[valueCount * 2];
  10869. }
  10870. /**
  10871. * @param {?} valueCount
  10872. * @param {?} c0
  10873. * @param {?} a1
  10874. * @param {?} c1
  10875. * @param {?=} a2
  10876. * @param {?=} c2
  10877. * @param {?=} a3
  10878. * @param {?=} c3
  10879. * @param {?=} a4
  10880. * @param {?=} c4
  10881. * @param {?=} a5
  10882. * @param {?=} c5
  10883. * @param {?=} a6
  10884. * @param {?=} c6
  10885. * @param {?=} a7
  10886. * @param {?=} c7
  10887. * @param {?=} a8
  10888. * @param {?=} c8
  10889. * @param {?=} a9
  10890. * @param {?=} c9
  10891. * @return {?}
  10892. */
  10893. function inlineInterpolate(valueCount, c0, a1, c1, a2, c2, a3, c3, a4, c4, a5, c5, a6, c6, a7, c7, a8, c8, a9, c9) {
  10894. switch (valueCount) {
  10895. case 1:
  10896. return c0 + _toStringWithNull(a1) + c1;
  10897. case 2:
  10898. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2;
  10899. case 3:
  10900. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10901. c3;
  10902. case 4:
  10903. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10904. c3 + _toStringWithNull(a4) + c4;
  10905. case 5:
  10906. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10907. c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5;
  10908. case 6:
  10909. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10910. c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6;
  10911. case 7:
  10912. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10913. c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +
  10914. c6 + _toStringWithNull(a7) + c7;
  10915. case 8:
  10916. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10917. c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +
  10918. c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8;
  10919. case 9:
  10920. return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +
  10921. c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +
  10922. c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8 + _toStringWithNull(a9) + c9;
  10923. default:
  10924. throw new Error("Does not support more than 9 expressions");
  10925. }
  10926. }
  10927. /**
  10928. * @param {?} v
  10929. * @return {?}
  10930. */
  10931. function _toStringWithNull(v) {
  10932. return v != null ? v.toString() : '';
  10933. }
  10934. var EMPTY_ARRAY = [];
  10935. var EMPTY_MAP = {};
  10936. /**
  10937. * @fileoverview added by tsickle
  10938. * @suppress {checkTypes} checked by tsc
  10939. */
  10940. /**
  10941. * @license
  10942. * Copyright Google Inc. All Rights Reserved.
  10943. *
  10944. * Use of this source code is governed by an MIT-style license that can be
  10945. * found in the LICENSE file at https://angular.io/license
  10946. */
  10947. /**
  10948. * @param {?} flags
  10949. * @param {?} matchedQueriesDsl
  10950. * @param {?} ngContentIndex
  10951. * @param {?} childCount
  10952. * @param {?=} handleEvent
  10953. * @param {?=} templateFactory
  10954. * @return {?}
  10955. */
  10956. function anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleEvent, templateFactory) {
  10957. flags |= 1 /* TypeElement */;
  10958. var _a = splitMatchedQueriesDsl(matchedQueriesDsl), matchedQueries = _a.matchedQueries, references = _a.references, matchedQueryIds = _a.matchedQueryIds;
  10959. var /** @type {?} */ template = templateFactory ? resolveDefinition(templateFactory) : null;
  10960. return {
  10961. // will bet set by the view definition
  10962. nodeIndex: -1,
  10963. parent: null,
  10964. renderParent: null,
  10965. bindingIndex: -1,
  10966. outputIndex: -1,
  10967. // regular values
  10968. flags: flags,
  10969. checkIndex: -1,
  10970. childFlags: 0,
  10971. directChildFlags: 0,
  10972. childMatchedQueries: 0, matchedQueries: matchedQueries, matchedQueryIds: matchedQueryIds, references: references, ngContentIndex: ngContentIndex, childCount: childCount,
  10973. bindings: [],
  10974. bindingFlags: 0,
  10975. outputs: [],
  10976. element: {
  10977. ns: null,
  10978. name: null,
  10979. attrs: null, template: template,
  10980. componentProvider: null,
  10981. componentView: null,
  10982. componentRendererType: null,
  10983. publicProviders: null,
  10984. allProviders: null,
  10985. handleEvent: handleEvent || NOOP
  10986. },
  10987. provider: null,
  10988. text: null,
  10989. query: null,
  10990. ngContent: null
  10991. };
  10992. }
  10993. /**
  10994. * @param {?} checkIndex
  10995. * @param {?} flags
  10996. * @param {?} matchedQueriesDsl
  10997. * @param {?} ngContentIndex
  10998. * @param {?} childCount
  10999. * @param {?} namespaceAndName
  11000. * @param {?=} fixedAttrs
  11001. * @param {?=} bindings
  11002. * @param {?=} outputs
  11003. * @param {?=} handleEvent
  11004. * @param {?=} componentView
  11005. * @param {?=} componentRendererType
  11006. * @return {?}
  11007. */
  11008. function elementDef(checkIndex, flags, matchedQueriesDsl, ngContentIndex, childCount, namespaceAndName, fixedAttrs, bindings, outputs, handleEvent, componentView, componentRendererType) {
  11009. if (fixedAttrs === void 0) { fixedAttrs = []; }
  11010. if (!handleEvent) {
  11011. handleEvent = NOOP;
  11012. }
  11013. var _a = splitMatchedQueriesDsl(matchedQueriesDsl), matchedQueries = _a.matchedQueries, references = _a.references, matchedQueryIds = _a.matchedQueryIds;
  11014. var /** @type {?} */ ns = /** @type {?} */ ((null));
  11015. var /** @type {?} */ name = /** @type {?} */ ((null));
  11016. if (namespaceAndName) {
  11017. _b = splitNamespace(namespaceAndName), ns = _b[0], name = _b[1];
  11018. }
  11019. bindings = bindings || [];
  11020. var /** @type {?} */ bindingDefs = new Array(bindings.length);
  11021. for (var /** @type {?} */ i = 0; i < bindings.length; i++) {
  11022. var _c = bindings[i], bindingFlags = _c[0], namespaceAndName_1 = _c[1], suffixOrSecurityContext = _c[2];
  11023. var _d = splitNamespace(namespaceAndName_1), ns_1 = _d[0], name_1 = _d[1];
  11024. var /** @type {?} */ securityContext = /** @type {?} */ ((undefined));
  11025. var /** @type {?} */ suffix = /** @type {?} */ ((undefined));
  11026. switch (bindingFlags & 15 /* Types */) {
  11027. case 4 /* TypeElementStyle */:
  11028. suffix = /** @type {?} */ (suffixOrSecurityContext);
  11029. break;
  11030. case 1 /* TypeElementAttribute */:
  11031. case 8 /* TypeProperty */:
  11032. securityContext = /** @type {?} */ (suffixOrSecurityContext);
  11033. break;
  11034. }
  11035. bindingDefs[i] =
  11036. { flags: bindingFlags, ns: ns_1, name: name_1, nonMinifiedName: name_1, securityContext: securityContext, suffix: suffix };
  11037. }
  11038. outputs = outputs || [];
  11039. var /** @type {?} */ outputDefs = new Array(outputs.length);
  11040. for (var /** @type {?} */ i = 0; i < outputs.length; i++) {
  11041. var _e = outputs[i], target = _e[0], eventName = _e[1];
  11042. outputDefs[i] = {
  11043. type: 0 /* ElementOutput */,
  11044. target: /** @type {?} */ (target), eventName: eventName,
  11045. propName: null
  11046. };
  11047. }
  11048. fixedAttrs = fixedAttrs || [];
  11049. var /** @type {?} */ attrs = /** @type {?} */ (fixedAttrs.map(function (_a) {
  11050. var namespaceAndName = _a[0], value = _a[1];
  11051. var _b = splitNamespace(namespaceAndName), ns = _b[0], name = _b[1];
  11052. return [ns, name, value];
  11053. }));
  11054. componentRendererType = resolveRendererType2(componentRendererType);
  11055. if (componentView) {
  11056. flags |= 33554432 /* ComponentView */;
  11057. }
  11058. flags |= 1 /* TypeElement */;
  11059. return {
  11060. // will bet set by the view definition
  11061. nodeIndex: -1,
  11062. parent: null,
  11063. renderParent: null,
  11064. bindingIndex: -1,
  11065. outputIndex: -1,
  11066. // regular values
  11067. checkIndex: checkIndex,
  11068. flags: flags,
  11069. childFlags: 0,
  11070. directChildFlags: 0,
  11071. childMatchedQueries: 0, matchedQueries: matchedQueries, matchedQueryIds: matchedQueryIds, references: references, ngContentIndex: ngContentIndex, childCount: childCount,
  11072. bindings: bindingDefs,
  11073. bindingFlags: calcBindingFlags(bindingDefs),
  11074. outputs: outputDefs,
  11075. element: {
  11076. ns: ns,
  11077. name: name,
  11078. attrs: attrs,
  11079. template: null,
  11080. // will bet set by the view definition
  11081. componentProvider: null,
  11082. componentView: componentView || null,
  11083. componentRendererType: componentRendererType,
  11084. publicProviders: null,
  11085. allProviders: null,
  11086. handleEvent: handleEvent || NOOP,
  11087. },
  11088. provider: null,
  11089. text: null,
  11090. query: null,
  11091. ngContent: null
  11092. };
  11093. var _b;
  11094. }
  11095. /**
  11096. * @param {?} view
  11097. * @param {?} renderHost
  11098. * @param {?} def
  11099. * @return {?}
  11100. */
  11101. function createElement(view, renderHost, def) {
  11102. var /** @type {?} */ elDef = /** @type {?} */ ((def.element));
  11103. var /** @type {?} */ rootSelectorOrNode = view.root.selectorOrNode;
  11104. var /** @type {?} */ renderer = view.renderer;
  11105. var /** @type {?} */ el;
  11106. if (view.parent || !rootSelectorOrNode) {
  11107. if (elDef.name) {
  11108. el = renderer.createElement(elDef.name, elDef.ns);
  11109. }
  11110. else {
  11111. el = renderer.createComment('');
  11112. }
  11113. var /** @type {?} */ parentEl = getParentRenderElement(view, renderHost, def);
  11114. if (parentEl) {
  11115. renderer.appendChild(parentEl, el);
  11116. }
  11117. }
  11118. else {
  11119. el = renderer.selectRootElement(rootSelectorOrNode);
  11120. }
  11121. if (elDef.attrs) {
  11122. for (var /** @type {?} */ i = 0; i < elDef.attrs.length; i++) {
  11123. var _a = elDef.attrs[i], ns = _a[0], name_2 = _a[1], value = _a[2];
  11124. renderer.setAttribute(el, name_2, value, ns);
  11125. }
  11126. }
  11127. return el;
  11128. }
  11129. /**
  11130. * @param {?} view
  11131. * @param {?} compView
  11132. * @param {?} def
  11133. * @param {?} el
  11134. * @return {?}
  11135. */
  11136. function listenToElementOutputs(view, compView, def, el) {
  11137. for (var /** @type {?} */ i = 0; i < def.outputs.length; i++) {
  11138. var /** @type {?} */ output = def.outputs[i];
  11139. var /** @type {?} */ handleEventClosure = renderEventHandlerClosure(view, def.nodeIndex, elementEventFullName(output.target, output.eventName));
  11140. var /** @type {?} */ listenTarget = output.target;
  11141. var /** @type {?} */ listenerView = view;
  11142. if (output.target === 'component') {
  11143. listenTarget = null;
  11144. listenerView = compView;
  11145. }
  11146. var /** @type {?} */ disposable = /** @type {?} */ (listenerView.renderer.listen(listenTarget || el, output.eventName, handleEventClosure)); /** @type {?} */
  11147. ((view.disposables))[def.outputIndex + i] = disposable;
  11148. }
  11149. }
  11150. /**
  11151. * @param {?} view
  11152. * @param {?} index
  11153. * @param {?} eventName
  11154. * @return {?}
  11155. */
  11156. function renderEventHandlerClosure(view, index, eventName) {
  11157. return function (event) { return dispatchEvent(view, index, eventName, event); };
  11158. }
  11159. /**
  11160. * @param {?} view
  11161. * @param {?} def
  11162. * @param {?} v0
  11163. * @param {?} v1
  11164. * @param {?} v2
  11165. * @param {?} v3
  11166. * @param {?} v4
  11167. * @param {?} v5
  11168. * @param {?} v6
  11169. * @param {?} v7
  11170. * @param {?} v8
  11171. * @param {?} v9
  11172. * @return {?}
  11173. */
  11174. function checkAndUpdateElementInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  11175. var /** @type {?} */ bindLen = def.bindings.length;
  11176. var /** @type {?} */ changed = false;
  11177. if (bindLen > 0 && checkAndUpdateElementValue(view, def, 0, v0))
  11178. changed = true;
  11179. if (bindLen > 1 && checkAndUpdateElementValue(view, def, 1, v1))
  11180. changed = true;
  11181. if (bindLen > 2 && checkAndUpdateElementValue(view, def, 2, v2))
  11182. changed = true;
  11183. if (bindLen > 3 && checkAndUpdateElementValue(view, def, 3, v3))
  11184. changed = true;
  11185. if (bindLen > 4 && checkAndUpdateElementValue(view, def, 4, v4))
  11186. changed = true;
  11187. if (bindLen > 5 && checkAndUpdateElementValue(view, def, 5, v5))
  11188. changed = true;
  11189. if (bindLen > 6 && checkAndUpdateElementValue(view, def, 6, v6))
  11190. changed = true;
  11191. if (bindLen > 7 && checkAndUpdateElementValue(view, def, 7, v7))
  11192. changed = true;
  11193. if (bindLen > 8 && checkAndUpdateElementValue(view, def, 8, v8))
  11194. changed = true;
  11195. if (bindLen > 9 && checkAndUpdateElementValue(view, def, 9, v9))
  11196. changed = true;
  11197. return changed;
  11198. }
  11199. /**
  11200. * @param {?} view
  11201. * @param {?} def
  11202. * @param {?} values
  11203. * @return {?}
  11204. */
  11205. function checkAndUpdateElementDynamic(view, def, values) {
  11206. var /** @type {?} */ changed = false;
  11207. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  11208. if (checkAndUpdateElementValue(view, def, i, values[i]))
  11209. changed = true;
  11210. }
  11211. return changed;
  11212. }
  11213. /**
  11214. * @param {?} view
  11215. * @param {?} def
  11216. * @param {?} bindingIdx
  11217. * @param {?} value
  11218. * @return {?}
  11219. */
  11220. function checkAndUpdateElementValue(view, def, bindingIdx, value) {
  11221. if (!checkAndUpdateBinding(view, def, bindingIdx, value)) {
  11222. return false;
  11223. }
  11224. var /** @type {?} */ binding = def.bindings[bindingIdx];
  11225. var /** @type {?} */ elData = asElementData(view, def.nodeIndex);
  11226. var /** @type {?} */ renderNode$$1 = elData.renderElement;
  11227. var /** @type {?} */ name = /** @type {?} */ ((binding.name));
  11228. switch (binding.flags & 15 /* Types */) {
  11229. case 1 /* TypeElementAttribute */:
  11230. setElementAttribute(view, binding, renderNode$$1, binding.ns, name, value);
  11231. break;
  11232. case 2 /* TypeElementClass */:
  11233. setElementClass(view, renderNode$$1, name, value);
  11234. break;
  11235. case 4 /* TypeElementStyle */:
  11236. setElementStyle(view, binding, renderNode$$1, name, value);
  11237. break;
  11238. case 8 /* TypeProperty */:
  11239. var /** @type {?} */ bindView = (def.flags & 33554432 /* ComponentView */ &&
  11240. binding.flags & 32 /* SyntheticHostProperty */) ?
  11241. elData.componentView :
  11242. view;
  11243. setElementProperty(bindView, binding, renderNode$$1, name, value);
  11244. break;
  11245. }
  11246. return true;
  11247. }
  11248. /**
  11249. * @param {?} view
  11250. * @param {?} binding
  11251. * @param {?} renderNode
  11252. * @param {?} ns
  11253. * @param {?} name
  11254. * @param {?} value
  11255. * @return {?}
  11256. */
  11257. function setElementAttribute(view, binding, renderNode$$1, ns, name, value) {
  11258. var /** @type {?} */ securityContext = binding.securityContext;
  11259. var /** @type {?} */ renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;
  11260. renderValue = renderValue != null ? renderValue.toString() : null;
  11261. var /** @type {?} */ renderer = view.renderer;
  11262. if (value != null) {
  11263. renderer.setAttribute(renderNode$$1, name, renderValue, ns);
  11264. }
  11265. else {
  11266. renderer.removeAttribute(renderNode$$1, name, ns);
  11267. }
  11268. }
  11269. /**
  11270. * @param {?} view
  11271. * @param {?} renderNode
  11272. * @param {?} name
  11273. * @param {?} value
  11274. * @return {?}
  11275. */
  11276. function setElementClass(view, renderNode$$1, name, value) {
  11277. var /** @type {?} */ renderer = view.renderer;
  11278. if (value) {
  11279. renderer.addClass(renderNode$$1, name);
  11280. }
  11281. else {
  11282. renderer.removeClass(renderNode$$1, name);
  11283. }
  11284. }
  11285. /**
  11286. * @param {?} view
  11287. * @param {?} binding
  11288. * @param {?} renderNode
  11289. * @param {?} name
  11290. * @param {?} value
  11291. * @return {?}
  11292. */
  11293. function setElementStyle(view, binding, renderNode$$1, name, value) {
  11294. var /** @type {?} */ renderValue = view.root.sanitizer.sanitize(SecurityContext.STYLE, /** @type {?} */ (value));
  11295. if (renderValue != null) {
  11296. renderValue = renderValue.toString();
  11297. var /** @type {?} */ unit = binding.suffix;
  11298. if (unit != null) {
  11299. renderValue = renderValue + unit;
  11300. }
  11301. }
  11302. else {
  11303. renderValue = null;
  11304. }
  11305. var /** @type {?} */ renderer = view.renderer;
  11306. if (renderValue != null) {
  11307. renderer.setStyle(renderNode$$1, name, renderValue);
  11308. }
  11309. else {
  11310. renderer.removeStyle(renderNode$$1, name);
  11311. }
  11312. }
  11313. /**
  11314. * @param {?} view
  11315. * @param {?} binding
  11316. * @param {?} renderNode
  11317. * @param {?} name
  11318. * @param {?} value
  11319. * @return {?}
  11320. */
  11321. function setElementProperty(view, binding, renderNode$$1, name, value) {
  11322. var /** @type {?} */ securityContext = binding.securityContext;
  11323. var /** @type {?} */ renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;
  11324. view.renderer.setProperty(renderNode$$1, name, renderValue);
  11325. }
  11326. /**
  11327. * @fileoverview added by tsickle
  11328. * @suppress {checkTypes} checked by tsc
  11329. */
  11330. /**
  11331. * @license
  11332. * Copyright Google Inc. All Rights Reserved.
  11333. *
  11334. * Use of this source code is governed by an MIT-style license that can be
  11335. * found in the LICENSE file at https://angular.io/license
  11336. */
  11337. var UNDEFINED_VALUE = new Object();
  11338. var InjectorRefTokenKey$1 = tokenKey(Injector);
  11339. var NgModuleRefTokenKey = tokenKey(NgModuleRef);
  11340. /**
  11341. * @param {?} flags
  11342. * @param {?} token
  11343. * @param {?} value
  11344. * @param {?} deps
  11345. * @return {?}
  11346. */
  11347. function moduleProvideDef(flags, token, value, deps) {
  11348. // Need to resolve forwardRefs as e.g. for `useValue` we
  11349. // lowered the expression and then stopped evaluating it,
  11350. // i.e. also didn't unwrap it.
  11351. value = resolveForwardRef(value);
  11352. var /** @type {?} */ depDefs = splitDepsDsl(deps, stringify(token));
  11353. return {
  11354. // will bet set by the module definition
  11355. index: -1,
  11356. deps: depDefs, flags: flags, token: token, value: value
  11357. };
  11358. }
  11359. /**
  11360. * @param {?} providers
  11361. * @return {?}
  11362. */
  11363. function moduleDef(providers) {
  11364. var /** @type {?} */ providersByKey = {};
  11365. for (var /** @type {?} */ i = 0; i < providers.length; i++) {
  11366. var /** @type {?} */ provider = providers[i];
  11367. provider.index = i;
  11368. providersByKey[tokenKey(provider.token)] = provider;
  11369. }
  11370. return {
  11371. // Will be filled later...
  11372. factory: null,
  11373. providersByKey: providersByKey,
  11374. providers: providers
  11375. };
  11376. }
  11377. /**
  11378. * @param {?} data
  11379. * @return {?}
  11380. */
  11381. function initNgModule(data) {
  11382. var /** @type {?} */ def = data._def;
  11383. var /** @type {?} */ providers = data._providers = new Array(def.providers.length);
  11384. for (var /** @type {?} */ i = 0; i < def.providers.length; i++) {
  11385. var /** @type {?} */ provDef = def.providers[i];
  11386. if (!(provDef.flags & 4096 /* LazyProvider */)) {
  11387. providers[i] = _createProviderInstance$1(data, provDef);
  11388. }
  11389. }
  11390. }
  11391. /**
  11392. * @param {?} data
  11393. * @param {?} depDef
  11394. * @param {?=} notFoundValue
  11395. * @return {?}
  11396. */
  11397. function resolveNgModuleDep(data, depDef, notFoundValue) {
  11398. if (notFoundValue === void 0) { notFoundValue = Injector.THROW_IF_NOT_FOUND; }
  11399. if (depDef.flags & 8 /* Value */) {
  11400. return depDef.token;
  11401. }
  11402. if (depDef.flags & 2 /* Optional */) {
  11403. notFoundValue = null;
  11404. }
  11405. if (depDef.flags & 1 /* SkipSelf */) {
  11406. return data._parent.get(depDef.token, notFoundValue);
  11407. }
  11408. var /** @type {?} */ tokenKey$$1 = depDef.tokenKey;
  11409. switch (tokenKey$$1) {
  11410. case InjectorRefTokenKey$1:
  11411. case NgModuleRefTokenKey:
  11412. return data;
  11413. }
  11414. var /** @type {?} */ providerDef = data._def.providersByKey[tokenKey$$1];
  11415. if (providerDef) {
  11416. var /** @type {?} */ providerInstance = data._providers[providerDef.index];
  11417. if (providerInstance === undefined) {
  11418. providerInstance = data._providers[providerDef.index] =
  11419. _createProviderInstance$1(data, providerDef);
  11420. }
  11421. return providerInstance === UNDEFINED_VALUE ? undefined : providerInstance;
  11422. }
  11423. return data._parent.get(depDef.token, notFoundValue);
  11424. }
  11425. /**
  11426. * @param {?} ngModule
  11427. * @param {?} providerDef
  11428. * @return {?}
  11429. */
  11430. function _createProviderInstance$1(ngModule, providerDef) {
  11431. var /** @type {?} */ injectable;
  11432. switch (providerDef.flags & 201347067 /* Types */) {
  11433. case 512 /* TypeClassProvider */:
  11434. injectable = _createClass(ngModule, providerDef.value, providerDef.deps);
  11435. break;
  11436. case 1024 /* TypeFactoryProvider */:
  11437. injectable = _callFactory(ngModule, providerDef.value, providerDef.deps);
  11438. break;
  11439. case 2048 /* TypeUseExistingProvider */:
  11440. injectable = resolveNgModuleDep(ngModule, providerDef.deps[0]);
  11441. break;
  11442. case 256 /* TypeValueProvider */:
  11443. injectable = providerDef.value;
  11444. break;
  11445. }
  11446. return injectable === undefined ? UNDEFINED_VALUE : injectable;
  11447. }
  11448. /**
  11449. * @param {?} ngModule
  11450. * @param {?} ctor
  11451. * @param {?} deps
  11452. * @return {?}
  11453. */
  11454. function _createClass(ngModule, ctor, deps) {
  11455. var /** @type {?} */ len = deps.length;
  11456. switch (len) {
  11457. case 0:
  11458. return new ctor();
  11459. case 1:
  11460. return new ctor(resolveNgModuleDep(ngModule, deps[0]));
  11461. case 2:
  11462. return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
  11463. case 3:
  11464. return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
  11465. default:
  11466. var /** @type {?} */ depValues = new Array(len);
  11467. for (var /** @type {?} */ i = 0; i < len; i++) {
  11468. depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
  11469. }
  11470. return new (ctor.bind.apply(ctor, [void 0].concat(depValues)))();
  11471. }
  11472. }
  11473. /**
  11474. * @param {?} ngModule
  11475. * @param {?} factory
  11476. * @param {?} deps
  11477. * @return {?}
  11478. */
  11479. function _callFactory(ngModule, factory, deps) {
  11480. var /** @type {?} */ len = deps.length;
  11481. switch (len) {
  11482. case 0:
  11483. return factory();
  11484. case 1:
  11485. return factory(resolveNgModuleDep(ngModule, deps[0]));
  11486. case 2:
  11487. return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));
  11488. case 3:
  11489. return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));
  11490. default:
  11491. var /** @type {?} */ depValues = Array(len);
  11492. for (var /** @type {?} */ i = 0; i < len; i++) {
  11493. depValues[i] = resolveNgModuleDep(ngModule, deps[i]);
  11494. }
  11495. return factory.apply(void 0, depValues);
  11496. }
  11497. }
  11498. /**
  11499. * @param {?} ngModule
  11500. * @param {?} lifecycles
  11501. * @return {?}
  11502. */
  11503. function callNgModuleLifecycle(ngModule, lifecycles) {
  11504. var /** @type {?} */ def = ngModule._def;
  11505. for (var /** @type {?} */ i = 0; i < def.providers.length; i++) {
  11506. var /** @type {?} */ provDef = def.providers[i];
  11507. if (provDef.flags & 131072 /* OnDestroy */) {
  11508. var /** @type {?} */ instance = ngModule._providers[i];
  11509. if (instance && instance !== UNDEFINED_VALUE) {
  11510. instance.ngOnDestroy();
  11511. }
  11512. }
  11513. }
  11514. }
  11515. /**
  11516. * @fileoverview added by tsickle
  11517. * @suppress {checkTypes} checked by tsc
  11518. */
  11519. /**
  11520. * @license
  11521. * Copyright Google Inc. All Rights Reserved.
  11522. *
  11523. * Use of this source code is governed by an MIT-style license that can be
  11524. * found in the LICENSE file at https://angular.io/license
  11525. */
  11526. /**
  11527. * @param {?} parentView
  11528. * @param {?} elementData
  11529. * @param {?} viewIndex
  11530. * @param {?} view
  11531. * @return {?}
  11532. */
  11533. function attachEmbeddedView(parentView, elementData, viewIndex, view) {
  11534. var /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;
  11535. if (viewIndex === null || viewIndex === undefined) {
  11536. viewIndex = embeddedViews.length;
  11537. }
  11538. view.viewContainerParent = parentView;
  11539. addToArray(embeddedViews, /** @type {?} */ ((viewIndex)), view);
  11540. attachProjectedView(elementData, view);
  11541. Services.dirtyParentQueries(view);
  11542. var /** @type {?} */ prevView = /** @type {?} */ ((viewIndex)) > 0 ? embeddedViews[/** @type {?} */ ((viewIndex)) - 1] : null;
  11543. renderAttachEmbeddedView(elementData, prevView, view);
  11544. }
  11545. /**
  11546. * @param {?} vcElementData
  11547. * @param {?} view
  11548. * @return {?}
  11549. */
  11550. function attachProjectedView(vcElementData, view) {
  11551. var /** @type {?} */ dvcElementData = declaredViewContainer(view);
  11552. if (!dvcElementData || dvcElementData === vcElementData ||
  11553. view.state & 16 /* IsProjectedView */) {
  11554. return;
  11555. }
  11556. // Note: For performance reasons, we
  11557. // - add a view to template._projectedViews only 1x throughout its lifetime,
  11558. // and remove it not until the view is destroyed.
  11559. // (hard, as when a parent view is attached/detached we would need to attach/detach all
  11560. // nested projected views as well, even accross component boundaries).
  11561. // - don't track the insertion order of views in the projected views array
  11562. // (hard, as when the views of the same template are inserted different view containers)
  11563. view.state |= 16 /* IsProjectedView */;
  11564. var /** @type {?} */ projectedViews = dvcElementData.template._projectedViews;
  11565. if (!projectedViews) {
  11566. projectedViews = dvcElementData.template._projectedViews = [];
  11567. }
  11568. projectedViews.push(view);
  11569. // Note: we are changing the NodeDef here as we cannot calculate
  11570. // the fact whether a template is used for projection during compilation.
  11571. markNodeAsProjectedTemplate(/** @type {?} */ ((view.parent)).def, /** @type {?} */ ((view.parentNodeDef)));
  11572. }
  11573. /**
  11574. * @param {?} viewDef
  11575. * @param {?} nodeDef
  11576. * @return {?}
  11577. */
  11578. function markNodeAsProjectedTemplate(viewDef, nodeDef) {
  11579. if (nodeDef.flags & 4 /* ProjectedTemplate */) {
  11580. return;
  11581. }
  11582. viewDef.nodeFlags |= 4 /* ProjectedTemplate */;
  11583. nodeDef.flags |= 4 /* ProjectedTemplate */;
  11584. var /** @type {?} */ parentNodeDef = nodeDef.parent;
  11585. while (parentNodeDef) {
  11586. parentNodeDef.childFlags |= 4 /* ProjectedTemplate */;
  11587. parentNodeDef = parentNodeDef.parent;
  11588. }
  11589. }
  11590. /**
  11591. * @param {?} elementData
  11592. * @param {?=} viewIndex
  11593. * @return {?}
  11594. */
  11595. function detachEmbeddedView(elementData, viewIndex) {
  11596. var /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;
  11597. if (viewIndex == null || viewIndex >= embeddedViews.length) {
  11598. viewIndex = embeddedViews.length - 1;
  11599. }
  11600. if (viewIndex < 0) {
  11601. return null;
  11602. }
  11603. var /** @type {?} */ view = embeddedViews[viewIndex];
  11604. view.viewContainerParent = null;
  11605. removeFromArray(embeddedViews, viewIndex);
  11606. // See attachProjectedView for why we don't update projectedViews here.
  11607. Services.dirtyParentQueries(view);
  11608. renderDetachView(view);
  11609. return view;
  11610. }
  11611. /**
  11612. * @param {?} view
  11613. * @return {?}
  11614. */
  11615. function detachProjectedView(view) {
  11616. if (!(view.state & 16 /* IsProjectedView */)) {
  11617. return;
  11618. }
  11619. var /** @type {?} */ dvcElementData = declaredViewContainer(view);
  11620. if (dvcElementData) {
  11621. var /** @type {?} */ projectedViews = dvcElementData.template._projectedViews;
  11622. if (projectedViews) {
  11623. removeFromArray(projectedViews, projectedViews.indexOf(view));
  11624. Services.dirtyParentQueries(view);
  11625. }
  11626. }
  11627. }
  11628. /**
  11629. * @param {?} elementData
  11630. * @param {?} oldViewIndex
  11631. * @param {?} newViewIndex
  11632. * @return {?}
  11633. */
  11634. function moveEmbeddedView(elementData, oldViewIndex, newViewIndex) {
  11635. var /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;
  11636. var /** @type {?} */ view = embeddedViews[oldViewIndex];
  11637. removeFromArray(embeddedViews, oldViewIndex);
  11638. if (newViewIndex == null) {
  11639. newViewIndex = embeddedViews.length;
  11640. }
  11641. addToArray(embeddedViews, newViewIndex, view);
  11642. // Note: Don't need to change projectedViews as the order in there
  11643. // as always invalid...
  11644. Services.dirtyParentQueries(view);
  11645. renderDetachView(view);
  11646. var /** @type {?} */ prevView = newViewIndex > 0 ? embeddedViews[newViewIndex - 1] : null;
  11647. renderAttachEmbeddedView(elementData, prevView, view);
  11648. return view;
  11649. }
  11650. /**
  11651. * @param {?} elementData
  11652. * @param {?} prevView
  11653. * @param {?} view
  11654. * @return {?}
  11655. */
  11656. function renderAttachEmbeddedView(elementData, prevView, view) {
  11657. var /** @type {?} */ prevRenderNode = prevView ? renderNode(prevView, /** @type {?} */ ((prevView.def.lastRenderRootNode))) :
  11658. elementData.renderElement;
  11659. var /** @type {?} */ parentNode = view.renderer.parentNode(prevRenderNode);
  11660. var /** @type {?} */ nextSibling = view.renderer.nextSibling(prevRenderNode);
  11661. // Note: We can't check if `nextSibling` is present, as on WebWorkers it will always be!
  11662. // However, browsers automatically do `appendChild` when there is no `nextSibling`.
  11663. visitRootRenderNodes(view, 2 /* InsertBefore */, parentNode, nextSibling, undefined);
  11664. }
  11665. /**
  11666. * @param {?} view
  11667. * @return {?}
  11668. */
  11669. function renderDetachView(view) {
  11670. visitRootRenderNodes(view, 3 /* RemoveChild */, null, null, undefined);
  11671. }
  11672. /**
  11673. * @param {?} arr
  11674. * @param {?} index
  11675. * @param {?} value
  11676. * @return {?}
  11677. */
  11678. function addToArray(arr, index, value) {
  11679. // perf: array.push is faster than array.splice!
  11680. if (index >= arr.length) {
  11681. arr.push(value);
  11682. }
  11683. else {
  11684. arr.splice(index, 0, value);
  11685. }
  11686. }
  11687. /**
  11688. * @param {?} arr
  11689. * @param {?} index
  11690. * @return {?}
  11691. */
  11692. function removeFromArray(arr, index) {
  11693. // perf: array.pop is faster than array.splice!
  11694. if (index >= arr.length - 1) {
  11695. arr.pop();
  11696. }
  11697. else {
  11698. arr.splice(index, 1);
  11699. }
  11700. }
  11701. /**
  11702. * @fileoverview added by tsickle
  11703. * @suppress {checkTypes} checked by tsc
  11704. */
  11705. /**
  11706. * @license
  11707. * Copyright Google Inc. All Rights Reserved.
  11708. *
  11709. * Use of this source code is governed by an MIT-style license that can be
  11710. * found in the LICENSE file at https://angular.io/license
  11711. */
  11712. var EMPTY_CONTEXT = new Object();
  11713. /**
  11714. * @param {?} selector
  11715. * @param {?} componentType
  11716. * @param {?} viewDefFactory
  11717. * @param {?} inputs
  11718. * @param {?} outputs
  11719. * @param {?} ngContentSelectors
  11720. * @return {?}
  11721. */
  11722. function createComponentFactory(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors) {
  11723. return new ComponentFactory_(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors);
  11724. }
  11725. /**
  11726. * @param {?} componentFactory
  11727. * @return {?}
  11728. */
  11729. function getComponentViewDefinitionFactory(componentFactory) {
  11730. return (/** @type {?} */ (componentFactory)).viewDefFactory;
  11731. }
  11732. var ComponentFactory_ = /** @class */ (function (_super) {
  11733. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ComponentFactory_, _super);
  11734. function ComponentFactory_(selector, componentType, viewDefFactory, _inputs, _outputs, ngContentSelectors) {
  11735. var _this =
  11736. // Attention: this ctor is called as top level function.
  11737. // Putting any logic in here will destroy closure tree shaking!
  11738. _super.call(this) || this;
  11739. _this.selector = selector;
  11740. _this.componentType = componentType;
  11741. _this._inputs = _inputs;
  11742. _this._outputs = _outputs;
  11743. _this.ngContentSelectors = ngContentSelectors;
  11744. _this.viewDefFactory = viewDefFactory;
  11745. return _this;
  11746. }
  11747. Object.defineProperty(ComponentFactory_.prototype, "inputs", {
  11748. get: /**
  11749. * @return {?}
  11750. */
  11751. function () {
  11752. var /** @type {?} */ inputsArr = [];
  11753. var /** @type {?} */ inputs = /** @type {?} */ ((this._inputs));
  11754. for (var /** @type {?} */ propName in inputs) {
  11755. var /** @type {?} */ templateName = inputs[propName];
  11756. inputsArr.push({ propName: propName, templateName: templateName });
  11757. }
  11758. return inputsArr;
  11759. },
  11760. enumerable: true,
  11761. configurable: true
  11762. });
  11763. Object.defineProperty(ComponentFactory_.prototype, "outputs", {
  11764. get: /**
  11765. * @return {?}
  11766. */
  11767. function () {
  11768. var /** @type {?} */ outputsArr = [];
  11769. for (var /** @type {?} */ propName in this._outputs) {
  11770. var /** @type {?} */ templateName = this._outputs[propName];
  11771. outputsArr.push({ propName: propName, templateName: templateName });
  11772. }
  11773. return outputsArr;
  11774. },
  11775. enumerable: true,
  11776. configurable: true
  11777. });
  11778. /**
  11779. * Creates a new component.
  11780. */
  11781. /**
  11782. * Creates a new component.
  11783. * @param {?} injector
  11784. * @param {?=} projectableNodes
  11785. * @param {?=} rootSelectorOrNode
  11786. * @param {?=} ngModule
  11787. * @return {?}
  11788. */
  11789. ComponentFactory_.prototype.create = /**
  11790. * Creates a new component.
  11791. * @param {?} injector
  11792. * @param {?=} projectableNodes
  11793. * @param {?=} rootSelectorOrNode
  11794. * @param {?=} ngModule
  11795. * @return {?}
  11796. */
  11797. function (injector, projectableNodes, rootSelectorOrNode, ngModule) {
  11798. if (!ngModule) {
  11799. throw new Error('ngModule should be provided');
  11800. }
  11801. var /** @type {?} */ viewDef = resolveDefinition(this.viewDefFactory);
  11802. var /** @type {?} */ componentNodeIndex = /** @type {?} */ ((/** @type {?} */ ((viewDef.nodes[0].element)).componentProvider)).nodeIndex;
  11803. var /** @type {?} */ view = Services.createRootView(injector, projectableNodes || [], rootSelectorOrNode, viewDef, ngModule, EMPTY_CONTEXT);
  11804. var /** @type {?} */ component = asProviderData(view, componentNodeIndex).instance;
  11805. if (rootSelectorOrNode) {
  11806. view.renderer.setAttribute(asElementData(view, 0).renderElement, 'ng-version', VERSION.full);
  11807. }
  11808. return new ComponentRef_(view, new ViewRef_(view), component);
  11809. };
  11810. return ComponentFactory_;
  11811. }(ComponentFactory));
  11812. var ComponentRef_ = /** @class */ (function (_super) {
  11813. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ComponentRef_, _super);
  11814. function ComponentRef_(_view, _viewRef, _component) {
  11815. var _this = _super.call(this) || this;
  11816. _this._view = _view;
  11817. _this._viewRef = _viewRef;
  11818. _this._component = _component;
  11819. _this._elDef = _this._view.def.nodes[0];
  11820. _this.hostView = _viewRef;
  11821. _this.changeDetectorRef = _viewRef;
  11822. _this.instance = _component;
  11823. return _this;
  11824. }
  11825. Object.defineProperty(ComponentRef_.prototype, "location", {
  11826. get: /**
  11827. * @return {?}
  11828. */
  11829. function () {
  11830. return new ElementRef(asElementData(this._view, this._elDef.nodeIndex).renderElement);
  11831. },
  11832. enumerable: true,
  11833. configurable: true
  11834. });
  11835. Object.defineProperty(ComponentRef_.prototype, "injector", {
  11836. get: /**
  11837. * @return {?}
  11838. */
  11839. function () { return new Injector_(this._view, this._elDef); },
  11840. enumerable: true,
  11841. configurable: true
  11842. });
  11843. Object.defineProperty(ComponentRef_.prototype, "componentType", {
  11844. get: /**
  11845. * @return {?}
  11846. */
  11847. function () { return /** @type {?} */ (this._component.constructor); },
  11848. enumerable: true,
  11849. configurable: true
  11850. });
  11851. /**
  11852. * @return {?}
  11853. */
  11854. ComponentRef_.prototype.destroy = /**
  11855. * @return {?}
  11856. */
  11857. function () { this._viewRef.destroy(); };
  11858. /**
  11859. * @param {?} callback
  11860. * @return {?}
  11861. */
  11862. ComponentRef_.prototype.onDestroy = /**
  11863. * @param {?} callback
  11864. * @return {?}
  11865. */
  11866. function (callback) { this._viewRef.onDestroy(callback); };
  11867. return ComponentRef_;
  11868. }(ComponentRef));
  11869. /**
  11870. * @param {?} view
  11871. * @param {?} elDef
  11872. * @param {?} elData
  11873. * @return {?}
  11874. */
  11875. function createViewContainerData(view, elDef, elData) {
  11876. return new ViewContainerRef_(view, elDef, elData);
  11877. }
  11878. var ViewContainerRef_ = /** @class */ (function () {
  11879. function ViewContainerRef_(_view, _elDef, _data) {
  11880. this._view = _view;
  11881. this._elDef = _elDef;
  11882. this._data = _data;
  11883. /**
  11884. * \@internal
  11885. */
  11886. this._embeddedViews = [];
  11887. }
  11888. Object.defineProperty(ViewContainerRef_.prototype, "element", {
  11889. get: /**
  11890. * @return {?}
  11891. */
  11892. function () { return new ElementRef(this._data.renderElement); },
  11893. enumerable: true,
  11894. configurable: true
  11895. });
  11896. Object.defineProperty(ViewContainerRef_.prototype, "injector", {
  11897. get: /**
  11898. * @return {?}
  11899. */
  11900. function () { return new Injector_(this._view, this._elDef); },
  11901. enumerable: true,
  11902. configurable: true
  11903. });
  11904. Object.defineProperty(ViewContainerRef_.prototype, "parentInjector", {
  11905. get: /**
  11906. * @return {?}
  11907. */
  11908. function () {
  11909. var /** @type {?} */ view = this._view;
  11910. var /** @type {?} */ elDef = this._elDef.parent;
  11911. while (!elDef && view) {
  11912. elDef = viewParentEl(view);
  11913. view = /** @type {?} */ ((view.parent));
  11914. }
  11915. return view ? new Injector_(view, elDef) : new Injector_(this._view, null);
  11916. },
  11917. enumerable: true,
  11918. configurable: true
  11919. });
  11920. /**
  11921. * @return {?}
  11922. */
  11923. ViewContainerRef_.prototype.clear = /**
  11924. * @return {?}
  11925. */
  11926. function () {
  11927. var /** @type {?} */ len = this._embeddedViews.length;
  11928. for (var /** @type {?} */ i = len - 1; i >= 0; i--) {
  11929. var /** @type {?} */ view = /** @type {?} */ ((detachEmbeddedView(this._data, i)));
  11930. Services.destroyView(view);
  11931. }
  11932. };
  11933. /**
  11934. * @param {?} index
  11935. * @return {?}
  11936. */
  11937. ViewContainerRef_.prototype.get = /**
  11938. * @param {?} index
  11939. * @return {?}
  11940. */
  11941. function (index) {
  11942. var /** @type {?} */ view = this._embeddedViews[index];
  11943. if (view) {
  11944. var /** @type {?} */ ref = new ViewRef_(view);
  11945. ref.attachToViewContainerRef(this);
  11946. return ref;
  11947. }
  11948. return null;
  11949. };
  11950. Object.defineProperty(ViewContainerRef_.prototype, "length", {
  11951. get: /**
  11952. * @return {?}
  11953. */
  11954. function () { return this._embeddedViews.length; },
  11955. enumerable: true,
  11956. configurable: true
  11957. });
  11958. /**
  11959. * @template C
  11960. * @param {?} templateRef
  11961. * @param {?=} context
  11962. * @param {?=} index
  11963. * @return {?}
  11964. */
  11965. ViewContainerRef_.prototype.createEmbeddedView = /**
  11966. * @template C
  11967. * @param {?} templateRef
  11968. * @param {?=} context
  11969. * @param {?=} index
  11970. * @return {?}
  11971. */
  11972. function (templateRef, context, index) {
  11973. var /** @type {?} */ viewRef = templateRef.createEmbeddedView(context || /** @type {?} */ ({}));
  11974. this.insert(viewRef, index);
  11975. return viewRef;
  11976. };
  11977. /**
  11978. * @template C
  11979. * @param {?} componentFactory
  11980. * @param {?=} index
  11981. * @param {?=} injector
  11982. * @param {?=} projectableNodes
  11983. * @param {?=} ngModuleRef
  11984. * @return {?}
  11985. */
  11986. ViewContainerRef_.prototype.createComponent = /**
  11987. * @template C
  11988. * @param {?} componentFactory
  11989. * @param {?=} index
  11990. * @param {?=} injector
  11991. * @param {?=} projectableNodes
  11992. * @param {?=} ngModuleRef
  11993. * @return {?}
  11994. */
  11995. function (componentFactory, index, injector, projectableNodes, ngModuleRef) {
  11996. var /** @type {?} */ contextInjector = injector || this.parentInjector;
  11997. if (!ngModuleRef && !(componentFactory instanceof ComponentFactoryBoundToModule)) {
  11998. ngModuleRef = contextInjector.get(NgModuleRef);
  11999. }
  12000. var /** @type {?} */ componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);
  12001. this.insert(componentRef.hostView, index);
  12002. return componentRef;
  12003. };
  12004. /**
  12005. * @param {?} viewRef
  12006. * @param {?=} index
  12007. * @return {?}
  12008. */
  12009. ViewContainerRef_.prototype.insert = /**
  12010. * @param {?} viewRef
  12011. * @param {?=} index
  12012. * @return {?}
  12013. */
  12014. function (viewRef, index) {
  12015. if (viewRef.destroyed) {
  12016. throw new Error('Cannot insert a destroyed View in a ViewContainer!');
  12017. }
  12018. var /** @type {?} */ viewRef_ = /** @type {?} */ (viewRef);
  12019. var /** @type {?} */ viewData = viewRef_._view;
  12020. attachEmbeddedView(this._view, this._data, index, viewData);
  12021. viewRef_.attachToViewContainerRef(this);
  12022. return viewRef;
  12023. };
  12024. /**
  12025. * @param {?} viewRef
  12026. * @param {?} currentIndex
  12027. * @return {?}
  12028. */
  12029. ViewContainerRef_.prototype.move = /**
  12030. * @param {?} viewRef
  12031. * @param {?} currentIndex
  12032. * @return {?}
  12033. */
  12034. function (viewRef, currentIndex) {
  12035. if (viewRef.destroyed) {
  12036. throw new Error('Cannot move a destroyed View in a ViewContainer!');
  12037. }
  12038. var /** @type {?} */ previousIndex = this._embeddedViews.indexOf(viewRef._view);
  12039. moveEmbeddedView(this._data, previousIndex, currentIndex);
  12040. return viewRef;
  12041. };
  12042. /**
  12043. * @param {?} viewRef
  12044. * @return {?}
  12045. */
  12046. ViewContainerRef_.prototype.indexOf = /**
  12047. * @param {?} viewRef
  12048. * @return {?}
  12049. */
  12050. function (viewRef) {
  12051. return this._embeddedViews.indexOf((/** @type {?} */ (viewRef))._view);
  12052. };
  12053. /**
  12054. * @param {?=} index
  12055. * @return {?}
  12056. */
  12057. ViewContainerRef_.prototype.remove = /**
  12058. * @param {?=} index
  12059. * @return {?}
  12060. */
  12061. function (index) {
  12062. var /** @type {?} */ viewData = detachEmbeddedView(this._data, index);
  12063. if (viewData) {
  12064. Services.destroyView(viewData);
  12065. }
  12066. };
  12067. /**
  12068. * @param {?=} index
  12069. * @return {?}
  12070. */
  12071. ViewContainerRef_.prototype.detach = /**
  12072. * @param {?=} index
  12073. * @return {?}
  12074. */
  12075. function (index) {
  12076. var /** @type {?} */ view = detachEmbeddedView(this._data, index);
  12077. return view ? new ViewRef_(view) : null;
  12078. };
  12079. return ViewContainerRef_;
  12080. }());
  12081. /**
  12082. * @param {?} view
  12083. * @return {?}
  12084. */
  12085. function createChangeDetectorRef(view) {
  12086. return new ViewRef_(view);
  12087. }
  12088. var ViewRef_ = /** @class */ (function () {
  12089. function ViewRef_(_view) {
  12090. this._view = _view;
  12091. this._viewContainerRef = null;
  12092. this._appRef = null;
  12093. }
  12094. Object.defineProperty(ViewRef_.prototype, "rootNodes", {
  12095. get: /**
  12096. * @return {?}
  12097. */
  12098. function () { return rootRenderNodes(this._view); },
  12099. enumerable: true,
  12100. configurable: true
  12101. });
  12102. Object.defineProperty(ViewRef_.prototype, "context", {
  12103. get: /**
  12104. * @return {?}
  12105. */
  12106. function () { return this._view.context; },
  12107. enumerable: true,
  12108. configurable: true
  12109. });
  12110. Object.defineProperty(ViewRef_.prototype, "destroyed", {
  12111. get: /**
  12112. * @return {?}
  12113. */
  12114. function () { return (this._view.state & 128 /* Destroyed */) !== 0; },
  12115. enumerable: true,
  12116. configurable: true
  12117. });
  12118. /**
  12119. * @return {?}
  12120. */
  12121. ViewRef_.prototype.markForCheck = /**
  12122. * @return {?}
  12123. */
  12124. function () { markParentViewsForCheck(this._view); };
  12125. /**
  12126. * @return {?}
  12127. */
  12128. ViewRef_.prototype.detach = /**
  12129. * @return {?}
  12130. */
  12131. function () { this._view.state &= ~4 /* Attached */; };
  12132. /**
  12133. * @return {?}
  12134. */
  12135. ViewRef_.prototype.detectChanges = /**
  12136. * @return {?}
  12137. */
  12138. function () {
  12139. var /** @type {?} */ fs = this._view.root.rendererFactory;
  12140. if (fs.begin) {
  12141. fs.begin();
  12142. }
  12143. try {
  12144. Services.checkAndUpdateView(this._view);
  12145. }
  12146. finally {
  12147. if (fs.end) {
  12148. fs.end();
  12149. }
  12150. }
  12151. };
  12152. /**
  12153. * @return {?}
  12154. */
  12155. ViewRef_.prototype.checkNoChanges = /**
  12156. * @return {?}
  12157. */
  12158. function () { Services.checkNoChangesView(this._view); };
  12159. /**
  12160. * @return {?}
  12161. */
  12162. ViewRef_.prototype.reattach = /**
  12163. * @return {?}
  12164. */
  12165. function () { this._view.state |= 4 /* Attached */; };
  12166. /**
  12167. * @param {?} callback
  12168. * @return {?}
  12169. */
  12170. ViewRef_.prototype.onDestroy = /**
  12171. * @param {?} callback
  12172. * @return {?}
  12173. */
  12174. function (callback) {
  12175. if (!this._view.disposables) {
  12176. this._view.disposables = [];
  12177. }
  12178. this._view.disposables.push(/** @type {?} */ (callback));
  12179. };
  12180. /**
  12181. * @return {?}
  12182. */
  12183. ViewRef_.prototype.destroy = /**
  12184. * @return {?}
  12185. */
  12186. function () {
  12187. if (this._appRef) {
  12188. this._appRef.detachView(this);
  12189. }
  12190. else if (this._viewContainerRef) {
  12191. this._viewContainerRef.detach(this._viewContainerRef.indexOf(this));
  12192. }
  12193. Services.destroyView(this._view);
  12194. };
  12195. /**
  12196. * @return {?}
  12197. */
  12198. ViewRef_.prototype.detachFromAppRef = /**
  12199. * @return {?}
  12200. */
  12201. function () {
  12202. this._appRef = null;
  12203. renderDetachView(this._view);
  12204. Services.dirtyParentQueries(this._view);
  12205. };
  12206. /**
  12207. * @param {?} appRef
  12208. * @return {?}
  12209. */
  12210. ViewRef_.prototype.attachToAppRef = /**
  12211. * @param {?} appRef
  12212. * @return {?}
  12213. */
  12214. function (appRef) {
  12215. if (this._viewContainerRef) {
  12216. throw new Error('This view is already attached to a ViewContainer!');
  12217. }
  12218. this._appRef = appRef;
  12219. };
  12220. /**
  12221. * @param {?} vcRef
  12222. * @return {?}
  12223. */
  12224. ViewRef_.prototype.attachToViewContainerRef = /**
  12225. * @param {?} vcRef
  12226. * @return {?}
  12227. */
  12228. function (vcRef) {
  12229. if (this._appRef) {
  12230. throw new Error('This view is already attached directly to the ApplicationRef!');
  12231. }
  12232. this._viewContainerRef = vcRef;
  12233. };
  12234. return ViewRef_;
  12235. }());
  12236. /**
  12237. * @param {?} view
  12238. * @param {?} def
  12239. * @return {?}
  12240. */
  12241. function createTemplateData(view, def) {
  12242. return new TemplateRef_(view, def);
  12243. }
  12244. var TemplateRef_ = /** @class */ (function (_super) {
  12245. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(TemplateRef_, _super);
  12246. function TemplateRef_(_parentView, _def) {
  12247. var _this = _super.call(this) || this;
  12248. _this._parentView = _parentView;
  12249. _this._def = _def;
  12250. return _this;
  12251. }
  12252. /**
  12253. * @param {?} context
  12254. * @return {?}
  12255. */
  12256. TemplateRef_.prototype.createEmbeddedView = /**
  12257. * @param {?} context
  12258. * @return {?}
  12259. */
  12260. function (context) {
  12261. return new ViewRef_(Services.createEmbeddedView(this._parentView, this._def, /** @type {?} */ ((/** @type {?} */ ((this._def.element)).template)), context));
  12262. };
  12263. Object.defineProperty(TemplateRef_.prototype, "elementRef", {
  12264. get: /**
  12265. * @return {?}
  12266. */
  12267. function () {
  12268. return new ElementRef(asElementData(this._parentView, this._def.nodeIndex).renderElement);
  12269. },
  12270. enumerable: true,
  12271. configurable: true
  12272. });
  12273. return TemplateRef_;
  12274. }(TemplateRef));
  12275. /**
  12276. * @param {?} view
  12277. * @param {?} elDef
  12278. * @return {?}
  12279. */
  12280. function createInjector(view, elDef) {
  12281. return new Injector_(view, elDef);
  12282. }
  12283. var Injector_ = /** @class */ (function () {
  12284. function Injector_(view, elDef) {
  12285. this.view = view;
  12286. this.elDef = elDef;
  12287. }
  12288. /**
  12289. * @param {?} token
  12290. * @param {?=} notFoundValue
  12291. * @return {?}
  12292. */
  12293. Injector_.prototype.get = /**
  12294. * @param {?} token
  12295. * @param {?=} notFoundValue
  12296. * @return {?}
  12297. */
  12298. function (token, notFoundValue) {
  12299. if (notFoundValue === void 0) { notFoundValue = Injector.THROW_IF_NOT_FOUND; }
  12300. var /** @type {?} */ allowPrivateServices = this.elDef ? (this.elDef.flags & 33554432 /* ComponentView */) !== 0 : false;
  12301. return Services.resolveDep(this.view, this.elDef, allowPrivateServices, { flags: 0 /* None */, token: token, tokenKey: tokenKey(token) }, notFoundValue);
  12302. };
  12303. return Injector_;
  12304. }());
  12305. /**
  12306. * @param {?} view
  12307. * @param {?} index
  12308. * @return {?}
  12309. */
  12310. function nodeValue(view, index) {
  12311. var /** @type {?} */ def = view.def.nodes[index];
  12312. if (def.flags & 1 /* TypeElement */) {
  12313. var /** @type {?} */ elData = asElementData(view, def.nodeIndex);
  12314. return /** @type {?} */ ((def.element)).template ? elData.template : elData.renderElement;
  12315. }
  12316. else if (def.flags & 2 /* TypeText */) {
  12317. return asTextData(view, def.nodeIndex).renderText;
  12318. }
  12319. else if (def.flags & (20224 /* CatProvider */ | 16 /* TypePipe */)) {
  12320. return asProviderData(view, def.nodeIndex).instance;
  12321. }
  12322. throw new Error("Illegal state: read nodeValue for node index " + index);
  12323. }
  12324. /**
  12325. * @param {?} view
  12326. * @return {?}
  12327. */
  12328. function createRendererV1(view) {
  12329. return new RendererAdapter(view.renderer);
  12330. }
  12331. var RendererAdapter = /** @class */ (function () {
  12332. function RendererAdapter(delegate) {
  12333. this.delegate = delegate;
  12334. }
  12335. /**
  12336. * @param {?} selectorOrNode
  12337. * @return {?}
  12338. */
  12339. RendererAdapter.prototype.selectRootElement = /**
  12340. * @param {?} selectorOrNode
  12341. * @return {?}
  12342. */
  12343. function (selectorOrNode) {
  12344. return this.delegate.selectRootElement(selectorOrNode);
  12345. };
  12346. /**
  12347. * @param {?} parent
  12348. * @param {?} namespaceAndName
  12349. * @return {?}
  12350. */
  12351. RendererAdapter.prototype.createElement = /**
  12352. * @param {?} parent
  12353. * @param {?} namespaceAndName
  12354. * @return {?}
  12355. */
  12356. function (parent, namespaceAndName) {
  12357. var _a = splitNamespace(namespaceAndName), ns = _a[0], name = _a[1];
  12358. var /** @type {?} */ el = this.delegate.createElement(name, ns);
  12359. if (parent) {
  12360. this.delegate.appendChild(parent, el);
  12361. }
  12362. return el;
  12363. };
  12364. /**
  12365. * @param {?} hostElement
  12366. * @return {?}
  12367. */
  12368. RendererAdapter.prototype.createViewRoot = /**
  12369. * @param {?} hostElement
  12370. * @return {?}
  12371. */
  12372. function (hostElement) { return hostElement; };
  12373. /**
  12374. * @param {?} parentElement
  12375. * @return {?}
  12376. */
  12377. RendererAdapter.prototype.createTemplateAnchor = /**
  12378. * @param {?} parentElement
  12379. * @return {?}
  12380. */
  12381. function (parentElement) {
  12382. var /** @type {?} */ comment = this.delegate.createComment('');
  12383. if (parentElement) {
  12384. this.delegate.appendChild(parentElement, comment);
  12385. }
  12386. return comment;
  12387. };
  12388. /**
  12389. * @param {?} parentElement
  12390. * @param {?} value
  12391. * @return {?}
  12392. */
  12393. RendererAdapter.prototype.createText = /**
  12394. * @param {?} parentElement
  12395. * @param {?} value
  12396. * @return {?}
  12397. */
  12398. function (parentElement, value) {
  12399. var /** @type {?} */ node = this.delegate.createText(value);
  12400. if (parentElement) {
  12401. this.delegate.appendChild(parentElement, node);
  12402. }
  12403. return node;
  12404. };
  12405. /**
  12406. * @param {?} parentElement
  12407. * @param {?} nodes
  12408. * @return {?}
  12409. */
  12410. RendererAdapter.prototype.projectNodes = /**
  12411. * @param {?} parentElement
  12412. * @param {?} nodes
  12413. * @return {?}
  12414. */
  12415. function (parentElement, nodes) {
  12416. for (var /** @type {?} */ i = 0; i < nodes.length; i++) {
  12417. this.delegate.appendChild(parentElement, nodes[i]);
  12418. }
  12419. };
  12420. /**
  12421. * @param {?} node
  12422. * @param {?} viewRootNodes
  12423. * @return {?}
  12424. */
  12425. RendererAdapter.prototype.attachViewAfter = /**
  12426. * @param {?} node
  12427. * @param {?} viewRootNodes
  12428. * @return {?}
  12429. */
  12430. function (node, viewRootNodes) {
  12431. var /** @type {?} */ parentElement = this.delegate.parentNode(node);
  12432. var /** @type {?} */ nextSibling = this.delegate.nextSibling(node);
  12433. for (var /** @type {?} */ i = 0; i < viewRootNodes.length; i++) {
  12434. this.delegate.insertBefore(parentElement, viewRootNodes[i], nextSibling);
  12435. }
  12436. };
  12437. /**
  12438. * @param {?} viewRootNodes
  12439. * @return {?}
  12440. */
  12441. RendererAdapter.prototype.detachView = /**
  12442. * @param {?} viewRootNodes
  12443. * @return {?}
  12444. */
  12445. function (viewRootNodes) {
  12446. for (var /** @type {?} */ i = 0; i < viewRootNodes.length; i++) {
  12447. var /** @type {?} */ node = viewRootNodes[i];
  12448. var /** @type {?} */ parentElement = this.delegate.parentNode(node);
  12449. this.delegate.removeChild(parentElement, node);
  12450. }
  12451. };
  12452. /**
  12453. * @param {?} hostElement
  12454. * @param {?} viewAllNodes
  12455. * @return {?}
  12456. */
  12457. RendererAdapter.prototype.destroyView = /**
  12458. * @param {?} hostElement
  12459. * @param {?} viewAllNodes
  12460. * @return {?}
  12461. */
  12462. function (hostElement, viewAllNodes) {
  12463. for (var /** @type {?} */ i = 0; i < viewAllNodes.length; i++) {
  12464. /** @type {?} */ ((this.delegate.destroyNode))(viewAllNodes[i]);
  12465. }
  12466. };
  12467. /**
  12468. * @param {?} renderElement
  12469. * @param {?} name
  12470. * @param {?} callback
  12471. * @return {?}
  12472. */
  12473. RendererAdapter.prototype.listen = /**
  12474. * @param {?} renderElement
  12475. * @param {?} name
  12476. * @param {?} callback
  12477. * @return {?}
  12478. */
  12479. function (renderElement, name, callback) {
  12480. return this.delegate.listen(renderElement, name, /** @type {?} */ (callback));
  12481. };
  12482. /**
  12483. * @param {?} target
  12484. * @param {?} name
  12485. * @param {?} callback
  12486. * @return {?}
  12487. */
  12488. RendererAdapter.prototype.listenGlobal = /**
  12489. * @param {?} target
  12490. * @param {?} name
  12491. * @param {?} callback
  12492. * @return {?}
  12493. */
  12494. function (target, name, callback) {
  12495. return this.delegate.listen(target, name, /** @type {?} */ (callback));
  12496. };
  12497. /**
  12498. * @param {?} renderElement
  12499. * @param {?} propertyName
  12500. * @param {?} propertyValue
  12501. * @return {?}
  12502. */
  12503. RendererAdapter.prototype.setElementProperty = /**
  12504. * @param {?} renderElement
  12505. * @param {?} propertyName
  12506. * @param {?} propertyValue
  12507. * @return {?}
  12508. */
  12509. function (renderElement, propertyName, propertyValue) {
  12510. this.delegate.setProperty(renderElement, propertyName, propertyValue);
  12511. };
  12512. /**
  12513. * @param {?} renderElement
  12514. * @param {?} namespaceAndName
  12515. * @param {?} attributeValue
  12516. * @return {?}
  12517. */
  12518. RendererAdapter.prototype.setElementAttribute = /**
  12519. * @param {?} renderElement
  12520. * @param {?} namespaceAndName
  12521. * @param {?} attributeValue
  12522. * @return {?}
  12523. */
  12524. function (renderElement, namespaceAndName, attributeValue) {
  12525. var _a = splitNamespace(namespaceAndName), ns = _a[0], name = _a[1];
  12526. if (attributeValue != null) {
  12527. this.delegate.setAttribute(renderElement, name, attributeValue, ns);
  12528. }
  12529. else {
  12530. this.delegate.removeAttribute(renderElement, name, ns);
  12531. }
  12532. };
  12533. /**
  12534. * @param {?} renderElement
  12535. * @param {?} propertyName
  12536. * @param {?} propertyValue
  12537. * @return {?}
  12538. */
  12539. RendererAdapter.prototype.setBindingDebugInfo = /**
  12540. * @param {?} renderElement
  12541. * @param {?} propertyName
  12542. * @param {?} propertyValue
  12543. * @return {?}
  12544. */
  12545. function (renderElement, propertyName, propertyValue) { };
  12546. /**
  12547. * @param {?} renderElement
  12548. * @param {?} className
  12549. * @param {?} isAdd
  12550. * @return {?}
  12551. */
  12552. RendererAdapter.prototype.setElementClass = /**
  12553. * @param {?} renderElement
  12554. * @param {?} className
  12555. * @param {?} isAdd
  12556. * @return {?}
  12557. */
  12558. function (renderElement, className, isAdd) {
  12559. if (isAdd) {
  12560. this.delegate.addClass(renderElement, className);
  12561. }
  12562. else {
  12563. this.delegate.removeClass(renderElement, className);
  12564. }
  12565. };
  12566. /**
  12567. * @param {?} renderElement
  12568. * @param {?} styleName
  12569. * @param {?} styleValue
  12570. * @return {?}
  12571. */
  12572. RendererAdapter.prototype.setElementStyle = /**
  12573. * @param {?} renderElement
  12574. * @param {?} styleName
  12575. * @param {?} styleValue
  12576. * @return {?}
  12577. */
  12578. function (renderElement, styleName, styleValue) {
  12579. if (styleValue != null) {
  12580. this.delegate.setStyle(renderElement, styleName, styleValue);
  12581. }
  12582. else {
  12583. this.delegate.removeStyle(renderElement, styleName);
  12584. }
  12585. };
  12586. /**
  12587. * @param {?} renderElement
  12588. * @param {?} methodName
  12589. * @param {?} args
  12590. * @return {?}
  12591. */
  12592. RendererAdapter.prototype.invokeElementMethod = /**
  12593. * @param {?} renderElement
  12594. * @param {?} methodName
  12595. * @param {?} args
  12596. * @return {?}
  12597. */
  12598. function (renderElement, methodName, args) {
  12599. (/** @type {?} */ (renderElement))[methodName].apply(renderElement, args);
  12600. };
  12601. /**
  12602. * @param {?} renderNode
  12603. * @param {?} text
  12604. * @return {?}
  12605. */
  12606. RendererAdapter.prototype.setText = /**
  12607. * @param {?} renderNode
  12608. * @param {?} text
  12609. * @return {?}
  12610. */
  12611. function (renderNode$$1, text) { this.delegate.setValue(renderNode$$1, text); };
  12612. /**
  12613. * @return {?}
  12614. */
  12615. RendererAdapter.prototype.animate = /**
  12616. * @return {?}
  12617. */
  12618. function () { throw new Error('Renderer.animate is no longer supported!'); };
  12619. return RendererAdapter;
  12620. }());
  12621. /**
  12622. * @param {?} moduleType
  12623. * @param {?} parent
  12624. * @param {?} bootstrapComponents
  12625. * @param {?} def
  12626. * @return {?}
  12627. */
  12628. function createNgModuleRef(moduleType, parent, bootstrapComponents, def) {
  12629. return new NgModuleRef_(moduleType, parent, bootstrapComponents, def);
  12630. }
  12631. var NgModuleRef_ = /** @class */ (function () {
  12632. function NgModuleRef_(_moduleType, _parent, _bootstrapComponents, _def) {
  12633. this._moduleType = _moduleType;
  12634. this._parent = _parent;
  12635. this._bootstrapComponents = _bootstrapComponents;
  12636. this._def = _def;
  12637. this._destroyListeners = [];
  12638. this._destroyed = false;
  12639. this.injector = this;
  12640. initNgModule(this);
  12641. }
  12642. /**
  12643. * @param {?} token
  12644. * @param {?=} notFoundValue
  12645. * @return {?}
  12646. */
  12647. NgModuleRef_.prototype.get = /**
  12648. * @param {?} token
  12649. * @param {?=} notFoundValue
  12650. * @return {?}
  12651. */
  12652. function (token, notFoundValue) {
  12653. if (notFoundValue === void 0) { notFoundValue = Injector.THROW_IF_NOT_FOUND; }
  12654. return resolveNgModuleDep(this, { token: token, tokenKey: tokenKey(token), flags: 0 /* None */ }, notFoundValue);
  12655. };
  12656. Object.defineProperty(NgModuleRef_.prototype, "instance", {
  12657. get: /**
  12658. * @return {?}
  12659. */
  12660. function () { return this.get(this._moduleType); },
  12661. enumerable: true,
  12662. configurable: true
  12663. });
  12664. Object.defineProperty(NgModuleRef_.prototype, "componentFactoryResolver", {
  12665. get: /**
  12666. * @return {?}
  12667. */
  12668. function () { return this.get(ComponentFactoryResolver); },
  12669. enumerable: true,
  12670. configurable: true
  12671. });
  12672. /**
  12673. * @return {?}
  12674. */
  12675. NgModuleRef_.prototype.destroy = /**
  12676. * @return {?}
  12677. */
  12678. function () {
  12679. if (this._destroyed) {
  12680. throw new Error("The ng module " + stringify(this.instance.constructor) + " has already been destroyed.");
  12681. }
  12682. this._destroyed = true;
  12683. callNgModuleLifecycle(this, 131072 /* OnDestroy */);
  12684. this._destroyListeners.forEach(function (listener) { return listener(); });
  12685. };
  12686. /**
  12687. * @param {?} callback
  12688. * @return {?}
  12689. */
  12690. NgModuleRef_.prototype.onDestroy = /**
  12691. * @param {?} callback
  12692. * @return {?}
  12693. */
  12694. function (callback) { this._destroyListeners.push(callback); };
  12695. return NgModuleRef_;
  12696. }());
  12697. /**
  12698. * @fileoverview added by tsickle
  12699. * @suppress {checkTypes} checked by tsc
  12700. */
  12701. /**
  12702. * @license
  12703. * Copyright Google Inc. All Rights Reserved.
  12704. *
  12705. * Use of this source code is governed by an MIT-style license that can be
  12706. * found in the LICENSE file at https://angular.io/license
  12707. */
  12708. var RendererV1TokenKey = tokenKey(Renderer);
  12709. var Renderer2TokenKey = tokenKey(Renderer2);
  12710. var ElementRefTokenKey = tokenKey(ElementRef);
  12711. var ViewContainerRefTokenKey = tokenKey(ViewContainerRef);
  12712. var TemplateRefTokenKey = tokenKey(TemplateRef);
  12713. var ChangeDetectorRefTokenKey = tokenKey(ChangeDetectorRef);
  12714. var InjectorRefTokenKey = tokenKey(Injector);
  12715. /**
  12716. * @param {?} checkIndex
  12717. * @param {?} flags
  12718. * @param {?} matchedQueries
  12719. * @param {?} childCount
  12720. * @param {?} ctor
  12721. * @param {?} deps
  12722. * @param {?=} props
  12723. * @param {?=} outputs
  12724. * @return {?}
  12725. */
  12726. function directiveDef(checkIndex, flags, matchedQueries, childCount, ctor, deps, props, outputs) {
  12727. var /** @type {?} */ bindings = [];
  12728. if (props) {
  12729. for (var /** @type {?} */ prop in props) {
  12730. var _a = props[prop], bindingIndex = _a[0], nonMinifiedName = _a[1];
  12731. bindings[bindingIndex] = {
  12732. flags: 8 /* TypeProperty */,
  12733. name: prop, nonMinifiedName: nonMinifiedName,
  12734. ns: null,
  12735. securityContext: null,
  12736. suffix: null
  12737. };
  12738. }
  12739. }
  12740. var /** @type {?} */ outputDefs = [];
  12741. if (outputs) {
  12742. for (var /** @type {?} */ propName in outputs) {
  12743. outputDefs.push({ type: 1 /* DirectiveOutput */, propName: propName, target: null, eventName: outputs[propName] });
  12744. }
  12745. }
  12746. flags |= 16384 /* TypeDirective */;
  12747. return _def(checkIndex, flags, matchedQueries, childCount, ctor, ctor, deps, bindings, outputDefs);
  12748. }
  12749. /**
  12750. * @param {?} flags
  12751. * @param {?} ctor
  12752. * @param {?} deps
  12753. * @return {?}
  12754. */
  12755. function pipeDef(flags, ctor, deps) {
  12756. flags |= 16 /* TypePipe */;
  12757. return _def(-1, flags, null, 0, ctor, ctor, deps);
  12758. }
  12759. /**
  12760. * @param {?} flags
  12761. * @param {?} matchedQueries
  12762. * @param {?} token
  12763. * @param {?} value
  12764. * @param {?} deps
  12765. * @return {?}
  12766. */
  12767. function providerDef(flags, matchedQueries, token, value, deps) {
  12768. return _def(-1, flags, matchedQueries, 0, token, value, deps);
  12769. }
  12770. /**
  12771. * @param {?} checkIndex
  12772. * @param {?} flags
  12773. * @param {?} matchedQueriesDsl
  12774. * @param {?} childCount
  12775. * @param {?} token
  12776. * @param {?} value
  12777. * @param {?} deps
  12778. * @param {?=} bindings
  12779. * @param {?=} outputs
  12780. * @return {?}
  12781. */
  12782. function _def(checkIndex, flags, matchedQueriesDsl, childCount, token, value, deps, bindings, outputs) {
  12783. var _a = splitMatchedQueriesDsl(matchedQueriesDsl), matchedQueries = _a.matchedQueries, references = _a.references, matchedQueryIds = _a.matchedQueryIds;
  12784. if (!outputs) {
  12785. outputs = [];
  12786. }
  12787. if (!bindings) {
  12788. bindings = [];
  12789. }
  12790. // Need to resolve forwardRefs as e.g. for `useValue` we
  12791. // lowered the expression and then stopped evaluating it,
  12792. // i.e. also didn't unwrap it.
  12793. value = resolveForwardRef(value);
  12794. var /** @type {?} */ depDefs = splitDepsDsl(deps, stringify(token));
  12795. return {
  12796. // will bet set by the view definition
  12797. nodeIndex: -1,
  12798. parent: null,
  12799. renderParent: null,
  12800. bindingIndex: -1,
  12801. outputIndex: -1,
  12802. // regular values
  12803. checkIndex: checkIndex,
  12804. flags: flags,
  12805. childFlags: 0,
  12806. directChildFlags: 0,
  12807. childMatchedQueries: 0, matchedQueries: matchedQueries, matchedQueryIds: matchedQueryIds, references: references,
  12808. ngContentIndex: -1, childCount: childCount, bindings: bindings,
  12809. bindingFlags: calcBindingFlags(bindings), outputs: outputs,
  12810. element: null,
  12811. provider: { token: token, value: value, deps: depDefs },
  12812. text: null,
  12813. query: null,
  12814. ngContent: null
  12815. };
  12816. }
  12817. /**
  12818. * @param {?} view
  12819. * @param {?} def
  12820. * @return {?}
  12821. */
  12822. function createProviderInstance(view, def) {
  12823. return _createProviderInstance(view, def);
  12824. }
  12825. /**
  12826. * @param {?} view
  12827. * @param {?} def
  12828. * @return {?}
  12829. */
  12830. function createPipeInstance(view, def) {
  12831. // deps are looked up from component.
  12832. var /** @type {?} */ compView = view;
  12833. while (compView.parent && !isComponentView(compView)) {
  12834. compView = compView.parent;
  12835. }
  12836. // pipes can see the private services of the component
  12837. var /** @type {?} */ allowPrivateServices = true;
  12838. // pipes are always eager and classes!
  12839. return createClass(/** @type {?} */ ((compView.parent)), /** @type {?} */ ((viewParentEl(compView))), allowPrivateServices, /** @type {?} */ ((def.provider)).value, /** @type {?} */ ((def.provider)).deps);
  12840. }
  12841. /**
  12842. * @param {?} view
  12843. * @param {?} def
  12844. * @return {?}
  12845. */
  12846. function createDirectiveInstance(view, def) {
  12847. // components can see other private services, other directives can't.
  12848. var /** @type {?} */ allowPrivateServices = (def.flags & 32768 /* Component */) > 0;
  12849. // directives are always eager and classes!
  12850. var /** @type {?} */ instance = createClass(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((def.provider)).value, /** @type {?} */ ((def.provider)).deps);
  12851. if (def.outputs.length) {
  12852. for (var /** @type {?} */ i = 0; i < def.outputs.length; i++) {
  12853. var /** @type {?} */ output = def.outputs[i];
  12854. var /** @type {?} */ subscription = instance[/** @type {?} */ ((output.propName))].subscribe(eventHandlerClosure(view, /** @type {?} */ ((def.parent)).nodeIndex, output.eventName)); /** @type {?} */
  12855. ((view.disposables))[def.outputIndex + i] = subscription.unsubscribe.bind(subscription);
  12856. }
  12857. }
  12858. return instance;
  12859. }
  12860. /**
  12861. * @param {?} view
  12862. * @param {?} index
  12863. * @param {?} eventName
  12864. * @return {?}
  12865. */
  12866. function eventHandlerClosure(view, index, eventName) {
  12867. return function (event) { return dispatchEvent(view, index, eventName, event); };
  12868. }
  12869. /**
  12870. * @param {?} view
  12871. * @param {?} def
  12872. * @param {?} v0
  12873. * @param {?} v1
  12874. * @param {?} v2
  12875. * @param {?} v3
  12876. * @param {?} v4
  12877. * @param {?} v5
  12878. * @param {?} v6
  12879. * @param {?} v7
  12880. * @param {?} v8
  12881. * @param {?} v9
  12882. * @return {?}
  12883. */
  12884. function checkAndUpdateDirectiveInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  12885. var /** @type {?} */ providerData = asProviderData(view, def.nodeIndex);
  12886. var /** @type {?} */ directive = providerData.instance;
  12887. var /** @type {?} */ changed = false;
  12888. var /** @type {?} */ changes = /** @type {?} */ ((undefined));
  12889. var /** @type {?} */ bindLen = def.bindings.length;
  12890. if (bindLen > 0 && checkBinding(view, def, 0, v0)) {
  12891. changed = true;
  12892. changes = updateProp(view, providerData, def, 0, v0, changes);
  12893. }
  12894. if (bindLen > 1 && checkBinding(view, def, 1, v1)) {
  12895. changed = true;
  12896. changes = updateProp(view, providerData, def, 1, v1, changes);
  12897. }
  12898. if (bindLen > 2 && checkBinding(view, def, 2, v2)) {
  12899. changed = true;
  12900. changes = updateProp(view, providerData, def, 2, v2, changes);
  12901. }
  12902. if (bindLen > 3 && checkBinding(view, def, 3, v3)) {
  12903. changed = true;
  12904. changes = updateProp(view, providerData, def, 3, v3, changes);
  12905. }
  12906. if (bindLen > 4 && checkBinding(view, def, 4, v4)) {
  12907. changed = true;
  12908. changes = updateProp(view, providerData, def, 4, v4, changes);
  12909. }
  12910. if (bindLen > 5 && checkBinding(view, def, 5, v5)) {
  12911. changed = true;
  12912. changes = updateProp(view, providerData, def, 5, v5, changes);
  12913. }
  12914. if (bindLen > 6 && checkBinding(view, def, 6, v6)) {
  12915. changed = true;
  12916. changes = updateProp(view, providerData, def, 6, v6, changes);
  12917. }
  12918. if (bindLen > 7 && checkBinding(view, def, 7, v7)) {
  12919. changed = true;
  12920. changes = updateProp(view, providerData, def, 7, v7, changes);
  12921. }
  12922. if (bindLen > 8 && checkBinding(view, def, 8, v8)) {
  12923. changed = true;
  12924. changes = updateProp(view, providerData, def, 8, v8, changes);
  12925. }
  12926. if (bindLen > 9 && checkBinding(view, def, 9, v9)) {
  12927. changed = true;
  12928. changes = updateProp(view, providerData, def, 9, v9, changes);
  12929. }
  12930. if (changes) {
  12931. directive.ngOnChanges(changes);
  12932. }
  12933. if ((def.flags & 65536 /* OnInit */) &&
  12934. shouldCallLifecycleInitHook(view, 256 /* InitState_CallingOnInit */, def.nodeIndex)) {
  12935. directive.ngOnInit();
  12936. }
  12937. if (def.flags & 262144 /* DoCheck */) {
  12938. directive.ngDoCheck();
  12939. }
  12940. return changed;
  12941. }
  12942. /**
  12943. * @param {?} view
  12944. * @param {?} def
  12945. * @param {?} values
  12946. * @return {?}
  12947. */
  12948. function checkAndUpdateDirectiveDynamic(view, def, values) {
  12949. var /** @type {?} */ providerData = asProviderData(view, def.nodeIndex);
  12950. var /** @type {?} */ directive = providerData.instance;
  12951. var /** @type {?} */ changed = false;
  12952. var /** @type {?} */ changes = /** @type {?} */ ((undefined));
  12953. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  12954. if (checkBinding(view, def, i, values[i])) {
  12955. changed = true;
  12956. changes = updateProp(view, providerData, def, i, values[i], changes);
  12957. }
  12958. }
  12959. if (changes) {
  12960. directive.ngOnChanges(changes);
  12961. }
  12962. if ((def.flags & 65536 /* OnInit */) &&
  12963. shouldCallLifecycleInitHook(view, 256 /* InitState_CallingOnInit */, def.nodeIndex)) {
  12964. directive.ngOnInit();
  12965. }
  12966. if (def.flags & 262144 /* DoCheck */) {
  12967. directive.ngDoCheck();
  12968. }
  12969. return changed;
  12970. }
  12971. /**
  12972. * @param {?} view
  12973. * @param {?} def
  12974. * @return {?}
  12975. */
  12976. function _createProviderInstance(view, def) {
  12977. // private services can see other private services
  12978. var /** @type {?} */ allowPrivateServices = (def.flags & 8192 /* PrivateProvider */) > 0;
  12979. var /** @type {?} */ providerDef = def.provider;
  12980. switch (def.flags & 201347067 /* Types */) {
  12981. case 512 /* TypeClassProvider */:
  12982. return createClass(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);
  12983. case 1024 /* TypeFactoryProvider */:
  12984. return callFactory(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);
  12985. case 2048 /* TypeUseExistingProvider */:
  12986. return resolveDep(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).deps[0]);
  12987. case 256 /* TypeValueProvider */:
  12988. return /** @type {?} */ ((providerDef)).value;
  12989. }
  12990. }
  12991. /**
  12992. * @param {?} view
  12993. * @param {?} elDef
  12994. * @param {?} allowPrivateServices
  12995. * @param {?} ctor
  12996. * @param {?} deps
  12997. * @return {?}
  12998. */
  12999. function createClass(view, elDef, allowPrivateServices, ctor, deps) {
  13000. var /** @type {?} */ len = deps.length;
  13001. switch (len) {
  13002. case 0:
  13003. return new ctor();
  13004. case 1:
  13005. return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]));
  13006. case 2:
  13007. return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
  13008. case 3:
  13009. return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
  13010. default:
  13011. var /** @type {?} */ depValues = new Array(len);
  13012. for (var /** @type {?} */ i = 0; i < len; i++) {
  13013. depValues[i] = resolveDep(view, elDef, allowPrivateServices, deps[i]);
  13014. }
  13015. return new (ctor.bind.apply(ctor, [void 0].concat(depValues)))();
  13016. }
  13017. }
  13018. /**
  13019. * @param {?} view
  13020. * @param {?} elDef
  13021. * @param {?} allowPrivateServices
  13022. * @param {?} factory
  13023. * @param {?} deps
  13024. * @return {?}
  13025. */
  13026. function callFactory(view, elDef, allowPrivateServices, factory, deps) {
  13027. var /** @type {?} */ len = deps.length;
  13028. switch (len) {
  13029. case 0:
  13030. return factory();
  13031. case 1:
  13032. return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]));
  13033. case 2:
  13034. return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));
  13035. case 3:
  13036. return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));
  13037. default:
  13038. var /** @type {?} */ depValues = Array(len);
  13039. for (var /** @type {?} */ i = 0; i < len; i++) {
  13040. depValues[i] = resolveDep(view, elDef, allowPrivateServices, deps[i]);
  13041. }
  13042. return factory.apply(void 0, depValues);
  13043. }
  13044. }
  13045. // This default value is when checking the hierarchy for a token.
  13046. //
  13047. // It means both:
  13048. // - the token is not provided by the current injector,
  13049. // - only the element injectors should be checked (ie do not check module injectors
  13050. //
  13051. // mod1
  13052. // /
  13053. // el1 mod2
  13054. // \ /
  13055. // el2
  13056. //
  13057. // When requesting el2.injector.get(token), we should check in the following order and return the
  13058. // first found value:
  13059. // - el2.injector.get(token, default)
  13060. // - el1.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) -> do not check the module
  13061. // - mod2.injector.get(token, default)
  13062. var NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR = {};
  13063. /**
  13064. * @param {?} view
  13065. * @param {?} elDef
  13066. * @param {?} allowPrivateServices
  13067. * @param {?} depDef
  13068. * @param {?=} notFoundValue
  13069. * @return {?}
  13070. */
  13071. function resolveDep(view, elDef, allowPrivateServices, depDef, notFoundValue) {
  13072. if (notFoundValue === void 0) { notFoundValue = Injector.THROW_IF_NOT_FOUND; }
  13073. if (depDef.flags & 8 /* Value */) {
  13074. return depDef.token;
  13075. }
  13076. var /** @type {?} */ startView = view;
  13077. if (depDef.flags & 2 /* Optional */) {
  13078. notFoundValue = null;
  13079. }
  13080. var /** @type {?} */ tokenKey$$1 = depDef.tokenKey;
  13081. if (tokenKey$$1 === ChangeDetectorRefTokenKey) {
  13082. // directives on the same element as a component should be able to control the change detector
  13083. // of that component as well.
  13084. allowPrivateServices = !!(elDef && /** @type {?} */ ((elDef.element)).componentView);
  13085. }
  13086. if (elDef && (depDef.flags & 1 /* SkipSelf */)) {
  13087. allowPrivateServices = false;
  13088. elDef = /** @type {?} */ ((elDef.parent));
  13089. }
  13090. while (view) {
  13091. if (elDef) {
  13092. switch (tokenKey$$1) {
  13093. case RendererV1TokenKey: {
  13094. var /** @type {?} */ compView = findCompView(view, elDef, allowPrivateServices);
  13095. return createRendererV1(compView);
  13096. }
  13097. case Renderer2TokenKey: {
  13098. var /** @type {?} */ compView = findCompView(view, elDef, allowPrivateServices);
  13099. return compView.renderer;
  13100. }
  13101. case ElementRefTokenKey:
  13102. return new ElementRef(asElementData(view, elDef.nodeIndex).renderElement);
  13103. case ViewContainerRefTokenKey:
  13104. return asElementData(view, elDef.nodeIndex).viewContainer;
  13105. case TemplateRefTokenKey: {
  13106. if (/** @type {?} */ ((elDef.element)).template) {
  13107. return asElementData(view, elDef.nodeIndex).template;
  13108. }
  13109. break;
  13110. }
  13111. case ChangeDetectorRefTokenKey: {
  13112. var /** @type {?} */ cdView = findCompView(view, elDef, allowPrivateServices);
  13113. return createChangeDetectorRef(cdView);
  13114. }
  13115. case InjectorRefTokenKey:
  13116. return createInjector(view, elDef);
  13117. default:
  13118. var /** @type {?} */ providerDef_1 = /** @type {?} */ (((allowPrivateServices ? /** @type {?} */ ((elDef.element)).allProviders : /** @type {?} */ ((elDef.element)).publicProviders)))[tokenKey$$1];
  13119. if (providerDef_1) {
  13120. var /** @type {?} */ providerData = asProviderData(view, providerDef_1.nodeIndex);
  13121. if (!providerData) {
  13122. providerData = { instance: _createProviderInstance(view, providerDef_1) };
  13123. view.nodes[providerDef_1.nodeIndex] = /** @type {?} */ (providerData);
  13124. }
  13125. return providerData.instance;
  13126. }
  13127. }
  13128. }
  13129. allowPrivateServices = isComponentView(view);
  13130. elDef = /** @type {?} */ ((viewParentEl(view)));
  13131. view = /** @type {?} */ ((view.parent));
  13132. }
  13133. var /** @type {?} */ value = startView.root.injector.get(depDef.token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR);
  13134. if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
  13135. notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
  13136. // Return the value from the root element injector when
  13137. // - it provides it
  13138. // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
  13139. // - the module injector should not be checked
  13140. // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
  13141. return value;
  13142. }
  13143. return startView.root.ngModule.injector.get(depDef.token, notFoundValue);
  13144. }
  13145. /**
  13146. * @param {?} view
  13147. * @param {?} elDef
  13148. * @param {?} allowPrivateServices
  13149. * @return {?}
  13150. */
  13151. function findCompView(view, elDef, allowPrivateServices) {
  13152. var /** @type {?} */ compView;
  13153. if (allowPrivateServices) {
  13154. compView = asElementData(view, elDef.nodeIndex).componentView;
  13155. }
  13156. else {
  13157. compView = view;
  13158. while (compView.parent && !isComponentView(compView)) {
  13159. compView = compView.parent;
  13160. }
  13161. }
  13162. return compView;
  13163. }
  13164. /**
  13165. * @param {?} view
  13166. * @param {?} providerData
  13167. * @param {?} def
  13168. * @param {?} bindingIdx
  13169. * @param {?} value
  13170. * @param {?} changes
  13171. * @return {?}
  13172. */
  13173. function updateProp(view, providerData, def, bindingIdx, value, changes) {
  13174. if (def.flags & 32768 /* Component */) {
  13175. var /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((def.parent)).nodeIndex).componentView;
  13176. if (compView.def.flags & 2 /* OnPush */) {
  13177. compView.state |= 8 /* ChecksEnabled */;
  13178. }
  13179. }
  13180. var /** @type {?} */ binding = def.bindings[bindingIdx];
  13181. var /** @type {?} */ propName = /** @type {?} */ ((binding.name));
  13182. // Note: This is still safe with Closure Compiler as
  13183. // the user passed in the property name as an object has to `providerDef`,
  13184. // so Closure Compiler will have renamed the property correctly already.
  13185. providerData.instance[propName] = value;
  13186. if (def.flags & 524288 /* OnChanges */) {
  13187. changes = changes || {};
  13188. var /** @type {?} */ oldValue = WrappedValue.unwrap(view.oldValues[def.bindingIndex + bindingIdx]);
  13189. var /** @type {?} */ binding_1 = def.bindings[bindingIdx];
  13190. changes[/** @type {?} */ ((binding_1.nonMinifiedName))] =
  13191. new SimpleChange(oldValue, value, (view.state & 2 /* FirstCheck */) !== 0);
  13192. }
  13193. view.oldValues[def.bindingIndex + bindingIdx] = value;
  13194. return changes;
  13195. }
  13196. /**
  13197. * @param {?} view
  13198. * @param {?} lifecycles
  13199. * @return {?}
  13200. */
  13201. function callLifecycleHooksChildrenFirst(view, lifecycles) {
  13202. if (!(view.def.nodeFlags & lifecycles)) {
  13203. return;
  13204. }
  13205. var /** @type {?} */ nodes = view.def.nodes;
  13206. var /** @type {?} */ initIndex = 0;
  13207. for (var /** @type {?} */ i = 0; i < nodes.length; i++) {
  13208. var /** @type {?} */ nodeDef = nodes[i];
  13209. var /** @type {?} */ parent_1 = nodeDef.parent;
  13210. if (!parent_1 && nodeDef.flags & lifecycles) {
  13211. // matching root node (e.g. a pipe)
  13212. callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);
  13213. }
  13214. if ((nodeDef.childFlags & lifecycles) === 0) {
  13215. // no child matches one of the lifecycles
  13216. i += nodeDef.childCount;
  13217. }
  13218. while (parent_1 && (parent_1.flags & 1 /* TypeElement */) &&
  13219. i === parent_1.nodeIndex + parent_1.childCount) {
  13220. // last child of an element
  13221. if (parent_1.directChildFlags & lifecycles) {
  13222. initIndex = callElementProvidersLifecycles(view, parent_1, lifecycles, initIndex);
  13223. }
  13224. parent_1 = parent_1.parent;
  13225. }
  13226. }
  13227. }
  13228. /**
  13229. * @param {?} view
  13230. * @param {?} elDef
  13231. * @param {?} lifecycles
  13232. * @param {?} initIndex
  13233. * @return {?}
  13234. */
  13235. function callElementProvidersLifecycles(view, elDef, lifecycles, initIndex) {
  13236. for (var /** @type {?} */ i = elDef.nodeIndex + 1; i <= elDef.nodeIndex + elDef.childCount; i++) {
  13237. var /** @type {?} */ nodeDef = view.def.nodes[i];
  13238. if (nodeDef.flags & lifecycles) {
  13239. callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);
  13240. }
  13241. // only visit direct children
  13242. i += nodeDef.childCount;
  13243. }
  13244. return initIndex;
  13245. }
  13246. /**
  13247. * @param {?} view
  13248. * @param {?} index
  13249. * @param {?} lifecycles
  13250. * @param {?} initIndex
  13251. * @return {?}
  13252. */
  13253. function callProviderLifecycles(view, index, lifecycles, initIndex) {
  13254. var /** @type {?} */ providerData = asProviderData(view, index);
  13255. if (!providerData) {
  13256. return;
  13257. }
  13258. var /** @type {?} */ provider = providerData.instance;
  13259. if (!provider) {
  13260. return;
  13261. }
  13262. Services.setCurrentNode(view, index);
  13263. if (lifecycles & 1048576 /* AfterContentInit */ &&
  13264. shouldCallLifecycleInitHook(view, 512 /* InitState_CallingAfterContentInit */, initIndex)) {
  13265. provider.ngAfterContentInit();
  13266. }
  13267. if (lifecycles & 2097152 /* AfterContentChecked */) {
  13268. provider.ngAfterContentChecked();
  13269. }
  13270. if (lifecycles & 4194304 /* AfterViewInit */ &&
  13271. shouldCallLifecycleInitHook(view, 768 /* InitState_CallingAfterViewInit */, initIndex)) {
  13272. provider.ngAfterViewInit();
  13273. }
  13274. if (lifecycles & 8388608 /* AfterViewChecked */) {
  13275. provider.ngAfterViewChecked();
  13276. }
  13277. if (lifecycles & 131072 /* OnDestroy */) {
  13278. provider.ngOnDestroy();
  13279. }
  13280. }
  13281. /**
  13282. * @fileoverview added by tsickle
  13283. * @suppress {checkTypes} checked by tsc
  13284. */
  13285. /**
  13286. * @license
  13287. * Copyright Google Inc. All Rights Reserved.
  13288. *
  13289. * Use of this source code is governed by an MIT-style license that can be
  13290. * found in the LICENSE file at https://angular.io/license
  13291. */
  13292. /**
  13293. * @param {?} flags
  13294. * @param {?} id
  13295. * @param {?} bindings
  13296. * @return {?}
  13297. */
  13298. function queryDef(flags, id, bindings) {
  13299. var /** @type {?} */ bindingDefs = [];
  13300. for (var /** @type {?} */ propName in bindings) {
  13301. var /** @type {?} */ bindingType = bindings[propName];
  13302. bindingDefs.push({ propName: propName, bindingType: bindingType });
  13303. }
  13304. return {
  13305. // will bet set by the view definition
  13306. nodeIndex: -1,
  13307. parent: null,
  13308. renderParent: null,
  13309. bindingIndex: -1,
  13310. outputIndex: -1,
  13311. // regular values
  13312. // TODO(vicb): check
  13313. checkIndex: -1, flags: flags,
  13314. childFlags: 0,
  13315. directChildFlags: 0,
  13316. childMatchedQueries: 0,
  13317. ngContentIndex: -1,
  13318. matchedQueries: {},
  13319. matchedQueryIds: 0,
  13320. references: {},
  13321. childCount: 0,
  13322. bindings: [],
  13323. bindingFlags: 0,
  13324. outputs: [],
  13325. element: null,
  13326. provider: null,
  13327. text: null,
  13328. query: { id: id, filterId: filterQueryId(id), bindings: bindingDefs },
  13329. ngContent: null
  13330. };
  13331. }
  13332. /**
  13333. * @return {?}
  13334. */
  13335. function createQuery() {
  13336. return new QueryList();
  13337. }
  13338. /**
  13339. * @param {?} view
  13340. * @return {?}
  13341. */
  13342. function dirtyParentQueries(view) {
  13343. var /** @type {?} */ queryIds = view.def.nodeMatchedQueries;
  13344. while (view.parent && isEmbeddedView(view)) {
  13345. var /** @type {?} */ tplDef = /** @type {?} */ ((view.parentNodeDef));
  13346. view = view.parent;
  13347. // content queries
  13348. var /** @type {?} */ end = tplDef.nodeIndex + tplDef.childCount;
  13349. for (var /** @type {?} */ i = 0; i <= end; i++) {
  13350. var /** @type {?} */ nodeDef = view.def.nodes[i];
  13351. if ((nodeDef.flags & 67108864 /* TypeContentQuery */) &&
  13352. (nodeDef.flags & 536870912 /* DynamicQuery */) &&
  13353. (/** @type {?} */ ((nodeDef.query)).filterId & queryIds) === /** @type {?} */ ((nodeDef.query)).filterId) {
  13354. asQueryList(view, i).setDirty();
  13355. }
  13356. if ((nodeDef.flags & 1 /* TypeElement */ && i + nodeDef.childCount < tplDef.nodeIndex) ||
  13357. !(nodeDef.childFlags & 67108864 /* TypeContentQuery */) ||
  13358. !(nodeDef.childFlags & 536870912 /* DynamicQuery */)) {
  13359. // skip elements that don't contain the template element or no query.
  13360. i += nodeDef.childCount;
  13361. }
  13362. }
  13363. }
  13364. // view queries
  13365. if (view.def.nodeFlags & 134217728 /* TypeViewQuery */) {
  13366. for (var /** @type {?} */ i = 0; i < view.def.nodes.length; i++) {
  13367. var /** @type {?} */ nodeDef = view.def.nodes[i];
  13368. if ((nodeDef.flags & 134217728 /* TypeViewQuery */) && (nodeDef.flags & 536870912 /* DynamicQuery */)) {
  13369. asQueryList(view, i).setDirty();
  13370. }
  13371. // only visit the root nodes
  13372. i += nodeDef.childCount;
  13373. }
  13374. }
  13375. }
  13376. /**
  13377. * @param {?} view
  13378. * @param {?} nodeDef
  13379. * @return {?}
  13380. */
  13381. function checkAndUpdateQuery(view, nodeDef) {
  13382. var /** @type {?} */ queryList = asQueryList(view, nodeDef.nodeIndex);
  13383. if (!queryList.dirty) {
  13384. return;
  13385. }
  13386. var /** @type {?} */ directiveInstance;
  13387. var /** @type {?} */ newValues = /** @type {?} */ ((undefined));
  13388. if (nodeDef.flags & 67108864 /* TypeContentQuery */) {
  13389. var /** @type {?} */ elementDef = /** @type {?} */ ((/** @type {?} */ ((nodeDef.parent)).parent));
  13390. newValues = calcQueryValues(view, elementDef.nodeIndex, elementDef.nodeIndex + elementDef.childCount, /** @type {?} */ ((nodeDef.query)), []);
  13391. directiveInstance = asProviderData(view, /** @type {?} */ ((nodeDef.parent)).nodeIndex).instance;
  13392. }
  13393. else if (nodeDef.flags & 134217728 /* TypeViewQuery */) {
  13394. newValues = calcQueryValues(view, 0, view.def.nodes.length - 1, /** @type {?} */ ((nodeDef.query)), []);
  13395. directiveInstance = view.component;
  13396. }
  13397. queryList.reset(newValues);
  13398. var /** @type {?} */ bindings = /** @type {?} */ ((nodeDef.query)).bindings;
  13399. var /** @type {?} */ notify = false;
  13400. for (var /** @type {?} */ i = 0; i < bindings.length; i++) {
  13401. var /** @type {?} */ binding = bindings[i];
  13402. var /** @type {?} */ boundValue = void 0;
  13403. switch (binding.bindingType) {
  13404. case 0 /* First */:
  13405. boundValue = queryList.first;
  13406. break;
  13407. case 1 /* All */:
  13408. boundValue = queryList;
  13409. notify = true;
  13410. break;
  13411. }
  13412. directiveInstance[binding.propName] = boundValue;
  13413. }
  13414. if (notify) {
  13415. queryList.notifyOnChanges();
  13416. }
  13417. }
  13418. /**
  13419. * @param {?} view
  13420. * @param {?} startIndex
  13421. * @param {?} endIndex
  13422. * @param {?} queryDef
  13423. * @param {?} values
  13424. * @return {?}
  13425. */
  13426. function calcQueryValues(view, startIndex, endIndex, queryDef, values) {
  13427. for (var /** @type {?} */ i = startIndex; i <= endIndex; i++) {
  13428. var /** @type {?} */ nodeDef = view.def.nodes[i];
  13429. var /** @type {?} */ valueType = nodeDef.matchedQueries[queryDef.id];
  13430. if (valueType != null) {
  13431. values.push(getQueryValue(view, nodeDef, valueType));
  13432. }
  13433. if (nodeDef.flags & 1 /* TypeElement */ && /** @type {?} */ ((nodeDef.element)).template &&
  13434. (/** @type {?} */ ((/** @type {?} */ ((nodeDef.element)).template)).nodeMatchedQueries & queryDef.filterId) ===
  13435. queryDef.filterId) {
  13436. var /** @type {?} */ elementData = asElementData(view, i);
  13437. // check embedded views that were attached at the place of their template,
  13438. // but process child nodes first if some match the query (see issue #16568)
  13439. if ((nodeDef.childMatchedQueries & queryDef.filterId) === queryDef.filterId) {
  13440. calcQueryValues(view, i + 1, i + nodeDef.childCount, queryDef, values);
  13441. i += nodeDef.childCount;
  13442. }
  13443. if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
  13444. var /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;
  13445. for (var /** @type {?} */ k = 0; k < embeddedViews.length; k++) {
  13446. var /** @type {?} */ embeddedView = embeddedViews[k];
  13447. var /** @type {?} */ dvc = declaredViewContainer(embeddedView);
  13448. if (dvc && dvc === elementData) {
  13449. calcQueryValues(embeddedView, 0, embeddedView.def.nodes.length - 1, queryDef, values);
  13450. }
  13451. }
  13452. }
  13453. var /** @type {?} */ projectedViews = elementData.template._projectedViews;
  13454. if (projectedViews) {
  13455. for (var /** @type {?} */ k = 0; k < projectedViews.length; k++) {
  13456. var /** @type {?} */ projectedView = projectedViews[k];
  13457. calcQueryValues(projectedView, 0, projectedView.def.nodes.length - 1, queryDef, values);
  13458. }
  13459. }
  13460. }
  13461. if ((nodeDef.childMatchedQueries & queryDef.filterId) !== queryDef.filterId) {
  13462. // if no child matches the query, skip the children.
  13463. i += nodeDef.childCount;
  13464. }
  13465. }
  13466. return values;
  13467. }
  13468. /**
  13469. * @param {?} view
  13470. * @param {?} nodeDef
  13471. * @param {?} queryValueType
  13472. * @return {?}
  13473. */
  13474. function getQueryValue(view, nodeDef, queryValueType) {
  13475. if (queryValueType != null) {
  13476. // a match
  13477. switch (queryValueType) {
  13478. case 1 /* RenderElement */:
  13479. return asElementData(view, nodeDef.nodeIndex).renderElement;
  13480. case 0 /* ElementRef */:
  13481. return new ElementRef(asElementData(view, nodeDef.nodeIndex).renderElement);
  13482. case 2 /* TemplateRef */:
  13483. return asElementData(view, nodeDef.nodeIndex).template;
  13484. case 3 /* ViewContainerRef */:
  13485. return asElementData(view, nodeDef.nodeIndex).viewContainer;
  13486. case 4 /* Provider */:
  13487. return asProviderData(view, nodeDef.nodeIndex).instance;
  13488. }
  13489. }
  13490. }
  13491. /**
  13492. * @fileoverview added by tsickle
  13493. * @suppress {checkTypes} checked by tsc
  13494. */
  13495. /**
  13496. * @license
  13497. * Copyright Google Inc. All Rights Reserved.
  13498. *
  13499. * Use of this source code is governed by an MIT-style license that can be
  13500. * found in the LICENSE file at https://angular.io/license
  13501. */
  13502. /**
  13503. * @param {?} ngContentIndex
  13504. * @param {?} index
  13505. * @return {?}
  13506. */
  13507. function ngContentDef(ngContentIndex, index) {
  13508. return {
  13509. // will bet set by the view definition
  13510. nodeIndex: -1,
  13511. parent: null,
  13512. renderParent: null,
  13513. bindingIndex: -1,
  13514. outputIndex: -1,
  13515. // regular values
  13516. checkIndex: -1,
  13517. flags: 8 /* TypeNgContent */,
  13518. childFlags: 0,
  13519. directChildFlags: 0,
  13520. childMatchedQueries: 0,
  13521. matchedQueries: {},
  13522. matchedQueryIds: 0,
  13523. references: {}, ngContentIndex: ngContentIndex,
  13524. childCount: 0,
  13525. bindings: [],
  13526. bindingFlags: 0,
  13527. outputs: [],
  13528. element: null,
  13529. provider: null,
  13530. text: null,
  13531. query: null,
  13532. ngContent: { index: index }
  13533. };
  13534. }
  13535. /**
  13536. * @param {?} view
  13537. * @param {?} renderHost
  13538. * @param {?} def
  13539. * @return {?}
  13540. */
  13541. function appendNgContent(view, renderHost, def) {
  13542. var /** @type {?} */ parentEl = getParentRenderElement(view, renderHost, def);
  13543. if (!parentEl) {
  13544. // Nothing to do if there is no parent element.
  13545. return;
  13546. }
  13547. var /** @type {?} */ ngContentIndex = /** @type {?} */ ((def.ngContent)).index;
  13548. visitProjectedRenderNodes(view, ngContentIndex, 1 /* AppendChild */, parentEl, null, undefined);
  13549. }
  13550. /**
  13551. * @fileoverview added by tsickle
  13552. * @suppress {checkTypes} checked by tsc
  13553. */
  13554. /**
  13555. * @license
  13556. * Copyright Google Inc. All Rights Reserved.
  13557. *
  13558. * Use of this source code is governed by an MIT-style license that can be
  13559. * found in the LICENSE file at https://angular.io/license
  13560. */
  13561. /**
  13562. * @param {?} checkIndex
  13563. * @param {?} argCount
  13564. * @return {?}
  13565. */
  13566. function purePipeDef(checkIndex, argCount) {
  13567. // argCount + 1 to include the pipe as first arg
  13568. return _pureExpressionDef(128 /* TypePurePipe */, checkIndex, new Array(argCount + 1));
  13569. }
  13570. /**
  13571. * @param {?} checkIndex
  13572. * @param {?} argCount
  13573. * @return {?}
  13574. */
  13575. function pureArrayDef(checkIndex, argCount) {
  13576. return _pureExpressionDef(32 /* TypePureArray */, checkIndex, new Array(argCount));
  13577. }
  13578. /**
  13579. * @param {?} checkIndex
  13580. * @param {?} propToIndex
  13581. * @return {?}
  13582. */
  13583. function pureObjectDef(checkIndex, propToIndex) {
  13584. var /** @type {?} */ keys = Object.keys(propToIndex);
  13585. var /** @type {?} */ nbKeys = keys.length;
  13586. var /** @type {?} */ propertyNames = new Array(nbKeys);
  13587. for (var /** @type {?} */ i = 0; i < nbKeys; i++) {
  13588. var /** @type {?} */ key = keys[i];
  13589. var /** @type {?} */ index = propToIndex[key];
  13590. propertyNames[index] = key;
  13591. }
  13592. return _pureExpressionDef(64 /* TypePureObject */, checkIndex, propertyNames);
  13593. }
  13594. /**
  13595. * @param {?} flags
  13596. * @param {?} checkIndex
  13597. * @param {?} propertyNames
  13598. * @return {?}
  13599. */
  13600. function _pureExpressionDef(flags, checkIndex, propertyNames) {
  13601. var /** @type {?} */ bindings = new Array(propertyNames.length);
  13602. for (var /** @type {?} */ i = 0; i < propertyNames.length; i++) {
  13603. var /** @type {?} */ prop = propertyNames[i];
  13604. bindings[i] = {
  13605. flags: 8 /* TypeProperty */,
  13606. name: prop,
  13607. ns: null,
  13608. nonMinifiedName: prop,
  13609. securityContext: null,
  13610. suffix: null
  13611. };
  13612. }
  13613. return {
  13614. // will bet set by the view definition
  13615. nodeIndex: -1,
  13616. parent: null,
  13617. renderParent: null,
  13618. bindingIndex: -1,
  13619. outputIndex: -1,
  13620. // regular values
  13621. checkIndex: checkIndex,
  13622. flags: flags,
  13623. childFlags: 0,
  13624. directChildFlags: 0,
  13625. childMatchedQueries: 0,
  13626. matchedQueries: {},
  13627. matchedQueryIds: 0,
  13628. references: {},
  13629. ngContentIndex: -1,
  13630. childCount: 0, bindings: bindings,
  13631. bindingFlags: calcBindingFlags(bindings),
  13632. outputs: [],
  13633. element: null,
  13634. provider: null,
  13635. text: null,
  13636. query: null,
  13637. ngContent: null
  13638. };
  13639. }
  13640. /**
  13641. * @param {?} view
  13642. * @param {?} def
  13643. * @return {?}
  13644. */
  13645. function createPureExpression(view, def) {
  13646. return { value: undefined };
  13647. }
  13648. /**
  13649. * @param {?} view
  13650. * @param {?} def
  13651. * @param {?} v0
  13652. * @param {?} v1
  13653. * @param {?} v2
  13654. * @param {?} v3
  13655. * @param {?} v4
  13656. * @param {?} v5
  13657. * @param {?} v6
  13658. * @param {?} v7
  13659. * @param {?} v8
  13660. * @param {?} v9
  13661. * @return {?}
  13662. */
  13663. function checkAndUpdatePureExpressionInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  13664. var /** @type {?} */ bindings = def.bindings;
  13665. var /** @type {?} */ changed = false;
  13666. var /** @type {?} */ bindLen = bindings.length;
  13667. if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0))
  13668. changed = true;
  13669. if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1))
  13670. changed = true;
  13671. if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2))
  13672. changed = true;
  13673. if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3))
  13674. changed = true;
  13675. if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4))
  13676. changed = true;
  13677. if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5))
  13678. changed = true;
  13679. if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6))
  13680. changed = true;
  13681. if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7))
  13682. changed = true;
  13683. if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8))
  13684. changed = true;
  13685. if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))
  13686. changed = true;
  13687. if (changed) {
  13688. var /** @type {?} */ data = asPureExpressionData(view, def.nodeIndex);
  13689. var /** @type {?} */ value = void 0;
  13690. switch (def.flags & 201347067 /* Types */) {
  13691. case 32 /* TypePureArray */:
  13692. value = new Array(bindings.length);
  13693. if (bindLen > 0)
  13694. value[0] = v0;
  13695. if (bindLen > 1)
  13696. value[1] = v1;
  13697. if (bindLen > 2)
  13698. value[2] = v2;
  13699. if (bindLen > 3)
  13700. value[3] = v3;
  13701. if (bindLen > 4)
  13702. value[4] = v4;
  13703. if (bindLen > 5)
  13704. value[5] = v5;
  13705. if (bindLen > 6)
  13706. value[6] = v6;
  13707. if (bindLen > 7)
  13708. value[7] = v7;
  13709. if (bindLen > 8)
  13710. value[8] = v8;
  13711. if (bindLen > 9)
  13712. value[9] = v9;
  13713. break;
  13714. case 64 /* TypePureObject */:
  13715. value = {};
  13716. if (bindLen > 0)
  13717. value[/** @type {?} */ ((bindings[0].name))] = v0;
  13718. if (bindLen > 1)
  13719. value[/** @type {?} */ ((bindings[1].name))] = v1;
  13720. if (bindLen > 2)
  13721. value[/** @type {?} */ ((bindings[2].name))] = v2;
  13722. if (bindLen > 3)
  13723. value[/** @type {?} */ ((bindings[3].name))] = v3;
  13724. if (bindLen > 4)
  13725. value[/** @type {?} */ ((bindings[4].name))] = v4;
  13726. if (bindLen > 5)
  13727. value[/** @type {?} */ ((bindings[5].name))] = v5;
  13728. if (bindLen > 6)
  13729. value[/** @type {?} */ ((bindings[6].name))] = v6;
  13730. if (bindLen > 7)
  13731. value[/** @type {?} */ ((bindings[7].name))] = v7;
  13732. if (bindLen > 8)
  13733. value[/** @type {?} */ ((bindings[8].name))] = v8;
  13734. if (bindLen > 9)
  13735. value[/** @type {?} */ ((bindings[9].name))] = v9;
  13736. break;
  13737. case 128 /* TypePurePipe */:
  13738. var /** @type {?} */ pipe = v0;
  13739. switch (bindLen) {
  13740. case 1:
  13741. value = pipe.transform(v0);
  13742. break;
  13743. case 2:
  13744. value = pipe.transform(v1);
  13745. break;
  13746. case 3:
  13747. value = pipe.transform(v1, v2);
  13748. break;
  13749. case 4:
  13750. value = pipe.transform(v1, v2, v3);
  13751. break;
  13752. case 5:
  13753. value = pipe.transform(v1, v2, v3, v4);
  13754. break;
  13755. case 6:
  13756. value = pipe.transform(v1, v2, v3, v4, v5);
  13757. break;
  13758. case 7:
  13759. value = pipe.transform(v1, v2, v3, v4, v5, v6);
  13760. break;
  13761. case 8:
  13762. value = pipe.transform(v1, v2, v3, v4, v5, v6, v7);
  13763. break;
  13764. case 9:
  13765. value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8);
  13766. break;
  13767. case 10:
  13768. value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8, v9);
  13769. break;
  13770. }
  13771. break;
  13772. }
  13773. data.value = value;
  13774. }
  13775. return changed;
  13776. }
  13777. /**
  13778. * @param {?} view
  13779. * @param {?} def
  13780. * @param {?} values
  13781. * @return {?}
  13782. */
  13783. function checkAndUpdatePureExpressionDynamic(view, def, values) {
  13784. var /** @type {?} */ bindings = def.bindings;
  13785. var /** @type {?} */ changed = false;
  13786. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  13787. // Note: We need to loop over all values, so that
  13788. // the old values are updates as well!
  13789. if (checkAndUpdateBinding(view, def, i, values[i])) {
  13790. changed = true;
  13791. }
  13792. }
  13793. if (changed) {
  13794. var /** @type {?} */ data = asPureExpressionData(view, def.nodeIndex);
  13795. var /** @type {?} */ value = void 0;
  13796. switch (def.flags & 201347067 /* Types */) {
  13797. case 32 /* TypePureArray */:
  13798. value = values;
  13799. break;
  13800. case 64 /* TypePureObject */:
  13801. value = {};
  13802. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  13803. value[/** @type {?} */ ((bindings[i].name))] = values[i];
  13804. }
  13805. break;
  13806. case 128 /* TypePurePipe */:
  13807. var /** @type {?} */ pipe = values[0];
  13808. var /** @type {?} */ params = values.slice(1);
  13809. value = pipe.transform.apply(pipe, params);
  13810. break;
  13811. }
  13812. data.value = value;
  13813. }
  13814. return changed;
  13815. }
  13816. /**
  13817. * @fileoverview added by tsickle
  13818. * @suppress {checkTypes} checked by tsc
  13819. */
  13820. /**
  13821. * @license
  13822. * Copyright Google Inc. All Rights Reserved.
  13823. *
  13824. * Use of this source code is governed by an MIT-style license that can be
  13825. * found in the LICENSE file at https://angular.io/license
  13826. */
  13827. /**
  13828. * @param {?} checkIndex
  13829. * @param {?} ngContentIndex
  13830. * @param {?} staticText
  13831. * @return {?}
  13832. */
  13833. function textDef(checkIndex, ngContentIndex, staticText) {
  13834. var /** @type {?} */ bindings = new Array(staticText.length - 1);
  13835. for (var /** @type {?} */ i = 1; i < staticText.length; i++) {
  13836. bindings[i - 1] = {
  13837. flags: 8 /* TypeProperty */,
  13838. name: null,
  13839. ns: null,
  13840. nonMinifiedName: null,
  13841. securityContext: null,
  13842. suffix: staticText[i],
  13843. };
  13844. }
  13845. return {
  13846. // will bet set by the view definition
  13847. nodeIndex: -1,
  13848. parent: null,
  13849. renderParent: null,
  13850. bindingIndex: -1,
  13851. outputIndex: -1,
  13852. // regular values
  13853. checkIndex: checkIndex,
  13854. flags: 2 /* TypeText */,
  13855. childFlags: 0,
  13856. directChildFlags: 0,
  13857. childMatchedQueries: 0,
  13858. matchedQueries: {},
  13859. matchedQueryIds: 0,
  13860. references: {}, ngContentIndex: ngContentIndex,
  13861. childCount: 0, bindings: bindings,
  13862. bindingFlags: 8 /* TypeProperty */,
  13863. outputs: [],
  13864. element: null,
  13865. provider: null,
  13866. text: { prefix: staticText[0] },
  13867. query: null,
  13868. ngContent: null,
  13869. };
  13870. }
  13871. /**
  13872. * @param {?} view
  13873. * @param {?} renderHost
  13874. * @param {?} def
  13875. * @return {?}
  13876. */
  13877. function createText(view, renderHost, def) {
  13878. var /** @type {?} */ renderNode$$1;
  13879. var /** @type {?} */ renderer = view.renderer;
  13880. renderNode$$1 = renderer.createText(/** @type {?} */ ((def.text)).prefix);
  13881. var /** @type {?} */ parentEl = getParentRenderElement(view, renderHost, def);
  13882. if (parentEl) {
  13883. renderer.appendChild(parentEl, renderNode$$1);
  13884. }
  13885. return { renderText: renderNode$$1 };
  13886. }
  13887. /**
  13888. * @param {?} view
  13889. * @param {?} def
  13890. * @param {?} v0
  13891. * @param {?} v1
  13892. * @param {?} v2
  13893. * @param {?} v3
  13894. * @param {?} v4
  13895. * @param {?} v5
  13896. * @param {?} v6
  13897. * @param {?} v7
  13898. * @param {?} v8
  13899. * @param {?} v9
  13900. * @return {?}
  13901. */
  13902. function checkAndUpdateTextInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  13903. var /** @type {?} */ changed = false;
  13904. var /** @type {?} */ bindings = def.bindings;
  13905. var /** @type {?} */ bindLen = bindings.length;
  13906. if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0))
  13907. changed = true;
  13908. if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1))
  13909. changed = true;
  13910. if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2))
  13911. changed = true;
  13912. if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3))
  13913. changed = true;
  13914. if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4))
  13915. changed = true;
  13916. if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5))
  13917. changed = true;
  13918. if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6))
  13919. changed = true;
  13920. if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7))
  13921. changed = true;
  13922. if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8))
  13923. changed = true;
  13924. if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))
  13925. changed = true;
  13926. if (changed) {
  13927. var /** @type {?} */ value = /** @type {?} */ ((def.text)).prefix;
  13928. if (bindLen > 0)
  13929. value += _addInterpolationPart(v0, bindings[0]);
  13930. if (bindLen > 1)
  13931. value += _addInterpolationPart(v1, bindings[1]);
  13932. if (bindLen > 2)
  13933. value += _addInterpolationPart(v2, bindings[2]);
  13934. if (bindLen > 3)
  13935. value += _addInterpolationPart(v3, bindings[3]);
  13936. if (bindLen > 4)
  13937. value += _addInterpolationPart(v4, bindings[4]);
  13938. if (bindLen > 5)
  13939. value += _addInterpolationPart(v5, bindings[5]);
  13940. if (bindLen > 6)
  13941. value += _addInterpolationPart(v6, bindings[6]);
  13942. if (bindLen > 7)
  13943. value += _addInterpolationPart(v7, bindings[7]);
  13944. if (bindLen > 8)
  13945. value += _addInterpolationPart(v8, bindings[8]);
  13946. if (bindLen > 9)
  13947. value += _addInterpolationPart(v9, bindings[9]);
  13948. var /** @type {?} */ renderNode$$1 = asTextData(view, def.nodeIndex).renderText;
  13949. view.renderer.setValue(renderNode$$1, value);
  13950. }
  13951. return changed;
  13952. }
  13953. /**
  13954. * @param {?} view
  13955. * @param {?} def
  13956. * @param {?} values
  13957. * @return {?}
  13958. */
  13959. function checkAndUpdateTextDynamic(view, def, values) {
  13960. var /** @type {?} */ bindings = def.bindings;
  13961. var /** @type {?} */ changed = false;
  13962. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  13963. // Note: We need to loop over all values, so that
  13964. // the old values are updates as well!
  13965. if (checkAndUpdateBinding(view, def, i, values[i])) {
  13966. changed = true;
  13967. }
  13968. }
  13969. if (changed) {
  13970. var /** @type {?} */ value = '';
  13971. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  13972. value = value + _addInterpolationPart(values[i], bindings[i]);
  13973. }
  13974. value = /** @type {?} */ ((def.text)).prefix + value;
  13975. var /** @type {?} */ renderNode$$1 = asTextData(view, def.nodeIndex).renderText;
  13976. view.renderer.setValue(renderNode$$1, value);
  13977. }
  13978. return changed;
  13979. }
  13980. /**
  13981. * @param {?} value
  13982. * @param {?} binding
  13983. * @return {?}
  13984. */
  13985. function _addInterpolationPart(value, binding) {
  13986. var /** @type {?} */ valueStr = value != null ? value.toString() : '';
  13987. return valueStr + binding.suffix;
  13988. }
  13989. /**
  13990. * @fileoverview added by tsickle
  13991. * @suppress {checkTypes} checked by tsc
  13992. */
  13993. /**
  13994. * @license
  13995. * Copyright Google Inc. All Rights Reserved.
  13996. *
  13997. * Use of this source code is governed by an MIT-style license that can be
  13998. * found in the LICENSE file at https://angular.io/license
  13999. */
  14000. /**
  14001. * @param {?} flags
  14002. * @param {?} nodes
  14003. * @param {?=} updateDirectives
  14004. * @param {?=} updateRenderer
  14005. * @return {?}
  14006. */
  14007. function viewDef(flags, nodes, updateDirectives, updateRenderer) {
  14008. // clone nodes and set auto calculated values
  14009. var /** @type {?} */ viewBindingCount = 0;
  14010. var /** @type {?} */ viewDisposableCount = 0;
  14011. var /** @type {?} */ viewNodeFlags = 0;
  14012. var /** @type {?} */ viewRootNodeFlags = 0;
  14013. var /** @type {?} */ viewMatchedQueries = 0;
  14014. var /** @type {?} */ currentParent = null;
  14015. var /** @type {?} */ currentRenderParent = null;
  14016. var /** @type {?} */ currentElementHasPublicProviders = false;
  14017. var /** @type {?} */ currentElementHasPrivateProviders = false;
  14018. var /** @type {?} */ lastRenderRootNode = null;
  14019. for (var /** @type {?} */ i = 0; i < nodes.length; i++) {
  14020. var /** @type {?} */ node = nodes[i];
  14021. node.nodeIndex = i;
  14022. node.parent = currentParent;
  14023. node.bindingIndex = viewBindingCount;
  14024. node.outputIndex = viewDisposableCount;
  14025. node.renderParent = currentRenderParent;
  14026. viewNodeFlags |= node.flags;
  14027. viewMatchedQueries |= node.matchedQueryIds;
  14028. if (node.element) {
  14029. var /** @type {?} */ elDef = node.element;
  14030. elDef.publicProviders =
  14031. currentParent ? /** @type {?} */ ((currentParent.element)).publicProviders : Object.create(null);
  14032. elDef.allProviders = elDef.publicProviders;
  14033. // Note: We assume that all providers of an element are before any child element!
  14034. currentElementHasPublicProviders = false;
  14035. currentElementHasPrivateProviders = false;
  14036. if (node.element.template) {
  14037. viewMatchedQueries |= node.element.template.nodeMatchedQueries;
  14038. }
  14039. }
  14040. validateNode(currentParent, node, nodes.length);
  14041. viewBindingCount += node.bindings.length;
  14042. viewDisposableCount += node.outputs.length;
  14043. if (!currentRenderParent && (node.flags & 3 /* CatRenderNode */)) {
  14044. lastRenderRootNode = node;
  14045. }
  14046. if (node.flags & 20224 /* CatProvider */) {
  14047. if (!currentElementHasPublicProviders) {
  14048. currentElementHasPublicProviders = true; /** @type {?} */
  14049. ((/** @type {?} */ ((currentParent)).element)).publicProviders = Object.create(/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders); /** @type {?} */
  14050. ((/** @type {?} */ ((currentParent)).element)).allProviders = /** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders;
  14051. }
  14052. var /** @type {?} */ isPrivateService = (node.flags & 8192 /* PrivateProvider */) !== 0;
  14053. var /** @type {?} */ isComponent = (node.flags & 32768 /* Component */) !== 0;
  14054. if (!isPrivateService || isComponent) {
  14055. /** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders))[tokenKey(/** @type {?} */ ((node.provider)).token)] = node;
  14056. }
  14057. else {
  14058. if (!currentElementHasPrivateProviders) {
  14059. currentElementHasPrivateProviders = true; /** @type {?} */
  14060. ((/** @type {?} */ ((currentParent)).element)).allProviders = Object.create(/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders);
  14061. } /** @type {?} */
  14062. ((/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).allProviders))[tokenKey(/** @type {?} */ ((node.provider)).token)] = node;
  14063. }
  14064. if (isComponent) {
  14065. /** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).componentProvider = node;
  14066. }
  14067. }
  14068. if (currentParent) {
  14069. currentParent.childFlags |= node.flags;
  14070. currentParent.directChildFlags |= node.flags;
  14071. currentParent.childMatchedQueries |= node.matchedQueryIds;
  14072. if (node.element && node.element.template) {
  14073. currentParent.childMatchedQueries |= node.element.template.nodeMatchedQueries;
  14074. }
  14075. }
  14076. else {
  14077. viewRootNodeFlags |= node.flags;
  14078. }
  14079. if (node.childCount > 0) {
  14080. currentParent = node;
  14081. if (!isNgContainer(node)) {
  14082. currentRenderParent = node;
  14083. }
  14084. }
  14085. else {
  14086. // When the current node has no children, check if it is the last children of its parent.
  14087. // When it is, propagate the flags up.
  14088. // The loop is required because an element could be the last transitive children of several
  14089. // elements. We loop to either the root or the highest opened element (= with remaining
  14090. // children)
  14091. while (currentParent && i === currentParent.nodeIndex + currentParent.childCount) {
  14092. var /** @type {?} */ newParent = currentParent.parent;
  14093. if (newParent) {
  14094. newParent.childFlags |= currentParent.childFlags;
  14095. newParent.childMatchedQueries |= currentParent.childMatchedQueries;
  14096. }
  14097. currentParent = newParent;
  14098. // We also need to update the render parent & account for ng-container
  14099. if (currentParent && isNgContainer(currentParent)) {
  14100. currentRenderParent = currentParent.renderParent;
  14101. }
  14102. else {
  14103. currentRenderParent = currentParent;
  14104. }
  14105. }
  14106. }
  14107. }
  14108. var /** @type {?} */ handleEvent = function (view, nodeIndex, eventName, event) { return ((/** @type {?} */ ((nodes[nodeIndex].element)).handleEvent))(view, eventName, event); };
  14109. return {
  14110. // Will be filled later...
  14111. factory: null,
  14112. nodeFlags: viewNodeFlags,
  14113. rootNodeFlags: viewRootNodeFlags,
  14114. nodeMatchedQueries: viewMatchedQueries, flags: flags,
  14115. nodes: nodes,
  14116. updateDirectives: updateDirectives || NOOP,
  14117. updateRenderer: updateRenderer || NOOP, handleEvent: handleEvent,
  14118. bindingCount: viewBindingCount,
  14119. outputCount: viewDisposableCount, lastRenderRootNode: lastRenderRootNode
  14120. };
  14121. }
  14122. /**
  14123. * @param {?} node
  14124. * @return {?}
  14125. */
  14126. function isNgContainer(node) {
  14127. return (node.flags & 1 /* TypeElement */) !== 0 && /** @type {?} */ ((node.element)).name === null;
  14128. }
  14129. /**
  14130. * @param {?} parent
  14131. * @param {?} node
  14132. * @param {?} nodeCount
  14133. * @return {?}
  14134. */
  14135. function validateNode(parent, node, nodeCount) {
  14136. var /** @type {?} */ template = node.element && node.element.template;
  14137. if (template) {
  14138. if (!template.lastRenderRootNode) {
  14139. throw new Error("Illegal State: Embedded templates without nodes are not allowed!");
  14140. }
  14141. if (template.lastRenderRootNode &&
  14142. template.lastRenderRootNode.flags & 16777216 /* EmbeddedViews */) {
  14143. throw new Error("Illegal State: Last root node of a template can't have embedded views, at index " + node.nodeIndex + "!");
  14144. }
  14145. }
  14146. if (node.flags & 20224 /* CatProvider */) {
  14147. var /** @type {?} */ parentFlags = parent ? parent.flags : 0;
  14148. if ((parentFlags & 1 /* TypeElement */) === 0) {
  14149. throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index " + node.nodeIndex + "!");
  14150. }
  14151. }
  14152. if (node.query) {
  14153. if (node.flags & 67108864 /* TypeContentQuery */ &&
  14154. (!parent || (parent.flags & 16384 /* TypeDirective */) === 0)) {
  14155. throw new Error("Illegal State: Content Query nodes need to be children of directives, at index " + node.nodeIndex + "!");
  14156. }
  14157. if (node.flags & 134217728 /* TypeViewQuery */ && parent) {
  14158. throw new Error("Illegal State: View Query nodes have to be top level nodes, at index " + node.nodeIndex + "!");
  14159. }
  14160. }
  14161. if (node.childCount) {
  14162. var /** @type {?} */ parentEnd = parent ? parent.nodeIndex + parent.childCount : nodeCount - 1;
  14163. if (node.nodeIndex <= parentEnd && node.nodeIndex + node.childCount > parentEnd) {
  14164. throw new Error("Illegal State: childCount of node leads outside of parent, at index " + node.nodeIndex + "!");
  14165. }
  14166. }
  14167. }
  14168. /**
  14169. * @param {?} parent
  14170. * @param {?} anchorDef
  14171. * @param {?} viewDef
  14172. * @param {?=} context
  14173. * @return {?}
  14174. */
  14175. function createEmbeddedView(parent, anchorDef$$1, viewDef, context) {
  14176. // embedded views are seen as siblings to the anchor, so we need
  14177. // to get the parent of the anchor and use it as parentIndex.
  14178. var /** @type {?} */ view = createView(parent.root, parent.renderer, parent, anchorDef$$1, viewDef);
  14179. initView(view, parent.component, context);
  14180. createViewNodes(view);
  14181. return view;
  14182. }
  14183. /**
  14184. * @param {?} root
  14185. * @param {?} def
  14186. * @param {?=} context
  14187. * @return {?}
  14188. */
  14189. function createRootView(root, def, context) {
  14190. var /** @type {?} */ view = createView(root, root.renderer, null, null, def);
  14191. initView(view, context, context);
  14192. createViewNodes(view);
  14193. return view;
  14194. }
  14195. /**
  14196. * @param {?} parentView
  14197. * @param {?} nodeDef
  14198. * @param {?} viewDef
  14199. * @param {?} hostElement
  14200. * @return {?}
  14201. */
  14202. function createComponentView(parentView, nodeDef, viewDef, hostElement) {
  14203. var /** @type {?} */ rendererType = /** @type {?} */ ((nodeDef.element)).componentRendererType;
  14204. var /** @type {?} */ compRenderer;
  14205. if (!rendererType) {
  14206. compRenderer = parentView.root.renderer;
  14207. }
  14208. else {
  14209. compRenderer = parentView.root.rendererFactory.createRenderer(hostElement, rendererType);
  14210. }
  14211. return createView(parentView.root, compRenderer, parentView, /** @type {?} */ ((nodeDef.element)).componentProvider, viewDef);
  14212. }
  14213. /**
  14214. * @param {?} root
  14215. * @param {?} renderer
  14216. * @param {?} parent
  14217. * @param {?} parentNodeDef
  14218. * @param {?} def
  14219. * @return {?}
  14220. */
  14221. function createView(root, renderer, parent, parentNodeDef, def) {
  14222. var /** @type {?} */ nodes = new Array(def.nodes.length);
  14223. var /** @type {?} */ disposables = def.outputCount ? new Array(def.outputCount) : null;
  14224. var /** @type {?} */ view = {
  14225. def: def,
  14226. parent: parent,
  14227. viewContainerParent: null, parentNodeDef: parentNodeDef,
  14228. context: null,
  14229. component: null, nodes: nodes,
  14230. state: 13 /* CatInit */, root: root, renderer: renderer,
  14231. oldValues: new Array(def.bindingCount), disposables: disposables,
  14232. initIndex: -1
  14233. };
  14234. return view;
  14235. }
  14236. /**
  14237. * @param {?} view
  14238. * @param {?} component
  14239. * @param {?} context
  14240. * @return {?}
  14241. */
  14242. function initView(view, component, context) {
  14243. view.component = component;
  14244. view.context = context;
  14245. }
  14246. /**
  14247. * @param {?} view
  14248. * @return {?}
  14249. */
  14250. function createViewNodes(view) {
  14251. var /** @type {?} */ renderHost;
  14252. if (isComponentView(view)) {
  14253. var /** @type {?} */ hostDef = view.parentNodeDef;
  14254. renderHost = asElementData(/** @type {?} */ ((view.parent)), /** @type {?} */ ((/** @type {?} */ ((hostDef)).parent)).nodeIndex).renderElement;
  14255. }
  14256. var /** @type {?} */ def = view.def;
  14257. var /** @type {?} */ nodes = view.nodes;
  14258. for (var /** @type {?} */ i = 0; i < def.nodes.length; i++) {
  14259. var /** @type {?} */ nodeDef = def.nodes[i];
  14260. Services.setCurrentNode(view, i);
  14261. var /** @type {?} */ nodeData = void 0;
  14262. switch (nodeDef.flags & 201347067 /* Types */) {
  14263. case 1 /* TypeElement */:
  14264. var /** @type {?} */ el = /** @type {?} */ (createElement(view, renderHost, nodeDef));
  14265. var /** @type {?} */ componentView = /** @type {?} */ ((undefined));
  14266. if (nodeDef.flags & 33554432 /* ComponentView */) {
  14267. var /** @type {?} */ compViewDef = resolveDefinition(/** @type {?} */ ((/** @type {?} */ ((nodeDef.element)).componentView)));
  14268. componentView = Services.createComponentView(view, nodeDef, compViewDef, el);
  14269. }
  14270. listenToElementOutputs(view, componentView, nodeDef, el);
  14271. nodeData = /** @type {?} */ ({
  14272. renderElement: el,
  14273. componentView: componentView,
  14274. viewContainer: null,
  14275. template: /** @type {?} */ ((nodeDef.element)).template ? createTemplateData(view, nodeDef) : undefined
  14276. });
  14277. if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
  14278. nodeData.viewContainer = createViewContainerData(view, nodeDef, nodeData);
  14279. }
  14280. break;
  14281. case 2 /* TypeText */:
  14282. nodeData = /** @type {?} */ (createText(view, renderHost, nodeDef));
  14283. break;
  14284. case 512 /* TypeClassProvider */:
  14285. case 1024 /* TypeFactoryProvider */:
  14286. case 2048 /* TypeUseExistingProvider */:
  14287. case 256 /* TypeValueProvider */: {
  14288. nodeData = nodes[i];
  14289. if (!nodeData && !(nodeDef.flags & 4096 /* LazyProvider */)) {
  14290. var /** @type {?} */ instance = createProviderInstance(view, nodeDef);
  14291. nodeData = /** @type {?} */ ({ instance: instance });
  14292. }
  14293. break;
  14294. }
  14295. case 16 /* TypePipe */: {
  14296. var /** @type {?} */ instance = createPipeInstance(view, nodeDef);
  14297. nodeData = /** @type {?} */ ({ instance: instance });
  14298. break;
  14299. }
  14300. case 16384 /* TypeDirective */: {
  14301. nodeData = nodes[i];
  14302. if (!nodeData) {
  14303. var /** @type {?} */ instance = createDirectiveInstance(view, nodeDef);
  14304. nodeData = /** @type {?} */ ({ instance: instance });
  14305. }
  14306. if (nodeDef.flags & 32768 /* Component */) {
  14307. var /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((nodeDef.parent)).nodeIndex).componentView;
  14308. initView(compView, nodeData.instance, nodeData.instance);
  14309. }
  14310. break;
  14311. }
  14312. case 32 /* TypePureArray */:
  14313. case 64 /* TypePureObject */:
  14314. case 128 /* TypePurePipe */:
  14315. nodeData = /** @type {?} */ (createPureExpression(view, nodeDef));
  14316. break;
  14317. case 67108864 /* TypeContentQuery */:
  14318. case 134217728 /* TypeViewQuery */:
  14319. nodeData = /** @type {?} */ (createQuery());
  14320. break;
  14321. case 8 /* TypeNgContent */:
  14322. appendNgContent(view, renderHost, nodeDef);
  14323. // no runtime data needed for NgContent...
  14324. nodeData = undefined;
  14325. break;
  14326. }
  14327. nodes[i] = nodeData;
  14328. }
  14329. // Create the ViewData.nodes of component views after we created everything else,
  14330. // so that e.g. ng-content works
  14331. execComponentViewsAction(view, ViewAction.CreateViewNodes);
  14332. // fill static content and view queries
  14333. execQueriesAction(view, 67108864 /* TypeContentQuery */ | 134217728 /* TypeViewQuery */, 268435456 /* StaticQuery */, 0 /* CheckAndUpdate */);
  14334. }
  14335. /**
  14336. * @param {?} view
  14337. * @return {?}
  14338. */
  14339. function checkNoChangesView(view) {
  14340. markProjectedViewsForCheck(view);
  14341. Services.updateDirectives(view, 1 /* CheckNoChanges */);
  14342. execEmbeddedViewsAction(view, ViewAction.CheckNoChanges);
  14343. Services.updateRenderer(view, 1 /* CheckNoChanges */);
  14344. execComponentViewsAction(view, ViewAction.CheckNoChanges);
  14345. // Note: We don't check queries for changes as we didn't do this in v2.x.
  14346. // TODO(tbosch): investigate if we can enable the check again in v5.x with a nicer error message.
  14347. view.state &= ~(64 /* CheckProjectedViews */ | 32 /* CheckProjectedView */);
  14348. }
  14349. /**
  14350. * @param {?} view
  14351. * @return {?}
  14352. */
  14353. function checkAndUpdateView(view) {
  14354. if (view.state & 1 /* BeforeFirstCheck */) {
  14355. view.state &= ~1 /* BeforeFirstCheck */;
  14356. view.state |= 2 /* FirstCheck */;
  14357. }
  14358. else {
  14359. view.state &= ~2 /* FirstCheck */;
  14360. }
  14361. shiftInitState(view, 0 /* InitState_BeforeInit */, 256 /* InitState_CallingOnInit */);
  14362. markProjectedViewsForCheck(view);
  14363. Services.updateDirectives(view, 0 /* CheckAndUpdate */);
  14364. execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);
  14365. execQueriesAction(view, 67108864 /* TypeContentQuery */, 536870912 /* DynamicQuery */, 0 /* CheckAndUpdate */);
  14366. var /** @type {?} */ callInit = shiftInitState(view, 256 /* InitState_CallingOnInit */, 512 /* InitState_CallingAfterContentInit */);
  14367. callLifecycleHooksChildrenFirst(view, 2097152 /* AfterContentChecked */ | (callInit ? 1048576 /* AfterContentInit */ : 0));
  14368. Services.updateRenderer(view, 0 /* CheckAndUpdate */);
  14369. execComponentViewsAction(view, ViewAction.CheckAndUpdate);
  14370. execQueriesAction(view, 134217728 /* TypeViewQuery */, 536870912 /* DynamicQuery */, 0 /* CheckAndUpdate */);
  14371. callInit = shiftInitState(view, 512 /* InitState_CallingAfterContentInit */, 768 /* InitState_CallingAfterViewInit */);
  14372. callLifecycleHooksChildrenFirst(view, 8388608 /* AfterViewChecked */ | (callInit ? 4194304 /* AfterViewInit */ : 0));
  14373. if (view.def.flags & 2 /* OnPush */) {
  14374. view.state &= ~8 /* ChecksEnabled */;
  14375. }
  14376. view.state &= ~(64 /* CheckProjectedViews */ | 32 /* CheckProjectedView */);
  14377. shiftInitState(view, 768 /* InitState_CallingAfterViewInit */, 1024 /* InitState_AfterInit */);
  14378. }
  14379. /**
  14380. * @param {?} view
  14381. * @param {?} nodeDef
  14382. * @param {?} argStyle
  14383. * @param {?=} v0
  14384. * @param {?=} v1
  14385. * @param {?=} v2
  14386. * @param {?=} v3
  14387. * @param {?=} v4
  14388. * @param {?=} v5
  14389. * @param {?=} v6
  14390. * @param {?=} v7
  14391. * @param {?=} v8
  14392. * @param {?=} v9
  14393. * @return {?}
  14394. */
  14395. function checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  14396. if (argStyle === 0 /* Inline */) {
  14397. return checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  14398. }
  14399. else {
  14400. return checkAndUpdateNodeDynamic(view, nodeDef, v0);
  14401. }
  14402. }
  14403. /**
  14404. * @param {?} view
  14405. * @return {?}
  14406. */
  14407. function markProjectedViewsForCheck(view) {
  14408. var /** @type {?} */ def = view.def;
  14409. if (!(def.nodeFlags & 4 /* ProjectedTemplate */)) {
  14410. return;
  14411. }
  14412. for (var /** @type {?} */ i = 0; i < def.nodes.length; i++) {
  14413. var /** @type {?} */ nodeDef = def.nodes[i];
  14414. if (nodeDef.flags & 4 /* ProjectedTemplate */) {
  14415. var /** @type {?} */ projectedViews = asElementData(view, i).template._projectedViews;
  14416. if (projectedViews) {
  14417. for (var /** @type {?} */ i_1 = 0; i_1 < projectedViews.length; i_1++) {
  14418. var /** @type {?} */ projectedView = projectedViews[i_1];
  14419. projectedView.state |= 32 /* CheckProjectedView */;
  14420. markParentViewsForCheckProjectedViews(projectedView, view);
  14421. }
  14422. }
  14423. }
  14424. else if ((nodeDef.childFlags & 4 /* ProjectedTemplate */) === 0) {
  14425. // a parent with leafs
  14426. // no child is a component,
  14427. // then skip the children
  14428. i += nodeDef.childCount;
  14429. }
  14430. }
  14431. }
  14432. /**
  14433. * @param {?} view
  14434. * @param {?} nodeDef
  14435. * @param {?=} v0
  14436. * @param {?=} v1
  14437. * @param {?=} v2
  14438. * @param {?=} v3
  14439. * @param {?=} v4
  14440. * @param {?=} v5
  14441. * @param {?=} v6
  14442. * @param {?=} v7
  14443. * @param {?=} v8
  14444. * @param {?=} v9
  14445. * @return {?}
  14446. */
  14447. function checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  14448. switch (nodeDef.flags & 201347067 /* Types */) {
  14449. case 1 /* TypeElement */:
  14450. return checkAndUpdateElementInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  14451. case 2 /* TypeText */:
  14452. return checkAndUpdateTextInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  14453. case 16384 /* TypeDirective */:
  14454. return checkAndUpdateDirectiveInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  14455. case 32 /* TypePureArray */:
  14456. case 64 /* TypePureObject */:
  14457. case 128 /* TypePurePipe */:
  14458. return checkAndUpdatePureExpressionInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  14459. default:
  14460. throw 'unreachable';
  14461. }
  14462. }
  14463. /**
  14464. * @param {?} view
  14465. * @param {?} nodeDef
  14466. * @param {?} values
  14467. * @return {?}
  14468. */
  14469. function checkAndUpdateNodeDynamic(view, nodeDef, values) {
  14470. switch (nodeDef.flags & 201347067 /* Types */) {
  14471. case 1 /* TypeElement */:
  14472. return checkAndUpdateElementDynamic(view, nodeDef, values);
  14473. case 2 /* TypeText */:
  14474. return checkAndUpdateTextDynamic(view, nodeDef, values);
  14475. case 16384 /* TypeDirective */:
  14476. return checkAndUpdateDirectiveDynamic(view, nodeDef, values);
  14477. case 32 /* TypePureArray */:
  14478. case 64 /* TypePureObject */:
  14479. case 128 /* TypePurePipe */:
  14480. return checkAndUpdatePureExpressionDynamic(view, nodeDef, values);
  14481. default:
  14482. throw 'unreachable';
  14483. }
  14484. }
  14485. /**
  14486. * @param {?} view
  14487. * @param {?} nodeDef
  14488. * @param {?} argStyle
  14489. * @param {?=} v0
  14490. * @param {?=} v1
  14491. * @param {?=} v2
  14492. * @param {?=} v3
  14493. * @param {?=} v4
  14494. * @param {?=} v5
  14495. * @param {?=} v6
  14496. * @param {?=} v7
  14497. * @param {?=} v8
  14498. * @param {?=} v9
  14499. * @return {?}
  14500. */
  14501. function checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  14502. if (argStyle === 0 /* Inline */) {
  14503. checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  14504. }
  14505. else {
  14506. checkNoChangesNodeDynamic(view, nodeDef, v0);
  14507. }
  14508. // Returning false is ok here as we would have thrown in case of a change.
  14509. return false;
  14510. }
  14511. /**
  14512. * @param {?} view
  14513. * @param {?} nodeDef
  14514. * @param {?} v0
  14515. * @param {?} v1
  14516. * @param {?} v2
  14517. * @param {?} v3
  14518. * @param {?} v4
  14519. * @param {?} v5
  14520. * @param {?} v6
  14521. * @param {?} v7
  14522. * @param {?} v8
  14523. * @param {?} v9
  14524. * @return {?}
  14525. */
  14526. function checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  14527. var /** @type {?} */ bindLen = nodeDef.bindings.length;
  14528. if (bindLen > 0)
  14529. checkBindingNoChanges(view, nodeDef, 0, v0);
  14530. if (bindLen > 1)
  14531. checkBindingNoChanges(view, nodeDef, 1, v1);
  14532. if (bindLen > 2)
  14533. checkBindingNoChanges(view, nodeDef, 2, v2);
  14534. if (bindLen > 3)
  14535. checkBindingNoChanges(view, nodeDef, 3, v3);
  14536. if (bindLen > 4)
  14537. checkBindingNoChanges(view, nodeDef, 4, v4);
  14538. if (bindLen > 5)
  14539. checkBindingNoChanges(view, nodeDef, 5, v5);
  14540. if (bindLen > 6)
  14541. checkBindingNoChanges(view, nodeDef, 6, v6);
  14542. if (bindLen > 7)
  14543. checkBindingNoChanges(view, nodeDef, 7, v7);
  14544. if (bindLen > 8)
  14545. checkBindingNoChanges(view, nodeDef, 8, v8);
  14546. if (bindLen > 9)
  14547. checkBindingNoChanges(view, nodeDef, 9, v9);
  14548. }
  14549. /**
  14550. * @param {?} view
  14551. * @param {?} nodeDef
  14552. * @param {?} values
  14553. * @return {?}
  14554. */
  14555. function checkNoChangesNodeDynamic(view, nodeDef, values) {
  14556. for (var /** @type {?} */ i = 0; i < values.length; i++) {
  14557. checkBindingNoChanges(view, nodeDef, i, values[i]);
  14558. }
  14559. }
  14560. /**
  14561. * Workaround https://github.com/angular/tsickle/issues/497
  14562. * @suppress {misplacedTypeAnnotation}
  14563. * @param {?} view
  14564. * @param {?} nodeDef
  14565. * @return {?}
  14566. */
  14567. function checkNoChangesQuery(view, nodeDef) {
  14568. var /** @type {?} */ queryList = asQueryList(view, nodeDef.nodeIndex);
  14569. if (queryList.dirty) {
  14570. throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, nodeDef.nodeIndex), "Query " + (/** @type {?} */ ((nodeDef.query))).id + " not dirty", "Query " + (/** @type {?} */ ((nodeDef.query))).id + " dirty", (view.state & 1 /* BeforeFirstCheck */) !== 0);
  14571. }
  14572. }
  14573. /**
  14574. * @param {?} view
  14575. * @return {?}
  14576. */
  14577. function destroyView(view) {
  14578. if (view.state & 128 /* Destroyed */) {
  14579. return;
  14580. }
  14581. execEmbeddedViewsAction(view, ViewAction.Destroy);
  14582. execComponentViewsAction(view, ViewAction.Destroy);
  14583. callLifecycleHooksChildrenFirst(view, 131072 /* OnDestroy */);
  14584. if (view.disposables) {
  14585. for (var /** @type {?} */ i = 0; i < view.disposables.length; i++) {
  14586. view.disposables[i]();
  14587. }
  14588. }
  14589. detachProjectedView(view);
  14590. if (view.renderer.destroyNode) {
  14591. destroyViewNodes(view);
  14592. }
  14593. if (isComponentView(view)) {
  14594. view.renderer.destroy();
  14595. }
  14596. view.state |= 128 /* Destroyed */;
  14597. }
  14598. /**
  14599. * @param {?} view
  14600. * @return {?}
  14601. */
  14602. function destroyViewNodes(view) {
  14603. var /** @type {?} */ len = view.def.nodes.length;
  14604. for (var /** @type {?} */ i = 0; i < len; i++) {
  14605. var /** @type {?} */ def = view.def.nodes[i];
  14606. if (def.flags & 1 /* TypeElement */) {
  14607. /** @type {?} */ ((view.renderer.destroyNode))(asElementData(view, i).renderElement);
  14608. }
  14609. else if (def.flags & 2 /* TypeText */) {
  14610. /** @type {?} */ ((view.renderer.destroyNode))(asTextData(view, i).renderText);
  14611. }
  14612. else if (def.flags & 67108864 /* TypeContentQuery */ || def.flags & 134217728 /* TypeViewQuery */) {
  14613. asQueryList(view, i).destroy();
  14614. }
  14615. }
  14616. }
  14617. /** @enum {number} */
  14618. var ViewAction = {
  14619. CreateViewNodes: 0,
  14620. CheckNoChanges: 1,
  14621. CheckNoChangesProjectedViews: 2,
  14622. CheckAndUpdate: 3,
  14623. CheckAndUpdateProjectedViews: 4,
  14624. Destroy: 5,
  14625. };
  14626. ViewAction[ViewAction.CreateViewNodes] = "CreateViewNodes";
  14627. ViewAction[ViewAction.CheckNoChanges] = "CheckNoChanges";
  14628. ViewAction[ViewAction.CheckNoChangesProjectedViews] = "CheckNoChangesProjectedViews";
  14629. ViewAction[ViewAction.CheckAndUpdate] = "CheckAndUpdate";
  14630. ViewAction[ViewAction.CheckAndUpdateProjectedViews] = "CheckAndUpdateProjectedViews";
  14631. ViewAction[ViewAction.Destroy] = "Destroy";
  14632. /**
  14633. * @param {?} view
  14634. * @param {?} action
  14635. * @return {?}
  14636. */
  14637. function execComponentViewsAction(view, action) {
  14638. var /** @type {?} */ def = view.def;
  14639. if (!(def.nodeFlags & 33554432 /* ComponentView */)) {
  14640. return;
  14641. }
  14642. for (var /** @type {?} */ i = 0; i < def.nodes.length; i++) {
  14643. var /** @type {?} */ nodeDef = def.nodes[i];
  14644. if (nodeDef.flags & 33554432 /* ComponentView */) {
  14645. // a leaf
  14646. callViewAction(asElementData(view, i).componentView, action);
  14647. }
  14648. else if ((nodeDef.childFlags & 33554432 /* ComponentView */) === 0) {
  14649. // a parent with leafs
  14650. // no child is a component,
  14651. // then skip the children
  14652. i += nodeDef.childCount;
  14653. }
  14654. }
  14655. }
  14656. /**
  14657. * @param {?} view
  14658. * @param {?} action
  14659. * @return {?}
  14660. */
  14661. function execEmbeddedViewsAction(view, action) {
  14662. var /** @type {?} */ def = view.def;
  14663. if (!(def.nodeFlags & 16777216 /* EmbeddedViews */)) {
  14664. return;
  14665. }
  14666. for (var /** @type {?} */ i = 0; i < def.nodes.length; i++) {
  14667. var /** @type {?} */ nodeDef = def.nodes[i];
  14668. if (nodeDef.flags & 16777216 /* EmbeddedViews */) {
  14669. // a leaf
  14670. var /** @type {?} */ embeddedViews = /** @type {?} */ ((asElementData(view, i).viewContainer))._embeddedViews;
  14671. for (var /** @type {?} */ k = 0; k < embeddedViews.length; k++) {
  14672. callViewAction(embeddedViews[k], action);
  14673. }
  14674. }
  14675. else if ((nodeDef.childFlags & 16777216 /* EmbeddedViews */) === 0) {
  14676. // a parent with leafs
  14677. // no child is a component,
  14678. // then skip the children
  14679. i += nodeDef.childCount;
  14680. }
  14681. }
  14682. }
  14683. /**
  14684. * @param {?} view
  14685. * @param {?} action
  14686. * @return {?}
  14687. */
  14688. function callViewAction(view, action) {
  14689. var /** @type {?} */ viewState = view.state;
  14690. switch (action) {
  14691. case ViewAction.CheckNoChanges:
  14692. if ((viewState & 128 /* Destroyed */) === 0) {
  14693. if ((viewState & 12 /* CatDetectChanges */) === 12 /* CatDetectChanges */) {
  14694. checkNoChangesView(view);
  14695. }
  14696. else if (viewState & 64 /* CheckProjectedViews */) {
  14697. execProjectedViewsAction(view, ViewAction.CheckNoChangesProjectedViews);
  14698. }
  14699. }
  14700. break;
  14701. case ViewAction.CheckNoChangesProjectedViews:
  14702. if ((viewState & 128 /* Destroyed */) === 0) {
  14703. if (viewState & 32 /* CheckProjectedView */) {
  14704. checkNoChangesView(view);
  14705. }
  14706. else if (viewState & 64 /* CheckProjectedViews */) {
  14707. execProjectedViewsAction(view, action);
  14708. }
  14709. }
  14710. break;
  14711. case ViewAction.CheckAndUpdate:
  14712. if ((viewState & 128 /* Destroyed */) === 0) {
  14713. if ((viewState & 12 /* CatDetectChanges */) === 12 /* CatDetectChanges */) {
  14714. checkAndUpdateView(view);
  14715. }
  14716. else if (viewState & 64 /* CheckProjectedViews */) {
  14717. execProjectedViewsAction(view, ViewAction.CheckAndUpdateProjectedViews);
  14718. }
  14719. }
  14720. break;
  14721. case ViewAction.CheckAndUpdateProjectedViews:
  14722. if ((viewState & 128 /* Destroyed */) === 0) {
  14723. if (viewState & 32 /* CheckProjectedView */) {
  14724. checkAndUpdateView(view);
  14725. }
  14726. else if (viewState & 64 /* CheckProjectedViews */) {
  14727. execProjectedViewsAction(view, action);
  14728. }
  14729. }
  14730. break;
  14731. case ViewAction.Destroy:
  14732. // Note: destroyView recurses over all views,
  14733. // so we don't need to special case projected views here.
  14734. destroyView(view);
  14735. break;
  14736. case ViewAction.CreateViewNodes:
  14737. createViewNodes(view);
  14738. break;
  14739. }
  14740. }
  14741. /**
  14742. * @param {?} view
  14743. * @param {?} action
  14744. * @return {?}
  14745. */
  14746. function execProjectedViewsAction(view, action) {
  14747. execEmbeddedViewsAction(view, action);
  14748. execComponentViewsAction(view, action);
  14749. }
  14750. /**
  14751. * @param {?} view
  14752. * @param {?} queryFlags
  14753. * @param {?} staticDynamicQueryFlag
  14754. * @param {?} checkType
  14755. * @return {?}
  14756. */
  14757. function execQueriesAction(view, queryFlags, staticDynamicQueryFlag, checkType) {
  14758. if (!(view.def.nodeFlags & queryFlags) || !(view.def.nodeFlags & staticDynamicQueryFlag)) {
  14759. return;
  14760. }
  14761. var /** @type {?} */ nodeCount = view.def.nodes.length;
  14762. for (var /** @type {?} */ i = 0; i < nodeCount; i++) {
  14763. var /** @type {?} */ nodeDef = view.def.nodes[i];
  14764. if ((nodeDef.flags & queryFlags) && (nodeDef.flags & staticDynamicQueryFlag)) {
  14765. Services.setCurrentNode(view, nodeDef.nodeIndex);
  14766. switch (checkType) {
  14767. case 0 /* CheckAndUpdate */:
  14768. checkAndUpdateQuery(view, nodeDef);
  14769. break;
  14770. case 1 /* CheckNoChanges */:
  14771. checkNoChangesQuery(view, nodeDef);
  14772. break;
  14773. }
  14774. }
  14775. if (!(nodeDef.childFlags & queryFlags) || !(nodeDef.childFlags & staticDynamicQueryFlag)) {
  14776. // no child has a matching query
  14777. // then skip the children
  14778. i += nodeDef.childCount;
  14779. }
  14780. }
  14781. }
  14782. /**
  14783. * @fileoverview added by tsickle
  14784. * @suppress {checkTypes} checked by tsc
  14785. */
  14786. /**
  14787. * @license
  14788. * Copyright Google Inc. All Rights Reserved.
  14789. *
  14790. * Use of this source code is governed by an MIT-style license that can be
  14791. * found in the LICENSE file at https://angular.io/license
  14792. */
  14793. var initialized = false;
  14794. /**
  14795. * @return {?}
  14796. */
  14797. function initServicesIfNeeded() {
  14798. if (initialized) {
  14799. return;
  14800. }
  14801. initialized = true;
  14802. var /** @type {?} */ services = isDevMode() ? createDebugServices() : createProdServices();
  14803. Services.setCurrentNode = services.setCurrentNode;
  14804. Services.createRootView = services.createRootView;
  14805. Services.createEmbeddedView = services.createEmbeddedView;
  14806. Services.createComponentView = services.createComponentView;
  14807. Services.createNgModuleRef = services.createNgModuleRef;
  14808. Services.overrideProvider = services.overrideProvider;
  14809. Services.overrideComponentView = services.overrideComponentView;
  14810. Services.clearOverrides = services.clearOverrides;
  14811. Services.checkAndUpdateView = services.checkAndUpdateView;
  14812. Services.checkNoChangesView = services.checkNoChangesView;
  14813. Services.destroyView = services.destroyView;
  14814. Services.resolveDep = resolveDep;
  14815. Services.createDebugContext = services.createDebugContext;
  14816. Services.handleEvent = services.handleEvent;
  14817. Services.updateDirectives = services.updateDirectives;
  14818. Services.updateRenderer = services.updateRenderer;
  14819. Services.dirtyParentQueries = dirtyParentQueries;
  14820. }
  14821. /**
  14822. * @return {?}
  14823. */
  14824. function createProdServices() {
  14825. return {
  14826. setCurrentNode: function () { },
  14827. createRootView: createProdRootView,
  14828. createEmbeddedView: createEmbeddedView,
  14829. createComponentView: createComponentView,
  14830. createNgModuleRef: createNgModuleRef,
  14831. overrideProvider: NOOP,
  14832. overrideComponentView: NOOP,
  14833. clearOverrides: NOOP,
  14834. checkAndUpdateView: checkAndUpdateView,
  14835. checkNoChangesView: checkNoChangesView,
  14836. destroyView: destroyView,
  14837. createDebugContext: function (view, nodeIndex) { return new DebugContext_(view, nodeIndex); },
  14838. handleEvent: function (view, nodeIndex, eventName, event) {
  14839. return view.def.handleEvent(view, nodeIndex, eventName, event);
  14840. },
  14841. updateDirectives: function (view, checkType) {
  14842. return view.def.updateDirectives(checkType === 0 /* CheckAndUpdate */ ? prodCheckAndUpdateNode :
  14843. prodCheckNoChangesNode, view);
  14844. },
  14845. updateRenderer: function (view, checkType) {
  14846. return view.def.updateRenderer(checkType === 0 /* CheckAndUpdate */ ? prodCheckAndUpdateNode :
  14847. prodCheckNoChangesNode, view);
  14848. },
  14849. };
  14850. }
  14851. /**
  14852. * @return {?}
  14853. */
  14854. function createDebugServices() {
  14855. return {
  14856. setCurrentNode: debugSetCurrentNode,
  14857. createRootView: debugCreateRootView,
  14858. createEmbeddedView: debugCreateEmbeddedView,
  14859. createComponentView: debugCreateComponentView,
  14860. createNgModuleRef: debugCreateNgModuleRef,
  14861. overrideProvider: debugOverrideProvider,
  14862. overrideComponentView: debugOverrideComponentView,
  14863. clearOverrides: debugClearOverrides,
  14864. checkAndUpdateView: debugCheckAndUpdateView,
  14865. checkNoChangesView: debugCheckNoChangesView,
  14866. destroyView: debugDestroyView,
  14867. createDebugContext: function (view, nodeIndex) { return new DebugContext_(view, nodeIndex); },
  14868. handleEvent: debugHandleEvent,
  14869. updateDirectives: debugUpdateDirectives,
  14870. updateRenderer: debugUpdateRenderer,
  14871. };
  14872. }
  14873. /**
  14874. * @param {?} elInjector
  14875. * @param {?} projectableNodes
  14876. * @param {?} rootSelectorOrNode
  14877. * @param {?} def
  14878. * @param {?} ngModule
  14879. * @param {?=} context
  14880. * @return {?}
  14881. */
  14882. function createProdRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {
  14883. var /** @type {?} */ rendererFactory = ngModule.injector.get(RendererFactory2);
  14884. return createRootView(createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode), def, context);
  14885. }
  14886. /**
  14887. * @param {?} elInjector
  14888. * @param {?} projectableNodes
  14889. * @param {?} rootSelectorOrNode
  14890. * @param {?} def
  14891. * @param {?} ngModule
  14892. * @param {?=} context
  14893. * @return {?}
  14894. */
  14895. function debugCreateRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {
  14896. var /** @type {?} */ rendererFactory = ngModule.injector.get(RendererFactory2);
  14897. var /** @type {?} */ root = createRootData(elInjector, ngModule, new DebugRendererFactory2(rendererFactory), projectableNodes, rootSelectorOrNode);
  14898. var /** @type {?} */ defWithOverride = applyProviderOverridesToView(def);
  14899. return callWithDebugContext(DebugAction.create, createRootView, null, [root, defWithOverride, context]);
  14900. }
  14901. /**
  14902. * @param {?} elInjector
  14903. * @param {?} ngModule
  14904. * @param {?} rendererFactory
  14905. * @param {?} projectableNodes
  14906. * @param {?} rootSelectorOrNode
  14907. * @return {?}
  14908. */
  14909. function createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode) {
  14910. var /** @type {?} */ sanitizer = ngModule.injector.get(Sanitizer);
  14911. var /** @type {?} */ errorHandler = ngModule.injector.get(ErrorHandler);
  14912. var /** @type {?} */ renderer = rendererFactory.createRenderer(null, null);
  14913. return {
  14914. ngModule: ngModule,
  14915. injector: elInjector, projectableNodes: projectableNodes,
  14916. selectorOrNode: rootSelectorOrNode, sanitizer: sanitizer, rendererFactory: rendererFactory, renderer: renderer, errorHandler: errorHandler
  14917. };
  14918. }
  14919. /**
  14920. * @param {?} parentView
  14921. * @param {?} anchorDef
  14922. * @param {?} viewDef
  14923. * @param {?=} context
  14924. * @return {?}
  14925. */
  14926. function debugCreateEmbeddedView(parentView, anchorDef, viewDef$$1, context) {
  14927. var /** @type {?} */ defWithOverride = applyProviderOverridesToView(viewDef$$1);
  14928. return callWithDebugContext(DebugAction.create, createEmbeddedView, null, [parentView, anchorDef, defWithOverride, context]);
  14929. }
  14930. /**
  14931. * @param {?} parentView
  14932. * @param {?} nodeDef
  14933. * @param {?} viewDef
  14934. * @param {?} hostElement
  14935. * @return {?}
  14936. */
  14937. function debugCreateComponentView(parentView, nodeDef, viewDef$$1, hostElement) {
  14938. var /** @type {?} */ overrideComponentView = viewDefOverrides.get(/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ ((nodeDef.element)).componentProvider)).provider)).token);
  14939. if (overrideComponentView) {
  14940. viewDef$$1 = overrideComponentView;
  14941. }
  14942. else {
  14943. viewDef$$1 = applyProviderOverridesToView(viewDef$$1);
  14944. }
  14945. return callWithDebugContext(DebugAction.create, createComponentView, null, [parentView, nodeDef, viewDef$$1, hostElement]);
  14946. }
  14947. /**
  14948. * @param {?} moduleType
  14949. * @param {?} parentInjector
  14950. * @param {?} bootstrapComponents
  14951. * @param {?} def
  14952. * @return {?}
  14953. */
  14954. function debugCreateNgModuleRef(moduleType, parentInjector, bootstrapComponents, def) {
  14955. var /** @type {?} */ defWithOverride = applyProviderOverridesToNgModule(def);
  14956. return createNgModuleRef(moduleType, parentInjector, bootstrapComponents, defWithOverride);
  14957. }
  14958. var providerOverrides = new Map();
  14959. var viewDefOverrides = new Map();
  14960. /**
  14961. * @param {?} override
  14962. * @return {?}
  14963. */
  14964. function debugOverrideProvider(override) {
  14965. providerOverrides.set(override.token, override);
  14966. }
  14967. /**
  14968. * @param {?} comp
  14969. * @param {?} compFactory
  14970. * @return {?}
  14971. */
  14972. function debugOverrideComponentView(comp, compFactory) {
  14973. var /** @type {?} */ hostViewDef = resolveDefinition(getComponentViewDefinitionFactory(compFactory));
  14974. var /** @type {?} */ compViewDef = resolveDefinition(/** @type {?} */ ((/** @type {?} */ ((hostViewDef.nodes[0].element)).componentView)));
  14975. viewDefOverrides.set(comp, compViewDef);
  14976. }
  14977. /**
  14978. * @return {?}
  14979. */
  14980. function debugClearOverrides() {
  14981. providerOverrides.clear();
  14982. viewDefOverrides.clear();
  14983. }
  14984. /**
  14985. * @param {?} def
  14986. * @return {?}
  14987. */
  14988. function applyProviderOverridesToView(def) {
  14989. if (providerOverrides.size === 0) {
  14990. return def;
  14991. }
  14992. var /** @type {?} */ elementIndicesWithOverwrittenProviders = findElementIndicesWithOverwrittenProviders(def);
  14993. if (elementIndicesWithOverwrittenProviders.length === 0) {
  14994. return def;
  14995. }
  14996. // clone the whole view definition,
  14997. // as it maintains references between the nodes that are hard to update.
  14998. def = /** @type {?} */ ((def.factory))(function () { return NOOP; });
  14999. for (var /** @type {?} */ i = 0; i < elementIndicesWithOverwrittenProviders.length; i++) {
  15000. applyProviderOverridesToElement(def, elementIndicesWithOverwrittenProviders[i]);
  15001. }
  15002. return def;
  15003. /**
  15004. * @param {?} def
  15005. * @return {?}
  15006. */
  15007. function findElementIndicesWithOverwrittenProviders(def) {
  15008. var /** @type {?} */ elIndicesWithOverwrittenProviders = [];
  15009. var /** @type {?} */ lastElementDef = null;
  15010. for (var /** @type {?} */ i = 0; i < def.nodes.length; i++) {
  15011. var /** @type {?} */ nodeDef = def.nodes[i];
  15012. if (nodeDef.flags & 1 /* TypeElement */) {
  15013. lastElementDef = nodeDef;
  15014. }
  15015. if (lastElementDef && nodeDef.flags & 3840 /* CatProviderNoDirective */ &&
  15016. providerOverrides.has(/** @type {?} */ ((nodeDef.provider)).token)) {
  15017. elIndicesWithOverwrittenProviders.push(/** @type {?} */ ((lastElementDef)).nodeIndex);
  15018. lastElementDef = null;
  15019. }
  15020. }
  15021. return elIndicesWithOverwrittenProviders;
  15022. }
  15023. /**
  15024. * @param {?} viewDef
  15025. * @param {?} elIndex
  15026. * @return {?}
  15027. */
  15028. function applyProviderOverridesToElement(viewDef$$1, elIndex) {
  15029. for (var /** @type {?} */ i = elIndex + 1; i < viewDef$$1.nodes.length; i++) {
  15030. var /** @type {?} */ nodeDef = viewDef$$1.nodes[i];
  15031. if (nodeDef.flags & 1 /* TypeElement */) {
  15032. // stop at the next element
  15033. return;
  15034. }
  15035. if (nodeDef.flags & 3840 /* CatProviderNoDirective */) {
  15036. var /** @type {?} */ provider = /** @type {?} */ ((nodeDef.provider));
  15037. var /** @type {?} */ override = providerOverrides.get(provider.token);
  15038. if (override) {
  15039. nodeDef.flags = (nodeDef.flags & ~3840 /* CatProviderNoDirective */) | override.flags;
  15040. provider.deps = splitDepsDsl(override.deps);
  15041. provider.value = override.value;
  15042. }
  15043. }
  15044. }
  15045. }
  15046. }
  15047. /**
  15048. * @param {?} def
  15049. * @return {?}
  15050. */
  15051. function applyProviderOverridesToNgModule(def) {
  15052. var _a = calcHasOverrides(def), hasOverrides = _a.hasOverrides, hasDeprecatedOverrides = _a.hasDeprecatedOverrides;
  15053. if (!hasOverrides) {
  15054. return def;
  15055. }
  15056. // clone the whole view definition,
  15057. // as it maintains references between the nodes that are hard to update.
  15058. def = /** @type {?} */ ((def.factory))(function () { return NOOP; });
  15059. applyProviderOverrides(def);
  15060. return def;
  15061. /**
  15062. * @param {?} def
  15063. * @return {?}
  15064. */
  15065. function calcHasOverrides(def) {
  15066. var /** @type {?} */ hasOverrides = false;
  15067. var /** @type {?} */ hasDeprecatedOverrides = false;
  15068. if (providerOverrides.size === 0) {
  15069. return { hasOverrides: hasOverrides, hasDeprecatedOverrides: hasDeprecatedOverrides };
  15070. }
  15071. def.providers.forEach(function (node) {
  15072. var /** @type {?} */ override = providerOverrides.get(node.token);
  15073. if ((node.flags & 3840 /* CatProviderNoDirective */) && override) {
  15074. hasOverrides = true;
  15075. hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;
  15076. }
  15077. });
  15078. return { hasOverrides: hasOverrides, hasDeprecatedOverrides: hasDeprecatedOverrides };
  15079. }
  15080. /**
  15081. * @param {?} def
  15082. * @return {?}
  15083. */
  15084. function applyProviderOverrides(def) {
  15085. for (var /** @type {?} */ i = 0; i < def.providers.length; i++) {
  15086. var /** @type {?} */ provider = def.providers[i];
  15087. if (hasDeprecatedOverrides) {
  15088. // We had a bug where me made
  15089. // all providers lazy. Keep this logic behind a flag
  15090. // for migrating existing users.
  15091. provider.flags |= 4096 /* LazyProvider */;
  15092. }
  15093. var /** @type {?} */ override = providerOverrides.get(provider.token);
  15094. if (override) {
  15095. provider.flags = (provider.flags & ~3840 /* CatProviderNoDirective */) | override.flags;
  15096. provider.deps = splitDepsDsl(override.deps);
  15097. provider.value = override.value;
  15098. }
  15099. }
  15100. }
  15101. }
  15102. /**
  15103. * @param {?} view
  15104. * @param {?} checkIndex
  15105. * @param {?} argStyle
  15106. * @param {?=} v0
  15107. * @param {?=} v1
  15108. * @param {?=} v2
  15109. * @param {?=} v3
  15110. * @param {?=} v4
  15111. * @param {?=} v5
  15112. * @param {?=} v6
  15113. * @param {?=} v7
  15114. * @param {?=} v8
  15115. * @param {?=} v9
  15116. * @return {?}
  15117. */
  15118. function prodCheckAndUpdateNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  15119. var /** @type {?} */ nodeDef = view.def.nodes[checkIndex];
  15120. checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  15121. return (nodeDef.flags & 224 /* CatPureExpression */) ?
  15122. asPureExpressionData(view, checkIndex).value :
  15123. undefined;
  15124. }
  15125. /**
  15126. * @param {?} view
  15127. * @param {?} checkIndex
  15128. * @param {?} argStyle
  15129. * @param {?=} v0
  15130. * @param {?=} v1
  15131. * @param {?=} v2
  15132. * @param {?=} v3
  15133. * @param {?=} v4
  15134. * @param {?=} v5
  15135. * @param {?=} v6
  15136. * @param {?=} v7
  15137. * @param {?=} v8
  15138. * @param {?=} v9
  15139. * @return {?}
  15140. */
  15141. function prodCheckNoChangesNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
  15142. var /** @type {?} */ nodeDef = view.def.nodes[checkIndex];
  15143. checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
  15144. return (nodeDef.flags & 224 /* CatPureExpression */) ?
  15145. asPureExpressionData(view, checkIndex).value :
  15146. undefined;
  15147. }
  15148. /**
  15149. * @param {?} view
  15150. * @return {?}
  15151. */
  15152. function debugCheckAndUpdateView(view) {
  15153. return callWithDebugContext(DebugAction.detectChanges, checkAndUpdateView, null, [view]);
  15154. }
  15155. /**
  15156. * @param {?} view
  15157. * @return {?}
  15158. */
  15159. function debugCheckNoChangesView(view) {
  15160. return callWithDebugContext(DebugAction.checkNoChanges, checkNoChangesView, null, [view]);
  15161. }
  15162. /**
  15163. * @param {?} view
  15164. * @return {?}
  15165. */
  15166. function debugDestroyView(view) {
  15167. return callWithDebugContext(DebugAction.destroy, destroyView, null, [view]);
  15168. }
  15169. /** @enum {number} */
  15170. var DebugAction = {
  15171. create: 0,
  15172. detectChanges: 1,
  15173. checkNoChanges: 2,
  15174. destroy: 3,
  15175. handleEvent: 4,
  15176. };
  15177. DebugAction[DebugAction.create] = "create";
  15178. DebugAction[DebugAction.detectChanges] = "detectChanges";
  15179. DebugAction[DebugAction.checkNoChanges] = "checkNoChanges";
  15180. DebugAction[DebugAction.destroy] = "destroy";
  15181. DebugAction[DebugAction.handleEvent] = "handleEvent";
  15182. var _currentAction;
  15183. var _currentView;
  15184. var _currentNodeIndex;
  15185. /**
  15186. * @param {?} view
  15187. * @param {?} nodeIndex
  15188. * @return {?}
  15189. */
  15190. function debugSetCurrentNode(view, nodeIndex) {
  15191. _currentView = view;
  15192. _currentNodeIndex = nodeIndex;
  15193. }
  15194. /**
  15195. * @param {?} view
  15196. * @param {?} nodeIndex
  15197. * @param {?} eventName
  15198. * @param {?} event
  15199. * @return {?}
  15200. */
  15201. function debugHandleEvent(view, nodeIndex, eventName, event) {
  15202. debugSetCurrentNode(view, nodeIndex);
  15203. return callWithDebugContext(DebugAction.handleEvent, view.def.handleEvent, null, [view, nodeIndex, eventName, event]);
  15204. }
  15205. /**
  15206. * @param {?} view
  15207. * @param {?} checkType
  15208. * @return {?}
  15209. */
  15210. function debugUpdateDirectives(view, checkType) {
  15211. if (view.state & 128 /* Destroyed */) {
  15212. throw viewDestroyedError(DebugAction[_currentAction]);
  15213. }
  15214. debugSetCurrentNode(view, nextDirectiveWithBinding(view, 0));
  15215. return view.def.updateDirectives(debugCheckDirectivesFn, view);
  15216. /**
  15217. * @param {?} view
  15218. * @param {?} nodeIndex
  15219. * @param {?} argStyle
  15220. * @param {...?} values
  15221. * @return {?}
  15222. */
  15223. function debugCheckDirectivesFn(view, nodeIndex, argStyle) {
  15224. var values = [];
  15225. for (var _i = 3; _i < arguments.length; _i++) {
  15226. values[_i - 3] = arguments[_i];
  15227. }
  15228. var /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];
  15229. if (checkType === 0 /* CheckAndUpdate */) {
  15230. debugCheckAndUpdateNode(view, nodeDef, argStyle, values);
  15231. }
  15232. else {
  15233. debugCheckNoChangesNode(view, nodeDef, argStyle, values);
  15234. }
  15235. if (nodeDef.flags & 16384 /* TypeDirective */) {
  15236. debugSetCurrentNode(view, nextDirectiveWithBinding(view, nodeIndex));
  15237. }
  15238. return (nodeDef.flags & 224 /* CatPureExpression */) ?
  15239. asPureExpressionData(view, nodeDef.nodeIndex).value :
  15240. undefined;
  15241. }
  15242. }
  15243. /**
  15244. * @param {?} view
  15245. * @param {?} checkType
  15246. * @return {?}
  15247. */
  15248. function debugUpdateRenderer(view, checkType) {
  15249. if (view.state & 128 /* Destroyed */) {
  15250. throw viewDestroyedError(DebugAction[_currentAction]);
  15251. }
  15252. debugSetCurrentNode(view, nextRenderNodeWithBinding(view, 0));
  15253. return view.def.updateRenderer(debugCheckRenderNodeFn, view);
  15254. /**
  15255. * @param {?} view
  15256. * @param {?} nodeIndex
  15257. * @param {?} argStyle
  15258. * @param {...?} values
  15259. * @return {?}
  15260. */
  15261. function debugCheckRenderNodeFn(view, nodeIndex, argStyle) {
  15262. var values = [];
  15263. for (var _i = 3; _i < arguments.length; _i++) {
  15264. values[_i - 3] = arguments[_i];
  15265. }
  15266. var /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];
  15267. if (checkType === 0 /* CheckAndUpdate */) {
  15268. debugCheckAndUpdateNode(view, nodeDef, argStyle, values);
  15269. }
  15270. else {
  15271. debugCheckNoChangesNode(view, nodeDef, argStyle, values);
  15272. }
  15273. if (nodeDef.flags & 3 /* CatRenderNode */) {
  15274. debugSetCurrentNode(view, nextRenderNodeWithBinding(view, nodeIndex));
  15275. }
  15276. return (nodeDef.flags & 224 /* CatPureExpression */) ?
  15277. asPureExpressionData(view, nodeDef.nodeIndex).value :
  15278. undefined;
  15279. }
  15280. }
  15281. /**
  15282. * @param {?} view
  15283. * @param {?} nodeDef
  15284. * @param {?} argStyle
  15285. * @param {?} givenValues
  15286. * @return {?}
  15287. */
  15288. function debugCheckAndUpdateNode(view, nodeDef, argStyle, givenValues) {
  15289. var /** @type {?} */ changed = (/** @type {?} */ (checkAndUpdateNode)).apply(void 0, [view, nodeDef, argStyle].concat(givenValues));
  15290. if (changed) {
  15291. var /** @type {?} */ values = argStyle === 1 /* Dynamic */ ? givenValues[0] : givenValues;
  15292. if (nodeDef.flags & 16384 /* TypeDirective */) {
  15293. var /** @type {?} */ bindingValues = {};
  15294. for (var /** @type {?} */ i = 0; i < nodeDef.bindings.length; i++) {
  15295. var /** @type {?} */ binding = nodeDef.bindings[i];
  15296. var /** @type {?} */ value = values[i];
  15297. if (binding.flags & 8 /* TypeProperty */) {
  15298. bindingValues[normalizeDebugBindingName(/** @type {?} */ ((binding.nonMinifiedName)))] =
  15299. normalizeDebugBindingValue(value);
  15300. }
  15301. }
  15302. var /** @type {?} */ elDef = /** @type {?} */ ((nodeDef.parent));
  15303. var /** @type {?} */ el = asElementData(view, elDef.nodeIndex).renderElement;
  15304. if (!/** @type {?} */ ((elDef.element)).name) {
  15305. // a comment.
  15306. view.renderer.setValue(el, "bindings=" + JSON.stringify(bindingValues, null, 2));
  15307. }
  15308. else {
  15309. // a regular element.
  15310. for (var /** @type {?} */ attr in bindingValues) {
  15311. var /** @type {?} */ value = bindingValues[attr];
  15312. if (value != null) {
  15313. view.renderer.setAttribute(el, attr, value);
  15314. }
  15315. else {
  15316. view.renderer.removeAttribute(el, attr);
  15317. }
  15318. }
  15319. }
  15320. }
  15321. }
  15322. }
  15323. /**
  15324. * @param {?} view
  15325. * @param {?} nodeDef
  15326. * @param {?} argStyle
  15327. * @param {?} values
  15328. * @return {?}
  15329. */
  15330. function debugCheckNoChangesNode(view, nodeDef, argStyle, values) {
  15331. (/** @type {?} */ (checkNoChangesNode)).apply(void 0, [view, nodeDef, argStyle].concat(values));
  15332. }
  15333. /**
  15334. * @param {?} name
  15335. * @return {?}
  15336. */
  15337. function normalizeDebugBindingName(name) {
  15338. // Attribute names with `$` (eg `x-y$`) are valid per spec, but unsupported by some browsers
  15339. name = camelCaseToDashCase(name.replace(/[$@]/g, '_'));
  15340. return "ng-reflect-" + name;
  15341. }
  15342. var CAMEL_CASE_REGEXP = /([A-Z])/g;
  15343. /**
  15344. * @param {?} input
  15345. * @return {?}
  15346. */
  15347. function camelCaseToDashCase(input) {
  15348. return input.replace(CAMEL_CASE_REGEXP, function () {
  15349. var m = [];
  15350. for (var _i = 0; _i < arguments.length; _i++) {
  15351. m[_i] = arguments[_i];
  15352. }
  15353. return '-' + m[1].toLowerCase();
  15354. });
  15355. }
  15356. /**
  15357. * @param {?} value
  15358. * @return {?}
  15359. */
  15360. function normalizeDebugBindingValue(value) {
  15361. try {
  15362. // Limit the size of the value as otherwise the DOM just gets polluted.
  15363. return value != null ? value.toString().slice(0, 30) : value;
  15364. }
  15365. catch (/** @type {?} */ e) {
  15366. return '[ERROR] Exception while trying to serialize the value';
  15367. }
  15368. }
  15369. /**
  15370. * @param {?} view
  15371. * @param {?} nodeIndex
  15372. * @return {?}
  15373. */
  15374. function nextDirectiveWithBinding(view, nodeIndex) {
  15375. for (var /** @type {?} */ i = nodeIndex; i < view.def.nodes.length; i++) {
  15376. var /** @type {?} */ nodeDef = view.def.nodes[i];
  15377. if (nodeDef.flags & 16384 /* TypeDirective */ && nodeDef.bindings && nodeDef.bindings.length) {
  15378. return i;
  15379. }
  15380. }
  15381. return null;
  15382. }
  15383. /**
  15384. * @param {?} view
  15385. * @param {?} nodeIndex
  15386. * @return {?}
  15387. */
  15388. function nextRenderNodeWithBinding(view, nodeIndex) {
  15389. for (var /** @type {?} */ i = nodeIndex; i < view.def.nodes.length; i++) {
  15390. var /** @type {?} */ nodeDef = view.def.nodes[i];
  15391. if ((nodeDef.flags & 3 /* CatRenderNode */) && nodeDef.bindings && nodeDef.bindings.length) {
  15392. return i;
  15393. }
  15394. }
  15395. return null;
  15396. }
  15397. var DebugContext_ = /** @class */ (function () {
  15398. function DebugContext_(view, nodeIndex) {
  15399. this.view = view;
  15400. this.nodeIndex = nodeIndex;
  15401. if (nodeIndex == null) {
  15402. this.nodeIndex = nodeIndex = 0;
  15403. }
  15404. this.nodeDef = view.def.nodes[nodeIndex];
  15405. var /** @type {?} */ elDef = this.nodeDef;
  15406. var /** @type {?} */ elView = view;
  15407. while (elDef && (elDef.flags & 1 /* TypeElement */) === 0) {
  15408. elDef = /** @type {?} */ ((elDef.parent));
  15409. }
  15410. if (!elDef) {
  15411. while (!elDef && elView) {
  15412. elDef = /** @type {?} */ ((viewParentEl(elView)));
  15413. elView = /** @type {?} */ ((elView.parent));
  15414. }
  15415. }
  15416. this.elDef = elDef;
  15417. this.elView = elView;
  15418. }
  15419. Object.defineProperty(DebugContext_.prototype, "elOrCompView", {
  15420. get: /**
  15421. * @return {?}
  15422. */
  15423. function () {
  15424. // Has to be done lazily as we use the DebugContext also during creation of elements...
  15425. return asElementData(this.elView, this.elDef.nodeIndex).componentView || this.view;
  15426. },
  15427. enumerable: true,
  15428. configurable: true
  15429. });
  15430. Object.defineProperty(DebugContext_.prototype, "injector", {
  15431. get: /**
  15432. * @return {?}
  15433. */
  15434. function () { return createInjector(this.elView, this.elDef); },
  15435. enumerable: true,
  15436. configurable: true
  15437. });
  15438. Object.defineProperty(DebugContext_.prototype, "component", {
  15439. get: /**
  15440. * @return {?}
  15441. */
  15442. function () { return this.elOrCompView.component; },
  15443. enumerable: true,
  15444. configurable: true
  15445. });
  15446. Object.defineProperty(DebugContext_.prototype, "context", {
  15447. get: /**
  15448. * @return {?}
  15449. */
  15450. function () { return this.elOrCompView.context; },
  15451. enumerable: true,
  15452. configurable: true
  15453. });
  15454. Object.defineProperty(DebugContext_.prototype, "providerTokens", {
  15455. get: /**
  15456. * @return {?}
  15457. */
  15458. function () {
  15459. var /** @type {?} */ tokens = [];
  15460. if (this.elDef) {
  15461. for (var /** @type {?} */ i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
  15462. var /** @type {?} */ childDef = this.elView.def.nodes[i];
  15463. if (childDef.flags & 20224 /* CatProvider */) {
  15464. tokens.push(/** @type {?} */ ((childDef.provider)).token);
  15465. }
  15466. i += childDef.childCount;
  15467. }
  15468. }
  15469. return tokens;
  15470. },
  15471. enumerable: true,
  15472. configurable: true
  15473. });
  15474. Object.defineProperty(DebugContext_.prototype, "references", {
  15475. get: /**
  15476. * @return {?}
  15477. */
  15478. function () {
  15479. var /** @type {?} */ references = {};
  15480. if (this.elDef) {
  15481. collectReferences(this.elView, this.elDef, references);
  15482. for (var /** @type {?} */ i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {
  15483. var /** @type {?} */ childDef = this.elView.def.nodes[i];
  15484. if (childDef.flags & 20224 /* CatProvider */) {
  15485. collectReferences(this.elView, childDef, references);
  15486. }
  15487. i += childDef.childCount;
  15488. }
  15489. }
  15490. return references;
  15491. },
  15492. enumerable: true,
  15493. configurable: true
  15494. });
  15495. Object.defineProperty(DebugContext_.prototype, "componentRenderElement", {
  15496. get: /**
  15497. * @return {?}
  15498. */
  15499. function () {
  15500. var /** @type {?} */ elData = findHostElement(this.elOrCompView);
  15501. return elData ? elData.renderElement : undefined;
  15502. },
  15503. enumerable: true,
  15504. configurable: true
  15505. });
  15506. Object.defineProperty(DebugContext_.prototype, "renderNode", {
  15507. get: /**
  15508. * @return {?}
  15509. */
  15510. function () {
  15511. return this.nodeDef.flags & 2 /* TypeText */ ? renderNode(this.view, this.nodeDef) :
  15512. renderNode(this.elView, this.elDef);
  15513. },
  15514. enumerable: true,
  15515. configurable: true
  15516. });
  15517. /**
  15518. * @param {?} console
  15519. * @param {...?} values
  15520. * @return {?}
  15521. */
  15522. DebugContext_.prototype.logError = /**
  15523. * @param {?} console
  15524. * @param {...?} values
  15525. * @return {?}
  15526. */
  15527. function (console) {
  15528. var values = [];
  15529. for (var _i = 1; _i < arguments.length; _i++) {
  15530. values[_i - 1] = arguments[_i];
  15531. }
  15532. var /** @type {?} */ logViewDef;
  15533. var /** @type {?} */ logNodeIndex;
  15534. if (this.nodeDef.flags & 2 /* TypeText */) {
  15535. logViewDef = this.view.def;
  15536. logNodeIndex = this.nodeDef.nodeIndex;
  15537. }
  15538. else {
  15539. logViewDef = this.elView.def;
  15540. logNodeIndex = this.elDef.nodeIndex;
  15541. }
  15542. // Note: we only generate a log function for text and element nodes
  15543. // to make the generated code as small as possible.
  15544. var /** @type {?} */ renderNodeIndex = getRenderNodeIndex(logViewDef, logNodeIndex);
  15545. var /** @type {?} */ currRenderNodeIndex = -1;
  15546. var /** @type {?} */ nodeLogger = function () {
  15547. currRenderNodeIndex++;
  15548. if (currRenderNodeIndex === renderNodeIndex) {
  15549. return (_a = console.error).bind.apply(_a, [console].concat(values));
  15550. }
  15551. else {
  15552. return NOOP;
  15553. }
  15554. var _a;
  15555. }; /** @type {?} */
  15556. ((logViewDef.factory))(nodeLogger);
  15557. if (currRenderNodeIndex < renderNodeIndex) {
  15558. console.error('Illegal state: the ViewDefinitionFactory did not call the logger!');
  15559. console.error.apply(console, values);
  15560. }
  15561. };
  15562. return DebugContext_;
  15563. }());
  15564. /**
  15565. * @param {?} viewDef
  15566. * @param {?} nodeIndex
  15567. * @return {?}
  15568. */
  15569. function getRenderNodeIndex(viewDef$$1, nodeIndex) {
  15570. var /** @type {?} */ renderNodeIndex = -1;
  15571. for (var /** @type {?} */ i = 0; i <= nodeIndex; i++) {
  15572. var /** @type {?} */ nodeDef = viewDef$$1.nodes[i];
  15573. if (nodeDef.flags & 3 /* CatRenderNode */) {
  15574. renderNodeIndex++;
  15575. }
  15576. }
  15577. return renderNodeIndex;
  15578. }
  15579. /**
  15580. * @param {?} view
  15581. * @return {?}
  15582. */
  15583. function findHostElement(view) {
  15584. while (view && !isComponentView(view)) {
  15585. view = /** @type {?} */ ((view.parent));
  15586. }
  15587. if (view.parent) {
  15588. return asElementData(view.parent, /** @type {?} */ ((viewParentEl(view))).nodeIndex);
  15589. }
  15590. return null;
  15591. }
  15592. /**
  15593. * @param {?} view
  15594. * @param {?} nodeDef
  15595. * @param {?} references
  15596. * @return {?}
  15597. */
  15598. function collectReferences(view, nodeDef, references) {
  15599. for (var /** @type {?} */ refName in nodeDef.references) {
  15600. references[refName] = getQueryValue(view, nodeDef, nodeDef.references[refName]);
  15601. }
  15602. }
  15603. /**
  15604. * @param {?} action
  15605. * @param {?} fn
  15606. * @param {?} self
  15607. * @param {?} args
  15608. * @return {?}
  15609. */
  15610. function callWithDebugContext(action, fn, self, args) {
  15611. var /** @type {?} */ oldAction = _currentAction;
  15612. var /** @type {?} */ oldView = _currentView;
  15613. var /** @type {?} */ oldNodeIndex = _currentNodeIndex;
  15614. try {
  15615. _currentAction = action;
  15616. var /** @type {?} */ result = fn.apply(self, args);
  15617. _currentView = oldView;
  15618. _currentNodeIndex = oldNodeIndex;
  15619. _currentAction = oldAction;
  15620. return result;
  15621. }
  15622. catch (/** @type {?} */ e) {
  15623. if (isViewDebugError(e) || !_currentView) {
  15624. throw e;
  15625. }
  15626. throw viewWrappedDebugError(e, /** @type {?} */ ((getCurrentDebugContext())));
  15627. }
  15628. }
  15629. /**
  15630. * @return {?}
  15631. */
  15632. function getCurrentDebugContext() {
  15633. return _currentView ? new DebugContext_(_currentView, _currentNodeIndex) : null;
  15634. }
  15635. var DebugRendererFactory2 = /** @class */ (function () {
  15636. function DebugRendererFactory2(delegate) {
  15637. this.delegate = delegate;
  15638. }
  15639. /**
  15640. * @param {?} element
  15641. * @param {?} renderData
  15642. * @return {?}
  15643. */
  15644. DebugRendererFactory2.prototype.createRenderer = /**
  15645. * @param {?} element
  15646. * @param {?} renderData
  15647. * @return {?}
  15648. */
  15649. function (element, renderData) {
  15650. return new DebugRenderer2(this.delegate.createRenderer(element, renderData));
  15651. };
  15652. /**
  15653. * @return {?}
  15654. */
  15655. DebugRendererFactory2.prototype.begin = /**
  15656. * @return {?}
  15657. */
  15658. function () {
  15659. if (this.delegate.begin) {
  15660. this.delegate.begin();
  15661. }
  15662. };
  15663. /**
  15664. * @return {?}
  15665. */
  15666. DebugRendererFactory2.prototype.end = /**
  15667. * @return {?}
  15668. */
  15669. function () {
  15670. if (this.delegate.end) {
  15671. this.delegate.end();
  15672. }
  15673. };
  15674. /**
  15675. * @return {?}
  15676. */
  15677. DebugRendererFactory2.prototype.whenRenderingDone = /**
  15678. * @return {?}
  15679. */
  15680. function () {
  15681. if (this.delegate.whenRenderingDone) {
  15682. return this.delegate.whenRenderingDone();
  15683. }
  15684. return Promise.resolve(null);
  15685. };
  15686. return DebugRendererFactory2;
  15687. }());
  15688. var DebugRenderer2 = /** @class */ (function () {
  15689. function DebugRenderer2(delegate) {
  15690. this.delegate = delegate;
  15691. this.data = this.delegate.data;
  15692. }
  15693. /**
  15694. * @param {?} node
  15695. * @return {?}
  15696. */
  15697. DebugRenderer2.prototype.destroyNode = /**
  15698. * @param {?} node
  15699. * @return {?}
  15700. */
  15701. function (node) {
  15702. removeDebugNodeFromIndex(/** @type {?} */ ((getDebugNode(node))));
  15703. if (this.delegate.destroyNode) {
  15704. this.delegate.destroyNode(node);
  15705. }
  15706. };
  15707. /**
  15708. * @return {?}
  15709. */
  15710. DebugRenderer2.prototype.destroy = /**
  15711. * @return {?}
  15712. */
  15713. function () { this.delegate.destroy(); };
  15714. /**
  15715. * @param {?} name
  15716. * @param {?=} namespace
  15717. * @return {?}
  15718. */
  15719. DebugRenderer2.prototype.createElement = /**
  15720. * @param {?} name
  15721. * @param {?=} namespace
  15722. * @return {?}
  15723. */
  15724. function (name, namespace) {
  15725. var /** @type {?} */ el = this.delegate.createElement(name, namespace);
  15726. var /** @type {?} */ debugCtx = getCurrentDebugContext();
  15727. if (debugCtx) {
  15728. var /** @type {?} */ debugEl = new DebugElement(el, null, debugCtx);
  15729. debugEl.name = name;
  15730. indexDebugNode(debugEl);
  15731. }
  15732. return el;
  15733. };
  15734. /**
  15735. * @param {?} value
  15736. * @return {?}
  15737. */
  15738. DebugRenderer2.prototype.createComment = /**
  15739. * @param {?} value
  15740. * @return {?}
  15741. */
  15742. function (value) {
  15743. var /** @type {?} */ comment = this.delegate.createComment(value);
  15744. var /** @type {?} */ debugCtx = getCurrentDebugContext();
  15745. if (debugCtx) {
  15746. indexDebugNode(new DebugNode(comment, null, debugCtx));
  15747. }
  15748. return comment;
  15749. };
  15750. /**
  15751. * @param {?} value
  15752. * @return {?}
  15753. */
  15754. DebugRenderer2.prototype.createText = /**
  15755. * @param {?} value
  15756. * @return {?}
  15757. */
  15758. function (value) {
  15759. var /** @type {?} */ text = this.delegate.createText(value);
  15760. var /** @type {?} */ debugCtx = getCurrentDebugContext();
  15761. if (debugCtx) {
  15762. indexDebugNode(new DebugNode(text, null, debugCtx));
  15763. }
  15764. return text;
  15765. };
  15766. /**
  15767. * @param {?} parent
  15768. * @param {?} newChild
  15769. * @return {?}
  15770. */
  15771. DebugRenderer2.prototype.appendChild = /**
  15772. * @param {?} parent
  15773. * @param {?} newChild
  15774. * @return {?}
  15775. */
  15776. function (parent, newChild) {
  15777. var /** @type {?} */ debugEl = getDebugNode(parent);
  15778. var /** @type {?} */ debugChildEl = getDebugNode(newChild);
  15779. if (debugEl && debugChildEl && debugEl instanceof DebugElement) {
  15780. debugEl.addChild(debugChildEl);
  15781. }
  15782. this.delegate.appendChild(parent, newChild);
  15783. };
  15784. /**
  15785. * @param {?} parent
  15786. * @param {?} newChild
  15787. * @param {?} refChild
  15788. * @return {?}
  15789. */
  15790. DebugRenderer2.prototype.insertBefore = /**
  15791. * @param {?} parent
  15792. * @param {?} newChild
  15793. * @param {?} refChild
  15794. * @return {?}
  15795. */
  15796. function (parent, newChild, refChild) {
  15797. var /** @type {?} */ debugEl = getDebugNode(parent);
  15798. var /** @type {?} */ debugChildEl = getDebugNode(newChild);
  15799. var /** @type {?} */ debugRefEl = /** @type {?} */ ((getDebugNode(refChild)));
  15800. if (debugEl && debugChildEl && debugEl instanceof DebugElement) {
  15801. debugEl.insertBefore(debugRefEl, debugChildEl);
  15802. }
  15803. this.delegate.insertBefore(parent, newChild, refChild);
  15804. };
  15805. /**
  15806. * @param {?} parent
  15807. * @param {?} oldChild
  15808. * @return {?}
  15809. */
  15810. DebugRenderer2.prototype.removeChild = /**
  15811. * @param {?} parent
  15812. * @param {?} oldChild
  15813. * @return {?}
  15814. */
  15815. function (parent, oldChild) {
  15816. var /** @type {?} */ debugEl = getDebugNode(parent);
  15817. var /** @type {?} */ debugChildEl = getDebugNode(oldChild);
  15818. if (debugEl && debugChildEl && debugEl instanceof DebugElement) {
  15819. debugEl.removeChild(debugChildEl);
  15820. }
  15821. this.delegate.removeChild(parent, oldChild);
  15822. };
  15823. /**
  15824. * @param {?} selectorOrNode
  15825. * @return {?}
  15826. */
  15827. DebugRenderer2.prototype.selectRootElement = /**
  15828. * @param {?} selectorOrNode
  15829. * @return {?}
  15830. */
  15831. function (selectorOrNode) {
  15832. var /** @type {?} */ el = this.delegate.selectRootElement(selectorOrNode);
  15833. var /** @type {?} */ debugCtx = getCurrentDebugContext();
  15834. if (debugCtx) {
  15835. indexDebugNode(new DebugElement(el, null, debugCtx));
  15836. }
  15837. return el;
  15838. };
  15839. /**
  15840. * @param {?} el
  15841. * @param {?} name
  15842. * @param {?} value
  15843. * @param {?=} namespace
  15844. * @return {?}
  15845. */
  15846. DebugRenderer2.prototype.setAttribute = /**
  15847. * @param {?} el
  15848. * @param {?} name
  15849. * @param {?} value
  15850. * @param {?=} namespace
  15851. * @return {?}
  15852. */
  15853. function (el, name, value, namespace) {
  15854. var /** @type {?} */ debugEl = getDebugNode(el);
  15855. if (debugEl && debugEl instanceof DebugElement) {
  15856. var /** @type {?} */ fullName = namespace ? namespace + ':' + name : name;
  15857. debugEl.attributes[fullName] = value;
  15858. }
  15859. this.delegate.setAttribute(el, name, value, namespace);
  15860. };
  15861. /**
  15862. * @param {?} el
  15863. * @param {?} name
  15864. * @param {?=} namespace
  15865. * @return {?}
  15866. */
  15867. DebugRenderer2.prototype.removeAttribute = /**
  15868. * @param {?} el
  15869. * @param {?} name
  15870. * @param {?=} namespace
  15871. * @return {?}
  15872. */
  15873. function (el, name, namespace) {
  15874. var /** @type {?} */ debugEl = getDebugNode(el);
  15875. if (debugEl && debugEl instanceof DebugElement) {
  15876. var /** @type {?} */ fullName = namespace ? namespace + ':' + name : name;
  15877. debugEl.attributes[fullName] = null;
  15878. }
  15879. this.delegate.removeAttribute(el, name, namespace);
  15880. };
  15881. /**
  15882. * @param {?} el
  15883. * @param {?} name
  15884. * @return {?}
  15885. */
  15886. DebugRenderer2.prototype.addClass = /**
  15887. * @param {?} el
  15888. * @param {?} name
  15889. * @return {?}
  15890. */
  15891. function (el, name) {
  15892. var /** @type {?} */ debugEl = getDebugNode(el);
  15893. if (debugEl && debugEl instanceof DebugElement) {
  15894. debugEl.classes[name] = true;
  15895. }
  15896. this.delegate.addClass(el, name);
  15897. };
  15898. /**
  15899. * @param {?} el
  15900. * @param {?} name
  15901. * @return {?}
  15902. */
  15903. DebugRenderer2.prototype.removeClass = /**
  15904. * @param {?} el
  15905. * @param {?} name
  15906. * @return {?}
  15907. */
  15908. function (el, name) {
  15909. var /** @type {?} */ debugEl = getDebugNode(el);
  15910. if (debugEl && debugEl instanceof DebugElement) {
  15911. debugEl.classes[name] = false;
  15912. }
  15913. this.delegate.removeClass(el, name);
  15914. };
  15915. /**
  15916. * @param {?} el
  15917. * @param {?} style
  15918. * @param {?} value
  15919. * @param {?} flags
  15920. * @return {?}
  15921. */
  15922. DebugRenderer2.prototype.setStyle = /**
  15923. * @param {?} el
  15924. * @param {?} style
  15925. * @param {?} value
  15926. * @param {?} flags
  15927. * @return {?}
  15928. */
  15929. function (el, style, value, flags) {
  15930. var /** @type {?} */ debugEl = getDebugNode(el);
  15931. if (debugEl && debugEl instanceof DebugElement) {
  15932. debugEl.styles[style] = value;
  15933. }
  15934. this.delegate.setStyle(el, style, value, flags);
  15935. };
  15936. /**
  15937. * @param {?} el
  15938. * @param {?} style
  15939. * @param {?} flags
  15940. * @return {?}
  15941. */
  15942. DebugRenderer2.prototype.removeStyle = /**
  15943. * @param {?} el
  15944. * @param {?} style
  15945. * @param {?} flags
  15946. * @return {?}
  15947. */
  15948. function (el, style, flags) {
  15949. var /** @type {?} */ debugEl = getDebugNode(el);
  15950. if (debugEl && debugEl instanceof DebugElement) {
  15951. debugEl.styles[style] = null;
  15952. }
  15953. this.delegate.removeStyle(el, style, flags);
  15954. };
  15955. /**
  15956. * @param {?} el
  15957. * @param {?} name
  15958. * @param {?} value
  15959. * @return {?}
  15960. */
  15961. DebugRenderer2.prototype.setProperty = /**
  15962. * @param {?} el
  15963. * @param {?} name
  15964. * @param {?} value
  15965. * @return {?}
  15966. */
  15967. function (el, name, value) {
  15968. var /** @type {?} */ debugEl = getDebugNode(el);
  15969. if (debugEl && debugEl instanceof DebugElement) {
  15970. debugEl.properties[name] = value;
  15971. }
  15972. this.delegate.setProperty(el, name, value);
  15973. };
  15974. /**
  15975. * @param {?} target
  15976. * @param {?} eventName
  15977. * @param {?} callback
  15978. * @return {?}
  15979. */
  15980. DebugRenderer2.prototype.listen = /**
  15981. * @param {?} target
  15982. * @param {?} eventName
  15983. * @param {?} callback
  15984. * @return {?}
  15985. */
  15986. function (target, eventName, callback) {
  15987. if (typeof target !== 'string') {
  15988. var /** @type {?} */ debugEl = getDebugNode(target);
  15989. if (debugEl) {
  15990. debugEl.listeners.push(new EventListener(eventName, callback));
  15991. }
  15992. }
  15993. return this.delegate.listen(target, eventName, callback);
  15994. };
  15995. /**
  15996. * @param {?} node
  15997. * @return {?}
  15998. */
  15999. DebugRenderer2.prototype.parentNode = /**
  16000. * @param {?} node
  16001. * @return {?}
  16002. */
  16003. function (node) { return this.delegate.parentNode(node); };
  16004. /**
  16005. * @param {?} node
  16006. * @return {?}
  16007. */
  16008. DebugRenderer2.prototype.nextSibling = /**
  16009. * @param {?} node
  16010. * @return {?}
  16011. */
  16012. function (node) { return this.delegate.nextSibling(node); };
  16013. /**
  16014. * @param {?} node
  16015. * @param {?} value
  16016. * @return {?}
  16017. */
  16018. DebugRenderer2.prototype.setValue = /**
  16019. * @param {?} node
  16020. * @param {?} value
  16021. * @return {?}
  16022. */
  16023. function (node, value) { return this.delegate.setValue(node, value); };
  16024. return DebugRenderer2;
  16025. }());
  16026. /**
  16027. * @fileoverview added by tsickle
  16028. * @suppress {checkTypes} checked by tsc
  16029. */
  16030. /**
  16031. * @license
  16032. * Copyright Google Inc. All Rights Reserved.
  16033. *
  16034. * Use of this source code is governed by an MIT-style license that can be
  16035. * found in the LICENSE file at https://angular.io/license
  16036. */
  16037. /**
  16038. * @param {?} override
  16039. * @return {?}
  16040. */
  16041. function overrideProvider(override) {
  16042. initServicesIfNeeded();
  16043. return Services.overrideProvider(override);
  16044. }
  16045. /**
  16046. * @param {?} comp
  16047. * @param {?} componentFactory
  16048. * @return {?}
  16049. */
  16050. function overrideComponentView(comp, componentFactory) {
  16051. initServicesIfNeeded();
  16052. return Services.overrideComponentView(comp, componentFactory);
  16053. }
  16054. /**
  16055. * @return {?}
  16056. */
  16057. function clearOverrides() {
  16058. initServicesIfNeeded();
  16059. return Services.clearOverrides();
  16060. }
  16061. /**
  16062. * @param {?} ngModuleType
  16063. * @param {?} bootstrapComponents
  16064. * @param {?} defFactory
  16065. * @return {?}
  16066. */
  16067. function createNgModuleFactory(ngModuleType, bootstrapComponents, defFactory) {
  16068. return new NgModuleFactory_(ngModuleType, bootstrapComponents, defFactory);
  16069. }
  16070. var NgModuleFactory_ = /** @class */ (function (_super) {
  16071. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgModuleFactory_, _super);
  16072. function NgModuleFactory_(moduleType, _bootstrapComponents, _ngModuleDefFactory) {
  16073. var _this =
  16074. // Attention: this ctor is called as top level function.
  16075. // Putting any logic in here will destroy closure tree shaking!
  16076. _super.call(this) || this;
  16077. _this.moduleType = moduleType;
  16078. _this._bootstrapComponents = _bootstrapComponents;
  16079. _this._ngModuleDefFactory = _ngModuleDefFactory;
  16080. return _this;
  16081. }
  16082. /**
  16083. * @param {?} parentInjector
  16084. * @return {?}
  16085. */
  16086. NgModuleFactory_.prototype.create = /**
  16087. * @param {?} parentInjector
  16088. * @return {?}
  16089. */
  16090. function (parentInjector) {
  16091. initServicesIfNeeded();
  16092. var /** @type {?} */ def = resolveDefinition(this._ngModuleDefFactory);
  16093. return Services.createNgModuleRef(this.moduleType, parentInjector || Injector.NULL, this._bootstrapComponents, def);
  16094. };
  16095. return NgModuleFactory_;
  16096. }(NgModuleFactory));
  16097. /**
  16098. * @fileoverview added by tsickle
  16099. * @suppress {checkTypes} checked by tsc
  16100. */
  16101. /**
  16102. * @license
  16103. * Copyright Google Inc. All Rights Reserved.
  16104. *
  16105. * Use of this source code is governed by an MIT-style license that can be
  16106. * found in the LICENSE file at https://angular.io/license
  16107. */
  16108. /**
  16109. * @fileoverview added by tsickle
  16110. * @suppress {checkTypes} checked by tsc
  16111. */
  16112. /**
  16113. * @license
  16114. * Copyright Google Inc. All Rights Reserved.
  16115. *
  16116. * Use of this source code is governed by an MIT-style license that can be
  16117. * found in the LICENSE file at https://angular.io/license
  16118. */
  16119. /**
  16120. * @fileoverview added by tsickle
  16121. * @suppress {checkTypes} checked by tsc
  16122. */
  16123. /**
  16124. * @license
  16125. * Copyright Google Inc. All Rights Reserved.
  16126. *
  16127. * Use of this source code is governed by an MIT-style license that can be
  16128. * found in the LICENSE file at https://angular.io/license
  16129. */
  16130. // The functions in this file verify that the assumptions we are making
  16131. // about state in an instruction are correct before implementing any logic.
  16132. // They are meant only to be called in dev mode as sanity checks.
  16133. /**
  16134. * Stringifies values such that strings are wrapped in explicit quotation marks and
  16135. * other types are stringified normally. Used in error messages (e.g. assertThrow)
  16136. * to make it clear that certain values are of the string type when comparing.
  16137. *
  16138. * e.g. `expected "3" to be 3` is easier to understand than `expected 3 to be 3`.
  16139. *
  16140. * @param {?} value The value to be stringified
  16141. * @return {?} The stringified value
  16142. */
  16143. function stringifyValueForError(value) {
  16144. return typeof value === 'string' ? "\"" + value + "\"" : '' + value;
  16145. }
  16146. /**
  16147. * @param {?} actual
  16148. * @param {?} name
  16149. * @return {?}
  16150. */
  16151. /**
  16152. * @template T
  16153. * @param {?} actual
  16154. * @param {?} expected
  16155. * @param {?} name
  16156. * @param {?=} serializer
  16157. * @return {?}
  16158. */
  16159. function assertEqual(actual, expected, name, serializer) {
  16160. (actual != expected) && assertThrow(actual, expected, name, '==', serializer);
  16161. }
  16162. /**
  16163. * @template T
  16164. * @param {?} actual
  16165. * @param {?} expected
  16166. * @param {?} name
  16167. * @return {?}
  16168. */
  16169. function assertLessThan(actual, expected, name) {
  16170. (actual < expected) && assertThrow(actual, expected, name, '>');
  16171. }
  16172. /**
  16173. * @template T
  16174. * @param {?} actual
  16175. * @param {?} name
  16176. * @return {?}
  16177. */
  16178. function assertNotNull(actual, name) {
  16179. assertNotEqual(actual, null, name);
  16180. }
  16181. /**
  16182. * @template T
  16183. * @param {?} actual
  16184. * @param {?} expected
  16185. * @param {?} name
  16186. * @return {?}
  16187. */
  16188. function assertNotEqual(actual, expected, name) {
  16189. (actual == expected) && assertThrow(actual, expected, name, '!=');
  16190. }
  16191. /**
  16192. * Throws an error with a message constructed from the arguments.
  16193. *
  16194. * @template T
  16195. * @param {?} actual The actual value (e.g. 3)
  16196. * @param {?} expected The expected value (e.g. 5)
  16197. * @param {?} name The name of the value being checked (e.g. attrs.length)
  16198. * @param {?} operator The comparison operator (e.g. <, >, ==)
  16199. * @param {?=} serializer Function that maps a value to its display value
  16200. * @return {?}
  16201. */
  16202. function assertThrow(actual, expected, name, operator, serializer) {
  16203. if (serializer === void 0) { serializer = stringifyValueForError; }
  16204. throw new Error("ASSERT: expected " + name + " " + operator + " " + serializer(expected) + " but was " + serializer(actual) + "!");
  16205. }
  16206. /**
  16207. * @fileoverview added by tsickle
  16208. * @suppress {checkTypes} checked by tsc
  16209. */
  16210. /**
  16211. * @license
  16212. * Copyright Google Inc. All Rights Reserved.
  16213. *
  16214. * Use of this source code is governed by an MIT-style license that can be
  16215. * found in the LICENSE file at https://angular.io/license
  16216. */
  16217. if (typeof ngDevMode == 'undefined') {
  16218. if (typeof window != 'undefined')
  16219. (/** @type {?} */ (window)).ngDevMode = true;
  16220. if (typeof self != 'undefined')
  16221. (/** @type {?} */ (self)).ngDevMode = true;
  16222. if (typeof global != 'undefined')
  16223. (/** @type {?} */ (global)).ngDevMode = true;
  16224. }
  16225. /**
  16226. * @fileoverview added by tsickle
  16227. * @suppress {checkTypes} checked by tsc
  16228. */
  16229. /**
  16230. * @license
  16231. * Copyright Google Inc. All Rights Reserved.
  16232. *
  16233. * Use of this source code is governed by an MIT-style license that can be
  16234. * found in the LICENSE file at https://angular.io/license
  16235. */
  16236. /**
  16237. * @param {?} node
  16238. * @param {?} type
  16239. * @return {?}
  16240. */
  16241. function assertNodeType(node, type) {
  16242. assertNotEqual(node, null, 'node');
  16243. assertEqual(node.flags & 3 /* TYPE_MASK */, type, 'Node.type', typeSerializer);
  16244. }
  16245. /**
  16246. * @param {?} node
  16247. * @param {...?} types
  16248. * @return {?}
  16249. */
  16250. /**
  16251. * @param {?} type
  16252. * @return {?}
  16253. */
  16254. function typeSerializer(type) {
  16255. if (type == 1 /* Projection */)
  16256. return 'Projection';
  16257. if (type == 0 /* Container */)
  16258. return 'Container';
  16259. if (type == 2 /* View */)
  16260. return 'View';
  16261. if (type == 3 /* Element */)
  16262. return 'Element';
  16263. return '??? ' + type + ' ???';
  16264. }
  16265. /**
  16266. * @fileoverview added by tsickle
  16267. * @suppress {checkTypes} checked by tsc
  16268. */
  16269. /**
  16270. * @license
  16271. * Copyright Google Inc. All Rights Reserved.
  16272. *
  16273. * Use of this source code is governed by an MIT-style license that can be
  16274. * found in the LICENSE file at https://angular.io/license
  16275. */
  16276. /**
  16277. * Finds the closest DOM node above a given container in the hierarchy.
  16278. *
  16279. * This is necessary to add or remove elements from the DOM when a view
  16280. * is added or removed from the container. e.g. parent.removeChild(...)
  16281. *
  16282. * @param {?} containerNode The container node whose parent must be found
  16283. * @return {?} Closest DOM node above the container
  16284. */
  16285. function findNativeParent(containerNode) {
  16286. var /** @type {?} */ container = containerNode;
  16287. while (container) {
  16288. ngDevMode && assertNodeType(container, 0 /* Container */);
  16289. var /** @type {?} */ renderParent = container.data.renderParent;
  16290. if (renderParent !== null) {
  16291. return renderParent.native;
  16292. }
  16293. var /** @type {?} */ viewOrElement = /** @type {?} */ ((container.parent));
  16294. ngDevMode && assertNotNull(viewOrElement, 'container.parent');
  16295. if ((viewOrElement.flags & 3 /* TYPE_MASK */) === 3 /* Element */) {
  16296. // we are an LElement, which means we are past the last LContainer.
  16297. // This means than we have not been projected so just ignore.
  16298. return null;
  16299. }
  16300. ngDevMode && assertNodeType(viewOrElement, 2 /* View */);
  16301. container = (/** @type {?} */ (viewOrElement)).parent;
  16302. }
  16303. return null;
  16304. }
  16305. /**
  16306. * Finds the DOM element before which a certain view should be inserting its
  16307. * child elements.
  16308. *
  16309. * If the view has a next (e.g. for loop), elements should be inserted before
  16310. * the next view's first child element. Otherwise, the container's comment
  16311. * anchor is the marker.
  16312. *
  16313. * @param {?} index The index of the view to check
  16314. * @param {?} state ContainerState of the parent container
  16315. * @param {?} native Comment anchor for container
  16316. * @return {?} The DOM element for which the view should insert elements
  16317. */
  16318. function findBeforeNode(index, state, native) {
  16319. var /** @type {?} */ views = state.views;
  16320. // Find the node to insert in front of
  16321. return index + 1 < views.length ?
  16322. (/** @type {?} */ (views[index + 1].child)).native :
  16323. native;
  16324. }
  16325. /**
  16326. * @param {?} container
  16327. * @param {?} rootNode
  16328. * @param {?} insertMode
  16329. * @param {?=} beforeNode
  16330. * @return {?}
  16331. */
  16332. function addRemoveViewFromContainer(container, rootNode, insertMode, beforeNode) {
  16333. ngDevMode && assertNodeType(container, 0 /* Container */);
  16334. ngDevMode && assertNodeType(rootNode, 2 /* View */);
  16335. var /** @type {?} */ parent = findNativeParent(container);
  16336. var /** @type {?} */ node = rootNode.child;
  16337. if (parent) {
  16338. while (node) {
  16339. var /** @type {?} */ type = node.flags & 3;
  16340. var /** @type {?} */ nextNode = null;
  16341. var /** @type {?} */ renderer = container.view.renderer;
  16342. var /** @type {?} */ isFnRenderer = (/** @type {?} */ (renderer)).listen;
  16343. if (type === 3 /* Element */) {
  16344. insertMode ? (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))
  16345. .insertBefore))(parent, /** @type {?} */ ((node.native)), /** @type {?} */ (beforeNode)) :
  16346. parent.insertBefore(/** @type {?} */ ((node.native)), /** @type {?} */ (beforeNode), true)) :
  16347. (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))
  16348. .removeChild))(/** @type {?} */ (parent), /** @type {?} */ ((node.native))) :
  16349. parent.removeChild(/** @type {?} */ ((node.native))));
  16350. nextNode = node.next;
  16351. }
  16352. else if (type === 0 /* Container */) {
  16353. // if we get to a container, it must be a root node of a view because we are only
  16354. // propagating down into child views / containers and not child elements
  16355. var /** @type {?} */ childContainerData = (/** @type {?} */ (node)).data;
  16356. insertMode ? (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))
  16357. .appendChild))(/** @type {?} */ (parent), /** @type {?} */ ((node.native))) :
  16358. parent.appendChild(/** @type {?} */ ((node.native)))) :
  16359. (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))
  16360. .removeChild))(/** @type {?} */ (parent), /** @type {?} */ ((node.native))) :
  16361. parent.removeChild(/** @type {?} */ ((node.native))));
  16362. nextNode = childContainerData.views.length ? childContainerData.views[0].child : null;
  16363. }
  16364. else if (type === 1 /* Projection */) {
  16365. nextNode = (/** @type {?} */ (node)).data[0];
  16366. }
  16367. else {
  16368. nextNode = (/** @type {?} */ (node)).child;
  16369. }
  16370. if (nextNode === null) {
  16371. while (node && !node.next) {
  16372. node = node.parent;
  16373. if (node === rootNode)
  16374. node = null;
  16375. }
  16376. node = node && node.next;
  16377. }
  16378. else {
  16379. node = nextNode;
  16380. }
  16381. }
  16382. }
  16383. }
  16384. /**
  16385. * Traverses the tree of component views and containers to remove listeners and
  16386. * call onDestroy callbacks.
  16387. *
  16388. * Notes:
  16389. * - Because it's used for onDestroy calls, it needs to be bottom-up.
  16390. * - Must process containers instead of their views to avoid splicing
  16391. * when views are destroyed and re-added.
  16392. * - Using a while loop because it's faster than recursion
  16393. * - Destroy only called on movement to sibling or movement to parent (laterally or up)
  16394. *
  16395. * \@param rootView The view to destroy
  16396. * @param {?} rootView
  16397. * @return {?}
  16398. */
  16399. function destroyViewTree(rootView) {
  16400. var /** @type {?} */ viewOrContainerState = rootView;
  16401. while (viewOrContainerState) {
  16402. var /** @type {?} */ next = null;
  16403. if (viewOrContainerState.views && viewOrContainerState.views.length) {
  16404. next = viewOrContainerState.views[0].data;
  16405. }
  16406. else if (viewOrContainerState.child) {
  16407. next = viewOrContainerState.child;
  16408. }
  16409. else if (viewOrContainerState.next) {
  16410. cleanUpView(/** @type {?} */ (viewOrContainerState));
  16411. next = viewOrContainerState.next;
  16412. }
  16413. if (next == null) {
  16414. while (viewOrContainerState && !/** @type {?} */ ((viewOrContainerState)).next) {
  16415. cleanUpView(/** @type {?} */ (viewOrContainerState));
  16416. viewOrContainerState = getParentState(viewOrContainerState, rootView);
  16417. }
  16418. cleanUpView(/** @type {?} */ (viewOrContainerState) || rootView);
  16419. next = viewOrContainerState && viewOrContainerState.next;
  16420. }
  16421. viewOrContainerState = next;
  16422. }
  16423. }
  16424. /**
  16425. * Inserts a view into a container.
  16426. *
  16427. * This adds the view to the container's array of active views in the correct
  16428. * position. It also adds the view's elements to the DOM if the container isn't a
  16429. * root node of another view (in that case, the view's elements will be added when
  16430. * the container's parent view is added later).
  16431. *
  16432. * @param {?} container The container into which the view should be inserted
  16433. * @param {?} newView The view to insert
  16434. * @param {?} index The index at which to insert the view
  16435. * @return {?} The inserted view
  16436. */
  16437. function insertView(container, newView, index) {
  16438. var /** @type {?} */ state = container.data;
  16439. var /** @type {?} */ views = state.views;
  16440. if (index > 0) {
  16441. // This is a new view, we need to add it to the children.
  16442. setViewNext(views[index - 1], newView);
  16443. }
  16444. if (index < views.length && views[index].data.id !== newView.data.id) {
  16445. // View ID change replace the view.
  16446. setViewNext(newView, views[index]);
  16447. views.splice(index, 0, newView);
  16448. }
  16449. else if (index >= views.length) {
  16450. views.push(newView);
  16451. }
  16452. if (state.nextIndex <= index) {
  16453. state.nextIndex++;
  16454. }
  16455. // If the container's renderParent is null, we know that it is a root node of its own parent view
  16456. // and we should wait until that parent processes its nodes (otherwise, we will insert this view's
  16457. // nodes twice - once now and once when its parent inserts its views).
  16458. if (container.data.renderParent !== null) {
  16459. addRemoveViewFromContainer(container, newView, true, findBeforeNode(index, state, container.native));
  16460. }
  16461. // Notify query that view has been inserted
  16462. container.query && container.query.insertView(container, newView, index);
  16463. return newView;
  16464. }
  16465. /**
  16466. * Removes a view from a container.
  16467. *
  16468. * This method splices the view from the container's array of active views. It also
  16469. * removes the view's elements from the DOM and conducts cleanup (e.g. removing
  16470. * listeners, calling onDestroys).
  16471. *
  16472. * @param {?} container The container from which to remove a view
  16473. * @param {?} removeIndex The index of the view to remove
  16474. * @return {?} The removed view
  16475. */
  16476. function removeView(container, removeIndex) {
  16477. var /** @type {?} */ views = container.data.views;
  16478. var /** @type {?} */ viewNode = views[removeIndex];
  16479. if (removeIndex > 0) {
  16480. setViewNext(views[removeIndex - 1], viewNode.next);
  16481. }
  16482. views.splice(removeIndex, 1);
  16483. destroyViewTree(viewNode.data);
  16484. addRemoveViewFromContainer(container, viewNode, false);
  16485. // Notify query that view has been removed
  16486. container.query && container.query.removeView(container, viewNode, removeIndex);
  16487. return viewNode;
  16488. }
  16489. /**
  16490. * Sets a next on the view node, so views in for loops can easily jump from
  16491. * one view to the next to add/remove elements. Also adds the ViewState (view.data)
  16492. * to the view tree for easy traversal when cleaning up the view.
  16493. *
  16494. * @param {?} view The view to set up
  16495. * @param {?} next The view's new next
  16496. * @return {?}
  16497. */
  16498. function setViewNext(view, next) {
  16499. view.next = next;
  16500. view.data.next = next ? next.data : null;
  16501. }
  16502. /**
  16503. * Determines which ViewOrContainerState to jump to when traversing back up the
  16504. * tree in destroyViewTree.
  16505. *
  16506. * Normally, the view's parent ViewState should be checked, but in the case of
  16507. * embedded views, the container (which is the view node's parent, but not the
  16508. * ViewState's parent) needs to be checked for a possible next property.
  16509. *
  16510. * @param {?} state The ViewOrContainerState for which we need a parent state
  16511. * @param {?} rootView The rootView, so we don't propagate too far up the view tree
  16512. * @return {?} The correct parent ViewOrContainerState
  16513. */
  16514. function getParentState(state, rootView) {
  16515. var /** @type {?} */ node;
  16516. if ((node = /** @type {?} */ (((/** @type {?} */ (state)))).node) &&
  16517. (node.flags & 3 /* TYPE_MASK */) === 2 /* View */) {
  16518. // if it's an embedded view, the state needs to go up to the container, in case the
  16519. // container has a next
  16520. return /** @type {?} */ (((node.parent)).data);
  16521. }
  16522. else {
  16523. // otherwise, use parent view for containers or component views
  16524. return state.parent === rootView ? null : state.parent;
  16525. }
  16526. }
  16527. /**
  16528. * Removes all listeners and call all onDestroys in a given view.
  16529. *
  16530. * @param {?} viewState The ViewState of the view to clean up
  16531. * @return {?}
  16532. */
  16533. function cleanUpView(viewState) {
  16534. if (!viewState.cleanup)
  16535. return;
  16536. var /** @type {?} */ cleanup = /** @type {?} */ ((viewState.cleanup));
  16537. for (var /** @type {?} */ i = 0; i < cleanup.length - 1; i += 2) {
  16538. if (typeof cleanup[i] === 'string') {
  16539. /** @type {?} */ ((cleanup))[i + 1].removeEventListener(cleanup[i], cleanup[i + 2], cleanup[i + 3]);
  16540. i += 2;
  16541. }
  16542. else {
  16543. cleanup[i].call(cleanup[i + 1]);
  16544. }
  16545. }
  16546. viewState.cleanup = null;
  16547. }
  16548. /**
  16549. * Appends the provided child element to the provided parent, if appropriate.
  16550. *
  16551. * If the parent is a view, the element will be appended as part of viewEnd(), so
  16552. * the element should not be appended now. Similarly, if the child is a content child
  16553. * of a parent component, the child will be appended to the right position later by
  16554. * the content projection system. Otherwise, append normally.
  16555. *
  16556. * @param {?} parent The parent to which to append the child
  16557. * @param {?} child The child that should be appended
  16558. * @param {?} currentView The current view's ViewState
  16559. * @return {?} Whether or not the child was appended
  16560. */
  16561. function appendChild(parent, child, currentView) {
  16562. // Only add native child element to parent element if the parent element is regular Element.
  16563. // If parent is:
  16564. // - Regular element => add child
  16565. // - Component host element =>
  16566. // - Current View, and parent view same => content => don't add -> parent component will
  16567. // re-project if needed.
  16568. // - Current View, and parent view different => view => add Child
  16569. // - View element => View's get added separately.
  16570. if (child !== null && (parent.flags & 3 /* TYPE_MASK */) === 3 /* Element */ &&
  16571. (parent.view !==
  16572. currentView /* Crossing View Boundaries, it is Component, but add Element of View */
  16573. || parent.data === null /* Regular Element. */)) {
  16574. // We only add element if not in View or not projected.
  16575. var /** @type {?} */ renderer = currentView.renderer;
  16576. (/** @type {?} */ (renderer)).listen ? /** @type {?} */ (((/** @type {?} */ (renderer)).appendChild))(/** @type {?} */ (((parent.native))), child) : /** @type {?} */ ((parent.native)).appendChild(child);
  16577. return true;
  16578. }
  16579. return false;
  16580. }
  16581. /**
  16582. * Inserts the provided node before the correct element in the DOM, if appropriate.
  16583. *
  16584. * If the parent is a view, the element will be inserted as part of viewEnd(), so
  16585. * the element should not be inserted now. Similarly, if the child is a content child
  16586. * of a parent component, the child will be inserted to the right position later by
  16587. * the content projection system. Otherwise, insertBefore normally.
  16588. *
  16589. * @param {?} node Node to insert
  16590. * @param {?} currentView The current view's ViewState
  16591. * @return {?}
  16592. */
  16593. function insertChild(node, currentView) {
  16594. var /** @type {?} */ parent = /** @type {?} */ ((node.parent));
  16595. // Only add child element to parent element if the parent element is regular Element.
  16596. // If parent is:
  16597. // - Normal element => add child
  16598. // - Component element =>
  16599. // - Current View, and parent view same => content don't add -> parent component will
  16600. // re-project if needed.
  16601. // - Current View, and parent view different => view => add Child
  16602. // - View element => View's get added separately.
  16603. if ((parent.flags & 3 /* TYPE_MASK */) === 3 /* Element */ &&
  16604. (parent.view !==
  16605. currentView /* Crossing View Boundaries, its Component, but add Element of View */
  16606. || parent.data === null /* Regular Element. */)) {
  16607. // We only add element if not in View or not projected.
  16608. var /** @type {?} */ sibling = node.next;
  16609. var /** @type {?} */ nativeSibling = null;
  16610. while (sibling && (nativeSibling = sibling.native) === null) {
  16611. sibling = sibling.next;
  16612. }
  16613. var /** @type {?} */ renderer = currentView.renderer;
  16614. (/** @type {?} */ (renderer)).listen ? /** @type {?} */ (((/** @type {?} */ (renderer))
  16615. .insertBefore))(/** @type {?} */ ((parent.native)), /** @type {?} */ ((node.native)), nativeSibling) : /** @type {?} */ ((parent.native)).insertBefore(/** @type {?} */ ((node.native)), nativeSibling, false);
  16616. }
  16617. }
  16618. /**
  16619. * Appends a projected node to the DOM, or in the case of a projected container,
  16620. * appends the nodes from all of the container's active views to the DOM. Also stores the
  16621. * node in the given projectedNodes array.
  16622. *
  16623. * @param {?} projectedNodes Array to store the projected node
  16624. * @param {?} node The node to process
  16625. * @param {?} currentParent The last parent element to be processed
  16626. * @param {?} currentView The current view's ViewState
  16627. * @return {?}
  16628. */
  16629. /**
  16630. * @fileoverview added by tsickle
  16631. * @suppress {checkTypes} checked by tsc
  16632. */
  16633. /**
  16634. * @license
  16635. * Copyright Google Inc. All Rights Reserved.
  16636. *
  16637. * Use of this source code is governed by an MIT-style license that can be
  16638. * found in the LICENSE file at https://angular.io/license
  16639. */
  16640. /**
  16641. * A utility function to match an Ivy node static data against a simple CSS selector
  16642. *
  16643. * @param {?} lNodeStaticData
  16644. * @param {?} selector
  16645. * @return {?} true if node matches the selector.
  16646. */
  16647. /**
  16648. * @param {?} lNodeStaticData
  16649. * @param {?} selector
  16650. * @return {?}
  16651. */
  16652. /**
  16653. * @param {?} lNodeStaticData
  16654. * @param {?} selector
  16655. * @return {?}
  16656. */
  16657. /**
  16658. * @fileoverview added by tsickle
  16659. * @suppress {checkTypes} checked by tsc
  16660. */
  16661. /**
  16662. * @license
  16663. * Copyright Google Inc. All Rights Reserved.
  16664. *
  16665. * Use of this source code is governed by an MIT-style license that can be
  16666. * found in the LICENSE file at https://angular.io/license
  16667. */
  16668. /**
  16669. * Must use this method for CD (instead of === ) since NaN !== NaN
  16670. * @param {?} a
  16671. * @param {?} b
  16672. * @return {?}
  16673. */
  16674. function isDifferent(a, b) {
  16675. // NaN is the only value that is not equal to itself so the first
  16676. // test checks if both a and b are not NaN
  16677. return !(a !== a && b !== b) && a !== b;
  16678. }
  16679. /**
  16680. * @param {?} value
  16681. * @return {?}
  16682. */
  16683. function stringify$1(value) {
  16684. if (typeof value == 'function')
  16685. return value.name || value;
  16686. if (typeof value == 'string')
  16687. return value;
  16688. if (value == null)
  16689. return '';
  16690. return '' + value;
  16691. }
  16692. /**
  16693. * Function that throws a "not implemented" error so it's clear certain
  16694. * behaviors/methods aren't yet ready.
  16695. *
  16696. * @return {?} Not implemented error
  16697. */
  16698. /**
  16699. * @fileoverview added by tsickle
  16700. * @suppress {checkTypes} checked by tsc
  16701. */
  16702. /**
  16703. * @license
  16704. * Copyright Google Inc. All Rights Reserved.
  16705. *
  16706. * Use of this source code is governed by an MIT-style license that can be
  16707. * found in the LICENSE file at https://angular.io/license
  16708. */
  16709. /**
  16710. * If a directive is diPublic, bloomAdd sets a property on the instance with this constant as
  16711. * the key and the directive's unique ID as the value. This allows us to map directives to their
  16712. * bloom filter bit for DI.
  16713. */
  16714. var NG_ELEMENT_ID = '__NG_ELEMENT_ID__';
  16715. /**
  16716. * The number of slots in each bloom filter (used by DI). The larger this number, the fewer
  16717. * directives that will share slots, and thus, the fewer false positives when checking for
  16718. * the existence of a directive.
  16719. */
  16720. var BLOOM_SIZE = 128;
  16721. /**
  16722. * Registers this directive as present in its node's injector by flipping the directive's
  16723. * corresponding bit in the injector's bloom filter.
  16724. *
  16725. * @param {?} injector The node injector in which the directive should be registered
  16726. * @param {?} type The directive to register
  16727. * @return {?}
  16728. */
  16729. /**
  16730. * Creates (or gets an existing) injector for a given element or container.
  16731. *
  16732. * @param {?} node for which an injector should be retrieved / created.
  16733. * @return {?} Node injector
  16734. */
  16735. /**
  16736. * Constructs an injection error with the given text and token.
  16737. *
  16738. * @param {?} text The text of the error
  16739. * @param {?} token The token associated with the error
  16740. * @return {?} The error that was created
  16741. */
  16742. function createInjectionError(text, token) {
  16743. return new Error("ElementInjector: " + text + " [" + stringify$1(token) + "]");
  16744. }
  16745. /**
  16746. * Makes a directive public to the DI system by adding it to an injector's bloom filter.
  16747. *
  16748. * @param {?} di The node injector in which a directive will be added
  16749. * @param {?} def The definition of the directive to be made public
  16750. * @return {?}
  16751. */
  16752. /**
  16753. * Searches for an instance of the given directive type up the injector tree and returns
  16754. * that instance if found.
  16755. *
  16756. * Specifically, it gets the bloom filter bit associated with the directive (see bloomHashBit),
  16757. * checks that bit against the bloom filter structure to identify an injector that might have
  16758. * the directive (see bloomFindPossibleInjector), then searches the directives on that injector
  16759. * for a match.
  16760. *
  16761. * If not found, it will propagate up to the next parent injector until the token
  16762. * is found or the top is reached.
  16763. *
  16764. * @template T
  16765. * @param {?} di Node injector where the search should start
  16766. * @param {?} token The directive type to search for
  16767. * @param {?=} flags Injection flags (e.g. CheckParent)
  16768. * @return {?} The instance found
  16769. */
  16770. /**
  16771. * Given a directive type, this function returns the bit in an injector's bloom filter
  16772. * that should be used to determine whether or not the directive is present.
  16773. *
  16774. * When the directive was added to the bloom filter, it was given a unique ID that can be
  16775. * retrieved on the class. Since there are only BLOOM_SIZE slots per bloom filter, the directive's
  16776. * ID must be modulo-ed by BLOOM_SIZE to get the correct bloom bit (directives share slots after
  16777. * BLOOM_SIZE is reached).
  16778. *
  16779. * @param {?} type The directive type
  16780. * @return {?} The bloom bit to check for the directive
  16781. */
  16782. function bloomHashBit(type) {
  16783. var /** @type {?} */ id = (/** @type {?} */ (type))[NG_ELEMENT_ID];
  16784. return typeof id === 'number' ? id % BLOOM_SIZE : null;
  16785. }
  16786. /**
  16787. * Finds the closest injector that might have a certain directive.
  16788. *
  16789. * Each directive corresponds to a bit in an injector's bloom filter. Given the bloom bit to
  16790. * check and a starting injector, this function traverses up injectors until it finds an
  16791. * injector that contains a 1 for that bit in its bloom filter. A 1 indicates that the
  16792. * injector may have that directive. It only *may* have the directive because directives begin
  16793. * to share bloom filter bits after the BLOOM_SIZE is reached, and it could correspond to a
  16794. * different directive sharing the bit.
  16795. *
  16796. * Note: We can skip checking further injectors up the tree if an injector's cbf structure
  16797. * has a 0 for that bloom bit. Since cbf contains the merged value of all the parent
  16798. * injectors, a 0 in the bloom bit indicates that the parents definitely do not contain
  16799. * the directive and do not need to be checked.
  16800. *
  16801. * @param {?} startInjector
  16802. * @param {?} bloomBit The bit to check in each injector's bloom filter
  16803. * @return {?} An injector that might have the directive
  16804. */
  16805. function bloomFindPossibleInjector(startInjector, bloomBit) {
  16806. // Create a mask that targets the specific bit associated with the directive we're looking for.
  16807. // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
  16808. // to bit positions 0 - 31 in a 32 bit integer.
  16809. var /** @type {?} */ mask = 1 << bloomBit;
  16810. // Traverse up the injector tree until we find a potential match or until we know there *isn't* a
  16811. // match.
  16812. var /** @type {?} */ injector = startInjector;
  16813. while (injector) {
  16814. // Our bloom filter size is 128 bits, which is four 32-bit bloom filter buckets:
  16815. // bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127]
  16816. // Get the bloom filter value from the appropriate bucket based on the directive's bloomBit.
  16817. var /** @type {?} */ value = bloomBit < 64 ? (bloomBit < 32 ? injector.bf0 : injector.bf1) :
  16818. (bloomBit < 96 ? injector.bf2 : injector.bf3);
  16819. // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,
  16820. // this injector is a potential match.
  16821. if ((value & mask) === mask) {
  16822. return injector;
  16823. }
  16824. // If the current injector does not have the directive, check the bloom filters for the ancestor
  16825. // injectors (cbf0 - cbf3). These filters capture *all* ancestor injectors.
  16826. value = bloomBit < 64 ? (bloomBit < 32 ? injector.cbf0 : injector.cbf1) :
  16827. (bloomBit < 96 ? injector.cbf2 : injector.cbf3);
  16828. // If the ancestor bloom filter value has the bit corresponding to the directive, traverse up to
  16829. // find the specific injector. If the ancestor bloom filter does not have the bit, we can abort.
  16830. injector = (value & mask) ? injector.parent : null;
  16831. }
  16832. return null;
  16833. }
  16834. /**
  16835. * Creates an ElementRef for a given node injector and stores it on the injector.
  16836. * Or, if the ElementRef already exists, retrieves the existing ElementRef.
  16837. *
  16838. * @param {?} di The node injector where we should store a created ElementRef
  16839. * @return {?} The ElementRef instance to use
  16840. */
  16841. /**
  16842. * Creates a TemplateRef and stores it on the injector. Or, if the TemplateRef already
  16843. * exists, retrieves the existing TemplateRef.
  16844. *
  16845. * @template T
  16846. * @param {?} di The node injector where we should store a created TemplateRef
  16847. * @return {?} The TemplateRef instance to use
  16848. */
  16849. /**
  16850. * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef
  16851. * already exists, retrieves the existing ViewContainerRef.
  16852. *
  16853. * @param {?} di
  16854. * @return {?} The ViewContainerRef instance to use
  16855. */
  16856. /**
  16857. * @fileoverview added by tsickle
  16858. * @suppress {checkTypes} checked by tsc
  16859. */
  16860. /**
  16861. * @license
  16862. * Copyright Google Inc. All Rights Reserved.
  16863. *
  16864. * Use of this source code is governed by an MIT-style license that can be
  16865. * found in the LICENSE file at https://angular.io/license
  16866. */
  16867. /**
  16868. * A predicate which determines if a given element/directive should be included in the query
  16869. * @record
  16870. * @template T
  16871. */
  16872. /**
  16873. * @template T
  16874. */
  16875. var QueryList_ = /** @class */ (function () {
  16876. function QueryList_() {
  16877. this.dirty = false;
  16878. /**
  16879. * \@internal
  16880. */
  16881. this._valuesTree = null;
  16882. /**
  16883. * \@internal
  16884. */
  16885. this._values = null;
  16886. }
  16887. Object.defineProperty(QueryList_.prototype, "length", {
  16888. get: /**
  16889. * @return {?}
  16890. */
  16891. function () {
  16892. ngDevMode && assertNotNull(this._values, 'refreshed');
  16893. return /** @type {?} */ ((this._values)).length;
  16894. },
  16895. enumerable: true,
  16896. configurable: true
  16897. });
  16898. Object.defineProperty(QueryList_.prototype, "first", {
  16899. get: /**
  16900. * @return {?}
  16901. */
  16902. function () {
  16903. ngDevMode && assertNotNull(this._values, 'refreshed');
  16904. var /** @type {?} */ values = /** @type {?} */ ((this._values));
  16905. return values.length ? values[0] : null;
  16906. },
  16907. enumerable: true,
  16908. configurable: true
  16909. });
  16910. Object.defineProperty(QueryList_.prototype, "last", {
  16911. get: /**
  16912. * @return {?}
  16913. */
  16914. function () {
  16915. ngDevMode && assertNotNull(this._values, 'refreshed');
  16916. var /** @type {?} */ values = /** @type {?} */ ((this._values));
  16917. return values.length ? values[values.length - 1] : null;
  16918. },
  16919. enumerable: true,
  16920. configurable: true
  16921. });
  16922. /** @internal */
  16923. /**
  16924. * \@internal
  16925. * @return {?}
  16926. */
  16927. QueryList_.prototype._refresh = /**
  16928. * \@internal
  16929. * @return {?}
  16930. */
  16931. function () {
  16932. // TODO(misko): needs more logic to flatten tree.
  16933. if (this._values === null) {
  16934. this._values = this._valuesTree;
  16935. return true;
  16936. }
  16937. return false;
  16938. };
  16939. /**
  16940. * @template U
  16941. * @param {?} fn
  16942. * @return {?}
  16943. */
  16944. QueryList_.prototype.map = /**
  16945. * @template U
  16946. * @param {?} fn
  16947. * @return {?}
  16948. */
  16949. function (fn) {
  16950. throw new Error('Method not implemented.');
  16951. };
  16952. /**
  16953. * @param {?} fn
  16954. * @return {?}
  16955. */
  16956. QueryList_.prototype.filter = /**
  16957. * @param {?} fn
  16958. * @return {?}
  16959. */
  16960. function (fn) {
  16961. throw new Error('Method not implemented.');
  16962. };
  16963. /**
  16964. * @param {?} fn
  16965. * @return {?}
  16966. */
  16967. QueryList_.prototype.find = /**
  16968. * @param {?} fn
  16969. * @return {?}
  16970. */
  16971. function (fn) {
  16972. throw new Error('Method not implemented.');
  16973. };
  16974. /**
  16975. * @template U
  16976. * @param {?} fn
  16977. * @param {?} init
  16978. * @return {?}
  16979. */
  16980. QueryList_.prototype.reduce = /**
  16981. * @template U
  16982. * @param {?} fn
  16983. * @param {?} init
  16984. * @return {?}
  16985. */
  16986. function (fn, init) {
  16987. throw new Error('Method not implemented.');
  16988. };
  16989. /**
  16990. * @param {?} fn
  16991. * @return {?}
  16992. */
  16993. QueryList_.prototype.forEach = /**
  16994. * @param {?} fn
  16995. * @return {?}
  16996. */
  16997. function (fn) {
  16998. throw new Error('Method not implemented.');
  16999. };
  17000. /**
  17001. * @param {?} fn
  17002. * @return {?}
  17003. */
  17004. QueryList_.prototype.some = /**
  17005. * @param {?} fn
  17006. * @return {?}
  17007. */
  17008. function (fn) {
  17009. throw new Error('Method not implemented.');
  17010. };
  17011. /**
  17012. * @return {?}
  17013. */
  17014. QueryList_.prototype.toArray = /**
  17015. * @return {?}
  17016. */
  17017. function () {
  17018. ngDevMode && assertNotNull(this._values, 'refreshed');
  17019. return /** @type {?} */ ((this._values));
  17020. };
  17021. /**
  17022. * @return {?}
  17023. */
  17024. QueryList_.prototype.toString = /**
  17025. * @return {?}
  17026. */
  17027. function () { throw new Error('Method not implemented.'); };
  17028. /**
  17029. * @param {?} res
  17030. * @return {?}
  17031. */
  17032. QueryList_.prototype.reset = /**
  17033. * @param {?} res
  17034. * @return {?}
  17035. */
  17036. function (res) { throw new Error('Method not implemented.'); };
  17037. /**
  17038. * @return {?}
  17039. */
  17040. QueryList_.prototype.notifyOnChanges = /**
  17041. * @return {?}
  17042. */
  17043. function () { throw new Error('Method not implemented.'); };
  17044. /**
  17045. * @return {?}
  17046. */
  17047. QueryList_.prototype.setDirty = /**
  17048. * @return {?}
  17049. */
  17050. function () { throw new Error('Method not implemented.'); };
  17051. /**
  17052. * @return {?}
  17053. */
  17054. QueryList_.prototype.destroy = /**
  17055. * @return {?}
  17056. */
  17057. function () { throw new Error('Method not implemented.'); };
  17058. return QueryList_;
  17059. }());
  17060. /**
  17061. * @param {?} query
  17062. * @return {?}
  17063. */
  17064. /**
  17065. * @fileoverview added by tsickle
  17066. * @suppress {checkTypes} checked by tsc
  17067. */
  17068. /**
  17069. * @license
  17070. * Copyright Google Inc. All Rights Reserved.
  17071. *
  17072. * Use of this source code is governed by an MIT-style license that can be
  17073. * found in the LICENSE file at https://angular.io/license
  17074. */
  17075. /** @enum {number} */
  17076. var RendererStyleFlags3 = {
  17077. Important: 1,
  17078. DashCase: 2,
  17079. };
  17080. RendererStyleFlags3[RendererStyleFlags3.Important] = "Important";
  17081. RendererStyleFlags3[RendererStyleFlags3.DashCase] = "DashCase";
  17082. /**
  17083. * Object Oriented style of API needed to create elements and text nodes.
  17084. *
  17085. * This is the native browser API style, e.g. operations are methods on individual objects
  17086. * like HTMLElement. With this style, no additional code is needed as a facade
  17087. * (reducing payload size).
  17088. *
  17089. * @record
  17090. */
  17091. /**
  17092. * Procedural style of API needed to create elements and text nodes.
  17093. *
  17094. * In non-native browser environments (e.g. platforms such as web-workers), this is the
  17095. * facade that enables element manipulation. This also facilitates backwards compatibility
  17096. * with Renderer2.
  17097. * @record
  17098. */
  17099. /**
  17100. * @record
  17101. */
  17102. var domRendererFactory3 = {
  17103. createRenderer: function (hostElement, rendererType) { return document; }
  17104. };
  17105. /**
  17106. * Subset of API needed for appending elements and text nodes.
  17107. * @record
  17108. */
  17109. /**
  17110. * Subset of API needed for writing attributes, properties, and setting up
  17111. * listeners on Element.
  17112. * @record
  17113. */
  17114. /**
  17115. * @record
  17116. */
  17117. /**
  17118. * @record
  17119. */
  17120. /**
  17121. * @record
  17122. */
  17123. /**
  17124. * @record
  17125. */
  17126. /**
  17127. * @fileoverview added by tsickle
  17128. * @suppress {checkTypes} checked by tsc
  17129. */
  17130. /**
  17131. * @license
  17132. * Copyright Google Inc. All Rights Reserved.
  17133. *
  17134. * Use of this source code is governed by an MIT-style license that can be
  17135. * found in the LICENSE file at https://angular.io/license
  17136. */
  17137. /**
  17138. * Directive (D) sets a property on all component instances using this constant as a key and the
  17139. * component's host node (LElement) as the value. This is used in methods like detectChanges to
  17140. * facilitate jumping from an instance to the host node.
  17141. */
  17142. var NG_HOST_SYMBOL = '__ngHostLNode__';
  17143. /**
  17144. * This property gets set before entering a template.
  17145. *
  17146. * This renderer can be one of two varieties of Renderer3:
  17147. *
  17148. * - ObjectedOrientedRenderer3
  17149. *
  17150. * This is the native browser API style, e.g. operations are methods on individual objects
  17151. * like HTMLElement. With this style, no additional code is needed as a facade (reducing payload
  17152. * size).
  17153. *
  17154. * - ProceduralRenderer3
  17155. *
  17156. * In non-native browser environments (e.g. platforms such as web-workers), this is the facade
  17157. * that enables element manipulation. This also facilitates backwards compatibility with
  17158. * Renderer2.
  17159. */
  17160. var renderer;
  17161. var rendererFactory;
  17162. /**
  17163. * Used to set the parent property when nodes are created.
  17164. */
  17165. var previousOrParentNode;
  17166. /**
  17167. * If `isParent` is:
  17168. * - `true`: then `previousOrParentNode` points to a parent node.
  17169. * - `false`: then `previousOrParentNode` points to previous node (sibling).
  17170. */
  17171. var isParent;
  17172. /**
  17173. * The current template's static data (shared between all templates of a
  17174. * given type).
  17175. *
  17176. * Each node's static data is stored at the same index that it's stored
  17177. * in the data array. Any nodes that do not have static data store a null
  17178. * value to avoid a sparse array.
  17179. */
  17180. var ngStaticData;
  17181. /**
  17182. * State of the current view being processed.
  17183. */
  17184. var currentView;
  17185. // The initialization has to be after the `let`, otherwise `createViewState` can't see `let`.
  17186. currentView = createViewState(/** @type {?} */ ((null)), /** @type {?} */ ((null)), []);
  17187. var currentQuery;
  17188. /**
  17189. * This property gets set before entering a template.
  17190. */
  17191. var creationMode;
  17192. /**
  17193. * An array of nodes (text, element, container, etc), their bindings, and
  17194. * any local variables that need to be stored between invocations.
  17195. */
  17196. var data;
  17197. /**
  17198. * Points to the next binding index to read or write to.
  17199. */
  17200. var bindingIndex;
  17201. /**
  17202. * When a view is destroyed, listeners need to be released
  17203. * and onDestroy callbacks need to be called. This cleanup array
  17204. * stores both listener data (in chunks of 4) and onDestroy data
  17205. * (in chunks of 2), as they'll be processed at the same time.
  17206. *
  17207. * If it's a listener being stored:
  17208. * 1st index is: event name to remove
  17209. * 2nd index is: native element
  17210. * 3rd index is: listener function
  17211. * 4th index is: useCapture boolean
  17212. *
  17213. * If it's an onDestroy function:
  17214. * 1st index is: onDestroy function
  17215. * 2nd index is: context for function
  17216. */
  17217. var cleanup;
  17218. /**
  17219. * Index in the data array at which view hooks begin to be stored.
  17220. */
  17221. var viewHookStartIndex;
  17222. /**
  17223. * Swap the current state with a new state.
  17224. *
  17225. * For performance reasons we store the state in the top level of the module.
  17226. * This way we minimize the number of properties to read. Whenever a new view
  17227. * is entered we have to store the state for later, and when the view is
  17228. * exited the state has to be restored
  17229. *
  17230. * @param {?} newViewState New state to become active
  17231. * @param {?} host Element to which the View is a child of
  17232. * @return {?} the previous state;
  17233. */
  17234. function enterView(newViewState, host) {
  17235. var /** @type {?} */ oldViewState = currentView;
  17236. data = newViewState.data;
  17237. bindingIndex = newViewState.bindingStartIndex || 0;
  17238. ngStaticData = newViewState.ngStaticData;
  17239. creationMode = newViewState.creationMode;
  17240. viewHookStartIndex = newViewState.viewHookStartIndex;
  17241. cleanup = newViewState.cleanup;
  17242. renderer = newViewState.renderer;
  17243. if (host != null) {
  17244. previousOrParentNode = host;
  17245. isParent = true;
  17246. }
  17247. currentView = newViewState;
  17248. return /** @type {?} */ ((oldViewState));
  17249. }
  17250. /**
  17251. * Used in lieu of enterView to make it clear when we are exiting a child view. This makes
  17252. * the direction of traversal (up or down the view tree) a bit clearer.
  17253. * @param {?} newViewState
  17254. * @return {?}
  17255. */
  17256. function leaveView(newViewState) {
  17257. executeViewHooks();
  17258. enterView(newViewState, null);
  17259. }
  17260. /**
  17261. * @param {?} viewId
  17262. * @param {?} renderer
  17263. * @param {?} ngStaticData
  17264. * @return {?}
  17265. */
  17266. function createViewState(viewId, renderer, ngStaticData) {
  17267. var /** @type {?} */ newView = {
  17268. parent: currentView,
  17269. id: viewId,
  17270. // -1 for component views
  17271. node: /** @type {?} */ ((null)),
  17272. // until we initialize it in createNode.
  17273. data: [],
  17274. ngStaticData: ngStaticData,
  17275. cleanup: null,
  17276. renderer: renderer,
  17277. child: null,
  17278. tail: null,
  17279. next: null,
  17280. bindingStartIndex: null,
  17281. creationMode: true,
  17282. viewHookStartIndex: null
  17283. };
  17284. return newView;
  17285. }
  17286. /**
  17287. * @param {?} index
  17288. * @param {?} type
  17289. * @param {?} native
  17290. * @param {?=} state
  17291. * @return {?}
  17292. */
  17293. function createLNode(index, type, native, state) {
  17294. var /** @type {?} */ parent = isParent ? previousOrParentNode :
  17295. previousOrParentNode && /** @type {?} */ (previousOrParentNode.parent);
  17296. var /** @type {?} */ query = (isParent ? currentQuery : previousOrParentNode && previousOrParentNode.query) ||
  17297. parent && parent.query && parent.query.child();
  17298. var /** @type {?} */ isState = state != null;
  17299. var /** @type {?} */ node = {
  17300. flags: type,
  17301. native: /** @type {?} */ (native),
  17302. view: currentView,
  17303. parent: /** @type {?} */ (parent),
  17304. child: null,
  17305. next: null,
  17306. nodeInjector: parent ? parent.nodeInjector : null,
  17307. data: isState ? /** @type {?} */ (state) : null,
  17308. query: query,
  17309. staticData: null
  17310. };
  17311. if ((type & 2 /* ViewOrElement */) === 2 /* ViewOrElement */ && isState) {
  17312. // Bit of a hack to bust through the readonly because there is a circular dep between
  17313. // ViewState and LNode.
  17314. ngDevMode && assertEqual((/** @type {?} */ (state)).node, null, 'viewState.node');
  17315. (/** @type {?} */ ((state))).node = node;
  17316. }
  17317. if (index != null) {
  17318. // We are Element or Container
  17319. ngDevMode && assertEqual(data.length, index, 'data.length not in sequence');
  17320. data[index] = node;
  17321. // Every node adds a value to the static data array to avoid a sparse array
  17322. if (index >= ngStaticData.length) {
  17323. ngStaticData[index] = null;
  17324. }
  17325. else {
  17326. node.staticData = /** @type {?} */ (ngStaticData[index]);
  17327. }
  17328. // Now link ourselves into the tree.
  17329. if (isParent) {
  17330. currentQuery = null;
  17331. if (previousOrParentNode.view === currentView ||
  17332. (previousOrParentNode.flags & 3 /* TYPE_MASK */) === 2 /* View */) {
  17333. // We are in the same view, which means we are adding content node to the parent View.
  17334. ngDevMode && assertEqual(previousOrParentNode.child, null, 'previousNode.child');
  17335. previousOrParentNode.child = node;
  17336. }
  17337. else {
  17338. // We are adding component view, so we don't link parent node child to this node.
  17339. }
  17340. }
  17341. else if (previousOrParentNode) {
  17342. ngDevMode && assertEqual(previousOrParentNode.next, null, 'previousNode.next');
  17343. previousOrParentNode.next = node;
  17344. }
  17345. }
  17346. previousOrParentNode = node;
  17347. isParent = true;
  17348. return node;
  17349. }
  17350. /**
  17351. * Resets the application state.
  17352. * @return {?}
  17353. */
  17354. function resetApplicationState() {
  17355. isParent = false;
  17356. previousOrParentNode = /** @type {?} */ ((null));
  17357. }
  17358. /**
  17359. *
  17360. * @template T
  17361. * @param {?} hostNode
  17362. * @param {?} template Template function with the instructions.
  17363. * @param {?} context to pass into the template.
  17364. * @param {?} providedRendererFactory
  17365. * @param {?} host Existing node to render into.
  17366. * @return {?}
  17367. */
  17368. /**
  17369. * @template T
  17370. * @param {?} node
  17371. * @param {?} viewState
  17372. * @param {?} componentOrContext
  17373. * @param {?=} template
  17374. * @return {?}
  17375. */
  17376. function renderComponentOrTemplate(node, viewState, componentOrContext, template) {
  17377. var /** @type {?} */ oldView = enterView(viewState, node);
  17378. try {
  17379. if (rendererFactory.begin) {
  17380. rendererFactory.begin();
  17381. }
  17382. if (template) {
  17383. ngStaticData = template.ngStaticData || (template.ngStaticData = /** @type {?} */ ([]));
  17384. template(/** @type {?} */ ((componentOrContext)), creationMode);
  17385. }
  17386. else {
  17387. // Element was stored at 0 and directive was stored at 1 in renderComponent
  17388. // so to refresh the component, r() needs to be called with (1, 0)
  17389. (/** @type {?} */ (componentOrContext.constructor)).ngComponentDef.r(1, 0);
  17390. }
  17391. }
  17392. finally {
  17393. if (rendererFactory.end) {
  17394. rendererFactory.end();
  17395. }
  17396. viewState.creationMode = false;
  17397. leaveView(oldView);
  17398. }
  17399. }
  17400. /**
  17401. * @return {?}
  17402. */
  17403. /**
  17404. * Makes a directive public to the DI system by adding it to an injector's bloom filter.
  17405. *
  17406. * @param {?} def The definition of the directive to be made public
  17407. * @return {?}
  17408. */
  17409. /**
  17410. * Searches for an instance of the given directive type up the injector tree and returns
  17411. * that instance if found.
  17412. *
  17413. * If not found, it will propagate up to the next parent injector until the token
  17414. * is found or the top is reached.
  17415. *
  17416. * Usage example (in factory function):
  17417. *
  17418. * class SomeDirective {
  17419. * constructor(directive: DirectiveA) {}
  17420. *
  17421. * static ngDirectiveDef = defineDirective({
  17422. * type: SomeDirective,
  17423. * factory: () => new SomeDirective(inject(DirectiveA))
  17424. * });
  17425. * }
  17426. *
  17427. * @template T
  17428. * @param {?} token The directive type to search for
  17429. * @param {?=} flags Injection flags (e.g. CheckParent)
  17430. * @return {?} The instance found
  17431. */
  17432. /**
  17433. * Creates an ElementRef and stores it on the injector.
  17434. * Or, if the ElementRef already exists, retrieves the existing ElementRef.
  17435. *
  17436. * @return {?} The ElementRef instance to use
  17437. */
  17438. /**
  17439. * Creates a TemplateRef and stores it on the injector. Or, if the TemplateRef already
  17440. * exists, retrieves the existing TemplateRef.
  17441. *
  17442. * @template T
  17443. * @return {?} The TemplateRef instance to use
  17444. */
  17445. /**
  17446. * Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef
  17447. * already exists, retrieves the existing ViewContainerRef.
  17448. *
  17449. * @return {?} The ViewContainerRef instance to use
  17450. */
  17451. /**
  17452. * Create DOM element. The instruction must later be followed by `elementEnd()` call.
  17453. *
  17454. * @param {?} index Index of the element in the data array
  17455. * @param {?=} nameOrComponentDef Name of the DOM Node or `ComponentDef`.
  17456. * @param {?=} attrs Statically bound set of attributes to be written into the DOM element on creation.
  17457. * @param {?=} localName A name under which a given element is exported.
  17458. *
  17459. * Attributes are passed as an array of strings where elements with an even index hold an attribute
  17460. * name and elements with an odd index hold an attribute value, ex.:
  17461. * ['id', 'warning5', 'class', 'alert']
  17462. * @return {?}
  17463. */
  17464. function elementStart(index, nameOrComponentDef, attrs, localName) {
  17465. var /** @type {?} */ node;
  17466. var /** @type {?} */ native;
  17467. if (nameOrComponentDef == null) {
  17468. // native node retrieval - used for exporting elements as tpl local variables (<div #foo>)
  17469. var /** @type {?} */ node_1 = /** @type {?} */ ((data[index]));
  17470. native = node_1 && (/** @type {?} */ (node_1)).native;
  17471. }
  17472. else {
  17473. ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');
  17474. var /** @type {?} */ isHostElement = typeof nameOrComponentDef !== 'string';
  17475. var /** @type {?} */ name_1 = isHostElement ? (/** @type {?} */ (nameOrComponentDef)).tag : /** @type {?} */ (nameOrComponentDef);
  17476. if (name_1 === null) {
  17477. // TODO: future support for nameless components.
  17478. throw 'for now name is required';
  17479. }
  17480. else {
  17481. native = renderer.createElement(name_1);
  17482. var /** @type {?} */ componentView = null;
  17483. if (isHostElement) {
  17484. var /** @type {?} */ ngStaticData_1 = getTemplateStatic((/** @type {?} */ (nameOrComponentDef)).template);
  17485. componentView = addToViewTree(createViewState(-1, rendererFactory.createRenderer(native, (/** @type {?} */ (nameOrComponentDef)).rendererType), ngStaticData_1));
  17486. }
  17487. // Only component views should be added to the view tree directly. Embedded views are
  17488. // accessed through their containers because they may be removed / re-added later.
  17489. node = createLNode(index, 3 /* Element */, native, componentView);
  17490. if (node.staticData == null) {
  17491. ngDevMode && assertDataInRange(index - 1);
  17492. node.staticData = ngStaticData[index] =
  17493. createNodeStatic(name_1, attrs || null, null, localName || null);
  17494. }
  17495. if (attrs)
  17496. setUpAttributes(native, attrs);
  17497. appendChild(/** @type {?} */ ((node.parent)), native, currentView);
  17498. }
  17499. }
  17500. return native;
  17501. }
  17502. /**
  17503. * Gets static data from a template function or creates a new static
  17504. * data array if it doesn't already exist.
  17505. *
  17506. * @param {?} template The template from which to get static data
  17507. * @return {?} NgStaticData
  17508. */
  17509. function getTemplateStatic(template) {
  17510. return template.ngStaticData || (template.ngStaticData = /** @type {?} */ ([]));
  17511. }
  17512. /**
  17513. * @param {?} native
  17514. * @param {?} attrs
  17515. * @return {?}
  17516. */
  17517. function setUpAttributes(native, attrs) {
  17518. ngDevMode && assertEqual(attrs.length % 2, 0, 'attrs.length % 2');
  17519. var /** @type {?} */ isProceduralRenderer = (/** @type {?} */ (renderer)).setAttribute;
  17520. for (var /** @type {?} */ i = 0; i < attrs.length; i += 2) {
  17521. isProceduralRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer)).setAttribute))(native, attrs[i], attrs[i | 1]) :
  17522. native.setAttribute(attrs[i], attrs[i | 1]);
  17523. }
  17524. }
  17525. /**
  17526. * @param {?} text
  17527. * @param {?} token
  17528. * @return {?}
  17529. */
  17530. function createError(text, token) {
  17531. return new Error("Renderer: " + text + " [" + stringify$1(token) + "]");
  17532. }
  17533. /**
  17534. * Locates the host native element, used for bootstrapping existing nodes into rendering pipeline.
  17535. *
  17536. * @param {?} factory
  17537. * @param {?} elementOrSelector Render element or CSS selector to locate the element.
  17538. * @return {?}
  17539. */
  17540. function locateHostElement(factory, elementOrSelector) {
  17541. ngDevMode && assertDataInRange(-1);
  17542. rendererFactory = factory;
  17543. var /** @type {?} */ defaultRenderer = factory.createRenderer(null, null);
  17544. var /** @type {?} */ rNode = typeof elementOrSelector === 'string' ?
  17545. ((/** @type {?} */ (defaultRenderer)).selectRootElement ?
  17546. (/** @type {?} */ (defaultRenderer)).selectRootElement(elementOrSelector) : /** @type {?} */ (((/** @type {?} */ (defaultRenderer)).querySelector))(elementOrSelector)) :
  17547. elementOrSelector;
  17548. if (ngDevMode && !rNode) {
  17549. if (typeof elementOrSelector === 'string') {
  17550. throw createError('Host node with selector not found:', elementOrSelector);
  17551. }
  17552. else {
  17553. throw createError('Host node is required:', elementOrSelector);
  17554. }
  17555. }
  17556. return rNode;
  17557. }
  17558. /**
  17559. * Creates the host LNode..
  17560. *
  17561. * @param {?} rNode Render host element.
  17562. * @param {?} def
  17563. * @return {?}
  17564. */
  17565. function hostElement(rNode, def) {
  17566. resetApplicationState();
  17567. createLNode(0, 3 /* Element */, rNode, createViewState(-1, renderer, getTemplateStatic(def.template)));
  17568. }
  17569. /**
  17570. * Adds an event listener to the current node.
  17571. *
  17572. * If an output exists on one of the node's directives, it also subscribes to the output
  17573. * and saves the subscription for later cleanup.
  17574. *
  17575. * @param {?} eventName Name of the event
  17576. * @param {?} listener The function to be called when event emits
  17577. * @param {?=} useCapture Whether or not to use capture in event listener.
  17578. * @return {?}
  17579. */
  17580. /**
  17581. * Mark the end of the element.
  17582. * @return {?}
  17583. */
  17584. function elementEnd() {
  17585. if (isParent) {
  17586. isParent = false;
  17587. }
  17588. else {
  17589. ngDevMode && assertHasParent();
  17590. previousOrParentNode = /** @type {?} */ ((previousOrParentNode.parent));
  17591. }
  17592. ngDevMode && assertNodeType(previousOrParentNode, 3 /* Element */);
  17593. var /** @type {?} */ query = previousOrParentNode.query;
  17594. query && query.addNode(previousOrParentNode);
  17595. }
  17596. /**
  17597. * Update an attribute on an Element. This is used with a `bind` instruction.
  17598. *
  17599. * @param {?} index The index of the element to update in the data array
  17600. * @param {?} attrName Name of attribute. Because it is going to DOM, this is not subject to
  17601. * renaming as port of minification.
  17602. * @param {?} value Value to write. This value will go through stringification.
  17603. * @return {?}
  17604. */
  17605. /**
  17606. * Update a property on an Element.
  17607. *
  17608. * If the property name also exists as an input property on one of the element's directives,
  17609. * the component property will be set instead of the element property. This check must
  17610. * be conducted at runtime so child components that add new \@Inputs don't have to be re-compiled.
  17611. *
  17612. * @template T
  17613. * @param {?} index The index of the element to update in the data array
  17614. * @param {?} propName Name of property. Because it is going to DOM, this is not subject to
  17615. * renaming as part of minification.
  17616. * @param {?} value New value to write.
  17617. * @return {?}
  17618. */
  17619. function elementProperty(index, propName, value) {
  17620. if (value === NO_CHANGE)
  17621. return;
  17622. var /** @type {?} */ node = /** @type {?} */ (data[index]);
  17623. var /** @type {?} */ staticData = /** @type {?} */ ((node.staticData));
  17624. // if staticData.inputs is undefined, a listener has created output staticData, but inputs haven't
  17625. // yet been checked
  17626. if (staticData.inputs === undefined) {
  17627. // mark inputs as checked
  17628. staticData.inputs = null;
  17629. staticData = generatePropertyAliases(node.flags, staticData, true);
  17630. }
  17631. var /** @type {?} */ inputData = staticData.inputs;
  17632. var /** @type {?} */ dataValue;
  17633. if (inputData && (dataValue = inputData[propName])) {
  17634. setInputsForProperty(dataValue, value);
  17635. }
  17636. else {
  17637. var /** @type {?} */ native = node.native;
  17638. (/** @type {?} */ (renderer)).setProperty ?
  17639. (/** @type {?} */ (renderer)).setProperty(native, propName, value) :
  17640. native.setProperty ? native.setProperty(propName, value) :
  17641. (/** @type {?} */ (native))[propName] = value;
  17642. }
  17643. }
  17644. /**
  17645. * Constructs a LNodeStatic object from the arguments.
  17646. *
  17647. * @param {?} tagName
  17648. * @param {?} attrs
  17649. * @param {?} containerStatic
  17650. * @param {?} localName
  17651. * @return {?} the LNodeStatic object
  17652. */
  17653. function createNodeStatic(tagName, attrs, containerStatic, localName) {
  17654. return {
  17655. tagName: tagName,
  17656. attrs: attrs,
  17657. localNames: localName ? [localName, -1] : null,
  17658. initialInputs: undefined,
  17659. inputs: undefined,
  17660. outputs: undefined,
  17661. containerStatic: containerStatic
  17662. };
  17663. }
  17664. /**
  17665. * Given a list of directive indices and minified input names, sets the
  17666. * input properties on the corresponding directives.
  17667. * @param {?} inputs
  17668. * @param {?} value
  17669. * @return {?}
  17670. */
  17671. function setInputsForProperty(inputs, value) {
  17672. for (var /** @type {?} */ i = 0; i < inputs.length; i += 2) {
  17673. ngDevMode && assertDataInRange(/** @type {?} */ (inputs[i]));
  17674. data[/** @type {?} */ (inputs[i])][inputs[i | 1]] = value;
  17675. }
  17676. }
  17677. /**
  17678. * This function consolidates all the inputs or outputs defined by directives
  17679. * on this node into one object and stores it in ngStaticData so it can
  17680. * be shared between all templates of this type.
  17681. *
  17682. * @param {?} flags
  17683. * @param {?} data
  17684. * @param {?=} isInputData
  17685. * @return {?}
  17686. */
  17687. function generatePropertyAliases(flags, data, isInputData) {
  17688. if (isInputData === void 0) { isInputData = false; }
  17689. var /** @type {?} */ start = flags >> 12;
  17690. var /** @type {?} */ size = (flags & 4092 /* SIZE_MASK */) >> 2;
  17691. for (var /** @type {?} */ i = start, /** @type {?} */ ii = start + size; i < ii; i++) {
  17692. var /** @type {?} */ directiveDef = /** @type {?} */ (((ngStaticData))[i]);
  17693. var /** @type {?} */ propertyAliasMap = isInputData ? directiveDef.inputs : directiveDef.outputs;
  17694. for (var /** @type {?} */ publicName in propertyAliasMap) {
  17695. if (propertyAliasMap.hasOwnProperty(publicName)) {
  17696. var /** @type {?} */ internalName = propertyAliasMap[publicName];
  17697. var /** @type {?} */ staticDirData = isInputData ? (data.inputs || (data.inputs = {})) :
  17698. (data.outputs || (data.outputs = {}));
  17699. var /** @type {?} */ hasProperty = staticDirData.hasOwnProperty(publicName);
  17700. hasProperty ? staticDirData[publicName].push(i, internalName) :
  17701. (staticDirData[publicName] = [i, internalName]);
  17702. }
  17703. }
  17704. }
  17705. return data;
  17706. }
  17707. /**
  17708. * Add or remove a class in a classList.
  17709. *
  17710. * This instruction is meant to handle the [class.foo]="exp" case
  17711. *
  17712. * @template T
  17713. * @param {?} index The index of the element to update in the data array
  17714. * @param {?} className Name of class to toggle. Because it is going to DOM, this is not subject to
  17715. * renaming as part of minification.
  17716. * @param {?} value A value indicating if a given class should be added or removed.
  17717. * @return {?}
  17718. */
  17719. /**
  17720. * Update a given style on an Element.
  17721. *
  17722. * @template T
  17723. * @param {?} index Index of the element to change in the data array
  17724. * @param {?} styleName Name of property. Because it is going to DOM this is not subject to
  17725. * renaming as part of minification.
  17726. * @param {?} value New value to write (null to remove).
  17727. * @param {?=} suffix Suffix to add to style's value (optional).
  17728. * @return {?}
  17729. */
  17730. function elementStyle(index, styleName, value, suffix) {
  17731. if (value !== NO_CHANGE) {
  17732. var /** @type {?} */ lElement = /** @type {?} */ (data[index]);
  17733. if (value == null) {
  17734. (/** @type {?} */ (renderer)).removeStyle ?
  17735. (/** @type {?} */ (renderer))
  17736. .removeStyle(lElement.native, styleName, RendererStyleFlags3.DashCase) :
  17737. lElement.native.style.removeProperty(styleName);
  17738. }
  17739. else {
  17740. (/** @type {?} */ (renderer)).setStyle ?
  17741. (/** @type {?} */ (renderer))
  17742. .setStyle(lElement.native, styleName, suffix ? stringify$1(value) + suffix : stringify$1(value), RendererStyleFlags3.DashCase) :
  17743. lElement.native.style.setProperty(styleName, suffix ? stringify$1(value) + suffix : stringify$1(value));
  17744. }
  17745. }
  17746. }
  17747. /**
  17748. * Create static text node
  17749. *
  17750. * @param {?} index Index of the node in the data array.
  17751. * @param {?=} value Value to write. This value will be stringified.
  17752. * If value is not provided than the actual creation of the text node is delayed.
  17753. * @return {?}
  17754. */
  17755. function text(index, value) {
  17756. ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');
  17757. var /** @type {?} */ textNode = value != null ?
  17758. ((/** @type {?} */ (renderer)).createText ?
  17759. (/** @type {?} */ (renderer)).createText(stringify$1(value)) : /** @type {?} */ (((/** @type {?} */ (renderer)).createTextNode))(stringify$1(value))) :
  17760. null;
  17761. var /** @type {?} */ node = createLNode(index, 3 /* Element */, textNode);
  17762. // Text nodes are self closing.
  17763. isParent = false;
  17764. appendChild(/** @type {?} */ ((node.parent)), textNode, currentView);
  17765. }
  17766. /**
  17767. * Create text node with binding
  17768. * Bindings should be handled externally with the proper bind(1-8) method
  17769. *
  17770. * @template T
  17771. * @param {?} index Index of the node in the data array.
  17772. * @param {?} value Stringified value to write.
  17773. * @return {?}
  17774. */
  17775. function textBinding(index, value) {
  17776. // TODO(misko): I don't think index < nodes.length check is needed here.
  17777. var /** @type {?} */ existingNode = index < data.length && /** @type {?} */ (data[index]);
  17778. if (existingNode && existingNode.native) {
  17779. // If DOM node exists and value changed, update textContent
  17780. value !== NO_CHANGE &&
  17781. ((/** @type {?} */ (renderer)).setValue ?
  17782. (/** @type {?} */ (renderer)).setValue(existingNode.native, stringify$1(value)) :
  17783. existingNode.native.textContent = stringify$1(value));
  17784. }
  17785. else if (existingNode) {
  17786. // Node was created but DOM node creation was delayed. Create and append now.
  17787. existingNode.native =
  17788. ((/** @type {?} */ (renderer)).createText ?
  17789. (/** @type {?} */ (renderer)).createText(stringify$1(value)) : /** @type {?} */ (((/** @type {?} */ (renderer)).createTextNode))(stringify$1(value)));
  17790. insertChild(existingNode, currentView);
  17791. }
  17792. else {
  17793. text(index, value);
  17794. }
  17795. }
  17796. /**
  17797. * @template T
  17798. * @param {?} index
  17799. * @param {?=} directive
  17800. * @param {?=} directiveDef
  17801. * @param {?=} localName
  17802. * @return {?}
  17803. */
  17804. function directive(index, directive, directiveDef, localName) {
  17805. var /** @type {?} */ instance;
  17806. if (directive == null) {
  17807. // return existing
  17808. ngDevMode && assertDataInRange(index);
  17809. instance = data[index];
  17810. }
  17811. else {
  17812. ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');
  17813. ngDevMode && assertPreviousIsParent();
  17814. var /** @type {?} */ flags = /** @type {?} */ ((previousOrParentNode)).flags;
  17815. var /** @type {?} */ size = flags & 4092;
  17816. if (size === 0) {
  17817. flags =
  17818. (index << 12 /* INDX_SHIFT */) | 4 /* SIZE_SKIP */ | flags & 3 /* TYPE_MASK */;
  17819. }
  17820. else {
  17821. flags += 4 /* SIZE_SKIP */;
  17822. } /** @type {?} */
  17823. ((previousOrParentNode)).flags = flags;
  17824. ngDevMode && assertDataInRange(index - 1);
  17825. Object.defineProperty(directive, NG_HOST_SYMBOL, { enumerable: false, value: previousOrParentNode });
  17826. data[index] = instance = directive;
  17827. if (index >= ngStaticData.length) {
  17828. ngStaticData[index] = /** @type {?} */ ((directiveDef));
  17829. if (localName) {
  17830. ngDevMode &&
  17831. assertNotNull(previousOrParentNode.staticData, 'previousOrParentNode.staticData');
  17832. var /** @type {?} */ nodeStaticData = /** @type {?} */ ((/** @type {?} */ ((previousOrParentNode)).staticData));
  17833. (nodeStaticData.localNames || (nodeStaticData.localNames = [])).push(localName, index);
  17834. }
  17835. }
  17836. var /** @type {?} */ diPublic_1 = /** @type {?} */ ((directiveDef)).diPublic;
  17837. if (diPublic_1) {
  17838. diPublic_1(/** @type {?} */ ((directiveDef)));
  17839. }
  17840. var /** @type {?} */ staticData = /** @type {?} */ ((previousOrParentNode.staticData));
  17841. if (staticData && staticData.attrs) {
  17842. setInputsFromAttrs(instance, /** @type {?} */ ((directiveDef)).inputs, staticData);
  17843. }
  17844. }
  17845. return instance;
  17846. }
  17847. /**
  17848. * Sets initial input properties on directive instances from attribute data
  17849. *
  17850. * @template T
  17851. * @param {?} instance Instance of the directive on which to set the initial inputs
  17852. * @param {?} inputs The list of inputs from the directive def
  17853. * @param {?} staticData The static data for this node
  17854. * @return {?}
  17855. */
  17856. function setInputsFromAttrs(instance, inputs, staticData) {
  17857. var /** @type {?} */ directiveIndex = ((previousOrParentNode.flags & 4092 /* SIZE_MASK */) >> 2 /* SIZE_SHIFT */) - 1;
  17858. var /** @type {?} */ initialInputData = /** @type {?} */ (staticData.initialInputs);
  17859. if (initialInputData === undefined || directiveIndex >= initialInputData.length) {
  17860. initialInputData = generateInitialInputs(directiveIndex, inputs, staticData);
  17861. }
  17862. var /** @type {?} */ initialInputs = initialInputData[directiveIndex];
  17863. if (initialInputs) {
  17864. for (var /** @type {?} */ i = 0; i < initialInputs.length; i += 2) {
  17865. (/** @type {?} */ (instance))[initialInputs[i]] = initialInputs[i | 1];
  17866. }
  17867. }
  17868. }
  17869. /**
  17870. * Generates initialInputData for a node and stores it in the template's static storage
  17871. * so subsequent template invocations don't have to recalculate it.
  17872. *
  17873. * initialInputData is an array containing values that need to be set as input properties
  17874. * for directives on this node, but only once on creation. We need this array to support
  17875. * the case where you set an \@Input property of a directive using attribute-like syntax.
  17876. * e.g. if you have a `name` \@Input, you can set it once like this:
  17877. *
  17878. * <my-component name="Bess"></my-component>
  17879. *
  17880. * @param {?} directiveIndex Index to store the initial input data
  17881. * @param {?} inputs The list of inputs from the directive def
  17882. * @param {?} staticData The static data on this node
  17883. * @return {?}
  17884. */
  17885. function generateInitialInputs(directiveIndex, inputs, staticData) {
  17886. var /** @type {?} */ initialInputData = staticData.initialInputs || (staticData.initialInputs = []);
  17887. initialInputData[directiveIndex] = null;
  17888. var /** @type {?} */ attrs = /** @type {?} */ ((staticData.attrs));
  17889. for (var /** @type {?} */ i = 0; i < attrs.length; i += 2) {
  17890. var /** @type {?} */ attrName = attrs[i];
  17891. var /** @type {?} */ minifiedInputName = inputs[attrName];
  17892. if (minifiedInputName !== undefined) {
  17893. var /** @type {?} */ inputsToStore = initialInputData[directiveIndex] || (initialInputData[directiveIndex] = []);
  17894. inputsToStore.push(minifiedInputName, attrs[i | 1]);
  17895. }
  17896. }
  17897. return initialInputData;
  17898. }
  17899. /**
  17900. * @param {?} lifecycle
  17901. * @param {?=} self
  17902. * @param {?=} method
  17903. * @return {?}
  17904. */
  17905. /**
  17906. * Iterates over view hook functions and calls them.
  17907. * @return {?}
  17908. */
  17909. function executeViewHooks() {
  17910. if (viewHookStartIndex == null)
  17911. return;
  17912. // Instead of using splice to remove init hooks after their first run (expensive), we
  17913. // shift over the AFTER_CHECKED hooks as we call them and truncate once at the end.
  17914. var /** @type {?} */ checkIndex = /** @type {?} */ (viewHookStartIndex);
  17915. var /** @type {?} */ writeIndex = checkIndex;
  17916. while (checkIndex < data.length) {
  17917. // Call lifecycle hook with its context
  17918. data[checkIndex + 1].call(data[checkIndex + 2]);
  17919. if (data[checkIndex] === 16 /* AFTER_VIEW_CHECKED */) {
  17920. // We know if the writeIndex falls behind that there is an init that needs to
  17921. // be overwritten.
  17922. if (writeIndex < checkIndex) {
  17923. data[writeIndex] = data[checkIndex];
  17924. data[writeIndex + 1] = data[checkIndex + 1];
  17925. data[writeIndex + 2] = data[checkIndex + 2];
  17926. }
  17927. writeIndex += 3;
  17928. }
  17929. checkIndex += 3;
  17930. }
  17931. // Truncate once at the writeIndex
  17932. data.length = writeIndex;
  17933. }
  17934. /**
  17935. * Creates an LContainer.
  17936. *
  17937. * Only `LView`s can go into `LContainer`.
  17938. *
  17939. * @param {?} index The index of the container in the data array
  17940. * @param {?=} template Optional inline template
  17941. * @param {?=} tagName The name of the container element, if applicable
  17942. * @param {?=} attrs The attrs attached to the container, if applicable
  17943. * @param {?=} localName
  17944. * @return {?}
  17945. */
  17946. function containerStart(index, template, tagName, attrs, localName) {
  17947. ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');
  17948. // If the direct parent of the container is a view, its views (including its comment)
  17949. // will need to be added through insertView() when its parent view is being inserted.
  17950. // For now, it is marked "headless" so we know to append its views later.
  17951. var /** @type {?} */ comment = renderer.createComment(ngDevMode ? 'container' : '');
  17952. var /** @type {?} */ renderParent = null;
  17953. var /** @type {?} */ currentParent = isParent ? previousOrParentNode : /** @type {?} */ ((previousOrParentNode.parent));
  17954. ngDevMode && assertNotEqual(currentParent, null, 'currentParent');
  17955. if (appendChild(currentParent, comment, currentView)) {
  17956. // we are adding to an Element which is either:
  17957. // - Not a component (will not be re-projected, just added)
  17958. // - View of the Component
  17959. renderParent = /** @type {?} */ (currentParent);
  17960. }
  17961. var /** @type {?} */ node = createLNode(index, 0 /* Container */, comment, /** @type {?} */ ({
  17962. views: [],
  17963. nextIndex: 0, renderParent: renderParent,
  17964. template: template == null ? null : template,
  17965. next: null,
  17966. parent: currentView
  17967. }));
  17968. if (node.staticData == null) {
  17969. node.staticData = ngStaticData[index] =
  17970. createNodeStatic(tagName || null, attrs || null, [], localName || null);
  17971. }
  17972. // Containers are added to the current view tree instead of their embedded views
  17973. // because views can be removed and re-inserted.
  17974. addToViewTree(node.data);
  17975. }
  17976. /**
  17977. * @return {?}
  17978. */
  17979. function containerEnd() {
  17980. if (isParent) {
  17981. isParent = false;
  17982. }
  17983. else {
  17984. ngDevMode && assertHasParent();
  17985. previousOrParentNode = /** @type {?} */ ((previousOrParentNode.parent));
  17986. }
  17987. ngDevMode && assertNodeType(previousOrParentNode, 0 /* Container */);
  17988. var /** @type {?} */ query = previousOrParentNode.query;
  17989. query && query.addNode(previousOrParentNode);
  17990. }
  17991. /**
  17992. * Sets a container up to receive views.
  17993. *
  17994. * @param {?} index The index of the container in the data array
  17995. * @return {?}
  17996. */
  17997. function containerRefreshStart(index) {
  17998. ngDevMode && assertDataInRange(index);
  17999. previousOrParentNode = /** @type {?} */ (data[index]);
  18000. ngDevMode && assertNodeType(previousOrParentNode, 0 /* Container */);
  18001. isParent = true;
  18002. (/** @type {?} */ (previousOrParentNode)).data.nextIndex = 0;
  18003. }
  18004. /**
  18005. * Marks the end of the LContainer.
  18006. *
  18007. * Marking the end of ViewContainer is the time when to child Views get inserted or removed.
  18008. * @return {?}
  18009. */
  18010. function containerRefreshEnd() {
  18011. if (isParent) {
  18012. isParent = false;
  18013. }
  18014. else {
  18015. ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);
  18016. ngDevMode && assertHasParent();
  18017. previousOrParentNode = /** @type {?} */ ((previousOrParentNode.parent));
  18018. }
  18019. ngDevMode && assertNodeType(previousOrParentNode, 0 /* Container */);
  18020. var /** @type {?} */ container = /** @type {?} */ (previousOrParentNode);
  18021. ngDevMode && assertNodeType(container, 0 /* Container */);
  18022. var /** @type {?} */ nextIndex = container.data.nextIndex;
  18023. while (nextIndex < container.data.views.length) {
  18024. // remove extra view.
  18025. removeView(container, nextIndex);
  18026. }
  18027. }
  18028. /**
  18029. * Creates an LView.
  18030. *
  18031. * @param {?} viewBlockId The ID of this view
  18032. * @return {?} Whether or not this view is in creation mode
  18033. */
  18034. function viewStart(viewBlockId) {
  18035. var /** @type {?} */ container = /** @type {?} */ ((isParent ? previousOrParentNode : /** @type {?} */ ((previousOrParentNode.parent))));
  18036. ngDevMode && assertNodeType(container, 0 /* Container */);
  18037. var /** @type {?} */ containerState = container.data;
  18038. var /** @type {?} */ views = containerState.views;
  18039. var /** @type {?} */ existingView = !creationMode && containerState.nextIndex < views.length && views[containerState.nextIndex];
  18040. var /** @type {?} */ viewUpdateMode = existingView && viewBlockId === (/** @type {?} */ (existingView)).data.id;
  18041. if (viewUpdateMode) {
  18042. previousOrParentNode = views[containerState.nextIndex++];
  18043. ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);
  18044. isParent = true;
  18045. enterView((/** @type {?} */ (existingView)).data, /** @type {?} */ (previousOrParentNode));
  18046. }
  18047. else {
  18048. // When we create a new View, we always reset the state of the instructions.
  18049. var /** @type {?} */ newViewState = createViewState(viewBlockId, renderer, initViewStaticData(viewBlockId, container));
  18050. enterView(newViewState, createLNode(null, 2 /* View */, null, newViewState));
  18051. containerState.nextIndex++;
  18052. }
  18053. return !viewUpdateMode;
  18054. }
  18055. /**
  18056. * Initialize the static data for the active view.
  18057. *
  18058. * Each embedded view needs to set the global ngStaticData variable to the static data for
  18059. * that view. Otherwise, the view's static data for a particular node would overwrite
  18060. * the staticdata for a node in the view above it with the same index (since it's in the
  18061. * same template).
  18062. *
  18063. * @param {?} viewIndex The index of the view's static data in containerStatic
  18064. * @param {?} parent The parent container in which to look for the view's static data
  18065. * @return {?} NgStaticData
  18066. */
  18067. function initViewStaticData(viewIndex, parent) {
  18068. ngDevMode && assertNodeType(parent, 0 /* Container */);
  18069. var /** @type {?} */ containerStatic = (/** @type {?} */ (((parent)).staticData)).containerStatic;
  18070. if (viewIndex >= containerStatic.length || containerStatic[viewIndex] == null) {
  18071. containerStatic[viewIndex] = [];
  18072. }
  18073. return containerStatic[viewIndex];
  18074. }
  18075. /**
  18076. * Marks the end of the LView.
  18077. * @return {?}
  18078. */
  18079. function viewEnd() {
  18080. isParent = false;
  18081. var /** @type {?} */ viewNode = previousOrParentNode = /** @type {?} */ (currentView.node);
  18082. var /** @type {?} */ container = /** @type {?} */ (previousOrParentNode.parent);
  18083. ngDevMode && assertNodeType(viewNode, 2 /* View */);
  18084. ngDevMode && assertNodeType(container, 0 /* Container */);
  18085. var /** @type {?} */ containerState = container.data;
  18086. var /** @type {?} */ previousView = containerState.nextIndex <= containerState.views.length ? /** @type {?} */ (containerState.views[containerState.nextIndex - 1]) :
  18087. null;
  18088. var /** @type {?} */ viewIdChanged = previousView == null ? true : previousView.data.id !== viewNode.data.id;
  18089. if (viewIdChanged) {
  18090. insertView(container, viewNode, containerState.nextIndex - 1);
  18091. currentView.creationMode = false;
  18092. }
  18093. leaveView(/** @type {?} */ ((/** @type {?} */ ((currentView)).parent)));
  18094. ngDevMode && assertEqual(isParent, false, 'isParent');
  18095. ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);
  18096. }
  18097. /**
  18098. * Refreshes the component view.
  18099. *
  18100. * In other words, enters the component's view and processes it to update bindings, queries, etc.
  18101. *
  18102. * @param directiveIndex
  18103. * @param elementIndex
  18104. * @param template
  18105. */
  18106. var componentRefresh = function (directiveIndex, elementIndex, template) {
  18107. ngDevMode && assertDataInRange(elementIndex);
  18108. var /** @type {?} */ element = /** @type {?} */ (((data))[elementIndex]);
  18109. ngDevMode && assertNodeType(element, 3 /* Element */);
  18110. ngDevMode && assertNotEqual(element.data, null, 'isComponent');
  18111. ngDevMode && assertDataInRange(directiveIndex);
  18112. var /** @type {?} */ hostView = /** @type {?} */ ((element.data));
  18113. ngDevMode && assertNotEqual(hostView, null, 'hostView');
  18114. var /** @type {?} */ directive = data[directiveIndex];
  18115. var /** @type {?} */ oldView = enterView(hostView, element);
  18116. try {
  18117. template(directive, creationMode);
  18118. }
  18119. finally {
  18120. hostView.creationMode = false;
  18121. leaveView(oldView);
  18122. }
  18123. };
  18124. /**
  18125. * Instruction to distribute projectable nodes among <ng-content> occurrences in a given template.
  18126. * It takes all the selectors from the entire component's template and decides where
  18127. * each projected node belongs (it re-distributes nodes among "buckets" where each "bucket" is
  18128. * backed by a selector).
  18129. *
  18130. * @param {?=} selectors
  18131. * @return {?}
  18132. */
  18133. /**
  18134. * Inserts previously re-distributed projected nodes. This instruction must be preceded by a call
  18135. * to the projectionDef instruction.
  18136. *
  18137. * @param {?} nodeIndex
  18138. * @param {?} localIndex - index under which distribution of projected nodes was memorized
  18139. * @param {?=} selectorIndex - 0 means <ng-content> without any selector
  18140. * @return {?}
  18141. */
  18142. /**
  18143. * Adds a ViewState or a ContainerState to the end of the current view tree.
  18144. *
  18145. * This structure will be used to traverse through nested views to remove listeners
  18146. * and call onDestroy callbacks.
  18147. *
  18148. * @template T
  18149. * @param {?} state The ViewState or ContainerState to add to the view tree
  18150. * @return {?} The state passed in
  18151. */
  18152. function addToViewTree(state) {
  18153. currentView.tail ? (currentView.tail.next = state) : (currentView.child = state);
  18154. currentView.tail = state;
  18155. return state;
  18156. }
  18157. /**
  18158. * A special value which designates that a value has not changed.
  18159. */
  18160. var NO_CHANGE = /** @type {?} */ ({});
  18161. /**
  18162. * Create interpolation bindings with variable number of arguments.
  18163. *
  18164. * If any of the arguments change, then the interpolation is concatenated
  18165. * and causes an update.
  18166. *
  18167. * @param {?} values an array of values to diff.
  18168. * @return {?}
  18169. */
  18170. /**
  18171. * Create a single value binding without interpolation.
  18172. *
  18173. * @template T
  18174. * @param {?} value Value to diff
  18175. * @return {?}
  18176. */
  18177. function bind(value) {
  18178. var /** @type {?} */ different;
  18179. if (different = creationMode) {
  18180. if (typeof currentView.bindingStartIndex !== 'number') {
  18181. bindingIndex = currentView.bindingStartIndex = data.length;
  18182. }
  18183. data[bindingIndex++] = value;
  18184. }
  18185. else {
  18186. if (different = value !== NO_CHANGE && isDifferent(data[bindingIndex], value)) {
  18187. data[bindingIndex] = value;
  18188. }
  18189. bindingIndex++;
  18190. }
  18191. return different ? value : NO_CHANGE;
  18192. }
  18193. /**
  18194. * Create an interpolation bindings with 1 arguments.
  18195. *
  18196. * @param {?} prefix static value used for concatenation only.
  18197. * @param {?} value value checked for change.
  18198. * @param {?} suffix static value used for concatenation only.
  18199. * @return {?}
  18200. */
  18201. function bind1(prefix, value, suffix) {
  18202. return bind(value) === NO_CHANGE ? NO_CHANGE : prefix + stringify$1(value) + suffix;
  18203. }
  18204. /**
  18205. * Create an interpolation bindings with 2 arguments.
  18206. *
  18207. * @param {?} prefix
  18208. * @param {?} v0 value checked for change
  18209. * @param {?} i0
  18210. * @param {?} v1 value checked for change
  18211. * @param {?} suffix
  18212. * @return {?}
  18213. */
  18214. /**
  18215. * Create an interpolation bindings with 3 arguments.
  18216. *
  18217. * @param {?} prefix
  18218. * @param {?} v0
  18219. * @param {?} i0
  18220. * @param {?} v1
  18221. * @param {?} i1
  18222. * @param {?} v2
  18223. * @param {?} suffix
  18224. * @return {?}
  18225. */
  18226. /**
  18227. * Create an interpolation binding with 4 arguments.
  18228. *
  18229. * @param {?} prefix
  18230. * @param {?} v0
  18231. * @param {?} i0
  18232. * @param {?} v1
  18233. * @param {?} i1
  18234. * @param {?} v2
  18235. * @param {?} i2
  18236. * @param {?} v3
  18237. * @param {?} suffix
  18238. * @return {?}
  18239. */
  18240. /**
  18241. * Create an interpolation binding with 5 arguments.
  18242. *
  18243. * @param {?} prefix
  18244. * @param {?} v0
  18245. * @param {?} i0
  18246. * @param {?} v1
  18247. * @param {?} i1
  18248. * @param {?} v2
  18249. * @param {?} i2
  18250. * @param {?} v3
  18251. * @param {?} i3
  18252. * @param {?} v4
  18253. * @param {?} suffix
  18254. * @return {?}
  18255. */
  18256. /**
  18257. * Create an interpolation binding with 6 arguments.
  18258. *
  18259. * @param {?} prefix
  18260. * @param {?} v0
  18261. * @param {?} i0
  18262. * @param {?} v1
  18263. * @param {?} i1
  18264. * @param {?} v2
  18265. * @param {?} i2
  18266. * @param {?} v3
  18267. * @param {?} i3
  18268. * @param {?} v4
  18269. * @param {?} i4
  18270. * @param {?} v5
  18271. * @param {?} suffix
  18272. * @return {?}
  18273. */
  18274. /**
  18275. * Create an interpolation binding with 7 arguments.
  18276. *
  18277. * @param {?} prefix
  18278. * @param {?} v0
  18279. * @param {?} i0
  18280. * @param {?} v1
  18281. * @param {?} i1
  18282. * @param {?} v2
  18283. * @param {?} i2
  18284. * @param {?} v3
  18285. * @param {?} i3
  18286. * @param {?} v4
  18287. * @param {?} i4
  18288. * @param {?} v5
  18289. * @param {?} i5
  18290. * @param {?} v6
  18291. * @param {?} suffix
  18292. * @return {?}
  18293. */
  18294. /**
  18295. * Create an interpolation binding with 8 arguments.
  18296. *
  18297. * @param {?} prefix
  18298. * @param {?} v0
  18299. * @param {?} i0
  18300. * @param {?} v1
  18301. * @param {?} i1
  18302. * @param {?} v2
  18303. * @param {?} i2
  18304. * @param {?} v3
  18305. * @param {?} i3
  18306. * @param {?} v4
  18307. * @param {?} i4
  18308. * @param {?} v5
  18309. * @param {?} i5
  18310. * @param {?} v6
  18311. * @param {?} i6
  18312. * @param {?} v7
  18313. * @param {?} suffix
  18314. * @return {?}
  18315. */
  18316. /**
  18317. * @template T
  18318. * @param {?} index
  18319. * @param {?=} value
  18320. * @return {?}
  18321. */
  18322. /**
  18323. * @template T
  18324. * @param {?} predicate
  18325. * @param {?=} descend
  18326. * @param {?=} read
  18327. * @return {?}
  18328. */
  18329. /**
  18330. * @return {?}
  18331. */
  18332. function assertPreviousIsParent() {
  18333. assertEqual(isParent, true, 'isParent');
  18334. }
  18335. /**
  18336. * @return {?}
  18337. */
  18338. function assertHasParent() {
  18339. assertNotEqual(previousOrParentNode.parent, null, 'isParent');
  18340. }
  18341. /**
  18342. * @param {?} index
  18343. * @param {?=} arr
  18344. * @return {?}
  18345. */
  18346. function assertDataInRange(index, arr) {
  18347. if (arr == null)
  18348. arr = data;
  18349. assertLessThan(arr ? arr.length : 0, index, 'data.length');
  18350. }
  18351. /**
  18352. * @fileoverview added by tsickle
  18353. * @suppress {checkTypes} checked by tsc
  18354. */
  18355. /**
  18356. * @license
  18357. * Copyright Google Inc. All Rights Reserved.
  18358. *
  18359. * Use of this source code is governed by an MIT-style license that can be
  18360. * found in the LICENSE file at https://angular.io/license
  18361. */
  18362. /**
  18363. * Options that control how the component should be bootstrapped.
  18364. * @record
  18365. */
  18366. /**
  18367. * Bootstraps a component, then creates and returns a `ComponentRef` for that component.
  18368. *
  18369. * @template T
  18370. * @param {?} componentType Component to bootstrap
  18371. * @param {?} opts
  18372. * @return {?}
  18373. */
  18374. // TODO: A hack to not pull in the NullInjector from @angular/core.
  18375. /**
  18376. * Bootstraps a Component into an existing host element and returns an instance
  18377. * of the component.
  18378. *
  18379. * @template T
  18380. * @param {?} componentType Component to bootstrap
  18381. * @param {?=} opts
  18382. * @return {?}
  18383. */
  18384. function renderComponent(componentType, opts) {
  18385. if (opts === void 0) { opts = {}; }
  18386. var /** @type {?} */ rendererFactory = opts.rendererFactory || domRendererFactory3;
  18387. var /** @type {?} */ componentDef = componentType.ngComponentDef;
  18388. var /** @type {?} */ component;
  18389. var /** @type {?} */ hostNode = locateHostElement(rendererFactory, opts.host || componentDef.tag);
  18390. var /** @type {?} */ oldView = enterView(createViewState(-1, rendererFactory.createRenderer(hostNode, componentDef.rendererType), []), /** @type {?} */ ((null)));
  18391. try {
  18392. // Create element node at index 0 in data array
  18393. hostElement(hostNode, componentDef);
  18394. // Create directive instance with n() and store at index 1 in data array (el is 0)
  18395. component = directive(1, componentDef.n(), componentDef);
  18396. }
  18397. finally {
  18398. leaveView(oldView);
  18399. }
  18400. opts.features && opts.features.forEach(function (feature) { return feature(component, componentDef); });
  18401. detectChanges(component);
  18402. return component;
  18403. }
  18404. /**
  18405. * @template T
  18406. * @param {?} component
  18407. * @return {?}
  18408. */
  18409. function detectChanges(component) {
  18410. ngDevMode && assertNotNull(component, 'component');
  18411. var /** @type {?} */ hostNode = /** @type {?} */ ((/** @type {?} */ (component))[NG_HOST_SYMBOL]);
  18412. if (ngDevMode && !hostNode) {
  18413. createError('Not a directive instance', component);
  18414. }
  18415. ngDevMode && assertNotNull(hostNode.data, 'hostNode.data');
  18416. renderComponentOrTemplate(hostNode, hostNode.view, component);
  18417. isDirty = false;
  18418. }
  18419. var isDirty = false;
  18420. /**
  18421. * @template T
  18422. * @param {?} component
  18423. * @param {?=} scheduler
  18424. * @return {?}
  18425. */
  18426. /**
  18427. * @template T
  18428. * @param {?} component
  18429. * @return {?}
  18430. */
  18431. /**
  18432. * @fileoverview added by tsickle
  18433. * @suppress {checkTypes} checked by tsc
  18434. */
  18435. /**
  18436. * @license
  18437. * Copyright Google Inc. All Rights Reserved.
  18438. *
  18439. * Use of this source code is governed by an MIT-style license that can be
  18440. * found in the LICENSE file at https://angular.io/license
  18441. */
  18442. /**
  18443. * Create a component definition object.
  18444. *
  18445. *
  18446. * # Example
  18447. * ```
  18448. * class MyDirective {
  18449. * // Generated by Angular Template Compiler
  18450. * // [Symbol] syntax will not be supported by TypeScript until v2.7
  18451. * static [COMPONENT_DEF_SYMBOL] = defineComponent({
  18452. * ...
  18453. * });
  18454. * }
  18455. * ```
  18456. * @template T
  18457. * @param {?} componentDefinition
  18458. * @return {?}
  18459. */
  18460. function defineComponent(componentDefinition) {
  18461. var /** @type {?} */ def = /** @type {?} */ ({
  18462. type: componentDefinition.type,
  18463. diPublic: null,
  18464. n: componentDefinition.factory,
  18465. tag: (/** @type {?} */ (componentDefinition)).tag || /** @type {?} */ ((null)),
  18466. template: (/** @type {?} */ (componentDefinition)).template || /** @type {?} */ ((null)),
  18467. r: componentDefinition.refresh ||
  18468. function (d, e) { componentRefresh(d, e, componentDefinition.template); },
  18469. h: componentDefinition.hostBindings || noop$1,
  18470. inputs: invertObject(componentDefinition.inputs),
  18471. outputs: invertObject(componentDefinition.outputs),
  18472. methods: invertObject(componentDefinition.methods),
  18473. rendererType: resolveRendererType2(componentDefinition.rendererType) || null,
  18474. });
  18475. var /** @type {?} */ feature = componentDefinition.features;
  18476. feature && feature.forEach(function (fn) { return fn(def); });
  18477. return def;
  18478. }
  18479. /**
  18480. * @template T
  18481. * @param {?} definition
  18482. * @return {?}
  18483. */
  18484. /**
  18485. * @template T
  18486. * @param {?} definition
  18487. * @return {?}
  18488. */
  18489. var EMPTY$1 = {};
  18490. /**
  18491. * @return {?}
  18492. */
  18493. function noop$1() { }
  18494. /**
  18495. * Swaps the keys and values of an object.
  18496. * @param {?} obj
  18497. * @return {?}
  18498. */
  18499. function invertObject(obj) {
  18500. if (obj == null)
  18501. return EMPTY$1;
  18502. var /** @type {?} */ newObj = {};
  18503. for (var /** @type {?} */ minifiedKey in obj) {
  18504. newObj[obj[minifiedKey]] = minifiedKey;
  18505. }
  18506. return newObj;
  18507. }
  18508. /**
  18509. * Create a directive definition object.
  18510. *
  18511. * # Example
  18512. * ```
  18513. * class MyDirective {
  18514. * // Generated by Angular Template Compiler
  18515. * // [Symbol] syntax will not be supported by TypeScript until v2.7
  18516. * static [DIRECTIVE_DEF_SYMBOL] = defineDirective({
  18517. * ...
  18518. * });
  18519. * }
  18520. * ```
  18521. */
  18522. /**
  18523. * @fileoverview added by tsickle
  18524. * @suppress {checkTypes} checked by tsc
  18525. */
  18526. /**
  18527. * @license
  18528. * Copyright Google Inc. All Rights Reserved.
  18529. *
  18530. * Use of this source code is governed by an MIT-style license that can be
  18531. * found in the LICENSE file at https://angular.io/license
  18532. */
  18533. /**
  18534. * @fileoverview added by tsickle
  18535. * @suppress {checkTypes} checked by tsc
  18536. */
  18537. /**
  18538. * @license
  18539. * Copyright Google Inc. All Rights Reserved.
  18540. *
  18541. * Use of this source code is governed by an MIT-style license that can be
  18542. * found in the LICENSE file at https://angular.io/license
  18543. */
  18544. // clang-format on
  18545. /**
  18546. * @fileoverview added by tsickle
  18547. * @suppress {checkTypes} checked by tsc
  18548. */
  18549. /**
  18550. * @license
  18551. * Copyright Google Inc. All Rights Reserved.
  18552. *
  18553. * Use of this source code is governed by an MIT-style license that can be
  18554. * found in the LICENSE file at https://angular.io/license
  18555. */
  18556. /**
  18557. * @fileoverview added by tsickle
  18558. * @suppress {checkTypes} checked by tsc
  18559. */
  18560. /**
  18561. * @license
  18562. * Copyright Google Inc. All Rights Reserved.
  18563. *
  18564. * Use of this source code is governed by an MIT-style license that can be
  18565. * found in the LICENSE file at https://angular.io/license
  18566. * @record
  18567. */
  18568. /**
  18569. * \@experimental Animation support is experimental.
  18570. */
  18571. /**
  18572. * \@experimental Animation support is experimental.
  18573. * @record
  18574. */
  18575. /**
  18576. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18577. * animation DSL when the {\@link trigger trigger animation function} is called.
  18578. *
  18579. * \@experimental Animation support is experimental.
  18580. * @record
  18581. */
  18582. /**
  18583. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18584. * animation DSL when the {\@link state state animation function} is called.
  18585. *
  18586. * \@experimental Animation support is experimental.
  18587. * @record
  18588. */
  18589. /**
  18590. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18591. * animation DSL when the {\@link transition transition animation function} is called.
  18592. *
  18593. * \@experimental Animation support is experimental.
  18594. * @record
  18595. */
  18596. /**
  18597. * \@experimental Animation support is experimental.
  18598. * @record
  18599. */
  18600. /**
  18601. * \@experimental Animation support is experimental.
  18602. * @record
  18603. */
  18604. /**
  18605. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18606. * animation DSL when the {\@link keyframes keyframes animation function} is called.
  18607. *
  18608. * \@experimental Animation support is experimental.
  18609. * @record
  18610. */
  18611. /**
  18612. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18613. * animation DSL when the {\@link style style animation function} is called.
  18614. *
  18615. * \@experimental Animation support is experimental.
  18616. * @record
  18617. */
  18618. /**
  18619. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18620. * animation DSL when the {\@link animate animate animation function} is called.
  18621. *
  18622. * \@experimental Animation support is experimental.
  18623. * @record
  18624. */
  18625. /**
  18626. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18627. * animation DSL when the {\@link animateChild animateChild animation function} is called.
  18628. *
  18629. * \@experimental Animation support is experimental.
  18630. * @record
  18631. */
  18632. /**
  18633. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18634. * animation DSL when the {\@link useAnimation useAnimation animation function} is called.
  18635. *
  18636. * \@experimental Animation support is experimental.
  18637. * @record
  18638. */
  18639. /**
  18640. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18641. * animation DSL when the {\@link sequence sequence animation function} is called.
  18642. *
  18643. * \@experimental Animation support is experimental.
  18644. * @record
  18645. */
  18646. /**
  18647. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18648. * animation DSL when the {\@link group group animation function} is called.
  18649. *
  18650. * \@experimental Animation support is experimental.
  18651. * @record
  18652. */
  18653. /**
  18654. * Metadata representing the entry of animations. Instances of this interface are provided via the
  18655. * animation DSL when the {\@link stagger stagger animation function} is called.
  18656. *
  18657. * \@experimental Animation support is experimental.
  18658. * @record
  18659. */
  18660. /**
  18661. * `trigger` is an animation-specific function that is designed to be used inside of Angular's
  18662. * animation DSL language. If this information is new, please navigate to the
  18663. * {\@link Component#animations component animations metadata page} to gain a better
  18664. * understanding of how animations in Angular are used.
  18665. *
  18666. * `trigger` Creates an animation trigger which will a list of {\@link state state} and
  18667. * {\@link transition transition} entries that will be evaluated when the expression
  18668. * bound to the trigger changes.
  18669. *
  18670. * Triggers are registered within the component annotation data under the
  18671. * {\@link Component#animations animations section}. An animation trigger can be placed on an element
  18672. * within a template by referencing the name of the trigger followed by the expression value that
  18673. * the
  18674. * trigger is bound to (in the form of `[\@triggerName]="expression"`.
  18675. *
  18676. * Animation trigger bindings strigify values and then match the previous and current values against
  18677. * any linked transitions. If a boolean value is provided into the trigger binding then it will both
  18678. * be represented as `1` or `true` and `0` or `false` for a true and false boolean values
  18679. * respectively.
  18680. *
  18681. * ### Usage
  18682. *
  18683. * `trigger` will create an animation trigger reference based on the provided `name` value. The
  18684. * provided `animation` value is expected to be an array consisting of {\@link state state} and
  18685. * {\@link transition transition} declarations.
  18686. *
  18687. * ```typescript
  18688. * \@Component({
  18689. * selector: 'my-component',
  18690. * templateUrl: 'my-component-tpl.html',
  18691. * animations: [
  18692. * trigger("myAnimationTrigger", [
  18693. * state(...),
  18694. * state(...),
  18695. * transition(...),
  18696. * transition(...)
  18697. * ])
  18698. * ]
  18699. * })
  18700. * class MyComponent {
  18701. * myStatusExp = "something";
  18702. * }
  18703. * ```
  18704. *
  18705. * The template associated with this component will make use of the `myAnimationTrigger` animation
  18706. * trigger by binding to an element within its template code.
  18707. *
  18708. * ```html
  18709. * <!-- somewhere inside of my-component-tpl.html -->
  18710. * <div [\@myAnimationTrigger]="myStatusExp">...</div>
  18711. * ```
  18712. *
  18713. * ## Disable Animations
  18714. * A special animation control binding called `\@.disabled` can be placed on an element which will
  18715. * then disable animations for any inner animation triggers situated within the element as well as
  18716. * any animations on the element itself.
  18717. *
  18718. * When true, the `\@.disabled` binding will prevent all animations from rendering. The example
  18719. * below shows how to use this feature:
  18720. *
  18721. * ```ts
  18722. * \@Component({
  18723. * selector: 'my-component',
  18724. * template: `
  18725. * <div [\@.disabled]="isDisabled">
  18726. * <div [\@childAnimation]="exp"></div>
  18727. * </div>
  18728. * `,
  18729. * animations: [
  18730. * trigger("childAnimation", [
  18731. * // ...
  18732. * ])
  18733. * ]
  18734. * })
  18735. * class MyComponent {
  18736. * isDisabled = true;
  18737. * exp = '...';
  18738. * }
  18739. * ```
  18740. *
  18741. * The `\@childAnimation` trigger will not animate because `\@.disabled` prevents it from happening
  18742. * (when true).
  18743. *
  18744. * Note that `\@.disabled` will only disable all animations (this means any animations running on
  18745. * the same element will also be disabled).
  18746. *
  18747. * ### Disabling Animations Application-wide
  18748. * When an area of the template is set to have animations disabled, **all** inner components will
  18749. * also have their animations disabled as well. This means that all animations for an angular
  18750. * application can be disabled by placing a host binding set on `\@.disabled` on the topmost Angular
  18751. * component.
  18752. *
  18753. * ```ts
  18754. * import {Component, HostBinding} from '\@angular/core';
  18755. *
  18756. * \@Component({
  18757. * selector: 'app-component',
  18758. * templateUrl: 'app.component.html',
  18759. * })
  18760. * class AppComponent {
  18761. * \@HostBinding('\@.disabled')
  18762. * public animationsDisabled = true;
  18763. * }
  18764. * ```
  18765. *
  18766. * ### What about animations that us `query()` and `animateChild()`?
  18767. * Despite inner animations being disabled, a parent animation can {\@link query query} for inner
  18768. * elements located in disabled areas of the template and still animate them as it sees fit. This is
  18769. * also the case for when a sub animation is queried by a parent and then later animated using {\@link
  18770. * animateChild animateChild}.
  18771. *
  18772. * \@experimental Animation support is experimental.
  18773. * @param {?} name
  18774. * @param {?} definitions
  18775. * @return {?}
  18776. */
  18777. function trigger$1(name, definitions) {
  18778. return { type: 7 /* Trigger */, name: name, definitions: definitions, options: {} };
  18779. }
  18780. /**
  18781. * `animate` is an animation-specific function that is designed to be used inside of Angular's
  18782. * animation DSL language. If this information is new, please navigate to the {\@link
  18783. * Component#animations component animations metadata page} to gain a better understanding of
  18784. * how animations in Angular are used.
  18785. *
  18786. * `animate` specifies an animation step that will apply the provided `styles` data for a given
  18787. * amount of time based on the provided `timing` expression value. Calls to `animate` are expected
  18788. * to be used within {\@link sequence an animation sequence}, {\@link group group}, or {\@link
  18789. * transition transition}.
  18790. *
  18791. * ### Usage
  18792. *
  18793. * The `animate` function accepts two input parameters: `timing` and `styles`:
  18794. *
  18795. * - `timing` is a string based value that can be a combination of a duration with optional delay
  18796. * and easing values. The format for the expression breaks down to `duration delay easing`
  18797. * (therefore a value such as `1s 100ms ease-out` will be parse itself into `duration=1000,
  18798. * delay=100, easing=ease-out`. If a numeric value is provided then that will be used as the
  18799. * `duration` value in millisecond form.
  18800. * - `styles` is the style input data which can either be a call to {\@link style style} or {\@link
  18801. * keyframes keyframes}. If left empty then the styles from the destination state will be collected
  18802. * and used (this is useful when describing an animation step that will complete an animation by
  18803. * {\@link transition#the-final-animate-call animating to the final state}).
  18804. *
  18805. * ```typescript
  18806. * // various functions for specifying timing data
  18807. * animate(500, style(...))
  18808. * animate("1s", style(...))
  18809. * animate("100ms 0.5s", style(...))
  18810. * animate("5s ease", style(...))
  18811. * animate("5s 10ms cubic-bezier(.17,.67,.88,.1)", style(...))
  18812. *
  18813. * // either style() of keyframes() can be used
  18814. * animate(500, style({ background: "red" }))
  18815. * animate(500, keyframes([
  18816. * style({ background: "blue" })),
  18817. * style({ background: "red" }))
  18818. * ])
  18819. * ```
  18820. *
  18821. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  18822. *
  18823. * \@experimental Animation support is experimental.
  18824. * @param {?} timings
  18825. * @param {?=} styles
  18826. * @return {?}
  18827. */
  18828. function animate$1(timings, styles) {
  18829. if (styles === void 0) { styles = null; }
  18830. return { type: 4 /* Animate */, styles: styles, timings: timings };
  18831. }
  18832. /**
  18833. * `group` is an animation-specific function that is designed to be used inside of Angular's
  18834. * animation DSL language. If this information is new, please navigate to the {\@link
  18835. * Component#animations component animations metadata page} to gain a better understanding of
  18836. * how animations in Angular are used.
  18837. *
  18838. * `group` specifies a list of animation steps that are all run in parallel. Grouped animations are
  18839. * useful when a series of styles must be animated/closed off at different starting/ending times.
  18840. *
  18841. * The `group` function can either be used within a {\@link sequence sequence} or a {\@link transition
  18842. * transition} and it will only continue to the next instruction once all of the inner animation
  18843. * steps have completed.
  18844. *
  18845. * ### Usage
  18846. *
  18847. * The `steps` data that is passed into the `group` animation function can either consist of {\@link
  18848. * style style} or {\@link animate animate} function calls. Each call to `style()` or `animate()`
  18849. * within a group will be executed instantly (use {\@link keyframes keyframes} or a {\@link
  18850. * animate#usage animate() with a delay value} to offset styles to be applied at a later time).
  18851. *
  18852. * ```typescript
  18853. * group([
  18854. * animate("1s", { background: "black" }))
  18855. * animate("2s", { color: "white" }))
  18856. * ])
  18857. * ```
  18858. *
  18859. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  18860. *
  18861. * \@experimental Animation support is experimental.
  18862. * @param {?} steps
  18863. * @param {?=} options
  18864. * @return {?}
  18865. */
  18866. function group$1(steps, options) {
  18867. if (options === void 0) { options = null; }
  18868. return { type: 3 /* Group */, steps: steps, options: options };
  18869. }
  18870. /**
  18871. * `sequence` is an animation-specific function that is designed to be used inside of Angular's
  18872. * animation DSL language. If this information is new, please navigate to the {\@link
  18873. * Component#animations component animations metadata page} to gain a better understanding of
  18874. * how animations in Angular are used.
  18875. *
  18876. * `sequence` Specifies a list of animation steps that are run one by one. (`sequence` is used by
  18877. * default when an array is passed as animation data into {\@link transition transition}.)
  18878. *
  18879. * The `sequence` function can either be used within a {\@link group group} or a {\@link transition
  18880. * transition} and it will only continue to the next instruction once each of the inner animation
  18881. * steps have completed.
  18882. *
  18883. * To perform animation styling in parallel with other animation steps then have a look at the
  18884. * {\@link group group} animation function.
  18885. *
  18886. * ### Usage
  18887. *
  18888. * The `steps` data that is passed into the `sequence` animation function can either consist of
  18889. * {\@link style style} or {\@link animate animate} function calls. A call to `style()` will apply the
  18890. * provided styling data immediately while a call to `animate()` will apply its styling data over a
  18891. * given time depending on its timing data.
  18892. *
  18893. * ```typescript
  18894. * sequence([
  18895. * style({ opacity: 0 })),
  18896. * animate("1s", { opacity: 1 }))
  18897. * ])
  18898. * ```
  18899. *
  18900. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  18901. *
  18902. * \@experimental Animation support is experimental.
  18903. * @param {?} steps
  18904. * @param {?=} options
  18905. * @return {?}
  18906. */
  18907. function sequence$1(steps, options) {
  18908. if (options === void 0) { options = null; }
  18909. return { type: 2 /* Sequence */, steps: steps, options: options };
  18910. }
  18911. /**
  18912. * `style` is an animation-specific function that is designed to be used inside of Angular's
  18913. * animation DSL language. If this information is new, please navigate to the {\@link
  18914. * Component#animations component animations metadata page} to gain a better understanding of
  18915. * how animations in Angular are used.
  18916. *
  18917. * `style` declares a key/value object containing CSS properties/styles that can then be used for
  18918. * {\@link state animation states}, within an {\@link sequence animation sequence}, or as styling data
  18919. * for both {\@link animate animate} and {\@link keyframes keyframes}.
  18920. *
  18921. * ### Usage
  18922. *
  18923. * `style` takes in a key/value string map as data and expects one or more CSS property/value pairs
  18924. * to be defined.
  18925. *
  18926. * ```typescript
  18927. * // string values are used for css properties
  18928. * style({ background: "red", color: "blue" })
  18929. *
  18930. * // numerical (pixel) values are also supported
  18931. * style({ width: 100, height: 0 })
  18932. * ```
  18933. *
  18934. * #### Auto-styles (using `*`)
  18935. *
  18936. * When an asterix (`*`) character is used as a value then it will be detected from the element
  18937. * being animated and applied as animation data when the animation starts.
  18938. *
  18939. * This feature proves useful for a state depending on layout and/or environment factors; in such
  18940. * cases the styles are calculated just before the animation starts.
  18941. *
  18942. * ```typescript
  18943. * // the steps below will animate from 0 to the
  18944. * // actual height of the element
  18945. * style({ height: 0 }),
  18946. * animate("1s", style({ height: "*" }))
  18947. * ```
  18948. *
  18949. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  18950. *
  18951. * \@experimental Animation support is experimental.
  18952. * @param {?} tokens
  18953. * @return {?}
  18954. */
  18955. function style$1(tokens) {
  18956. return { type: 6 /* Style */, styles: tokens, offset: null };
  18957. }
  18958. /**
  18959. * `state` is an animation-specific function that is designed to be used inside of Angular's
  18960. * animation DSL language. If this information is new, please navigate to the {\@link
  18961. * Component#animations component animations metadata page} to gain a better understanding of
  18962. * how animations in Angular are used.
  18963. *
  18964. * `state` declares an animation state within the given trigger. When a state is active within a
  18965. * component then its associated styles will persist on the element that the trigger is attached to
  18966. * (even when the animation ends).
  18967. *
  18968. * To animate between states, have a look at the animation {\@link transition transition} DSL
  18969. * function. To register states to an animation trigger please have a look at the {\@link trigger
  18970. * trigger} function.
  18971. *
  18972. * #### The `void` state
  18973. *
  18974. * The `void` state value is a reserved word that angular uses to determine when the element is not
  18975. * apart of the application anymore (e.g. when an `ngIf` evaluates to false then the state of the
  18976. * associated element is void).
  18977. *
  18978. * #### The `*` (default) state
  18979. *
  18980. * The `*` state (when styled) is a fallback state that will be used if the state that is being
  18981. * animated is not declared within the trigger.
  18982. *
  18983. * ### Usage
  18984. *
  18985. * `state` will declare an animation state with its associated styles
  18986. * within the given trigger.
  18987. *
  18988. * - `stateNameExpr` can be one or more state names separated by commas.
  18989. * - `styles` refers to the {\@link style styling data} that will be persisted on the element once
  18990. * the state has been reached.
  18991. *
  18992. * ```typescript
  18993. * // "void" is a reserved name for a state and is used to represent
  18994. * // the state in which an element is detached from from the application.
  18995. * state("void", style({ height: 0 }))
  18996. *
  18997. * // user-defined states
  18998. * state("closed", style({ height: 0 }))
  18999. * state("open, visible", style({ height: "*" }))
  19000. * ```
  19001. *
  19002. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  19003. *
  19004. * \@experimental Animation support is experimental.
  19005. * @param {?} name
  19006. * @param {?} styles
  19007. * @param {?=} options
  19008. * @return {?}
  19009. */
  19010. function state$1(name, styles, options) {
  19011. return { type: 0 /* State */, name: name, styles: styles, options: options };
  19012. }
  19013. /**
  19014. * `keyframes` is an animation-specific function that is designed to be used inside of Angular's
  19015. * animation DSL language. If this information is new, please navigate to the {\@link
  19016. * Component#animations component animations metadata page} to gain a better understanding of
  19017. * how animations in Angular are used.
  19018. *
  19019. * `keyframes` specifies a collection of {\@link style style} entries each optionally characterized
  19020. * by an `offset` value.
  19021. *
  19022. * ### Usage
  19023. *
  19024. * The `keyframes` animation function is designed to be used alongside the {\@link animate animate}
  19025. * animation function. Instead of applying animations from where they are currently to their
  19026. * destination, keyframes can describe how each style entry is applied and at what point within the
  19027. * animation arc (much like CSS Keyframe Animations do).
  19028. *
  19029. * For each `style()` entry an `offset` value can be set. Doing so allows to specifiy at what
  19030. * percentage of the animate time the styles will be applied.
  19031. *
  19032. * ```typescript
  19033. * // the provided offset values describe when each backgroundColor value is applied.
  19034. * animate("5s", keyframes([
  19035. * style({ backgroundColor: "red", offset: 0 }),
  19036. * style({ backgroundColor: "blue", offset: 0.2 }),
  19037. * style({ backgroundColor: "orange", offset: 0.3 }),
  19038. * style({ backgroundColor: "black", offset: 1 })
  19039. * ]))
  19040. * ```
  19041. *
  19042. * Alternatively, if there are no `offset` values used within the style entries then the offsets
  19043. * will be calculated automatically.
  19044. *
  19045. * ```typescript
  19046. * animate("5s", keyframes([
  19047. * style({ backgroundColor: "red" }) // offset = 0
  19048. * style({ backgroundColor: "blue" }) // offset = 0.33
  19049. * style({ backgroundColor: "orange" }) // offset = 0.66
  19050. * style({ backgroundColor: "black" }) // offset = 1
  19051. * ]))
  19052. * ```
  19053. *
  19054. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  19055. *
  19056. * \@experimental Animation support is experimental.
  19057. * @param {?} steps
  19058. * @return {?}
  19059. */
  19060. function keyframes$1(steps) {
  19061. return { type: 5 /* Keyframes */, steps: steps };
  19062. }
  19063. /**
  19064. * `transition` is an animation-specific function that is designed to be used inside of Angular's
  19065. * animation DSL language. If this information is new, please navigate to the {\@link
  19066. * Component#animations component animations metadata page} to gain a better understanding of
  19067. * how animations in Angular are used.
  19068. *
  19069. * `transition` declares the {\@link sequence sequence of animation steps} that will be run when the
  19070. * provided `stateChangeExpr` value is satisfied. The `stateChangeExpr` consists of a `state1 =>
  19071. * state2` which consists of two known states (use an asterix (`*`) to refer to a dynamic starting
  19072. * and/or ending state).
  19073. *
  19074. * A function can also be provided as the `stateChangeExpr` argument for a transition and this
  19075. * function will be executed each time a state change occurs. If the value returned within the
  19076. * function is true then the associated animation will be run.
  19077. *
  19078. * Animation transitions are placed within an {\@link trigger animation trigger}. For an transition
  19079. * to animate to a state value and persist its styles then one or more {\@link state animation
  19080. * states} is expected to be defined.
  19081. *
  19082. * ### Usage
  19083. *
  19084. * An animation transition is kicked off the `stateChangeExpr` predicate evaluates to true based on
  19085. * what the previous state is and what the current state has become. In other words, if a transition
  19086. * is defined that matches the old/current state criteria then the associated animation will be
  19087. * triggered.
  19088. *
  19089. * ```typescript
  19090. * // all transition/state changes are defined within an animation trigger
  19091. * trigger("myAnimationTrigger", [
  19092. * // if a state is defined then its styles will be persisted when the
  19093. * // animation has fully completed itself
  19094. * state("on", style({ background: "green" })),
  19095. * state("off", style({ background: "grey" })),
  19096. *
  19097. * // a transition animation that will be kicked off when the state value
  19098. * // bound to "myAnimationTrigger" changes from "on" to "off"
  19099. * transition("on => off", animate(500)),
  19100. *
  19101. * // it is also possible to do run the same animation for both directions
  19102. * transition("on <=> off", animate(500)),
  19103. *
  19104. * // or to define multiple states pairs separated by commas
  19105. * transition("on => off, off => void", animate(500)),
  19106. *
  19107. * // this is a catch-all state change for when an element is inserted into
  19108. * // the page and the destination state is unknown
  19109. * transition("void => *", [
  19110. * style({ opacity: 0 }),
  19111. * animate(500)
  19112. * ]),
  19113. *
  19114. * // this will capture a state change between any states
  19115. * transition("* => *", animate("1s 0s")),
  19116. *
  19117. * // you can also go full out and include a function
  19118. * transition((fromState, toState) => {
  19119. * // when `true` then it will allow the animation below to be invoked
  19120. * return fromState == "off" && toState == "on";
  19121. * }, animate("1s 0s"))
  19122. * ])
  19123. * ```
  19124. *
  19125. * The template associated with this component will make use of the `myAnimationTrigger` animation
  19126. * trigger by binding to an element within its template code.
  19127. *
  19128. * ```html
  19129. * <!-- somewhere inside of my-component-tpl.html -->
  19130. * <div [\@myAnimationTrigger]="myStatusExp">...</div>
  19131. * ```
  19132. *
  19133. * #### The final `animate` call
  19134. *
  19135. * If the final step within the transition steps is a call to `animate()` that **only** uses a
  19136. * timing value with **no style data** then it will be automatically used as the final animation arc
  19137. * for the element to animate itself to the final state. This involves an automatic mix of
  19138. * adding/removing CSS styles so that the element will be in the exact state it should be for the
  19139. * applied state to be presented correctly.
  19140. *
  19141. * ```
  19142. * // start off by hiding the element, but make sure that it animates properly to whatever state
  19143. * // is currently active for "myAnimationTrigger"
  19144. * transition("void => *", [
  19145. * style({ opacity: 0 }),
  19146. * animate(500)
  19147. * ])
  19148. * ```
  19149. *
  19150. * ### Using :enter and :leave
  19151. *
  19152. * Given that enter (insertion) and leave (removal) animations are so common, the `transition`
  19153. * function accepts both `:enter` and `:leave` values which are aliases for the `void => *` and `*
  19154. * => void` state changes.
  19155. *
  19156. * ```
  19157. * transition(":enter", [
  19158. * style({ opacity: 0 }),
  19159. * animate(500, style({ opacity: 1 }))
  19160. * ]),
  19161. * transition(":leave", [
  19162. * animate(500, style({ opacity: 0 }))
  19163. * ])
  19164. * ```
  19165. *
  19166. * ### Boolean values
  19167. * if a trigger binding value is a boolean value then it can be matched using a transition
  19168. * expression that compares `true` and `false` or `1` and `0`.
  19169. *
  19170. * ```
  19171. * // in the template
  19172. * <div [\@openClose]="open ? true : false">...</div>
  19173. *
  19174. * // in the component metadata
  19175. * trigger('openClose', [
  19176. * state('true', style({ height: '*' })),
  19177. * state('false', style({ height: '0px' })),
  19178. * transition('false <=> true', animate(500))
  19179. * ])
  19180. * ```
  19181. *
  19182. * ### Using :increment and :decrement
  19183. * In addition to the :enter and :leave transition aliases, the :increment and :decrement aliases
  19184. * can be used to kick off a transition when a numeric value has increased or decreased in value.
  19185. *
  19186. * ```
  19187. * import {group, animate, query, transition, style, trigger} from '\@angular/animations';
  19188. * import {Component} from '\@angular/core';
  19189. *
  19190. * \@Component({
  19191. * selector: 'banner-carousel-component',
  19192. * styles: [`
  19193. * .banner-container {
  19194. * position:relative;
  19195. * height:500px;
  19196. * overflow:hidden;
  19197. * }
  19198. * .banner-container > .banner {
  19199. * position:absolute;
  19200. * left:0;
  19201. * top:0;
  19202. * font-size:200px;
  19203. * line-height:500px;
  19204. * font-weight:bold;
  19205. * text-align:center;
  19206. * width:100%;
  19207. * }
  19208. * `],
  19209. * template: `
  19210. * <button (click)="previous()">Previous</button>
  19211. * <button (click)="next()">Next</button>
  19212. * <hr>
  19213. * <div [\@bannerAnimation]="selectedIndex" class="banner-container">
  19214. * <div class="banner" *ngFor="let banner of banners"> {{ banner }} </div>
  19215. * </div>
  19216. * `,
  19217. * animations: [
  19218. * trigger('bannerAnimation', [
  19219. * transition(":increment", group([
  19220. * query(':enter', [
  19221. * style({ left: '100%' }),
  19222. * animate('0.5s ease-out', style('*'))
  19223. * ]),
  19224. * query(':leave', [
  19225. * animate('0.5s ease-out', style({ left: '-100%' }))
  19226. * ])
  19227. * ])),
  19228. * transition(":decrement", group([
  19229. * query(':enter', [
  19230. * style({ left: '-100%' }),
  19231. * animate('0.5s ease-out', style('*'))
  19232. * ]),
  19233. * query(':leave', [
  19234. * animate('0.5s ease-out', style({ left: '100%' }))
  19235. * ])
  19236. * ]))
  19237. * ])
  19238. * ]
  19239. * })
  19240. * class BannerCarouselComponent {
  19241. * allBanners: string[] = ['1', '2', '3', '4'];
  19242. * selectedIndex: number = 0;
  19243. *
  19244. * get banners() {
  19245. * return [this.allBanners[this.selectedIndex]];
  19246. * }
  19247. *
  19248. * previous() {
  19249. * this.selectedIndex = Math.max(this.selectedIndex - 1, 0);
  19250. * }
  19251. *
  19252. * next() {
  19253. * this.selectedIndex = Math.min(this.selectedIndex + 1, this.allBanners.length - 1);
  19254. * }
  19255. * }
  19256. * ```
  19257. *
  19258. * {\@example core/animation/ts/dsl/animation_example.ts region='Component'}
  19259. *
  19260. * \@experimental Animation support is experimental.
  19261. * @param {?} stateChangeExpr
  19262. * @param {?} steps
  19263. * @param {?=} options
  19264. * @return {?}
  19265. */
  19266. function transition$1(stateChangeExpr, steps, options) {
  19267. if (options === void 0) { options = null; }
  19268. return { type: 1 /* Transition */, expr: stateChangeExpr, animation: steps, options: options };
  19269. }
  19270. /**
  19271. * `animation` is an animation-specific function that is designed to be used inside of Angular's
  19272. * animation DSL language.
  19273. *
  19274. * `var myAnimation = animation(...)` is designed to produce a reusable animation that can be later
  19275. * invoked in another animation or sequence. Reusable animations are designed to make use of
  19276. * animation parameters and the produced animation can be used via the `useAnimation` method.
  19277. *
  19278. * ```
  19279. * var fadeAnimation = animation([
  19280. * style({ opacity: '{{ start }}' }),
  19281. * animate('{{ time }}',
  19282. * style({ opacity: '{{ end }}'}))
  19283. * ], { params: { time: '1000ms', start: 0, end: 1 }});
  19284. * ```
  19285. *
  19286. * If parameters are attached to an animation then they act as **default parameter values**. When an
  19287. * animation is invoked via `useAnimation` then parameter values are allowed to be passed in
  19288. * directly. If any of the passed in parameter values are missing then the default values will be
  19289. * used.
  19290. *
  19291. * ```
  19292. * useAnimation(fadeAnimation, {
  19293. * params: {
  19294. * time: '2s',
  19295. * start: 1,
  19296. * end: 0
  19297. * }
  19298. * })
  19299. * ```
  19300. *
  19301. * If one or more parameter values are missing before animated then an error will be thrown.
  19302. *
  19303. * \@experimental Animation support is experimental.
  19304. * @param {?} steps
  19305. * @param {?=} options
  19306. * @return {?}
  19307. */
  19308. /**
  19309. * `animateChild` is an animation-specific function that is designed to be used inside of Angular's
  19310. * animation DSL language. It works by allowing a queried element to execute its own
  19311. * animation within the animation sequence.
  19312. *
  19313. * Each time an animation is triggered in angular, the parent animation
  19314. * will always get priority and any child animations will be blocked. In order
  19315. * for a child animation to run, the parent animation must query each of the elements
  19316. * containing child animations and then allow the animations to run using `animateChild`.
  19317. *
  19318. * The example HTML code below shows both parent and child elements that have animation
  19319. * triggers that will execute at the same time.
  19320. *
  19321. * ```html
  19322. * <!-- parent-child.component.html -->
  19323. * <button (click)="exp =! exp">Toggle</button>
  19324. * <hr>
  19325. *
  19326. * <div [\@parentAnimation]="exp">
  19327. * <header>Hello</header>
  19328. * <div [\@childAnimation]="exp">
  19329. * one
  19330. * </div>
  19331. * <div [\@childAnimation]="exp">
  19332. * two
  19333. * </div>
  19334. * <div [\@childAnimation]="exp">
  19335. * three
  19336. * </div>
  19337. * </div>
  19338. * ```
  19339. *
  19340. * Now when the `exp` value changes to true, only the `parentAnimation` animation will animate
  19341. * because it has priority. However, using `query` and `animateChild` each of the inner animations
  19342. * can also fire:
  19343. *
  19344. * ```ts
  19345. * // parent-child.component.ts
  19346. * import {trigger, transition, animate, style, query, animateChild} from '\@angular/animations';
  19347. * \@Component({
  19348. * selector: 'parent-child-component',
  19349. * animations: [
  19350. * trigger('parentAnimation', [
  19351. * transition('false => true', [
  19352. * query('header', [
  19353. * style({ opacity: 0 }),
  19354. * animate(500, style({ opacity: 1 }))
  19355. * ]),
  19356. * query('\@childAnimation', [
  19357. * animateChild()
  19358. * ])
  19359. * ])
  19360. * ]),
  19361. * trigger('childAnimation', [
  19362. * transition('false => true', [
  19363. * style({ opacity: 0 }),
  19364. * animate(500, style({ opacity: 1 }))
  19365. * ])
  19366. * ])
  19367. * ]
  19368. * })
  19369. * class ParentChildCmp {
  19370. * exp: boolean = false;
  19371. * }
  19372. * ```
  19373. *
  19374. * In the animation code above, when the `parentAnimation` transition kicks off it first queries to
  19375. * find the header element and fades it in. It then finds each of the sub elements that contain the
  19376. * `\@childAnimation` trigger and then allows for their animations to fire.
  19377. *
  19378. * This example can be further extended by using stagger:
  19379. *
  19380. * ```ts
  19381. * query('\@childAnimation', stagger(100, [
  19382. * animateChild()
  19383. * ]))
  19384. * ```
  19385. *
  19386. * Now each of the sub animations start off with respect to the `100ms` staggering step.
  19387. *
  19388. * ## The first frame of child animations
  19389. * When sub animations are executed using `animateChild` the animation engine will always apply the
  19390. * first frame of every sub animation immediately at the start of the animation sequence. This way
  19391. * the parent animation does not need to set any initial styling data on the sub elements before the
  19392. * sub animations kick off.
  19393. *
  19394. * In the example above the first frame of the `childAnimation`'s `false => true` transition
  19395. * consists of a style of `opacity: 0`. This is applied immediately when the `parentAnimation`
  19396. * animation transition sequence starts. Only then when the `\@childAnimation` is queried and called
  19397. * with `animateChild` will it then animate to its destination of `opacity: 1`.
  19398. *
  19399. * Note that this feature designed to be used alongside {\@link query query()} and it will only work
  19400. * with animations that are assigned using the Angular animation DSL (this means that CSS keyframes
  19401. * and transitions are not handled by this API).
  19402. *
  19403. * \@experimental Animation support is experimental.
  19404. * @param {?=} options
  19405. * @return {?}
  19406. */
  19407. /**
  19408. * `useAnimation` is an animation-specific function that is designed to be used inside of Angular's
  19409. * animation DSL language. It is used to kick off a reusable animation that is created using {\@link
  19410. * animation animation()}.
  19411. *
  19412. * \@experimental Animation support is experimental.
  19413. * @param {?} animation
  19414. * @param {?=} options
  19415. * @return {?}
  19416. */
  19417. /**
  19418. * `query` is an animation-specific function that is designed to be used inside of Angular's
  19419. * animation DSL language.
  19420. *
  19421. * query() is used to find one or more inner elements within the current element that is
  19422. * being animated within the sequence. The provided animation steps are applied
  19423. * to the queried element (by default, an array is provided, then this will be
  19424. * treated as an animation sequence).
  19425. *
  19426. * ### Usage
  19427. *
  19428. * query() is designed to collect mutiple elements and works internally by using
  19429. * `element.querySelectorAll`. An additional options object can be provided which
  19430. * can be used to limit the total amount of items to be collected.
  19431. *
  19432. * ```js
  19433. * query('div', [
  19434. * animate(...),
  19435. * animate(...)
  19436. * ], { limit: 1 })
  19437. * ```
  19438. *
  19439. * query(), by default, will throw an error when zero items are found. If a query
  19440. * has the `optional` flag set to true then this error will be ignored.
  19441. *
  19442. * ```js
  19443. * query('.some-element-that-may-not-be-there', [
  19444. * animate(...),
  19445. * animate(...)
  19446. * ], { optional: true })
  19447. * ```
  19448. *
  19449. * ### Special Selector Values
  19450. *
  19451. * The selector value within a query can collect elements that contain angular-specific
  19452. * characteristics
  19453. * using special pseudo-selectors tokens.
  19454. *
  19455. * These include:
  19456. *
  19457. * - Querying for newly inserted/removed elements using `query(":enter")`/`query(":leave")`
  19458. * - Querying all currently animating elements using `query(":animating")`
  19459. * - Querying elements that contain an animation trigger using `query("\@triggerName")`
  19460. * - Querying all elements that contain an animation triggers using `query("\@*")`
  19461. * - Including the current element into the animation sequence using `query(":self")`
  19462. *
  19463. *
  19464. * Each of these pseudo-selector tokens can be merged together into a combined query selector
  19465. * string:
  19466. *
  19467. * ```
  19468. * query(':self, .record:enter, .record:leave, \@subTrigger', [...])
  19469. * ```
  19470. *
  19471. * ### Demo
  19472. *
  19473. * ```
  19474. * \@Component({
  19475. * selector: 'inner',
  19476. * template: `
  19477. * <div [\@queryAnimation]="exp">
  19478. * <h1>Title</h1>
  19479. * <div class="content">
  19480. * Blah blah blah
  19481. * </div>
  19482. * </div>
  19483. * `,
  19484. * animations: [
  19485. * trigger('queryAnimation', [
  19486. * transition('* => goAnimate', [
  19487. * // hide the inner elements
  19488. * query('h1', style({ opacity: 0 })),
  19489. * query('.content', style({ opacity: 0 })),
  19490. *
  19491. * // animate the inner elements in, one by one
  19492. * query('h1', animate(1000, style({ opacity: 1 })),
  19493. * query('.content', animate(1000, style({ opacity: 1 })),
  19494. * ])
  19495. * ])
  19496. * ]
  19497. * })
  19498. * class Cmp {
  19499. * exp = '';
  19500. *
  19501. * goAnimate() {
  19502. * this.exp = 'goAnimate';
  19503. * }
  19504. * }
  19505. * ```
  19506. *
  19507. * \@experimental Animation support is experimental.
  19508. * @param {?} selector
  19509. * @param {?} animation
  19510. * @param {?=} options
  19511. * @return {?}
  19512. */
  19513. /**
  19514. * `stagger` is an animation-specific function that is designed to be used inside of Angular's
  19515. * animation DSL language. It is designed to be used inside of an animation {\@link query query()}
  19516. * and works by issuing a timing gap between after each queried item is animated.
  19517. *
  19518. * ### Usage
  19519. *
  19520. * In the example below there is a container element that wraps a list of items stamped out
  19521. * by an ngFor. The container element contains an animation trigger that will later be set
  19522. * to query for each of the inner items.
  19523. *
  19524. * ```html
  19525. * <!-- list.component.html -->
  19526. * <button (click)="toggle()">Show / Hide Items</button>
  19527. * <hr />
  19528. * <div [\@listAnimation]="items.length">
  19529. * <div *ngFor="let item of items">
  19530. * {{ item }}
  19531. * </div>
  19532. * </div>
  19533. * ```
  19534. *
  19535. * The component code for this looks as such:
  19536. *
  19537. * ```ts
  19538. * import {trigger, transition, style, animate, query, stagger} from '\@angular/animations';
  19539. * \@Component({
  19540. * templateUrl: 'list.component.html',
  19541. * animations: [
  19542. * trigger('listAnimation', [
  19543. * //...
  19544. * ])
  19545. * ]
  19546. * })
  19547. * class ListComponent {
  19548. * items = [];
  19549. *
  19550. * showItems() {
  19551. * this.items = [0,1,2,3,4];
  19552. * }
  19553. *
  19554. * hideItems() {
  19555. * this.items = [];
  19556. * }
  19557. *
  19558. * toggle() {
  19559. * this.items.length ? this.hideItems() : this.showItems();
  19560. * }
  19561. * }
  19562. * ```
  19563. *
  19564. * And now for the animation trigger code:
  19565. *
  19566. * ```ts
  19567. * trigger('listAnimation', [
  19568. * transition('* => *', [ // each time the binding value changes
  19569. * query(':leave', [
  19570. * stagger(100, [
  19571. * animate('0.5s', style({ opacity: 0 }))
  19572. * ])
  19573. * ]),
  19574. * query(':enter', [
  19575. * style({ opacity: 0 }),
  19576. * stagger(100, [
  19577. * animate('0.5s', style({ opacity: 1 }))
  19578. * ])
  19579. * ])
  19580. * ])
  19581. * ])
  19582. * ```
  19583. *
  19584. * Now each time the items are added/removed then either the opacity
  19585. * fade-in animation will run or each removed item will be faded out.
  19586. * When either of these animations occur then a stagger effect will be
  19587. * applied after each item's animation is started.
  19588. *
  19589. * \@experimental Animation support is experimental.
  19590. * @param {?} timings
  19591. * @param {?} animation
  19592. * @return {?}
  19593. */
  19594. /**
  19595. * @fileoverview added by tsickle
  19596. * @suppress {checkTypes} checked by tsc
  19597. */
  19598. /**
  19599. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19600. */
  19601. var AUTO_STYLE = '*';
  19602. /**
  19603. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19604. * @record
  19605. */
  19606. /**
  19607. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19608. * @record
  19609. */
  19610. /**
  19611. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19612. * @record
  19613. */
  19614. /**
  19615. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19616. * @record
  19617. */
  19618. /**
  19619. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19620. * @record
  19621. */
  19622. /**
  19623. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19624. * @record
  19625. */
  19626. /**
  19627. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19628. * @record
  19629. */
  19630. /**
  19631. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19632. * @record
  19633. */
  19634. /**
  19635. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19636. * @record
  19637. */
  19638. /**
  19639. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19640. * @param {?} name
  19641. * @param {?} definitions
  19642. * @return {?}
  19643. */
  19644. function trigger$$1(name, definitions) {
  19645. return trigger$1(name, definitions);
  19646. }
  19647. /**
  19648. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19649. * @param {?} timings
  19650. * @param {?=} styles
  19651. * @return {?}
  19652. */
  19653. function animate$$1(timings, styles) {
  19654. return animate$1(timings, styles);
  19655. }
  19656. /**
  19657. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19658. * @param {?} steps
  19659. * @return {?}
  19660. */
  19661. function group$$1(steps) {
  19662. return group$1(steps);
  19663. }
  19664. /**
  19665. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19666. * @param {?} steps
  19667. * @return {?}
  19668. */
  19669. function sequence$$1(steps) {
  19670. return sequence$1(steps);
  19671. }
  19672. /**
  19673. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19674. * @param {?} tokens
  19675. * @return {?}
  19676. */
  19677. function style$$1(tokens) {
  19678. return style$1(tokens);
  19679. }
  19680. /**
  19681. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19682. * @param {?} name
  19683. * @param {?} styles
  19684. * @return {?}
  19685. */
  19686. function state$$1(name, styles) {
  19687. return state$1(name, styles);
  19688. }
  19689. /**
  19690. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19691. * @param {?} steps
  19692. * @return {?}
  19693. */
  19694. function keyframes$$1(steps) {
  19695. return keyframes$1(steps);
  19696. }
  19697. /**
  19698. * @deprecated This symbol has moved. Please Import from \@angular/animations instead!
  19699. * @param {?} stateChangeExpr
  19700. * @param {?} steps
  19701. * @return {?}
  19702. */
  19703. function transition$$1(stateChangeExpr, steps) {
  19704. return transition$1(stateChangeExpr, steps);
  19705. }
  19706. /**
  19707. * @deprecated This has been renamed to `AnimationEvent`. Please import it from \@angular/animations.
  19708. * @record
  19709. */
  19710. /**
  19711. * @fileoverview added by tsickle
  19712. * @suppress {checkTypes} checked by tsc
  19713. */
  19714. /**
  19715. * @license
  19716. * Copyright Google Inc. All Rights Reserved.
  19717. *
  19718. * Use of this source code is governed by an MIT-style license that can be
  19719. * found in the LICENSE file at https://angular.io/license
  19720. */
  19721. /**
  19722. * @module
  19723. * @description
  19724. * Entry point from which you should import all public core APIs.
  19725. */
  19726. /**
  19727. * @fileoverview added by tsickle
  19728. * @suppress {checkTypes} checked by tsc
  19729. */
  19730. /**
  19731. * @license
  19732. * Copyright Google Inc. All Rights Reserved.
  19733. *
  19734. * Use of this source code is governed by an MIT-style license that can be
  19735. * found in the LICENSE file at https://angular.io/license
  19736. */
  19737. /**
  19738. * @module
  19739. * @description
  19740. * Entry point for all public APIs of this package.
  19741. */
  19742. // This file only reexports content of the `src` folder. Keep it that way.
  19743. /**
  19744. * @fileoverview added by tsickle
  19745. * @suppress {checkTypes} checked by tsc
  19746. */
  19747. /**
  19748. * Generated bundle index. Do not edit.
  19749. */
  19750. //# sourceMappingURL=core.js.map
  19751. /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(61)))
  19752. /***/ }),
  19753. /* 2 */
  19754. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  19755. "use strict";
  19756. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Config; });
  19757. /* harmony export (immutable) */ __webpack_exports__["c"] = setupConfig;
  19758. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ConfigToken; });
  19759. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  19760. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  19761. /**
  19762. * @name Config
  19763. * @demo /docs/demos/src/config/
  19764. * @description
  19765. * The Config lets you configure your entire app or specific platforms.
  19766. * You can set the tab placement, icon mode, animations, and more here.
  19767. *
  19768. * ```ts
  19769. * import { IonicApp, IonicModule } from 'ionic-angular';
  19770. *
  19771. * @NgModule({
  19772. * declarations: [ MyApp ],
  19773. * imports: [
  19774. * BrowserModule,
  19775. * IonicModule.forRoot(MyApp, {
  19776. * backButtonText: 'Go Back',
  19777. * iconMode: 'ios',
  19778. * modalEnter: 'modal-slide-in',
  19779. * modalLeave: 'modal-slide-out',
  19780. * tabsPlacement: 'bottom',
  19781. * pageTransition: 'ios-transition'
  19782. * }, {}
  19783. * )],
  19784. * bootstrap: [IonicApp],
  19785. * entryComponents: [ MyApp ],
  19786. * providers: []
  19787. * })
  19788. * ```
  19789. *
  19790. *
  19791. * Config can be overwritten at multiple levels allowing for more granular configuration.
  19792. * Below is an example where an app can override any setting we want based on a platform.
  19793. *
  19794. * ```ts
  19795. * import { IonicModule } from 'ionic-angular';
  19796. *
  19797. * @NgModule({
  19798. * ...
  19799. * imports: [
  19800. * BrowserModule,
  19801. * IonicModule.forRoot(MyApp, {
  19802. * tabsPlacement: 'bottom',
  19803. * platforms: {
  19804. * ios: {
  19805. * tabsPlacement: 'top',
  19806. * }
  19807. * }
  19808. * }, {}
  19809. * )],
  19810. * ...
  19811. * })
  19812. * ```
  19813. *
  19814. * We could also configure these values at a component level. Take `tabsPlacement`,
  19815. * we can configure this as a property on our `ion-tabs`.
  19816. *
  19817. * ```html
  19818. * <ion-tabs tabsPlacement="top">
  19819. * <ion-tab tabTitle="Dash" tabIcon="pulse" [root]="tabRoot"></ion-tab>
  19820. * </ion-tabs>
  19821. * ```
  19822. *
  19823. * The last way we could configure is through URL query strings. This is useful for testing
  19824. * while in the browser. Simply add `?ionic<PROPERTYNAME>=<value>` to the url.
  19825. *
  19826. * ```bash
  19827. * http://localhost:8100/?ionicTabsPlacement=bottom
  19828. * ```
  19829. *
  19830. * Any value can be added to config, and looked up at a later in any component.
  19831. *
  19832. * ```js
  19833. * config.set('ios', 'favoriteColor', 'green');
  19834. *
  19835. * // from any page in your app:
  19836. * config.get('favoriteColor'); // 'green' when iOS
  19837. * ```
  19838. *
  19839. *
  19840. * A config value can come from anywhere and be anything, but there are default
  19841. * values for each mode. The [theming](../../../theming/platform-specific-styles/)
  19842. * documentation has a chart of the default mode configuration. The following
  19843. * chart displays each property with a description of what it controls.
  19844. *
  19845. *
  19846. * | Config Property | Type | Details |
  19847. * |--------------------------|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
  19848. * | `activator` | `string` | Used for buttons, changes the effect of pressing on a button. Available options: `"ripple"`, `"highlight"`. |
  19849. * | `actionSheetEnter` | `string` | The name of the transition to use while an action sheet is presented. |
  19850. * | `actionSheetLeave` | `string` | The name of the transition to use while an action sheet is dismissed. |
  19851. * | `alertEnter` | `string` | The name of the transition to use while an alert is presented. |
  19852. * | `alertLeave` | `string` | The name of the transition to use while an alert is dismissed. |
  19853. * | `backButtonText` | `string` | The text to display by the back button icon in the navbar. |
  19854. * | `backButtonIcon` | `string` | The icon to use as the back button icon. |
  19855. * | `iconMode` | `string` | The mode to use for all icons throughout the application. Available options: `"ios"`, `"md"` |
  19856. * | `locationStrategy` | `string` | Set to 'path' to remove hashbangs when using Deeplinking. |
  19857. * | `loadingEnter` | `string` | The name of the transition to use while a loading indicator is presented. |
  19858. * | `loadingLeave` | `string` | The name of the transition to use while a loading indicator is dismissed. |
  19859. * | `menuType` | `string` | Type of menu to display. Available options: `"overlay"`, `"reveal"`, `"push"`. |
  19860. * | `modalEnter` | `string` | The name of the transition to use while a modal is presented. |
  19861. * | `modalLeave` | `string` | The name of the transition to use while a modal is dismiss. |
  19862. * | `mode` | `string` | The mode to use throughout the application. |
  19863. * | `pageTransition` | `string` | The name of the transition to use while changing pages. Available options: `"ios-transition"`, `"md-transition"`, `"wp-transition"`. |
  19864. * | `pickerEnter` | `string` | The name of the transition to use while a picker is presented. |
  19865. * | `pickerLeave` | `string` | The name of the transition to use while a picker is dismissed. |
  19866. * | `popoverEnter` | `string` | The name of the transition to use while a popover is presented. |
  19867. * | `popoverLeave` | `string` | The name of the transition to use while a popover is dismissed.
  19868. * | `scrollAssist` | `boolean` | Used to avoid the input to be hidden by the keyboard if it's near the bottom of the page.
  19869. * | `scrollPadding` | `boolean` | Used to remove the extra padding on ion-content when keyboard is displayed.
  19870. * | `spinner` | `string` | The default spinner to use when a name is not defined. |
  19871. * | `statusbarPadding` | `boolean` | Whether to hide extra padding for statusbar. |
  19872. * | `swipeBackEnabled` | `boolean` | Whether native iOS swipe to go back functionality is enabled. |
  19873. * | `tabsHighlight` | `boolean` | Whether to show a highlight line under the tab when it is selected. |
  19874. * | `tabsLayout` | `string` | The layout to use for all tabs. Available options: `"icon-top"`, `"icon-start"`, `"icon-end"`, `"icon-bottom"`, `"icon-hide"`, `"title-hide"`. |
  19875. * | `tabsPlacement` | `string` | The position of the tabs relative to the content. Available options: `"top"`, `"bottom"` |
  19876. * | `tabsHideOnSubPages` | `boolean` | Whether to hide the tabs on child pages or not. If `true` it will not show the tabs on child pages. |
  19877. * | `toastEnter` | `string` | The name of the transition to use while a toast is presented. |
  19878. * | `toastLeave` | `string` | The name of the transition to use while a toast is dismissed. |
  19879. *
  19880. **/
  19881. var Config = (function () {
  19882. function Config() {
  19883. this._c = {};
  19884. this._s = {};
  19885. this._modes = {};
  19886. this._trns = {};
  19887. }
  19888. /**
  19889. * @hidden
  19890. */
  19891. Config.prototype.init = function (config, plt) {
  19892. this._s = config && Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["k" /* isObject */])(config) && !Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["e" /* isArray */])(config) ? config : {};
  19893. this.plt = plt;
  19894. };
  19895. /**
  19896. * @name get
  19897. * @description
  19898. * Returns a single config value, given a key.
  19899. *
  19900. * @param {string} [key] - the key for the config value
  19901. * @param {any} [fallbackValue] - a fallback value to use when the config
  19902. * value was not found, or is config value is `null`. Fallback value
  19903. * defaults to `null`.
  19904. */
  19905. Config.prototype.get = function (key, fallbackValue) {
  19906. if (fallbackValue === void 0) { fallbackValue = null; }
  19907. var platform = this.plt;
  19908. if (!Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(this._c[key])) {
  19909. if (!Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(key)) {
  19910. throw 'config key is not defined';
  19911. }
  19912. // if the value was already set this will all be skipped
  19913. // if there was no user config then it'll check each of
  19914. // the user config's platforms, which already contains
  19915. // settings from default platform configs
  19916. var userPlatformValue = undefined;
  19917. var userDefaultValue = this._s[key];
  19918. var userPlatformModeValue = undefined;
  19919. var userDefaultModeValue = undefined;
  19920. var platformValue = undefined;
  19921. var platformModeValue = undefined;
  19922. var configObj = null;
  19923. if (platform) {
  19924. var queryStringValue = platform.getQueryParam('ionic' + key);
  19925. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(queryStringValue)) {
  19926. return this._c[key] = (queryStringValue === 'true' ? true : queryStringValue === 'false' ? false : queryStringValue);
  19927. }
  19928. // check the platform settings object for this value
  19929. // loop though each of the active platforms
  19930. // array of active platforms, which also knows the hierarchy,
  19931. // with the last one the most important
  19932. var activePlatformKeys = platform.platforms();
  19933. // loop through all of the active platforms we're on
  19934. for (var i = 0, ilen = activePlatformKeys.length; i < ilen; i++) {
  19935. // get user defined platform values
  19936. if (this._s.platforms) {
  19937. configObj = this._s.platforms[activePlatformKeys[i]];
  19938. if (configObj) {
  19939. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(configObj[key])) {
  19940. userPlatformValue = configObj[key];
  19941. }
  19942. configObj = this.getModeConfig(configObj.mode);
  19943. if (configObj && Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(configObj[key])) {
  19944. userPlatformModeValue = configObj[key];
  19945. }
  19946. }
  19947. }
  19948. // get default platform's setting
  19949. configObj = platform.getPlatformConfig(activePlatformKeys[i]);
  19950. if (configObj && configObj.settings) {
  19951. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(configObj.settings[key])) {
  19952. // found a setting for this platform
  19953. platformValue = configObj.settings[key];
  19954. }
  19955. configObj = this.getModeConfig(configObj.settings.mode);
  19956. if (configObj && Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(configObj[key])) {
  19957. // found setting for this platform's mode
  19958. platformModeValue = configObj[key];
  19959. }
  19960. }
  19961. }
  19962. }
  19963. configObj = this.getModeConfig(this._s.mode);
  19964. if (configObj && Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(configObj[key])) {
  19965. userDefaultModeValue = configObj[key];
  19966. }
  19967. // cache the value
  19968. this._c[key] = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(userPlatformValue) ? userPlatformValue :
  19969. Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(userDefaultValue) ? userDefaultValue :
  19970. Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(userPlatformModeValue) ? userPlatformModeValue :
  19971. Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(userDefaultModeValue) ? userDefaultModeValue :
  19972. Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(platformValue) ? platformValue :
  19973. Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["h" /* isDefined */])(platformModeValue) ? platformModeValue :
  19974. null;
  19975. }
  19976. // return key's value
  19977. // either it came directly from the user config
  19978. // or it was from the users platform configs
  19979. // or it was from the default platform configs
  19980. // in that order
  19981. var rtnVal = this._c[key];
  19982. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["i" /* isFunction */])(rtnVal)) {
  19983. rtnVal = rtnVal(platform);
  19984. }
  19985. return (rtnVal !== null ? rtnVal : fallbackValue);
  19986. };
  19987. /**
  19988. * @name getBoolean
  19989. * @description
  19990. * Same as `get()`, however always returns a boolean value. If the
  19991. * value from `get()` is `null`, then it'll return the `fallbackValue`
  19992. * which defaults to `false`. Otherwise, `getBoolean()` will return
  19993. * if the config value is truthy or not. It also returns `true` if
  19994. * the config value was the string value `"true"`.
  19995. * @param {string} [key] - the key for the config value
  19996. * @param {boolean} [fallbackValue] - a fallback value to use when the config
  19997. * value was `null`. Fallback value defaults to `false`.
  19998. */
  19999. Config.prototype.getBoolean = function (key, fallbackValue) {
  20000. if (fallbackValue === void 0) { fallbackValue = false; }
  20001. var val = this.get(key);
  20002. if (val === null) {
  20003. return fallbackValue;
  20004. }
  20005. if (typeof val === 'string') {
  20006. return val === 'true';
  20007. }
  20008. return !!val;
  20009. };
  20010. /**
  20011. * @name getNumber
  20012. * @description
  20013. * Same as `get()`, however always returns a number value. Uses `parseFloat()`
  20014. * on the value received from `get()`. If the result from the parse is `NaN`,
  20015. * then it will return the value passed to `fallbackValue`. If no fallback
  20016. * value was provided then it'll default to returning `NaN` when the result
  20017. * is not a valid number.
  20018. * @param {string} [key] - the key for the config value
  20019. * @param {number} [fallbackValue] - a fallback value to use when the config
  20020. * value turned out to be `NaN`. Fallback value defaults to `NaN`.
  20021. */
  20022. Config.prototype.getNumber = function (key, fallbackValue) {
  20023. if (fallbackValue === void 0) { fallbackValue = NaN; }
  20024. var val = parseFloat(this.get(key));
  20025. return isNaN(val) ? fallbackValue : val;
  20026. };
  20027. /**
  20028. * @name set
  20029. * @description
  20030. * Sets a single config value.
  20031. *
  20032. * @param {string} [platform] - The platform (either 'ios' or 'android') that the config value should apply to. Leaving this blank will apply the config value to all platforms.
  20033. * @param {string} [key] - The key used to look up the value at a later point in time.
  20034. * @param {string} [value] - The config value being stored.
  20035. */
  20036. Config.prototype.set = function () {
  20037. var args = [];
  20038. for (var _i = 0; _i < arguments.length; _i++) {
  20039. args[_i] = arguments[_i];
  20040. }
  20041. var arg0 = args[0];
  20042. var arg1 = args[1];
  20043. switch (args.length) {
  20044. case 2:
  20045. // set('key', 'value') = set key/value pair
  20046. // arg1 = value
  20047. this._s[arg0] = arg1;
  20048. delete this._c[arg0]; // clear cache
  20049. break;
  20050. case 3:
  20051. // setting('ios', 'key', 'value') = set key/value pair for platform
  20052. // arg0 = platform
  20053. // arg1 = key
  20054. // arg2 = value
  20055. this._s.platforms = this._s.platforms || {};
  20056. this._s.platforms[arg0] = this._s.platforms[arg0] || {};
  20057. this._s.platforms[arg0][arg1] = args[2];
  20058. delete this._c[arg1]; // clear cache
  20059. break;
  20060. }
  20061. return this;
  20062. };
  20063. /**
  20064. * @hidden
  20065. * @name settings()
  20066. * @description
  20067. */
  20068. Config.prototype.settings = function (arg0, arg1) {
  20069. switch (arguments.length) {
  20070. case 0:
  20071. return this._s;
  20072. case 1:
  20073. // settings({...})
  20074. this._s = arg0;
  20075. this._c = {}; // clear cache
  20076. break;
  20077. case 2:
  20078. // settings('ios', {...})
  20079. this._s.platforms = this._s.platforms || {};
  20080. this._s.platforms[arg0] = arg1;
  20081. this._c = {}; // clear cache
  20082. break;
  20083. }
  20084. return this;
  20085. };
  20086. /**
  20087. * @hidden
  20088. */
  20089. Config.prototype.setModeConfig = function (modeName, modeConfig) {
  20090. this._modes[modeName] = modeConfig;
  20091. };
  20092. /**
  20093. * @hidden
  20094. */
  20095. Config.prototype.getModeConfig = function (modeName) {
  20096. return this._modes[modeName] || null;
  20097. };
  20098. /**
  20099. * @hidden
  20100. */
  20101. Config.prototype.setTransition = function (trnsName, trnsClass) {
  20102. this._trns[trnsName] = trnsClass;
  20103. };
  20104. /**
  20105. * @hidden
  20106. */
  20107. Config.prototype.getTransition = function (trnsName) {
  20108. return this._trns[trnsName] || null;
  20109. };
  20110. return Config;
  20111. }());
  20112. /**
  20113. * @hidden
  20114. */
  20115. function setupConfig(userConfig, plt) {
  20116. var config = new Config();
  20117. config.init(userConfig, plt);
  20118. // add the config obj to the window
  20119. var win = plt.win();
  20120. win['Ionic'] = win['Ionic'] || {};
  20121. win['Ionic']['config'] = config;
  20122. return config;
  20123. }
  20124. /**
  20125. * @hidden
  20126. */
  20127. var ConfigToken = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('USERCONFIG');
  20128. //# sourceMappingURL=config.js.map
  20129. /***/ }),
  20130. /* 3 */
  20131. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  20132. "use strict";
  20133. /* harmony export (immutable) */ __webpack_exports__["a"] = clamp;
  20134. /* harmony export (immutable) */ __webpack_exports__["b"] = deepCopy;
  20135. /* harmony export (immutable) */ __webpack_exports__["c"] = deepEqual;
  20136. /* unused harmony export debounce */
  20137. /* unused harmony export normalizeURL */
  20138. /* harmony export (immutable) */ __webpack_exports__["d"] = defaults;
  20139. /* unused harmony export isBoolean */
  20140. /* harmony export (immutable) */ __webpack_exports__["n"] = isString;
  20141. /* harmony export (immutable) */ __webpack_exports__["j"] = isNumber;
  20142. /* harmony export (immutable) */ __webpack_exports__["i"] = isFunction;
  20143. /* harmony export (immutable) */ __webpack_exports__["h"] = isDefined;
  20144. /* harmony export (immutable) */ __webpack_exports__["p"] = isUndefined;
  20145. /* harmony export (immutable) */ __webpack_exports__["l"] = isPresent;
  20146. /* harmony export (immutable) */ __webpack_exports__["f"] = isBlank;
  20147. /* harmony export (immutable) */ __webpack_exports__["k"] = isObject;
  20148. /* harmony export (immutable) */ __webpack_exports__["e"] = isArray;
  20149. /* unused harmony export isPrimitive */
  20150. /* harmony export (immutable) */ __webpack_exports__["o"] = isTrueProperty;
  20151. /* harmony export (immutable) */ __webpack_exports__["g"] = isCheckedProperty;
  20152. /* harmony export (immutable) */ __webpack_exports__["m"] = isRightSide;
  20153. /* harmony export (immutable) */ __webpack_exports__["r"] = reorderArray;
  20154. /* harmony export (immutable) */ __webpack_exports__["q"] = removeArrayItem;
  20155. /* harmony export (immutable) */ __webpack_exports__["t"] = swipeShouldReset;
  20156. /* harmony export (immutable) */ __webpack_exports__["s"] = requestIonicCallback;
  20157. /* unused harmony export assert */
  20158. /* unused harmony export runInDev */
  20159. /**
  20160. * @hidden
  20161. * Given a min and max, restrict the given number
  20162. * to the range.
  20163. * @param min the minimum
  20164. * @param n the value
  20165. * @param max the maximum
  20166. */
  20167. function clamp(min, n, max) {
  20168. return Math.max(min, Math.min(n, max));
  20169. }
  20170. /** @hidden */
  20171. function deepCopy(obj) {
  20172. return JSON.parse(JSON.stringify(obj));
  20173. }
  20174. /** @hidden */
  20175. function deepEqual(a, b) {
  20176. if (a === b) {
  20177. return true;
  20178. }
  20179. return JSON.stringify(a) === JSON.stringify(b);
  20180. }
  20181. /** @hidden */
  20182. function debounce(fn, wait, immediate) {
  20183. if (immediate === void 0) { immediate = false; }
  20184. var timeout, args, context, timestamp, result;
  20185. return function () {
  20186. context = this;
  20187. args = arguments;
  20188. timestamp = Date.now();
  20189. var later = function () {
  20190. var last = Date.now() - timestamp;
  20191. if (last < wait) {
  20192. timeout = setTimeout(later, wait - last);
  20193. }
  20194. else {
  20195. timeout = null;
  20196. if (!immediate)
  20197. result = fn.apply(context, args);
  20198. }
  20199. };
  20200. var callNow = immediate && !timeout;
  20201. if (!timeout) {
  20202. timeout = setTimeout(later, wait);
  20203. }
  20204. if (callNow)
  20205. result = fn.apply(context, args);
  20206. return result;
  20207. };
  20208. }
  20209. /**
  20210. * @hidden
  20211. * Rewrites an absolute URL so it works across file and http based engines
  20212. */
  20213. function normalizeURL(url) {
  20214. var ionic = window['Ionic'];
  20215. if (ionic && ionic.normalizeURL) {
  20216. return ionic.normalizeURL(url);
  20217. }
  20218. return url;
  20219. }
  20220. /**
  20221. * @hidden
  20222. * Apply default arguments if they don't exist in
  20223. * the first object.
  20224. * @param {any} dest the destination to apply defaults to.
  20225. */
  20226. function defaults(dest) {
  20227. var _args = [];
  20228. for (var _i = 1; _i < arguments.length; _i++) {
  20229. _args[_i - 1] = arguments[_i];
  20230. }
  20231. for (var i = arguments.length - 1; i >= 1; i--) {
  20232. var source = arguments[i];
  20233. if (source) {
  20234. for (var key in source) {
  20235. if (source.hasOwnProperty(key) && !dest.hasOwnProperty(key)) {
  20236. dest[key] = source[key];
  20237. }
  20238. }
  20239. }
  20240. }
  20241. return dest;
  20242. }
  20243. /** @hidden */
  20244. function isBoolean(val) { return typeof val === 'boolean'; }
  20245. /** @hidden */
  20246. function isString(val) { return typeof val === 'string'; }
  20247. /** @hidden */
  20248. function isNumber(val) { return typeof val === 'number'; }
  20249. /** @hidden */
  20250. function isFunction(val) { return typeof val === 'function'; }
  20251. /** @hidden */
  20252. function isDefined(val) { return typeof val !== 'undefined'; }
  20253. /** @hidden */
  20254. function isUndefined(val) { return typeof val === 'undefined'; }
  20255. /** @hidden */
  20256. function isPresent(val) { return val !== undefined && val !== null; }
  20257. /** @hidden */
  20258. function isBlank(val) { return val === undefined || val === null; }
  20259. /** @hidden */
  20260. function isObject(val) { return typeof val === 'object'; }
  20261. /** @hidden */
  20262. function isArray(val) { return Array.isArray(val); }
  20263. /** @hidden */
  20264. function isPrimitive(val) {
  20265. return isString(val) || isBoolean(val) || (isNumber(val) && !isNaN(val));
  20266. }
  20267. /** @hidden */
  20268. function isTrueProperty(val) {
  20269. if (typeof val === 'string') {
  20270. val = val.toLowerCase().trim();
  20271. return (val === 'true' || val === 'on' || val === '');
  20272. }
  20273. return !!val;
  20274. }
  20275. /** @hidden */
  20276. function isCheckedProperty(a, b) {
  20277. if (a === undefined || a === null || a === '') {
  20278. return (b === undefined || b === null || b === '');
  20279. }
  20280. else if (a === true || a === 'true') {
  20281. return (b === true || b === 'true');
  20282. }
  20283. else if (a === false || a === 'false') {
  20284. return (b === false || b === 'false');
  20285. }
  20286. else if (a === 0 || a === '0') {
  20287. return (b === 0 || b === '0');
  20288. }
  20289. // not using strict comparison on purpose
  20290. return (a == b); // tslint:disable-line
  20291. }
  20292. /**
  20293. * @hidden
  20294. * Given a side, return if it should be on the right
  20295. * based on the value of dir
  20296. * @param side the side
  20297. * @param isRTL whether the application dir is rtl
  20298. * @param defaultRight whether the default side is right
  20299. */
  20300. function isRightSide(side, isRTL, defaultRight) {
  20301. if (defaultRight === void 0) { defaultRight = false; }
  20302. switch (side) {
  20303. case 'right': return true;
  20304. case 'left': return false;
  20305. case 'end': return !isRTL;
  20306. case 'start': return isRTL;
  20307. default: return defaultRight ? !isRTL : isRTL;
  20308. }
  20309. }
  20310. /** @hidden */
  20311. function reorderArray(array, indexes) {
  20312. var element = array[indexes.from];
  20313. array.splice(indexes.from, 1);
  20314. array.splice(indexes.to, 0, element);
  20315. return array;
  20316. }
  20317. /** @hidden */
  20318. function removeArrayItem(array, item) {
  20319. var index = array.indexOf(item);
  20320. return !!~index && !!array.splice(index, 1);
  20321. }
  20322. /** @hidden */
  20323. function swipeShouldReset(isResetDirection, isMovingFast, isOnResetZone) {
  20324. // The logic required to know when the sliding item should close (openAmount=0)
  20325. // depends on three booleans (isCloseDirection, isMovingFast, isOnCloseZone)
  20326. // and it ended up being too complicated to be written manually without errors
  20327. // so the truth table is attached below: (0=false, 1=true)
  20328. // isCloseDirection | isMovingFast | isOnCloseZone || shouldClose
  20329. // 0 | 0 | 0 || 0
  20330. // 0 | 0 | 1 || 1
  20331. // 0 | 1 | 0 || 0
  20332. // 0 | 1 | 1 || 0
  20333. // 1 | 0 | 0 || 0
  20334. // 1 | 0 | 1 || 1
  20335. // 1 | 1 | 0 || 1
  20336. // 1 | 1 | 1 || 1
  20337. // The resulting expression was generated by resolving the K-map (Karnaugh map):
  20338. var shouldClose = (!isMovingFast && isOnResetZone) || (isResetDirection && isMovingFast);
  20339. return shouldClose;
  20340. }
  20341. /** @hidden */
  20342. var ASSERT_ENABLED = true;
  20343. /** @hidden */
  20344. function _runInDev(fn) {
  20345. if (ASSERT_ENABLED === true) {
  20346. return fn();
  20347. }
  20348. }
  20349. /** @hidden */
  20350. function _assert(actual, reason) {
  20351. if (!actual && ASSERT_ENABLED === true) {
  20352. var message = 'IONIC ASSERT: ' + reason;
  20353. console.error(message);
  20354. debugger; // tslint:disable-line
  20355. throw new Error(message);
  20356. }
  20357. }
  20358. /** @hidden */
  20359. function requestIonicCallback(functionToLazy) {
  20360. if ('requestIdleCallback' in window) {
  20361. return window.requestIdleCallback(functionToLazy);
  20362. }
  20363. else {
  20364. return setTimeout(functionToLazy, 500);
  20365. }
  20366. }
  20367. /** @hidden */
  20368. /** @hidden */
  20369. //# sourceMappingURL=util.js.map
  20370. /***/ }),
  20371. /* 4 */
  20372. /***/ (function(module, exports, __webpack_require__) {
  20373. "use strict";
  20374. var __extends = (this && this.__extends) || function (d, b) {
  20375. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  20376. function __() { this.constructor = d; }
  20377. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  20378. };
  20379. var isFunction_1 = __webpack_require__(62);
  20380. var Subscription_1 = __webpack_require__(14);
  20381. var Observer_1 = __webpack_require__(156);
  20382. var rxSubscriber_1 = __webpack_require__(63);
  20383. /**
  20384. * Implements the {@link Observer} interface and extends the
  20385. * {@link Subscription} class. While the {@link Observer} is the public API for
  20386. * consuming the values of an {@link Observable}, all Observers get converted to
  20387. * a Subscriber, in order to provide Subscription-like capabilities such as
  20388. * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for
  20389. * implementing operators, but it is rarely used as a public API.
  20390. *
  20391. * @class Subscriber<T>
  20392. */
  20393. var Subscriber = (function (_super) {
  20394. __extends(Subscriber, _super);
  20395. /**
  20396. * @param {Observer|function(value: T): void} [destinationOrNext] A partially
  20397. * defined Observer or a `next` callback function.
  20398. * @param {function(e: ?any): void} [error] The `error` callback of an
  20399. * Observer.
  20400. * @param {function(): void} [complete] The `complete` callback of an
  20401. * Observer.
  20402. */
  20403. function Subscriber(destinationOrNext, error, complete) {
  20404. _super.call(this);
  20405. this.syncErrorValue = null;
  20406. this.syncErrorThrown = false;
  20407. this.syncErrorThrowable = false;
  20408. this.isStopped = false;
  20409. switch (arguments.length) {
  20410. case 0:
  20411. this.destination = Observer_1.empty;
  20412. break;
  20413. case 1:
  20414. if (!destinationOrNext) {
  20415. this.destination = Observer_1.empty;
  20416. break;
  20417. }
  20418. if (typeof destinationOrNext === 'object') {
  20419. // HACK(benlesh): To resolve an issue where Node users may have multiple
  20420. // copies of rxjs in their node_modules directory.
  20421. if (isTrustedSubscriber(destinationOrNext)) {
  20422. var trustedSubscriber = destinationOrNext[rxSubscriber_1.rxSubscriber]();
  20423. this.syncErrorThrowable = trustedSubscriber.syncErrorThrowable;
  20424. this.destination = trustedSubscriber;
  20425. trustedSubscriber.add(this);
  20426. }
  20427. else {
  20428. this.syncErrorThrowable = true;
  20429. this.destination = new SafeSubscriber(this, destinationOrNext);
  20430. }
  20431. break;
  20432. }
  20433. default:
  20434. this.syncErrorThrowable = true;
  20435. this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);
  20436. break;
  20437. }
  20438. }
  20439. Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () { return this; };
  20440. /**
  20441. * A static factory for a Subscriber, given a (potentially partial) definition
  20442. * of an Observer.
  20443. * @param {function(x: ?T): void} [next] The `next` callback of an Observer.
  20444. * @param {function(e: ?any): void} [error] The `error` callback of an
  20445. * Observer.
  20446. * @param {function(): void} [complete] The `complete` callback of an
  20447. * Observer.
  20448. * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)
  20449. * Observer represented by the given arguments.
  20450. */
  20451. Subscriber.create = function (next, error, complete) {
  20452. var subscriber = new Subscriber(next, error, complete);
  20453. subscriber.syncErrorThrowable = false;
  20454. return subscriber;
  20455. };
  20456. /**
  20457. * The {@link Observer} callback to receive notifications of type `next` from
  20458. * the Observable, with a value. The Observable may call this method 0 or more
  20459. * times.
  20460. * @param {T} [value] The `next` value.
  20461. * @return {void}
  20462. */
  20463. Subscriber.prototype.next = function (value) {
  20464. if (!this.isStopped) {
  20465. this._next(value);
  20466. }
  20467. };
  20468. /**
  20469. * The {@link Observer} callback to receive notifications of type `error` from
  20470. * the Observable, with an attached {@link Error}. Notifies the Observer that
  20471. * the Observable has experienced an error condition.
  20472. * @param {any} [err] The `error` exception.
  20473. * @return {void}
  20474. */
  20475. Subscriber.prototype.error = function (err) {
  20476. if (!this.isStopped) {
  20477. this.isStopped = true;
  20478. this._error(err);
  20479. }
  20480. };
  20481. /**
  20482. * The {@link Observer} callback to receive a valueless notification of type
  20483. * `complete` from the Observable. Notifies the Observer that the Observable
  20484. * has finished sending push-based notifications.
  20485. * @return {void}
  20486. */
  20487. Subscriber.prototype.complete = function () {
  20488. if (!this.isStopped) {
  20489. this.isStopped = true;
  20490. this._complete();
  20491. }
  20492. };
  20493. Subscriber.prototype.unsubscribe = function () {
  20494. if (this.closed) {
  20495. return;
  20496. }
  20497. this.isStopped = true;
  20498. _super.prototype.unsubscribe.call(this);
  20499. };
  20500. Subscriber.prototype._next = function (value) {
  20501. this.destination.next(value);
  20502. };
  20503. Subscriber.prototype._error = function (err) {
  20504. this.destination.error(err);
  20505. this.unsubscribe();
  20506. };
  20507. Subscriber.prototype._complete = function () {
  20508. this.destination.complete();
  20509. this.unsubscribe();
  20510. };
  20511. /** @deprecated internal use only */ Subscriber.prototype._unsubscribeAndRecycle = function () {
  20512. var _a = this, _parent = _a._parent, _parents = _a._parents;
  20513. this._parent = null;
  20514. this._parents = null;
  20515. this.unsubscribe();
  20516. this.closed = false;
  20517. this.isStopped = false;
  20518. this._parent = _parent;
  20519. this._parents = _parents;
  20520. return this;
  20521. };
  20522. return Subscriber;
  20523. }(Subscription_1.Subscription));
  20524. exports.Subscriber = Subscriber;
  20525. /**
  20526. * We need this JSDoc comment for affecting ESDoc.
  20527. * @ignore
  20528. * @extends {Ignored}
  20529. */
  20530. var SafeSubscriber = (function (_super) {
  20531. __extends(SafeSubscriber, _super);
  20532. function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
  20533. _super.call(this);
  20534. this._parentSubscriber = _parentSubscriber;
  20535. var next;
  20536. var context = this;
  20537. if (isFunction_1.isFunction(observerOrNext)) {
  20538. next = observerOrNext;
  20539. }
  20540. else if (observerOrNext) {
  20541. next = observerOrNext.next;
  20542. error = observerOrNext.error;
  20543. complete = observerOrNext.complete;
  20544. if (observerOrNext !== Observer_1.empty) {
  20545. context = Object.create(observerOrNext);
  20546. if (isFunction_1.isFunction(context.unsubscribe)) {
  20547. this.add(context.unsubscribe.bind(context));
  20548. }
  20549. context.unsubscribe = this.unsubscribe.bind(this);
  20550. }
  20551. }
  20552. this._context = context;
  20553. this._next = next;
  20554. this._error = error;
  20555. this._complete = complete;
  20556. }
  20557. SafeSubscriber.prototype.next = function (value) {
  20558. if (!this.isStopped && this._next) {
  20559. var _parentSubscriber = this._parentSubscriber;
  20560. if (!_parentSubscriber.syncErrorThrowable) {
  20561. this.__tryOrUnsub(this._next, value);
  20562. }
  20563. else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
  20564. this.unsubscribe();
  20565. }
  20566. }
  20567. };
  20568. SafeSubscriber.prototype.error = function (err) {
  20569. if (!this.isStopped) {
  20570. var _parentSubscriber = this._parentSubscriber;
  20571. if (this._error) {
  20572. if (!_parentSubscriber.syncErrorThrowable) {
  20573. this.__tryOrUnsub(this._error, err);
  20574. this.unsubscribe();
  20575. }
  20576. else {
  20577. this.__tryOrSetError(_parentSubscriber, this._error, err);
  20578. this.unsubscribe();
  20579. }
  20580. }
  20581. else if (!_parentSubscriber.syncErrorThrowable) {
  20582. this.unsubscribe();
  20583. throw err;
  20584. }
  20585. else {
  20586. _parentSubscriber.syncErrorValue = err;
  20587. _parentSubscriber.syncErrorThrown = true;
  20588. this.unsubscribe();
  20589. }
  20590. }
  20591. };
  20592. SafeSubscriber.prototype.complete = function () {
  20593. var _this = this;
  20594. if (!this.isStopped) {
  20595. var _parentSubscriber = this._parentSubscriber;
  20596. if (this._complete) {
  20597. var wrappedComplete = function () { return _this._complete.call(_this._context); };
  20598. if (!_parentSubscriber.syncErrorThrowable) {
  20599. this.__tryOrUnsub(wrappedComplete);
  20600. this.unsubscribe();
  20601. }
  20602. else {
  20603. this.__tryOrSetError(_parentSubscriber, wrappedComplete);
  20604. this.unsubscribe();
  20605. }
  20606. }
  20607. else {
  20608. this.unsubscribe();
  20609. }
  20610. }
  20611. };
  20612. SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
  20613. try {
  20614. fn.call(this._context, value);
  20615. }
  20616. catch (err) {
  20617. this.unsubscribe();
  20618. throw err;
  20619. }
  20620. };
  20621. SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
  20622. try {
  20623. fn.call(this._context, value);
  20624. }
  20625. catch (err) {
  20626. parent.syncErrorValue = err;
  20627. parent.syncErrorThrown = true;
  20628. return true;
  20629. }
  20630. return false;
  20631. };
  20632. /** @deprecated internal use only */ SafeSubscriber.prototype._unsubscribe = function () {
  20633. var _parentSubscriber = this._parentSubscriber;
  20634. this._context = null;
  20635. this._parentSubscriber = null;
  20636. _parentSubscriber.unsubscribe();
  20637. };
  20638. return SafeSubscriber;
  20639. }(Subscriber));
  20640. function isTrustedSubscriber(obj) {
  20641. return obj instanceof Subscriber || ('syncErrorThrowable' in obj && obj[rxSubscriber_1.rxSubscriber]);
  20642. }
  20643. //# sourceMappingURL=Subscriber.js.map
  20644. /***/ }),
  20645. /* 5 */
  20646. /***/ (function(module, exports, __webpack_require__) {
  20647. "use strict";
  20648. var root_1 = __webpack_require__(19);
  20649. var isArrayLike_1 = __webpack_require__(157);
  20650. var isPromise_1 = __webpack_require__(158);
  20651. var isObject_1 = __webpack_require__(154);
  20652. var Observable_1 = __webpack_require__(0);
  20653. var iterator_1 = __webpack_require__(46);
  20654. var InnerSubscriber_1 = __webpack_require__(354);
  20655. var observable_1 = __webpack_require__(64);
  20656. function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
  20657. var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);
  20658. if (destination.closed) {
  20659. return null;
  20660. }
  20661. if (result instanceof Observable_1.Observable) {
  20662. if (result._isScalar) {
  20663. destination.next(result.value);
  20664. destination.complete();
  20665. return null;
  20666. }
  20667. else {
  20668. destination.syncErrorThrowable = true;
  20669. return result.subscribe(destination);
  20670. }
  20671. }
  20672. else if (isArrayLike_1.isArrayLike(result)) {
  20673. for (var i = 0, len = result.length; i < len && !destination.closed; i++) {
  20674. destination.next(result[i]);
  20675. }
  20676. if (!destination.closed) {
  20677. destination.complete();
  20678. }
  20679. }
  20680. else if (isPromise_1.isPromise(result)) {
  20681. result.then(function (value) {
  20682. if (!destination.closed) {
  20683. destination.next(value);
  20684. destination.complete();
  20685. }
  20686. }, function (err) { return destination.error(err); })
  20687. .then(null, function (err) {
  20688. // Escaping the Promise trap: globally throw unhandled errors
  20689. root_1.root.setTimeout(function () { throw err; });
  20690. });
  20691. return destination;
  20692. }
  20693. else if (result && typeof result[iterator_1.iterator] === 'function') {
  20694. var iterator = result[iterator_1.iterator]();
  20695. do {
  20696. var item = iterator.next();
  20697. if (item.done) {
  20698. destination.complete();
  20699. break;
  20700. }
  20701. destination.next(item.value);
  20702. if (destination.closed) {
  20703. break;
  20704. }
  20705. } while (true);
  20706. }
  20707. else if (result && typeof result[observable_1.observable] === 'function') {
  20708. var obs = result[observable_1.observable]();
  20709. if (typeof obs.subscribe !== 'function') {
  20710. destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));
  20711. }
  20712. else {
  20713. return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));
  20714. }
  20715. }
  20716. else {
  20717. var value = isObject_1.isObject(result) ? 'an invalid object' : "'" + result + "'";
  20718. var msg = ("You provided " + value + " where a stream was expected.")
  20719. + ' You can provide an Observable, Promise, Array, or Iterable.';
  20720. destination.error(new TypeError(msg));
  20721. }
  20722. return null;
  20723. }
  20724. exports.subscribeToResult = subscribeToResult;
  20725. //# sourceMappingURL=subscribeToResult.js.map
  20726. /***/ }),
  20727. /* 6 */
  20728. /***/ (function(module, exports, __webpack_require__) {
  20729. "use strict";
  20730. var __extends = (this && this.__extends) || function (d, b) {
  20731. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  20732. function __() { this.constructor = d; }
  20733. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  20734. };
  20735. var Subscriber_1 = __webpack_require__(4);
  20736. /**
  20737. * We need this JSDoc comment for affecting ESDoc.
  20738. * @ignore
  20739. * @extends {Ignored}
  20740. */
  20741. var OuterSubscriber = (function (_super) {
  20742. __extends(OuterSubscriber, _super);
  20743. function OuterSubscriber() {
  20744. _super.apply(this, arguments);
  20745. }
  20746. OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  20747. this.destination.next(innerValue);
  20748. };
  20749. OuterSubscriber.prototype.notifyError = function (error, innerSub) {
  20750. this.destination.error(error);
  20751. };
  20752. OuterSubscriber.prototype.notifyComplete = function (innerSub) {
  20753. this.destination.complete();
  20754. };
  20755. return OuterSubscriber;
  20756. }(Subscriber_1.Subscriber));
  20757. exports.OuterSubscriber = OuterSubscriber;
  20758. //# sourceMappingURL=OuterSubscriber.js.map
  20759. /***/ }),
  20760. /* 7 */
  20761. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  20762. "use strict";
  20763. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Platform; });
  20764. /* harmony export (immutable) */ __webpack_exports__["b"] = setupPlatform;
  20765. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  20766. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_dom__ = __webpack_require__(18);
  20767. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__query_params__ = __webpack_require__(356);
  20768. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  20769. /**
  20770. * @name Platform
  20771. * @description
  20772. * The Platform service can be used to get information about your current device.
  20773. * You can get all of the platforms associated with the device using the [platforms](#platforms)
  20774. * method, including whether the app is being viewed from a tablet, if it's
  20775. * on a mobile device or browser, and the exact platform (iOS, Android, etc).
  20776. * You can also get the orientation of the device, if it uses right-to-left
  20777. * language direction, and much much more. With this information you can completely
  20778. * customize your app to fit any device.
  20779. *
  20780. * @usage
  20781. * ```ts
  20782. * import { Platform } from 'ionic-angular';
  20783. *
  20784. * @Component({...})
  20785. * export MyPage {
  20786. * constructor(public platform: Platform) {
  20787. *
  20788. * }
  20789. * }
  20790. * ```
  20791. * @demo /docs/demos/src/platform/
  20792. */
  20793. var Platform = (function () {
  20794. function Platform() {
  20795. var _this = this;
  20796. this._versions = {};
  20797. this._qp = new __WEBPACK_IMPORTED_MODULE_2__query_params__["a" /* QueryParams */]();
  20798. this._bbActions = [];
  20799. this._pW = 0;
  20800. this._pH = 0;
  20801. this._lW = 0;
  20802. this._lH = 0;
  20803. this._isPortrait = null;
  20804. this._uiEvtOpts = false;
  20805. /** @internal */
  20806. this._platforms = [];
  20807. // Events meant to be triggered by the engine
  20808. // **********************************************
  20809. /**
  20810. * @hidden
  20811. */
  20812. this.backButton = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  20813. /**
  20814. * The pause event emits when the native platform puts the application
  20815. * into the background, typically when the user switches to a different
  20816. * application. This event would emit when a Cordova app is put into
  20817. * the background, however, it would not fire on a standard web browser.
  20818. */
  20819. this.pause = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  20820. /**
  20821. * The resume event emits when the native platform pulls the application
  20822. * out from the background. This event would emit when a Cordova app comes
  20823. * out from the background, however, it would not fire on a standard web browser.
  20824. */
  20825. this.resume = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  20826. /**
  20827. * The resize event emits when the browser window has changed dimensions. This
  20828. * could be from a browser window being physically resized, or from a device
  20829. * changing orientation.
  20830. */
  20831. this.resize = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  20832. this._readyPromise = new Promise(function (res) { _this._readyResolve = res; });
  20833. this.backButton.subscribe(function () {
  20834. // the hardware back button event has been fired
  20835. (void 0) /* console.debug */;
  20836. // decide which backbutton action should run
  20837. _this.runBackButtonAction();
  20838. });
  20839. }
  20840. /**
  20841. * @hidden
  20842. */
  20843. Platform.prototype.setWindow = function (win) {
  20844. this._win = win;
  20845. };
  20846. /**
  20847. * @hidden
  20848. */
  20849. Platform.prototype.win = function () {
  20850. return this._win;
  20851. };
  20852. /**
  20853. * @hidden
  20854. */
  20855. Platform.prototype.setDocument = function (doc) {
  20856. this._doc = doc;
  20857. };
  20858. /**
  20859. * @hidden
  20860. */
  20861. Platform.prototype.doc = function () {
  20862. return this._doc;
  20863. };
  20864. /**
  20865. * @hidden
  20866. */
  20867. Platform.prototype.setZone = function (zone) {
  20868. this.zone = zone;
  20869. };
  20870. /**
  20871. * @hidden
  20872. */
  20873. Platform.prototype.setCssProps = function (docElement) {
  20874. this.Css = Object(__WEBPACK_IMPORTED_MODULE_1__util_dom__["c" /* getCss */])(docElement);
  20875. };
  20876. // Methods
  20877. // **********************************************
  20878. /**
  20879. * @returns {boolean} returns true/false based on platform.
  20880. * @description
  20881. * Depending on the platform the user is on, `is(platformName)` will
  20882. * return `true` or `false`. Note that the same app can return `true`
  20883. * for more than one platform name. For example, an app running from
  20884. * an iPad would return `true` for the platform names: `mobile`,
  20885. * `ios`, `ipad`, and `tablet`. Additionally, if the app was running
  20886. * from Cordova then `cordova` would be true, and if it was running
  20887. * from a web browser on the iPad then `mobileweb` would be `true`.
  20888. *
  20889. * ```
  20890. * import { Platform } from 'ionic-angular';
  20891. *
  20892. * @Component({...})
  20893. * export MyPage {
  20894. * constructor(public platform: Platform) {
  20895. * if (this.platform.is('ios')) {
  20896. * // This will only print when on iOS
  20897. * console.log('I am an iOS device!');
  20898. * }
  20899. * }
  20900. * }
  20901. * ```
  20902. *
  20903. * | Platform Name | Description |
  20904. * |-----------------|------------------------------------|
  20905. * | android | on a device running Android. |
  20906. * | cordova | on a device running Cordova. |
  20907. * | core | on a desktop device. |
  20908. * | ios | on a device running iOS. |
  20909. * | ipad | on an iPad device. |
  20910. * | iphone | on an iPhone device. |
  20911. * | mobile | on a mobile device. |
  20912. * | mobileweb | in a browser on a mobile device. |
  20913. * | phablet | on a phablet device. |
  20914. * | tablet | on a tablet device. |
  20915. * | windows | on a device running Windows. |
  20916. *
  20917. * @param {string} platformName
  20918. */
  20919. Platform.prototype.is = function (platformName) {
  20920. return (this._platforms.indexOf(platformName) > -1);
  20921. };
  20922. /**
  20923. * @returns {array} the array of platforms
  20924. * @description
  20925. * Depending on what device you are on, `platforms` can return multiple values.
  20926. * Each possible value is a hierarchy of platforms. For example, on an iPhone,
  20927. * it would return `mobile`, `ios`, and `iphone`.
  20928. *
  20929. * ```
  20930. * import { Platform } from 'ionic-angular';
  20931. *
  20932. * @Component({...})
  20933. * export MyPage {
  20934. * constructor(public platform: Platform) {
  20935. * // This will print an array of the current platforms
  20936. * console.log(this.platform.platforms());
  20937. * }
  20938. * }
  20939. * ```
  20940. */
  20941. Platform.prototype.platforms = function () {
  20942. // get the array of active platforms, which also knows the hierarchy,
  20943. // with the last one the most important
  20944. return this._platforms;
  20945. };
  20946. /**
  20947. * Returns an object containing version information about all of the platforms.
  20948. *
  20949. * ```
  20950. * import { Platform } from 'ionic-angular';
  20951. *
  20952. * @Component({...})
  20953. * export MyPage {
  20954. * constructor(public platform: Platform) {
  20955. * // This will print an object containing
  20956. * // all of the platforms and their versions
  20957. * console.log(platform.versions());
  20958. * }
  20959. * }
  20960. * ```
  20961. *
  20962. * @returns {object} An object containing all of the platforms and their versions.
  20963. */
  20964. Platform.prototype.versions = function () {
  20965. // get all the platforms that have a valid parsed version
  20966. return this._versions;
  20967. };
  20968. /**
  20969. * @hidden
  20970. */
  20971. Platform.prototype.version = function () {
  20972. for (var platformName in this._versions) {
  20973. if (this._versions[platformName]) {
  20974. return this._versions[platformName];
  20975. }
  20976. }
  20977. return {};
  20978. };
  20979. /**
  20980. * Returns a promise when the platform is ready and native functionality
  20981. * can be called. If the app is running from within a web browser, then
  20982. * the promise will resolve when the DOM is ready. When the app is running
  20983. * from an application engine such as Cordova, then the promise will
  20984. * resolve when Cordova triggers the `deviceready` event.
  20985. *
  20986. * The resolved value is the `readySource`, which states which platform
  20987. * ready was used. For example, when Cordova is ready, the resolved ready
  20988. * source is `cordova`. The default ready source value will be `dom`. The
  20989. * `readySource` is useful if different logic should run depending on the
  20990. * platform the app is running from. For example, only Cordova can execute
  20991. * the status bar plugin, so the web should not run status bar plugin logic.
  20992. *
  20993. * ```
  20994. * import { Component } from '@angular/core';
  20995. * import { Platform } from 'ionic-angular';
  20996. *
  20997. * @Component({...})
  20998. * export MyApp {
  20999. * constructor(public platform: Platform) {
  21000. * this.platform.ready().then((readySource) => {
  21001. * console.log('Platform ready from', readySource);
  21002. * // Platform now ready, execute any required native code
  21003. * });
  21004. * }
  21005. * }
  21006. * ```
  21007. * @returns {promise}
  21008. */
  21009. Platform.prototype.ready = function () {
  21010. return this._readyPromise;
  21011. };
  21012. /**
  21013. * @hidden
  21014. * This should be triggered by the engine when the platform is
  21015. * ready. If there was no custom prepareReady method from the engine,
  21016. * such as Cordova or Electron, then it uses the default DOM ready.
  21017. */
  21018. Platform.prototype.triggerReady = function (readySource) {
  21019. var _this = this;
  21020. this.zone.run(function () {
  21021. _this._readyResolve(readySource);
  21022. });
  21023. };
  21024. /**
  21025. * @hidden
  21026. * This is the default prepareReady if it's not replaced by an engine,
  21027. * such as Cordova or Electron. If there was no custom prepareReady
  21028. * method from an engine then it uses the method below, which triggers
  21029. * the platform ready on the DOM ready event, and the default resolved
  21030. * value is `dom`.
  21031. */
  21032. Platform.prototype.prepareReady = function () {
  21033. var self = this;
  21034. if (self._doc.readyState === 'complete' || self._doc.readyState === 'interactive') {
  21035. self.triggerReady('dom');
  21036. }
  21037. else {
  21038. self._doc.addEventListener('DOMContentLoaded', completed, false);
  21039. self._win.addEventListener('load', completed, false);
  21040. }
  21041. function completed() {
  21042. self._doc.removeEventListener('DOMContentLoaded', completed, false);
  21043. self._win.removeEventListener('load', completed, false);
  21044. self.triggerReady('dom');
  21045. }
  21046. };
  21047. /**
  21048. * Set the app's language direction, which will update the `dir` attribute
  21049. * on the app's root `<html>` element. We recommend the app's `index.html`
  21050. * file already has the correct `dir` attribute value set, such as
  21051. * `<html dir="ltr">` or `<html dir="rtl">`. This method is useful if the
  21052. * direction needs to be dynamically changed per user/session.
  21053. * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)
  21054. * @param {DocumentDirection} dir Examples: `rtl`, `ltr`
  21055. * @param {boolean} updateDocument
  21056. */
  21057. Platform.prototype.setDir = function (dir, updateDocument) {
  21058. this._dir = dir;
  21059. this.isRTL = (dir === 'rtl');
  21060. if (updateDocument !== false) {
  21061. this._doc['documentElement'].setAttribute('dir', dir);
  21062. }
  21063. };
  21064. /**
  21065. * Returns app's language direction.
  21066. * We recommend the app's `index.html` file already has the correct `dir`
  21067. * attribute value set, such as `<html dir="ltr">` or `<html dir="rtl">`.
  21068. * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)
  21069. * @returns {DocumentDirection}
  21070. */
  21071. Platform.prototype.dir = function () {
  21072. return this._dir;
  21073. };
  21074. /**
  21075. * Set the app's language and optionally the country code, which will update
  21076. * the `lang` attribute on the app's root `<html>` element.
  21077. * We recommend the app's `index.html` file already has the correct `lang`
  21078. * attribute value set, such as `<html lang="en">`. This method is useful if
  21079. * the language needs to be dynamically changed per user/session.
  21080. * [W3C: Declaring language in HTML](http://www.w3.org/International/questions/qa-html-language-declarations)
  21081. * @param {string} language Examples: `en-US`, `en-GB`, `ar`, `de`, `zh`, `es-MX`
  21082. * @param {boolean} updateDocument Specifies whether the `lang` attribute of `<html>` should be updated
  21083. */
  21084. Platform.prototype.setLang = function (language, updateDocument) {
  21085. this._lang = language;
  21086. if (updateDocument !== false) {
  21087. this._doc['documentElement'].setAttribute('lang', language);
  21088. }
  21089. };
  21090. /**
  21091. * Returns app's language and optional country code.
  21092. * We recommend the app's `index.html` file already has the correct `lang`
  21093. * attribute value set, such as `<html lang="en">`.
  21094. * [W3C: Declaring language in HTML](http://www.w3.org/International/questions/qa-html-language-declarations)
  21095. * @returns {string}
  21096. */
  21097. Platform.prototype.lang = function () {
  21098. return this._lang;
  21099. };
  21100. // Methods meant to be overridden by the engine
  21101. // **********************************************
  21102. // Provided NOOP methods so they do not error when
  21103. // called by engines (the browser)that do not provide them
  21104. /**
  21105. * @hidden
  21106. */
  21107. Platform.prototype.exitApp = function () { };
  21108. /**
  21109. * The back button event is triggered when the user presses the native
  21110. * platform's back button, also referred to as the "hardware" back button.
  21111. * This event is only used within Cordova apps running on Android and
  21112. * Windows platforms. This event is not fired on iOS since iOS doesn't come
  21113. * with a hardware back button in the same sense an Android or Windows device
  21114. * does.
  21115. *
  21116. * Registering a hardware back button action and setting a priority allows
  21117. * apps to control which action should be called when the hardware back
  21118. * button is pressed. This method decides which of the registered back button
  21119. * actions has the highest priority and should be called.
  21120. *
  21121. * @param {Function} fn Called when the back button is pressed,
  21122. * if this registered action has the highest priority.
  21123. * @param {number} priority Set the priority for this action. Only the highest priority will execute. Defaults to `0`.
  21124. * @returns {Function} A function that, when called, will unregister
  21125. * the back button action.
  21126. */
  21127. Platform.prototype.registerBackButtonAction = function (fn, priority) {
  21128. var _this = this;
  21129. if (priority === void 0) { priority = 0; }
  21130. var action = { fn: fn, priority: priority };
  21131. this._bbActions.push(action);
  21132. // return a function to unregister this back button action
  21133. return function () {
  21134. Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["q" /* removeArrayItem */])(_this._bbActions, action);
  21135. };
  21136. };
  21137. /**
  21138. * @hidden
  21139. */
  21140. Platform.prototype.runBackButtonAction = function () {
  21141. // decide which one back button action should run
  21142. var winner = null;
  21143. this._bbActions.forEach(function (action) {
  21144. if (!winner || action.priority >= winner.priority) {
  21145. winner = action;
  21146. }
  21147. });
  21148. // run the winning action if there is one
  21149. winner && winner.fn && winner.fn();
  21150. };
  21151. // Getter/Setter Methods
  21152. // **********************************************
  21153. /**
  21154. * @hidden
  21155. */
  21156. Platform.prototype.setUserAgent = function (userAgent) {
  21157. this._ua = userAgent;
  21158. };
  21159. /**
  21160. * @hidden
  21161. */
  21162. Platform.prototype.setQueryParams = function (url) {
  21163. this._qp.parseUrl(url);
  21164. };
  21165. /**
  21166. * Get the query string parameter
  21167. */
  21168. Platform.prototype.getQueryParam = function (key) {
  21169. return this._qp.get(key);
  21170. };
  21171. /**
  21172. * Get the current url.
  21173. */
  21174. Platform.prototype.url = function () {
  21175. return this._win['location']['href'];
  21176. };
  21177. /**
  21178. * @hidden
  21179. */
  21180. Platform.prototype.userAgent = function () {
  21181. return this._ua || '';
  21182. };
  21183. /**
  21184. * @hidden
  21185. */
  21186. Platform.prototype.setNavigatorPlatform = function (navigatorPlt) {
  21187. this._nPlt = navigatorPlt;
  21188. };
  21189. /**
  21190. * @hidden
  21191. */
  21192. Platform.prototype.navigatorPlatform = function () {
  21193. return this._nPlt || '';
  21194. };
  21195. /**
  21196. * Gets the width of the platform's viewport using `window.innerWidth`.
  21197. * Using this method is preferred since the dimension is a cached value,
  21198. * which reduces the chance of multiple and expensive DOM reads.
  21199. */
  21200. Platform.prototype.width = function () {
  21201. this._calcDim();
  21202. return this._isPortrait ? this._pW : this._lW;
  21203. };
  21204. /**
  21205. * Gets the height of the platform's viewport using `window.innerHeight`.
  21206. * Using this method is preferred since the dimension is a cached value,
  21207. * which reduces the chance of multiple and expensive DOM reads.
  21208. */
  21209. Platform.prototype.height = function () {
  21210. this._calcDim();
  21211. return this._isPortrait ? this._pH : this._lH;
  21212. };
  21213. /**
  21214. * @hidden
  21215. */
  21216. Platform.prototype.getElementComputedStyle = function (ele, pseudoEle) {
  21217. return this._win['getComputedStyle'](ele, pseudoEle);
  21218. };
  21219. /**
  21220. * @hidden
  21221. */
  21222. Platform.prototype.getElementFromPoint = function (x, y) {
  21223. return this._doc['elementFromPoint'](x, y);
  21224. };
  21225. /**
  21226. * @hidden
  21227. */
  21228. Platform.prototype.getElementBoundingClientRect = function (ele) {
  21229. return ele['getBoundingClientRect']();
  21230. };
  21231. /**
  21232. * Returns `true` if the app is in portait mode.
  21233. */
  21234. Platform.prototype.isPortrait = function () {
  21235. this._calcDim();
  21236. return this._isPortrait;
  21237. };
  21238. /**
  21239. * Returns `true` if the app is in landscape mode.
  21240. */
  21241. Platform.prototype.isLandscape = function () {
  21242. return !this.isPortrait();
  21243. };
  21244. Platform.prototype._calcDim = function () {
  21245. // we're caching window dimensions so that
  21246. // we're not forcing many layouts
  21247. // if _isPortrait is null then that means
  21248. // the dimensions needs to be looked up again
  21249. // this also has to cover an edge case that only
  21250. // happens on iOS 10 (not other versions of iOS)
  21251. // where window.innerWidth is always bigger than
  21252. // window.innerHeight when it is first measured,
  21253. // even when the device is in portrait but
  21254. // the second time it is measured it is correct.
  21255. // Hopefully this check will not be needed in the future
  21256. if (this._isPortrait === null || this._isPortrait === false && this._win['innerWidth'] < this._win['innerHeight']) {
  21257. var win = this._win;
  21258. var innerWidth = win['innerWidth'];
  21259. var innerHeight = win['innerHeight'];
  21260. // we're keeping track of portrait and landscape dimensions
  21261. // separately because the virtual keyboard can really mess
  21262. // up accurate values when the keyboard is up
  21263. if (win.screen.width > 0 && win.screen.height > 0) {
  21264. if (innerWidth < innerHeight) {
  21265. // the device is in portrait
  21266. // we have to do fancier checking here
  21267. // because of the virtual keyboard resizing
  21268. // the window
  21269. if (this._pW <= innerWidth) {
  21270. (void 0) /* console.debug */;
  21271. this._isPortrait = true;
  21272. this._pW = innerWidth;
  21273. }
  21274. if (this._pH <= innerHeight) {
  21275. (void 0) /* console.debug */;
  21276. this._isPortrait = true;
  21277. this._pH = innerHeight;
  21278. }
  21279. }
  21280. else {
  21281. // the device is in landscape
  21282. if (this._lW !== innerWidth) {
  21283. (void 0) /* console.debug */;
  21284. this._isPortrait = false;
  21285. this._lW = innerWidth;
  21286. }
  21287. if (this._lH !== innerHeight) {
  21288. (void 0) /* console.debug */;
  21289. this._isPortrait = false;
  21290. this._lH = innerHeight;
  21291. }
  21292. }
  21293. }
  21294. }
  21295. };
  21296. /**
  21297. * @hidden
  21298. * This requestAnimationFrame will NOT be wrapped by zone.
  21299. */
  21300. Platform.prototype.raf = function (callback) {
  21301. var win = this._win;
  21302. return win['__zone_symbol__requestAnimationFrame'](callback);
  21303. };
  21304. /**
  21305. * @hidden
  21306. */
  21307. Platform.prototype.cancelRaf = function (rafId) {
  21308. var win = this._win;
  21309. return win['__zone_symbol__cancelAnimationFrame'](rafId);
  21310. };
  21311. /**
  21312. * @hidden
  21313. * This setTimeout will NOT be wrapped by zone.
  21314. */
  21315. Platform.prototype.timeout = function (callback, timeout) {
  21316. var win = this._win;
  21317. return win['__zone_symbol__setTimeout'](callback, timeout);
  21318. };
  21319. /**
  21320. * @hidden
  21321. * This setTimeout will NOT be wrapped by zone.
  21322. */
  21323. Platform.prototype.cancelTimeout = function (timeoutId) {
  21324. var win = this._win;
  21325. win['__zone_symbol__clearTimeout'](timeoutId);
  21326. };
  21327. /**
  21328. * @hidden
  21329. * Built to use modern event listener options, like "passive".
  21330. * If options are not supported, then just return a boolean which
  21331. * represents "capture". Returns a method to remove the listener.
  21332. */
  21333. Platform.prototype.registerListener = function (ele, eventName, callback, opts, unregisterListenersCollection) {
  21334. // use event listener options when supported
  21335. // otherwise it's just a boolean for the "capture" arg
  21336. var listenerOpts = this._uiEvtOpts ? {
  21337. 'capture': !!opts.capture,
  21338. 'passive': !!opts.passive,
  21339. } : !!opts.capture;
  21340. var unReg;
  21341. if (!opts.zone && ele['__zone_symbol__addEventListener']) {
  21342. // do not wrap this event in zone and we've verified we can use the raw addEventListener
  21343. ele['__zone_symbol__addEventListener'](eventName, callback, listenerOpts);
  21344. unReg = function unregisterListener() {
  21345. ele['__zone_symbol__removeEventListener'](eventName, callback, listenerOpts);
  21346. };
  21347. }
  21348. else {
  21349. // use the native addEventListener, which is wrapped with zone
  21350. ele['addEventListener'](eventName, callback, listenerOpts);
  21351. unReg = function unregisterListener() {
  21352. ele['removeEventListener'](eventName, callback, listenerOpts);
  21353. };
  21354. }
  21355. if (unregisterListenersCollection) {
  21356. unregisterListenersCollection.push(unReg);
  21357. }
  21358. return unReg;
  21359. };
  21360. /**
  21361. * @hidden
  21362. */
  21363. Platform.prototype.transitionEnd = function (el, callback, zone) {
  21364. if (zone === void 0) { zone = true; }
  21365. var unRegs = [];
  21366. function unregister() {
  21367. unRegs.forEach(function (unReg) {
  21368. unReg();
  21369. });
  21370. }
  21371. function onTransitionEnd(ev) {
  21372. if (el === ev.target) {
  21373. unregister();
  21374. callback(ev);
  21375. }
  21376. }
  21377. if (el) {
  21378. this.registerListener(el, 'webkitTransitionEnd', onTransitionEnd, { zone: zone }, unRegs);
  21379. this.registerListener(el, 'transitionend', onTransitionEnd, { zone: zone }, unRegs);
  21380. }
  21381. return unregister;
  21382. };
  21383. /**
  21384. * @hidden
  21385. */
  21386. Platform.prototype.windowLoad = function (callback) {
  21387. var win = this._win;
  21388. var doc = this._doc;
  21389. var unreg;
  21390. if (doc.readyState === 'complete') {
  21391. callback(win, doc);
  21392. }
  21393. else {
  21394. unreg = this.registerListener(win, 'load', function () {
  21395. unreg && unreg();
  21396. callback(win, doc);
  21397. }, { zone: false });
  21398. }
  21399. };
  21400. /**
  21401. * @hidden
  21402. */
  21403. Platform.prototype.isActiveElement = function (ele) {
  21404. return !!(ele && (this.getActiveElement() === ele));
  21405. };
  21406. /**
  21407. * @hidden
  21408. */
  21409. Platform.prototype.getActiveElement = function () {
  21410. return this._doc['activeElement'];
  21411. };
  21412. /**
  21413. * @hidden
  21414. */
  21415. Platform.prototype.hasFocus = function (ele) {
  21416. return !!((ele && (this.getActiveElement() === ele)) && (ele.parentElement.querySelector(':focus') === ele));
  21417. };
  21418. /**
  21419. * @hidden
  21420. */
  21421. Platform.prototype.hasFocusedTextInput = function () {
  21422. var ele = this.getActiveElement();
  21423. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_dom__["e" /* isTextInput */])(ele)) {
  21424. return (ele.parentElement.querySelector(':focus') === ele);
  21425. }
  21426. return false;
  21427. };
  21428. /**
  21429. * @hidden
  21430. */
  21431. Platform.prototype.focusOutActiveElement = function () {
  21432. var activeElement = this.getActiveElement();
  21433. activeElement && activeElement.blur && activeElement.blur();
  21434. };
  21435. Platform.prototype._initEvents = function () {
  21436. var _this = this;
  21437. // Test via a getter in the options object to see if the passive property is accessed
  21438. try {
  21439. var opts = Object.defineProperty({}, 'passive', {
  21440. get: function () {
  21441. _this._uiEvtOpts = true;
  21442. }
  21443. });
  21444. this._win.addEventListener('optsTest', null, opts);
  21445. }
  21446. catch (e) { }
  21447. // add the window resize event listener XXms after
  21448. this.timeout(function () {
  21449. var timerId;
  21450. _this.registerListener(_this._win, 'resize', function () {
  21451. clearTimeout(timerId);
  21452. timerId = setTimeout(function () {
  21453. // setting _isPortrait to null means the
  21454. // dimensions will need to be looked up again
  21455. if (_this.hasFocusedTextInput() === false) {
  21456. _this._isPortrait = null;
  21457. }
  21458. _this.zone.run(function () { return _this.resize.emit(); });
  21459. }, 200);
  21460. }, { passive: true, zone: false });
  21461. }, 2000);
  21462. };
  21463. // Platform Registry
  21464. // **********************************************
  21465. /**
  21466. * @hidden
  21467. */
  21468. Platform.prototype.setPlatformConfigs = function (platformConfigs) {
  21469. this._registry = platformConfigs || {};
  21470. };
  21471. /**
  21472. * @hidden
  21473. */
  21474. Platform.prototype.getPlatformConfig = function (platformName) {
  21475. return this._registry[platformName] || {};
  21476. };
  21477. /**
  21478. * @hidden
  21479. */
  21480. Platform.prototype.registry = function () {
  21481. return this._registry;
  21482. };
  21483. /**
  21484. * @hidden
  21485. */
  21486. Platform.prototype.setDefault = function (platformName) {
  21487. this._default = platformName;
  21488. };
  21489. /**
  21490. * @hidden
  21491. */
  21492. Platform.prototype.testQuery = function (queryValue, queryTestValue) {
  21493. var valueSplit = queryValue.toLowerCase().split(';');
  21494. return valueSplit.indexOf(queryTestValue) > -1;
  21495. };
  21496. /**
  21497. * @hidden
  21498. */
  21499. Platform.prototype.testNavigatorPlatform = function (navigatorPlatformExpression) {
  21500. var rgx = new RegExp(navigatorPlatformExpression, 'i');
  21501. return rgx.test(this._nPlt);
  21502. };
  21503. /**
  21504. * @hidden
  21505. */
  21506. Platform.prototype.matchUserAgentVersion = function (userAgentExpression) {
  21507. if (this._ua && userAgentExpression) {
  21508. var val = this._ua.match(userAgentExpression);
  21509. if (val) {
  21510. return {
  21511. major: val[1],
  21512. minor: val[2]
  21513. };
  21514. }
  21515. }
  21516. };
  21517. Platform.prototype.testUserAgent = function (expression) {
  21518. if (this._ua) {
  21519. return this._ua.indexOf(expression) >= 0;
  21520. }
  21521. return false;
  21522. };
  21523. /**
  21524. * @hidden
  21525. */
  21526. Platform.prototype.isPlatformMatch = function (queryStringName, userAgentAtLeastHas, userAgentMustNotHave) {
  21527. if (userAgentMustNotHave === void 0) { userAgentMustNotHave = []; }
  21528. var queryValue = this._qp.get('ionicplatform');
  21529. if (queryValue) {
  21530. return this.testQuery(queryValue, queryStringName);
  21531. }
  21532. userAgentAtLeastHas = userAgentAtLeastHas || [queryStringName];
  21533. var userAgent = this._ua.toLowerCase();
  21534. for (var i = 0; i < userAgentAtLeastHas.length; i++) {
  21535. if (userAgent.indexOf(userAgentAtLeastHas[i]) > -1) {
  21536. for (var j = 0; j < userAgentMustNotHave.length; j++) {
  21537. if (userAgent.indexOf(userAgentMustNotHave[j]) > -1) {
  21538. return false;
  21539. }
  21540. }
  21541. return true;
  21542. }
  21543. }
  21544. return false;
  21545. };
  21546. /** @hidden */
  21547. Platform.prototype.init = function () {
  21548. this._initEvents();
  21549. var rootPlatformNode;
  21550. var enginePlatformNode;
  21551. // figure out the most specific platform and active engine
  21552. var tmpPlt;
  21553. for (var platformName in this._registry) {
  21554. tmpPlt = this.matchPlatform(platformName);
  21555. if (tmpPlt) {
  21556. // we found a platform match!
  21557. // check if its more specific than the one we already have
  21558. if (tmpPlt.isEngine) {
  21559. // because it matched then this should be the active engine
  21560. // you cannot have more than one active engine
  21561. enginePlatformNode = tmpPlt;
  21562. }
  21563. else if (!rootPlatformNode || tmpPlt.depth > rootPlatformNode.depth) {
  21564. // only find the root node for platforms that are not engines
  21565. // set this node as the root since we either don't already
  21566. // have one, or this one is more specific that the current one
  21567. rootPlatformNode = tmpPlt;
  21568. }
  21569. }
  21570. }
  21571. if (!rootPlatformNode) {
  21572. rootPlatformNode = new PlatformNode(this._registry, this._default);
  21573. }
  21574. // build a Platform instance filled with the
  21575. // hierarchy of active platforms and settings
  21576. if (rootPlatformNode) {
  21577. // check if we found an engine node (cordova/node-webkit/etc)
  21578. if (enginePlatformNode) {
  21579. // add the engine to the first in the platform hierarchy
  21580. // the original rootPlatformNode now becomes a child
  21581. // of the engineNode, which is not the new root
  21582. enginePlatformNode.child = rootPlatformNode;
  21583. rootPlatformNode.parent = enginePlatformNode;
  21584. rootPlatformNode = enginePlatformNode;
  21585. }
  21586. var platformNode = rootPlatformNode;
  21587. while (platformNode) {
  21588. insertSuperset(this._registry, platformNode);
  21589. platformNode = platformNode.child;
  21590. }
  21591. // make sure the root noot is actually the root
  21592. // incase a node was inserted before the root
  21593. platformNode = rootPlatformNode.parent;
  21594. while (platformNode) {
  21595. rootPlatformNode = platformNode;
  21596. platformNode = platformNode.parent;
  21597. }
  21598. platformNode = rootPlatformNode;
  21599. while (platformNode) {
  21600. platformNode.initialize(this);
  21601. // extra check for ipad pro issue
  21602. // https://forums.developer.apple.com/thread/25948
  21603. if (platformNode.name === 'iphone' && this.navigatorPlatform() === 'iPad') {
  21604. // this is an ipad pro so push ipad and tablet to platforms
  21605. // and then return as we are done
  21606. this._platforms.push('tablet');
  21607. this._platforms.push('ipad');
  21608. return;
  21609. }
  21610. // set the array of active platforms with
  21611. // the last one in the array the most important
  21612. this._platforms.push(platformNode.name);
  21613. // get the platforms version if a version parser was provided
  21614. this._versions[platformNode.name] = platformNode.version(this);
  21615. // go to the next platform child
  21616. platformNode = platformNode.child;
  21617. }
  21618. }
  21619. if (this._platforms.indexOf('mobile') > -1 && this._platforms.indexOf('cordova') === -1) {
  21620. this._platforms.push('mobileweb');
  21621. }
  21622. };
  21623. /**
  21624. * @hidden
  21625. */
  21626. Platform.prototype.matchPlatform = function (platformName) {
  21627. // build a PlatformNode and assign config data to it
  21628. // use it's getRoot method to build up its hierarchy
  21629. // depending on which platforms match
  21630. var platformNode = new PlatformNode(this._registry, platformName);
  21631. var rootNode = platformNode.getRoot(this);
  21632. if (rootNode) {
  21633. rootNode.depth = 0;
  21634. var childPlatform = rootNode.child;
  21635. while (childPlatform) {
  21636. rootNode.depth++;
  21637. childPlatform = childPlatform.child;
  21638. }
  21639. }
  21640. return rootNode;
  21641. };
  21642. return Platform;
  21643. }());
  21644. function insertSuperset(registry, platformNode) {
  21645. var supersetPlaformName = platformNode.superset();
  21646. if (supersetPlaformName) {
  21647. // add a platform in between two exist platforms
  21648. // so we can build the correct hierarchy of active platforms
  21649. var supersetPlatform = new PlatformNode(registry, supersetPlaformName);
  21650. supersetPlatform.parent = platformNode.parent;
  21651. supersetPlatform.child = platformNode;
  21652. if (supersetPlatform.parent) {
  21653. supersetPlatform.parent.child = supersetPlatform;
  21654. }
  21655. platformNode.parent = supersetPlatform;
  21656. }
  21657. }
  21658. /**
  21659. * @hidden
  21660. */
  21661. var PlatformNode = (function () {
  21662. function PlatformNode(registry, platformName) {
  21663. this.registry = registry;
  21664. this.c = registry[platformName];
  21665. this.name = platformName;
  21666. this.isEngine = this.c.isEngine;
  21667. }
  21668. PlatformNode.prototype.settings = function () {
  21669. return this.c.settings || {};
  21670. };
  21671. PlatformNode.prototype.superset = function () {
  21672. return this.c.superset;
  21673. };
  21674. PlatformNode.prototype.isMatch = function (p) {
  21675. return this.c.isMatch && this.c.isMatch(p) || false;
  21676. };
  21677. PlatformNode.prototype.initialize = function (plt) {
  21678. this.c.initialize && this.c.initialize(plt);
  21679. };
  21680. PlatformNode.prototype.version = function (plt) {
  21681. if (this.c.versionParser) {
  21682. var v = this.c.versionParser(plt);
  21683. if (v) {
  21684. var str = v.major + '.' + v.minor;
  21685. return {
  21686. str: str,
  21687. num: parseFloat(str),
  21688. major: parseInt(v.major, 10),
  21689. minor: parseInt(v.minor, 10)
  21690. };
  21691. }
  21692. }
  21693. };
  21694. PlatformNode.prototype.getRoot = function (plt) {
  21695. if (this.isMatch(plt)) {
  21696. var parents = this.getSubsetParents(this.name);
  21697. if (!parents.length) {
  21698. return this;
  21699. }
  21700. var platformNode = null;
  21701. var rootPlatformNode = null;
  21702. for (var i = 0; i < parents.length; i++) {
  21703. platformNode = new PlatformNode(this.registry, parents[i]);
  21704. platformNode.child = this;
  21705. rootPlatformNode = platformNode.getRoot(plt);
  21706. if (rootPlatformNode) {
  21707. this.parent = platformNode;
  21708. return rootPlatformNode;
  21709. }
  21710. }
  21711. }
  21712. return null;
  21713. };
  21714. PlatformNode.prototype.getSubsetParents = function (subsetPlatformName) {
  21715. var parentPlatformNames = [];
  21716. var pltConfig = null;
  21717. for (var platformName in this.registry) {
  21718. pltConfig = this.registry[platformName];
  21719. if (pltConfig.subsets && pltConfig.subsets.indexOf(subsetPlatformName) > -1) {
  21720. parentPlatformNames.push(platformName);
  21721. }
  21722. }
  21723. return parentPlatformNames;
  21724. };
  21725. return PlatformNode;
  21726. }());
  21727. /**
  21728. * @hidden
  21729. */
  21730. function setupPlatform(doc, platformConfigs, zone) {
  21731. var plt = new Platform();
  21732. plt.setDefault('core');
  21733. plt.setPlatformConfigs(platformConfigs);
  21734. plt.setZone(zone);
  21735. // set values from "document"
  21736. var docElement = doc.documentElement;
  21737. plt.setDocument(doc);
  21738. var dir = docElement.dir;
  21739. plt.setDir(dir === 'rtl' ? 'rtl' : 'ltr', !dir);
  21740. plt.setLang(docElement.lang, false);
  21741. // set css properties
  21742. plt.setCssProps(docElement);
  21743. // set values from "window"
  21744. var win = doc.defaultView;
  21745. plt.setWindow(win);
  21746. plt.setNavigatorPlatform(win.navigator.platform);
  21747. plt.setUserAgent(win.navigator.userAgent);
  21748. // set location values
  21749. plt.setQueryParams(win.location.href);
  21750. plt.init();
  21751. // add the platform obj to the window
  21752. win['Ionic'] = win['Ionic'] || {};
  21753. win['Ionic']['platform'] = plt;
  21754. return plt;
  21755. }
  21756. //# sourceMappingURL=platform.js.map
  21757. /***/ }),
  21758. /* 8 */
  21759. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  21760. "use strict";
  21761. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Ion; });
  21762. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  21763. /**
  21764. * Base class for all Ionic components. Exposes some common functionality
  21765. * that all Ionic components need, such as accessing underlying native elements and
  21766. * sending/receiving app-level events.
  21767. */
  21768. /** @hidden */
  21769. var Ion = (function () {
  21770. function Ion(config, elementRef, renderer, componentName) {
  21771. this._config = config;
  21772. this._elementRef = elementRef;
  21773. this._renderer = renderer;
  21774. this._componentName = componentName;
  21775. if (componentName) {
  21776. this._setComponentName();
  21777. this._setMode(config.get('mode'));
  21778. }
  21779. }
  21780. Object.defineProperty(Ion.prototype, "color", {
  21781. get: function () {
  21782. return this._color;
  21783. },
  21784. /**
  21785. * @input {string} The color to use from your Sass `$colors` map.
  21786. * Default options are: `"primary"`, `"secondary"`, `"danger"`, `"light"`, and `"dark"`.
  21787. * For more information, see [Theming your App](/docs/theming/theming-your-app).
  21788. */
  21789. set: function (val) {
  21790. this._setColor(val);
  21791. },
  21792. enumerable: true,
  21793. configurable: true
  21794. });
  21795. Object.defineProperty(Ion.prototype, "mode", {
  21796. get: function () {
  21797. return this._mode;
  21798. },
  21799. /**
  21800. * @input {string} The mode determines which platform styles to use.
  21801. * Possible values are: `"ios"`, `"md"`, or `"wp"`.
  21802. * For more information, see [Platform Styles](/docs/theming/platform-specific-styles).
  21803. */
  21804. set: function (val) {
  21805. this._setMode(val);
  21806. },
  21807. enumerable: true,
  21808. configurable: true
  21809. });
  21810. /** @hidden */
  21811. Ion.prototype.setElementClass = function (className, isAdd) {
  21812. this._renderer.setElementClass(this._elementRef.nativeElement, className, isAdd);
  21813. };
  21814. /** @hidden */
  21815. Ion.prototype.setElementAttribute = function (attributeName, attributeValue) {
  21816. this._renderer.setElementAttribute(this._elementRef.nativeElement, attributeName, attributeValue);
  21817. };
  21818. /** @hidden */
  21819. Ion.prototype.setElementStyle = function (property, value) {
  21820. this._renderer.setElementStyle(this._elementRef.nativeElement, property, value);
  21821. };
  21822. /** @hidden */
  21823. Ion.prototype._setColor = function (newColor, componentName) {
  21824. if (componentName) {
  21825. // This is needed for the item-radio
  21826. this._componentName = componentName;
  21827. }
  21828. if (this._color) {
  21829. this.setElementClass(this._componentName + "-" + this._mode + "-" + this._color, false);
  21830. }
  21831. if (newColor) {
  21832. this.setElementClass(this._componentName + "-" + this._mode + "-" + newColor, true);
  21833. this._color = newColor;
  21834. }
  21835. };
  21836. /** @hidden */
  21837. Ion.prototype._setMode = function (newMode) {
  21838. if (this._mode) {
  21839. this.setElementClass(this._componentName + "-" + this._mode, false);
  21840. }
  21841. if (newMode) {
  21842. this.setElementClass(this._componentName + "-" + newMode, true);
  21843. // Remove the color class associated with the previous mode,
  21844. // change the mode, then add the new color class
  21845. this._setColor(null);
  21846. this._mode = newMode;
  21847. this._setColor(this._color);
  21848. }
  21849. };
  21850. /** @hidden */
  21851. Ion.prototype._setComponentName = function () {
  21852. this.setElementClass(this._componentName, true);
  21853. };
  21854. /** @hidden */
  21855. Ion.prototype.getElementRef = function () {
  21856. return this._elementRef;
  21857. };
  21858. /** @hidden */
  21859. Ion.prototype.getNativeElement = function () {
  21860. return this._elementRef.nativeElement;
  21861. };
  21862. Ion.propDecorators = {
  21863. 'color': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  21864. 'mode': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  21865. };
  21866. return Ion;
  21867. }());
  21868. //# sourceMappingURL=ion.js.map
  21869. /***/ }),
  21870. /* 9 */
  21871. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  21872. "use strict";
  21873. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ViewController; });
  21874. /* harmony export (immutable) */ __webpack_exports__["b"] = isViewController;
  21875. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  21876. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  21877. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__nav_util__ = __webpack_require__(34);
  21878. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__nav_params__ = __webpack_require__(23);
  21879. /**
  21880. * @name ViewController
  21881. * @description
  21882. * Access various features and information about the current view.
  21883. * @usage
  21884. * ```ts
  21885. * import { Component } from '@angular/core';
  21886. * import { ViewController } from 'ionic-angular';
  21887. *
  21888. * @Component({...})
  21889. * export class MyPage{
  21890. *
  21891. * constructor(public viewCtrl: ViewController) {}
  21892. *
  21893. * }
  21894. * ```
  21895. */
  21896. var ViewController = (function () {
  21897. function ViewController(component, data, rootCssClass) {
  21898. if (rootCssClass === void 0) { rootCssClass = DEFAULT_CSS_CLASS; }
  21899. this.component = component;
  21900. this._isHidden = false;
  21901. this._state = __WEBPACK_IMPORTED_MODULE_2__nav_util__["h" /* STATE_NEW */];
  21902. /**
  21903. * Observable to be subscribed to when the current component will become active
  21904. * @returns {Observable} Returns an observable
  21905. */
  21906. this.willEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21907. /**
  21908. * Observable to be subscribed to when the current component has become active
  21909. * @returns {Observable} Returns an observable
  21910. */
  21911. this.didEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21912. /**
  21913. * Observable to be subscribed to when the current component will no longer be active
  21914. * @returns {Observable} Returns an observable
  21915. */
  21916. this.willLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21917. /**
  21918. * Observable to be subscribed to when the current component is no long active
  21919. * @returns {Observable} Returns an observable
  21920. */
  21921. this.didLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21922. /**
  21923. * Observable to be subscribed to when the current component has been destroyed
  21924. * @returns {Observable} Returns an observable
  21925. */
  21926. this.willUnload = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21927. /**
  21928. * @hidden
  21929. */
  21930. this.readReady = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21931. /**
  21932. * @hidden
  21933. */
  21934. this.writeReady = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21935. /** @hidden */
  21936. this.isOverlay = false;
  21937. /** @hidden */
  21938. this._emitter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  21939. // passed in data could be NavParams, but all we care about is its data object
  21940. this.data = (data instanceof __WEBPACK_IMPORTED_MODULE_3__nav_params__["a" /* NavParams */] ? data.data : (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(data) ? data : {}));
  21941. this._cssClass = rootCssClass;
  21942. this._ts = Date.now();
  21943. window.addEventListener('orientationchange', this.handleOrientationChange.bind(this));
  21944. }
  21945. ViewController.prototype.handleOrientationChange = function () {
  21946. if (this.getContent()) {
  21947. this.getContent().resize();
  21948. }
  21949. };
  21950. /**
  21951. * @hidden
  21952. */
  21953. ViewController.prototype.init = function (componentRef) {
  21954. (void 0) /* assert */;
  21955. this._ts = Date.now();
  21956. this._cmp = componentRef;
  21957. this.instance = this.instance || componentRef.instance;
  21958. this._detached = false;
  21959. };
  21960. ViewController.prototype._setNav = function (navCtrl) {
  21961. this._nav = navCtrl;
  21962. };
  21963. ViewController.prototype._setInstance = function (instance) {
  21964. this.instance = instance;
  21965. };
  21966. /**
  21967. * @hidden
  21968. */
  21969. ViewController.prototype.subscribe = function (generatorOrNext) {
  21970. return this._emitter.subscribe(generatorOrNext);
  21971. };
  21972. /**
  21973. * @hidden
  21974. */
  21975. ViewController.prototype.emit = function (data) {
  21976. this._emitter.emit(data);
  21977. };
  21978. /**
  21979. * Called when the current viewController has be successfully dismissed
  21980. */
  21981. ViewController.prototype.onDidDismiss = function (callback) {
  21982. this._onDidDismiss = callback;
  21983. };
  21984. /**
  21985. * Called when the current viewController will be dismissed
  21986. */
  21987. ViewController.prototype.onWillDismiss = function (callback) {
  21988. this._onWillDismiss = callback;
  21989. };
  21990. /**
  21991. * Dismiss the current viewController
  21992. * @param {any} [data] Data that you want to return when the viewController is dismissed.
  21993. * @param {any} [role ]
  21994. * @param {NavOptions} navOptions Options for the dismiss navigation.
  21995. * @returns {any} data Returns the data passed in, if any.
  21996. */
  21997. ViewController.prototype.dismiss = function (data, role, navOptions) {
  21998. if (navOptions === void 0) { navOptions = {}; }
  21999. if (!this._nav) {
  22000. (void 0) /* assert */;
  22001. return Promise.resolve(false);
  22002. }
  22003. if (this.isOverlay && !navOptions.minClickBlockDuration) {
  22004. // This is a Modal being dismissed so we need
  22005. // to add the minClickBlockDuration option
  22006. // for UIWebView
  22007. navOptions.minClickBlockDuration = 400;
  22008. }
  22009. this._dismissData = data;
  22010. this._dismissRole = role;
  22011. var options = Object.assign({}, this._leavingOpts, navOptions);
  22012. return this._nav.removeView(this, options).then(function () { return data; });
  22013. };
  22014. /**
  22015. * @hidden
  22016. */
  22017. ViewController.prototype.getNav = function () {
  22018. return this._nav;
  22019. };
  22020. /**
  22021. * @hidden
  22022. */
  22023. ViewController.prototype.getTransitionName = function (_direction) {
  22024. return this._nav && this._nav.config.get('pageTransition');
  22025. };
  22026. /**
  22027. * @hidden
  22028. */
  22029. ViewController.prototype.getNavParams = function () {
  22030. return new __WEBPACK_IMPORTED_MODULE_3__nav_params__["a" /* NavParams */](this.data);
  22031. };
  22032. /**
  22033. * @hidden
  22034. */
  22035. ViewController.prototype.setLeavingOpts = function (opts) {
  22036. this._leavingOpts = opts;
  22037. };
  22038. /**
  22039. * Check to see if you can go back in the navigation stack.
  22040. * @returns {boolean} Returns if it's possible to go back from this Page.
  22041. */
  22042. ViewController.prototype.enableBack = function () {
  22043. // update if it's possible to go back from this nav item
  22044. if (!this._nav) {
  22045. return false;
  22046. }
  22047. // the previous view may exist, but if it's about to be destroyed
  22048. // it shouldn't be able to go back to
  22049. var previousItem = this._nav.getPrevious(this);
  22050. return !!(previousItem);
  22051. };
  22052. Object.defineProperty(ViewController.prototype, "name", {
  22053. /**
  22054. * @hidden
  22055. */
  22056. get: function () {
  22057. return (this.component ? this.component.name : '');
  22058. },
  22059. enumerable: true,
  22060. configurable: true
  22061. });
  22062. Object.defineProperty(ViewController.prototype, "index", {
  22063. /**
  22064. * Get the index of the current component in the current navigation stack.
  22065. * @returns {number} Returns the index of this page within its `NavController`.
  22066. */
  22067. get: function () {
  22068. return (this._nav ? this._nav.indexOf(this) : -1);
  22069. },
  22070. enumerable: true,
  22071. configurable: true
  22072. });
  22073. /**
  22074. * @returns {boolean} Returns if this Page is the first in the stack of pages within its NavController.
  22075. */
  22076. ViewController.prototype.isFirst = function () {
  22077. return (this._nav ? this._nav.first() === this : false);
  22078. };
  22079. /**
  22080. * @returns {boolean} Returns if this Page is the last in the stack of pages within its NavController.
  22081. */
  22082. ViewController.prototype.isLast = function () {
  22083. return (this._nav ? this._nav.last() === this : false);
  22084. };
  22085. /**
  22086. * @hidden
  22087. * DOM WRITE
  22088. */
  22089. ViewController.prototype._domShow = function (shouldShow, renderer) {
  22090. // using hidden element attribute to display:none and not render views
  22091. // _hidden value of '' means the hidden attribute will be added
  22092. // _hidden value of null means the hidden attribute will be removed
  22093. // doing checks to make sure we only update the DOM when actually needed
  22094. // if it should render, then the hidden attribute should not be on the element
  22095. if (this._cmp && shouldShow === this._isHidden) {
  22096. this._isHidden = !shouldShow;
  22097. var value = (shouldShow ? null : '');
  22098. // ******** DOM WRITE ****************
  22099. renderer.setElementAttribute(this.pageRef().nativeElement, 'hidden', value);
  22100. }
  22101. };
  22102. /**
  22103. * @hidden
  22104. */
  22105. ViewController.prototype.getZIndex = function () {
  22106. return this._zIndex;
  22107. };
  22108. /**
  22109. * @hidden
  22110. * DOM WRITE
  22111. */
  22112. ViewController.prototype._setZIndex = function (zIndex, renderer) {
  22113. if (zIndex !== this._zIndex) {
  22114. this._zIndex = zIndex;
  22115. var pageRef = this.pageRef();
  22116. if (pageRef) {
  22117. // ******** DOM WRITE ****************
  22118. renderer.setElementStyle(pageRef.nativeElement, 'z-index', zIndex);
  22119. }
  22120. }
  22121. };
  22122. /**
  22123. * @returns {ElementRef} Returns the Page's ElementRef.
  22124. */
  22125. ViewController.prototype.pageRef = function () {
  22126. return this._cmp && this._cmp.location;
  22127. };
  22128. ViewController.prototype._setContent = function (directive) {
  22129. this._cntDir = directive;
  22130. };
  22131. /**
  22132. * @returns {component} Returns the Page's Content component reference.
  22133. */
  22134. ViewController.prototype.getContent = function () {
  22135. return this._cntDir;
  22136. };
  22137. ViewController.prototype._setContentRef = function (elementRef) {
  22138. this._cntRef = elementRef;
  22139. };
  22140. /**
  22141. * @returns {ElementRef} Returns the Content's ElementRef.
  22142. */
  22143. ViewController.prototype.contentRef = function () {
  22144. return this._cntRef;
  22145. };
  22146. ViewController.prototype._setIONContent = function (content) {
  22147. this._setContent(content);
  22148. this._ionCntDir = content;
  22149. };
  22150. /**
  22151. * @hidden
  22152. */
  22153. ViewController.prototype.getIONContent = function () {
  22154. return this._ionCntDir;
  22155. };
  22156. ViewController.prototype._setIONContentRef = function (elementRef) {
  22157. this._setContentRef(elementRef);
  22158. this._ionCntRef = elementRef;
  22159. };
  22160. /**
  22161. * @hidden
  22162. */
  22163. ViewController.prototype.getIONContentRef = function () {
  22164. return this._ionCntRef;
  22165. };
  22166. ViewController.prototype._setHeader = function (directive) {
  22167. this._hdrDir = directive;
  22168. };
  22169. /**
  22170. * @hidden
  22171. */
  22172. ViewController.prototype.getHeader = function () {
  22173. return this._hdrDir;
  22174. };
  22175. ViewController.prototype._setFooter = function (directive) {
  22176. this._ftrDir = directive;
  22177. };
  22178. /**
  22179. * @hidden
  22180. */
  22181. ViewController.prototype.getFooter = function () {
  22182. return this._ftrDir;
  22183. };
  22184. ViewController.prototype._setNavbar = function (directive) {
  22185. this._nb = directive;
  22186. };
  22187. /**
  22188. * @hidden
  22189. */
  22190. ViewController.prototype.getNavbar = function () {
  22191. return this._nb;
  22192. };
  22193. /**
  22194. * Find out if the current component has a NavBar or not. Be sure
  22195. * to wrap this in an `ionViewWillEnter` method in order to make sure
  22196. * the view has rendered fully.
  22197. * @returns {boolean} Returns a boolean if this Page has a navbar or not.
  22198. */
  22199. ViewController.prototype.hasNavbar = function () {
  22200. return !!this._nb;
  22201. };
  22202. /**
  22203. * Change the title of the back-button. Be sure to call this
  22204. * after `ionViewWillEnter` to make sure the DOM has been rendered.
  22205. * @param {string} val Set the back button text.
  22206. */
  22207. ViewController.prototype.setBackButtonText = function (val) {
  22208. this._nb && this._nb.setBackButtonText(val);
  22209. };
  22210. /**
  22211. * Set if the back button for the current view is visible or not. Be sure to call this
  22212. * after `ionViewWillEnter` to make sure the DOM has been rendered.
  22213. * @param {boolean} Set if this Page's back button should show or not.
  22214. */
  22215. ViewController.prototype.showBackButton = function (shouldShow) {
  22216. if (this._nb) {
  22217. this._nb.hideBackButton = !shouldShow;
  22218. }
  22219. };
  22220. ViewController.prototype._preLoad = function () {
  22221. (void 0) /* assert */;
  22222. this._lifecycle('PreLoad');
  22223. };
  22224. /**
  22225. * @hidden
  22226. * The view has loaded. This event only happens once per view will be created.
  22227. * This event is fired before the component and his children have been initialized.
  22228. */
  22229. ViewController.prototype._willLoad = function () {
  22230. (void 0) /* assert */;
  22231. this._lifecycle('WillLoad');
  22232. };
  22233. /**
  22234. * @hidden
  22235. * The view has loaded. This event only happens once per view being
  22236. * created. If a view leaves but is cached, then this will not
  22237. * fire again on a subsequent viewing. This method is a good place
  22238. * to put your setup code for the view; however, it is not the
  22239. * recommended method to use when a view becomes active.
  22240. */
  22241. ViewController.prototype._didLoad = function () {
  22242. (void 0) /* assert */;
  22243. this._lifecycle('DidLoad');
  22244. };
  22245. /**
  22246. * @hidden
  22247. * The view is about to enter and become the active view.
  22248. */
  22249. ViewController.prototype._willEnter = function () {
  22250. this.handleOrientationChange();
  22251. (void 0) /* assert */;
  22252. if (this._detached && this._cmp) {
  22253. // ensure this has been re-attached to the change detector
  22254. this._cmp.changeDetectorRef.reattach();
  22255. this._detached = false;
  22256. }
  22257. this.willEnter.emit(null);
  22258. this._lifecycle('WillEnter');
  22259. };
  22260. /**
  22261. * @hidden
  22262. * The view has fully entered and is now the active view. This
  22263. * will fire, whether it was the first load or loaded from the cache.
  22264. */
  22265. ViewController.prototype._didEnter = function () {
  22266. (void 0) /* assert */;
  22267. this._nb && this._nb.didEnter();
  22268. this.didEnter.emit(null);
  22269. this._lifecycle('DidEnter');
  22270. };
  22271. /**
  22272. * @hidden
  22273. * The view is about to leave and no longer be the active view.
  22274. */
  22275. ViewController.prototype._willLeave = function (willUnload) {
  22276. this.willLeave.emit(null);
  22277. this._lifecycle('WillLeave');
  22278. if (willUnload && this._onWillDismiss) {
  22279. this._onWillDismiss(this._dismissData, this._dismissRole);
  22280. this._onWillDismiss = null;
  22281. }
  22282. };
  22283. /**
  22284. * @hidden
  22285. * The view has finished leaving and is no longer the active view. This
  22286. * will fire, whether it is cached or unloaded.
  22287. */
  22288. ViewController.prototype._didLeave = function () {
  22289. this.didLeave.emit(null);
  22290. this._lifecycle('DidLeave');
  22291. // when this is not the active page
  22292. // we no longer need to detect changes
  22293. if (!this._detached && this._cmp) {
  22294. this._cmp.changeDetectorRef.detach();
  22295. this._detached = true;
  22296. }
  22297. };
  22298. /**
  22299. * @hidden
  22300. */
  22301. ViewController.prototype._willUnload = function () {
  22302. this.willUnload.emit(null);
  22303. this._lifecycle('WillUnload');
  22304. this._onDidDismiss && this._onDidDismiss(this._dismissData, this._dismissRole);
  22305. this._onDidDismiss = null;
  22306. this._dismissData = null;
  22307. this._dismissRole = null;
  22308. };
  22309. /**
  22310. * @hidden
  22311. * DOM WRITE
  22312. */
  22313. ViewController.prototype._destroy = function (renderer) {
  22314. (void 0) /* assert */;
  22315. if (this._cmp) {
  22316. if (renderer) {
  22317. // ensure the element is cleaned up for when the view pool reuses this element
  22318. // ******** DOM WRITE ****************
  22319. var cmpEle = this._cmp.location.nativeElement;
  22320. renderer.setElementAttribute(cmpEle, 'class', null);
  22321. renderer.setElementAttribute(cmpEle, 'style', null);
  22322. }
  22323. window.removeEventListener('orientationchange', this.handleOrientationChange.bind(this));
  22324. // completely destroy this component. boom.
  22325. this._cmp.destroy();
  22326. }
  22327. this._nav = this._cmp = this.instance = this._cntDir = this._cntRef = this._leavingOpts = this._hdrDir = this._ftrDir = this._nb = this._onDidDismiss = this._onWillDismiss = null;
  22328. this._state = __WEBPACK_IMPORTED_MODULE_2__nav_util__["f" /* STATE_DESTROYED */];
  22329. };
  22330. /**
  22331. * @hidden
  22332. */
  22333. ViewController.prototype._lifecycleTest = function (lifecycle) {
  22334. var instance = this.instance;
  22335. var methodName = 'ionViewCan' + lifecycle;
  22336. if (instance && instance[methodName]) {
  22337. try {
  22338. var result = instance[methodName]();
  22339. if (result instanceof Promise) {
  22340. return result;
  22341. }
  22342. else {
  22343. // Any value but explitic false, should be true
  22344. return Promise.resolve(result !== false);
  22345. }
  22346. }
  22347. catch (e) {
  22348. return Promise.reject(this.name + " " + methodName + " error: " + e.message);
  22349. }
  22350. }
  22351. return Promise.resolve(true);
  22352. };
  22353. /**
  22354. * @hidden
  22355. */
  22356. ViewController.prototype._lifecycle = function (lifecycle) {
  22357. var instance = this.instance;
  22358. var methodName = 'ionView' + lifecycle;
  22359. if (instance && instance[methodName]) {
  22360. instance[methodName]();
  22361. }
  22362. };
  22363. ViewController.propDecorators = {
  22364. '_emitter': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  22365. };
  22366. return ViewController;
  22367. }());
  22368. function isViewController(viewCtrl) {
  22369. return !!(viewCtrl && viewCtrl._didLoad && viewCtrl._willUnload);
  22370. }
  22371. var DEFAULT_CSS_CLASS = 'ion-page';
  22372. //# sourceMappingURL=view-controller.js.map
  22373. /***/ }),
  22374. /* 10 */
  22375. /***/ (function(module, exports, __webpack_require__) {
  22376. "use strict";
  22377. var AsyncAction_1 = __webpack_require__(57);
  22378. var AsyncScheduler_1 = __webpack_require__(58);
  22379. /**
  22380. *
  22381. * Async Scheduler
  22382. *
  22383. * <span class="informal">Schedule task as if you used setTimeout(task, duration)</span>
  22384. *
  22385. * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript
  22386. * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating
  22387. * in intervals.
  22388. *
  22389. * If you just want to "defer" task, that is to perform it right after currently
  22390. * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),
  22391. * better choice will be the {@link asap} scheduler.
  22392. *
  22393. * @example <caption>Use async scheduler to delay task</caption>
  22394. * const task = () => console.log('it works!');
  22395. *
  22396. * Rx.Scheduler.async.schedule(task, 2000);
  22397. *
  22398. * // After 2 seconds logs:
  22399. * // "it works!"
  22400. *
  22401. *
  22402. * @example <caption>Use async scheduler to repeat task in intervals</caption>
  22403. * function task(state) {
  22404. * console.log(state);
  22405. * this.schedule(state + 1, 1000); // `this` references currently executing Action,
  22406. * // which we reschedule with new state and delay
  22407. * }
  22408. *
  22409. * Rx.Scheduler.async.schedule(task, 3000, 0);
  22410. *
  22411. * // Logs:
  22412. * // 0 after 3s
  22413. * // 1 after 4s
  22414. * // 2 after 5s
  22415. * // 3 after 6s
  22416. *
  22417. * @static true
  22418. * @name async
  22419. * @owner Scheduler
  22420. */
  22421. exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
  22422. //# sourceMappingURL=async.js.map
  22423. /***/ }),
  22424. /* 11 */
  22425. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  22426. "use strict";
  22427. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return App; });
  22428. /* unused harmony export getNavByIdOrName */
  22429. /* unused harmony export findTopNavs */
  22430. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  22431. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(40);
  22432. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_constants__ = __webpack_require__(47);
  22433. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  22434. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_nav_util__ = __webpack_require__(34);
  22435. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__menu_controller__ = __webpack_require__(41);
  22436. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__platform_platform__ = __webpack_require__(7);
  22437. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__transitions_transition_ios__ = __webpack_require__(357);
  22438. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__transitions_transition_md__ = __webpack_require__(358);
  22439. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__transitions_transition_wp__ = __webpack_require__(359);
  22440. /**
  22441. * @name App
  22442. * @description
  22443. * App is a utility class used in Ionic to get information about various aspects of an app
  22444. */
  22445. var App = (function () {
  22446. function App(_config, _plt, _menuCtrl) {
  22447. this._config = _config;
  22448. this._plt = _plt;
  22449. this._menuCtrl = _menuCtrl;
  22450. this._disTime = 0;
  22451. this._scrollTime = 0;
  22452. this._title = '';
  22453. this._titleSrv = new __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__["e" /* Title */](__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__["b" /* DOCUMENT */]);
  22454. this._rootNavs = new Map();
  22455. this._didScroll = false;
  22456. /**
  22457. * Observable that emits whenever a view loads in the app.
  22458. * @returns {Observable} Returns an observable
  22459. */
  22460. this.viewDidLoad = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  22461. /**
  22462. * Observable that emits before any view is entered in the app.
  22463. * @returns {Observable} Returns an observable
  22464. */
  22465. this.viewWillEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  22466. /**
  22467. * Observable that emits after any view is entered in the app.
  22468. * @returns {Observable} Returns an observable
  22469. */
  22470. this.viewDidEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  22471. /**
  22472. * Observable that emits before any view is exited in the app.
  22473. * @returns {Observable} Returns an observable
  22474. */
  22475. this.viewWillLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  22476. /**
  22477. * Observable that emits after any view is exited in the app.
  22478. * @returns {Observable} Returns an observable
  22479. */
  22480. this.viewDidLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  22481. /**
  22482. * Observable that emits before any view unloads in the app.
  22483. * @returns {Observable} Returns an observable
  22484. */
  22485. this.viewWillUnload = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  22486. // listen for hardware back button events
  22487. // register this back button action with a default priority
  22488. _plt.registerBackButtonAction(this.goBack.bind(this));
  22489. this._disableScrollAssist = _config.getBoolean('disableScrollAssist', false);
  22490. var blurring = _config.getBoolean('inputBlurring', false);
  22491. if (blurring) {
  22492. this._enableInputBlurring();
  22493. }
  22494. (void 0) /* runInDev */;
  22495. _config.setTransition('ios-transition', __WEBPACK_IMPORTED_MODULE_7__transitions_transition_ios__["a" /* IOSTransition */]);
  22496. _config.setTransition('md-transition', __WEBPACK_IMPORTED_MODULE_8__transitions_transition_md__["a" /* MDTransition */]);
  22497. _config.setTransition('wp-transition', __WEBPACK_IMPORTED_MODULE_9__transitions_transition_wp__["a" /* WPTransition */]);
  22498. }
  22499. /**
  22500. * Sets the document title.
  22501. * @param {string} val Value to set the document title to.
  22502. */
  22503. App.prototype.setTitle = function (val) {
  22504. if (val !== this._title) {
  22505. this._title = val;
  22506. this._titleSrv.setTitle(val);
  22507. }
  22508. };
  22509. /**
  22510. * @hidden
  22511. */
  22512. App.prototype.setElementClass = function (className, isAdd) {
  22513. this._appRoot.setElementClass(className, isAdd);
  22514. };
  22515. /**
  22516. * @hidden
  22517. * Sets if the app is currently enabled or not, meaning if it's
  22518. * available to accept new user commands. For example, this is set to `false`
  22519. * while views transition, a modal slides up, an action-sheet
  22520. * slides up, etc. After the transition completes it is set back to `true`.
  22521. * @param {boolean} isEnabled `true` for enabled, `false` for disabled
  22522. * @param {number} duration When `isEnabled` is set to `false`, this argument
  22523. * is used to set the maximum number of milliseconds that app will wait until
  22524. * it will automatically enable the app again. It's basically a fallback incase
  22525. * something goes wrong during a transition and the app wasn't re-enabled correctly.
  22526. */
  22527. App.prototype.setEnabled = function (isEnabled, duration, minDuration) {
  22528. if (duration === void 0) { duration = 700; }
  22529. if (minDuration === void 0) { minDuration = 0; }
  22530. this._disTime = (isEnabled ? 0 : Date.now() + duration);
  22531. if (this._clickBlock) {
  22532. if (isEnabled) {
  22533. // disable the click block if it's enabled, or the duration is tiny
  22534. this._clickBlock.activate(false, CLICK_BLOCK_BUFFER_IN_MILLIS, minDuration);
  22535. }
  22536. else {
  22537. // show the click block for duration + some number
  22538. this._clickBlock.activate(true, duration + CLICK_BLOCK_BUFFER_IN_MILLIS, minDuration);
  22539. }
  22540. }
  22541. };
  22542. /**
  22543. * @hidden
  22544. * Toggles whether an application can be scrolled
  22545. * @param {boolean} disableScroll when set to `false`, the application's
  22546. * scrolling is enabled. When set to `true`, scrolling is disabled.
  22547. */
  22548. App.prototype._setDisableScroll = function (disableScroll) {
  22549. if (this._disableScrollAssist) {
  22550. this._appRoot._disableScroll(disableScroll);
  22551. }
  22552. };
  22553. /**
  22554. * @hidden
  22555. * Boolean if the app is actively enabled or not.
  22556. * @return {boolean}
  22557. */
  22558. App.prototype.isEnabled = function () {
  22559. var disTime = this._disTime;
  22560. if (disTime === 0) {
  22561. return true;
  22562. }
  22563. return (disTime < Date.now());
  22564. };
  22565. /**
  22566. * @hidden
  22567. */
  22568. App.prototype.setScrolling = function () {
  22569. this._scrollTime = Date.now() + ACTIVE_SCROLLING_TIME;
  22570. this._didScroll = true;
  22571. };
  22572. /**
  22573. * Boolean if the app is actively scrolling or not.
  22574. * @return {boolean} returns true or false
  22575. */
  22576. App.prototype.isScrolling = function () {
  22577. var scrollTime = this._scrollTime;
  22578. if (scrollTime === 0) {
  22579. return false;
  22580. }
  22581. if (scrollTime < Date.now()) {
  22582. this._scrollTime = 0;
  22583. return false;
  22584. }
  22585. return true;
  22586. };
  22587. /**
  22588. * @return {NavController} Returns the first Active Nav Controller from the list. This method is deprecated
  22589. */
  22590. App.prototype.getActiveNav = function () {
  22591. console.warn('(getActiveNav) is deprecated and will be removed in the next major release. Use getActiveNavs instead.');
  22592. var navs = this.getActiveNavs();
  22593. if (navs && navs.length) {
  22594. return navs[0];
  22595. }
  22596. return null;
  22597. };
  22598. /**
  22599. * @return {NavController[]} Returns the active NavControllers. Using this method is preferred when we need access to the top-level navigation controller while on the outside views and handlers like `registerBackButtonAction()`
  22600. */
  22601. App.prototype.getActiveNavs = function (rootNavId) {
  22602. var portal = this._appRoot._getPortal(__WEBPACK_IMPORTED_MODULE_2__app_constants__["c" /* PORTAL_MODAL */]);
  22603. if (portal.length() > 0) {
  22604. return findTopNavs(portal);
  22605. }
  22606. if (!this._rootNavs || !this._rootNavs.size) {
  22607. return [];
  22608. }
  22609. if (this._rootNavs.size === 1) {
  22610. return findTopNavs(this._rootNavs.values().next().value);
  22611. }
  22612. if (rootNavId) {
  22613. return findTopNavs(this._rootNavs.get(rootNavId));
  22614. }
  22615. // fallback to just using all root names
  22616. var activeNavs = [];
  22617. this._rootNavs.forEach(function (nav) {
  22618. var topNavs = findTopNavs(nav);
  22619. activeNavs = activeNavs.concat(topNavs);
  22620. });
  22621. return activeNavs;
  22622. };
  22623. App.prototype.getRootNav = function () {
  22624. console.warn('(getRootNav) is deprecated and will be removed in the next major release. Use getRootNavById instead.');
  22625. var rootNavs = this.getRootNavs();
  22626. if (rootNavs.length === 0) {
  22627. return null;
  22628. }
  22629. else if (rootNavs.length > 1) {
  22630. console.warn('(getRootNav) there are multiple root navs, use getRootNavs instead');
  22631. }
  22632. return rootNavs[0];
  22633. };
  22634. App.prototype.getRootNavs = function () {
  22635. var navs = [];
  22636. this._rootNavs.forEach(function (nav) { return navs.push(nav); });
  22637. return navs;
  22638. };
  22639. /**
  22640. * @return {NavController} Returns the root NavController
  22641. */
  22642. App.prototype.getRootNavById = function (navId) {
  22643. return this._rootNavs.get(navId);
  22644. };
  22645. /**
  22646. * @hidden
  22647. */
  22648. App.prototype.registerRootNav = function (nav) {
  22649. this._rootNavs.set(nav.id, nav);
  22650. };
  22651. /**
  22652. * @hidden
  22653. */
  22654. App.prototype.unregisterRootNav = function (nav) {
  22655. this._rootNavs.delete(nav.id);
  22656. };
  22657. App.prototype.getActiveNavContainers = function () {
  22658. // for each root nav container, get it's active nav
  22659. var list = [];
  22660. this._rootNavs.forEach(function (container) {
  22661. list = list.concat(findTopNavs(container));
  22662. });
  22663. return list;
  22664. };
  22665. /**
  22666. * @hidden
  22667. */
  22668. App.prototype.present = function (enteringView, opts, appPortal) {
  22669. (void 0) /* assert */;
  22670. var portal = this._appRoot._getPortal(appPortal);
  22671. // Set Nav must be set here in order to dimiss() work synchnously.
  22672. // TODO: move _setNav() to the earlier stages of NavController. _queueTrns()
  22673. enteringView._setNav(portal);
  22674. opts.direction = __WEBPACK_IMPORTED_MODULE_4__navigation_nav_util__["b" /* DIRECTION_FORWARD */];
  22675. if (!opts.animation) {
  22676. opts.animation = enteringView.getTransitionName(__WEBPACK_IMPORTED_MODULE_4__navigation_nav_util__["b" /* DIRECTION_FORWARD */]);
  22677. }
  22678. enteringView.setLeavingOpts({
  22679. keyboardClose: opts.keyboardClose,
  22680. direction: __WEBPACK_IMPORTED_MODULE_4__navigation_nav_util__["a" /* DIRECTION_BACK */],
  22681. animation: enteringView.getTransitionName(__WEBPACK_IMPORTED_MODULE_4__navigation_nav_util__["a" /* DIRECTION_BACK */]),
  22682. ev: opts.ev
  22683. });
  22684. return portal.insertPages(-1, [enteringView], opts);
  22685. };
  22686. /**
  22687. * @hidden
  22688. */
  22689. App.prototype.goBack = function () {
  22690. if (this._menuCtrl && this._menuCtrl.isOpen()) {
  22691. return this._menuCtrl.close();
  22692. }
  22693. var navPromise = this.navPop();
  22694. if (!navPromise) {
  22695. // no views to go back to
  22696. // let's exit the app
  22697. if (this._config.getBoolean('navExitApp', true)) {
  22698. (void 0) /* console.debug */;
  22699. this._plt.exitApp();
  22700. }
  22701. }
  22702. return navPromise;
  22703. };
  22704. /**
  22705. * @hidden
  22706. */
  22707. App.prototype.navPop = function () {
  22708. var _this = this;
  22709. if (!this._rootNavs || this._rootNavs.size === 0 || !this.isEnabled()) {
  22710. return Promise.resolve();
  22711. }
  22712. // If there are any alert/actionsheet open, let's do nothing
  22713. var portal = this._appRoot._getPortal(__WEBPACK_IMPORTED_MODULE_2__app_constants__["a" /* PORTAL_DEFAULT */]);
  22714. if (portal.length() > 0) {
  22715. return Promise.resolve();
  22716. }
  22717. var navToPop = null;
  22718. var mostRecentVC = null;
  22719. this._rootNavs.forEach(function (navContainer) {
  22720. var activeNavs = _this.getActiveNavs(navContainer.id);
  22721. var poppableNavs = activeNavs.map(function (activeNav) { return getPoppableNav(activeNav); }).filter(function (nav) { return !!nav; });
  22722. poppableNavs.forEach(function (poppable) {
  22723. var topViewController = poppable.last();
  22724. if (poppable._isPortal || (topViewController && poppable.length() > 1 && (!mostRecentVC || topViewController._ts >= mostRecentVC._ts))) {
  22725. mostRecentVC = topViewController;
  22726. navToPop = poppable;
  22727. }
  22728. });
  22729. });
  22730. if (navToPop) {
  22731. return navToPop.pop();
  22732. }
  22733. };
  22734. /**
  22735. * @hidden
  22736. */
  22737. App.prototype._enableInputBlurring = function () {
  22738. (void 0) /* console.debug */;
  22739. var focused = true;
  22740. var self = this;
  22741. var platform = this._plt;
  22742. platform.registerListener(platform.doc(), 'focusin', onFocusin, { capture: true, zone: false, passive: true });
  22743. platform.registerListener(platform.doc(), 'touchend', onTouchend, { capture: false, zone: false, passive: true });
  22744. function onFocusin() {
  22745. focused = true;
  22746. }
  22747. function onTouchend(ev) {
  22748. // if app did scroll return early
  22749. if (self._didScroll) {
  22750. self._didScroll = false;
  22751. return;
  22752. }
  22753. var active = self._plt.getActiveElement();
  22754. if (!active) {
  22755. return;
  22756. }
  22757. // only blur if the active element is a text-input or a textarea
  22758. if (SKIP_BLURRING.indexOf(active.tagName) === -1) {
  22759. return;
  22760. }
  22761. // if the selected target is the active element, do not blur
  22762. var tapped = ev.target;
  22763. if (tapped === active) {
  22764. return;
  22765. }
  22766. if (SKIP_BLURRING.indexOf(tapped.tagName) >= 0) {
  22767. return;
  22768. }
  22769. // skip if div is a cover
  22770. if (tapped.classList.contains('input-cover')) {
  22771. return;
  22772. }
  22773. focused = false;
  22774. // TODO: find a better way, why 50ms?
  22775. platform.timeout(function () {
  22776. if (!focused) {
  22777. active.blur();
  22778. }
  22779. }, 50);
  22780. }
  22781. };
  22782. App.prototype.getNavByIdOrName = function (id) {
  22783. var navs = Array.from(this._rootNavs.values());
  22784. for (var _i = 0, navs_1 = navs; _i < navs_1.length; _i++) {
  22785. var navContainer = navs_1[_i];
  22786. var match = getNavByIdOrName(navContainer, id);
  22787. if (match) {
  22788. return match;
  22789. }
  22790. }
  22791. return null;
  22792. };
  22793. App.decorators = [
  22794. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  22795. ];
  22796. /** @nocollapse */
  22797. App.ctorParameters = function () { return [
  22798. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  22799. { type: __WEBPACK_IMPORTED_MODULE_6__platform_platform__["a" /* Platform */], },
  22800. { type: __WEBPACK_IMPORTED_MODULE_5__menu_controller__["a" /* MenuController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  22801. ]; };
  22802. return App;
  22803. }());
  22804. function getNavByIdOrName(nav, id) {
  22805. if (nav.id === id || nav.name === id) {
  22806. return nav;
  22807. }
  22808. for (var _i = 0, _a = nav.getAllChildNavs(); _i < _a.length; _i++) {
  22809. var child = _a[_i];
  22810. var tmp = getNavByIdOrName(child, id);
  22811. if (tmp) {
  22812. return tmp;
  22813. }
  22814. }
  22815. return null;
  22816. }
  22817. function getPoppableNav(nav) {
  22818. if (!nav) {
  22819. return null;
  22820. }
  22821. if (Object(__WEBPACK_IMPORTED_MODULE_4__navigation_nav_util__["m" /* isTabs */])(nav)) {
  22822. // tabs aren't a nav, so just call this function again immediately on the parent on tabs
  22823. return getPoppableNav(nav.parent);
  22824. }
  22825. var len = nav.length();
  22826. if (len > 1 || (nav._isPortal && len > 0)) {
  22827. // this nav controller has more than one view
  22828. // use this nav!
  22829. return nav;
  22830. }
  22831. // try again using the parent nav (if there is one)
  22832. return getPoppableNav(nav.parent);
  22833. }
  22834. function findTopNavs(nav) {
  22835. var containers = [];
  22836. var childNavs = nav.getActiveChildNavs();
  22837. if (!childNavs || !childNavs.length) {
  22838. containers.push(nav);
  22839. }
  22840. else {
  22841. childNavs.forEach(function (childNav) {
  22842. var topNavs = findTopNavs(childNav);
  22843. containers = containers.concat(topNavs);
  22844. });
  22845. }
  22846. return containers;
  22847. }
  22848. var SKIP_BLURRING = ['INPUT', 'TEXTAREA', 'ION-INPUT', 'ION-TEXTAREA'];
  22849. var ACTIVE_SCROLLING_TIME = 100;
  22850. var CLICK_BLOCK_BUFFER_IN_MILLIS = 64;
  22851. //# sourceMappingURL=app.js.map
  22852. /***/ }),
  22853. /* 12 */
  22854. /***/ (function(module, exports, __webpack_require__) {
  22855. "use strict";
  22856. var __extends = (this && this.__extends) || function (d, b) {
  22857. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  22858. function __() { this.constructor = d; }
  22859. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  22860. };
  22861. var Observable_1 = __webpack_require__(0);
  22862. var Subscriber_1 = __webpack_require__(4);
  22863. var Subscription_1 = __webpack_require__(14);
  22864. var ObjectUnsubscribedError_1 = __webpack_require__(66);
  22865. var SubjectSubscription_1 = __webpack_require__(163);
  22866. var rxSubscriber_1 = __webpack_require__(63);
  22867. /**
  22868. * @class SubjectSubscriber<T>
  22869. */
  22870. var SubjectSubscriber = (function (_super) {
  22871. __extends(SubjectSubscriber, _super);
  22872. function SubjectSubscriber(destination) {
  22873. _super.call(this, destination);
  22874. this.destination = destination;
  22875. }
  22876. return SubjectSubscriber;
  22877. }(Subscriber_1.Subscriber));
  22878. exports.SubjectSubscriber = SubjectSubscriber;
  22879. /**
  22880. * @class Subject<T>
  22881. */
  22882. var Subject = (function (_super) {
  22883. __extends(Subject, _super);
  22884. function Subject() {
  22885. _super.call(this);
  22886. this.observers = [];
  22887. this.closed = false;
  22888. this.isStopped = false;
  22889. this.hasError = false;
  22890. this.thrownError = null;
  22891. }
  22892. Subject.prototype[rxSubscriber_1.rxSubscriber] = function () {
  22893. return new SubjectSubscriber(this);
  22894. };
  22895. Subject.prototype.lift = function (operator) {
  22896. var subject = new AnonymousSubject(this, this);
  22897. subject.operator = operator;
  22898. return subject;
  22899. };
  22900. Subject.prototype.next = function (value) {
  22901. if (this.closed) {
  22902. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  22903. }
  22904. if (!this.isStopped) {
  22905. var observers = this.observers;
  22906. var len = observers.length;
  22907. var copy = observers.slice();
  22908. for (var i = 0; i < len; i++) {
  22909. copy[i].next(value);
  22910. }
  22911. }
  22912. };
  22913. Subject.prototype.error = function (err) {
  22914. if (this.closed) {
  22915. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  22916. }
  22917. this.hasError = true;
  22918. this.thrownError = err;
  22919. this.isStopped = true;
  22920. var observers = this.observers;
  22921. var len = observers.length;
  22922. var copy = observers.slice();
  22923. for (var i = 0; i < len; i++) {
  22924. copy[i].error(err);
  22925. }
  22926. this.observers.length = 0;
  22927. };
  22928. Subject.prototype.complete = function () {
  22929. if (this.closed) {
  22930. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  22931. }
  22932. this.isStopped = true;
  22933. var observers = this.observers;
  22934. var len = observers.length;
  22935. var copy = observers.slice();
  22936. for (var i = 0; i < len; i++) {
  22937. copy[i].complete();
  22938. }
  22939. this.observers.length = 0;
  22940. };
  22941. Subject.prototype.unsubscribe = function () {
  22942. this.isStopped = true;
  22943. this.closed = true;
  22944. this.observers = null;
  22945. };
  22946. Subject.prototype._trySubscribe = function (subscriber) {
  22947. if (this.closed) {
  22948. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  22949. }
  22950. else {
  22951. return _super.prototype._trySubscribe.call(this, subscriber);
  22952. }
  22953. };
  22954. /** @deprecated internal use only */ Subject.prototype._subscribe = function (subscriber) {
  22955. if (this.closed) {
  22956. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  22957. }
  22958. else if (this.hasError) {
  22959. subscriber.error(this.thrownError);
  22960. return Subscription_1.Subscription.EMPTY;
  22961. }
  22962. else if (this.isStopped) {
  22963. subscriber.complete();
  22964. return Subscription_1.Subscription.EMPTY;
  22965. }
  22966. else {
  22967. this.observers.push(subscriber);
  22968. return new SubjectSubscription_1.SubjectSubscription(this, subscriber);
  22969. }
  22970. };
  22971. Subject.prototype.asObservable = function () {
  22972. var observable = new Observable_1.Observable();
  22973. observable.source = this;
  22974. return observable;
  22975. };
  22976. Subject.create = function (destination, source) {
  22977. return new AnonymousSubject(destination, source);
  22978. };
  22979. return Subject;
  22980. }(Observable_1.Observable));
  22981. exports.Subject = Subject;
  22982. /**
  22983. * @class AnonymousSubject<T>
  22984. */
  22985. var AnonymousSubject = (function (_super) {
  22986. __extends(AnonymousSubject, _super);
  22987. function AnonymousSubject(destination, source) {
  22988. _super.call(this);
  22989. this.destination = destination;
  22990. this.source = source;
  22991. }
  22992. AnonymousSubject.prototype.next = function (value) {
  22993. var destination = this.destination;
  22994. if (destination && destination.next) {
  22995. destination.next(value);
  22996. }
  22997. };
  22998. AnonymousSubject.prototype.error = function (err) {
  22999. var destination = this.destination;
  23000. if (destination && destination.error) {
  23001. this.destination.error(err);
  23002. }
  23003. };
  23004. AnonymousSubject.prototype.complete = function () {
  23005. var destination = this.destination;
  23006. if (destination && destination.complete) {
  23007. this.destination.complete();
  23008. }
  23009. };
  23010. /** @deprecated internal use only */ AnonymousSubject.prototype._subscribe = function (subscriber) {
  23011. var source = this.source;
  23012. if (source) {
  23013. return this.source.subscribe(subscriber);
  23014. }
  23015. else {
  23016. return Subscription_1.Subscription.EMPTY;
  23017. }
  23018. };
  23019. return AnonymousSubject;
  23020. }(Subject));
  23021. exports.AnonymousSubject = AnonymousSubject;
  23022. //# sourceMappingURL=Subject.js.map
  23023. /***/ }),
  23024. /* 13 */
  23025. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23026. "use strict";
  23027. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return GESTURE_GO_BACK_SWIPE; });
  23028. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return GESTURE_MENU_SWIPE; });
  23029. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return GESTURE_ITEM_SWIPE; });
  23030. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return GESTURE_REFRESHER; });
  23031. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return GESTURE_TOGGLE; });
  23032. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return GESTURE_PRIORITY_SLIDING_ITEM; });
  23033. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return GESTURE_PRIORITY_REFRESHER; });
  23034. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return GESTURE_PRIORITY_MENU_SWIPE; });
  23035. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return GESTURE_PRIORITY_GO_BACK_SWIPE; });
  23036. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return GESTURE_PRIORITY_TOGGLE; });
  23037. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return BLOCK_ALL; });
  23038. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return GestureController; });
  23039. /* unused harmony export GestureDelegate */
  23040. /* unused harmony export BlockerDelegate */
  23041. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  23042. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_app_app__ = __webpack_require__(11);
  23043. /** @hidden */
  23044. var GESTURE_GO_BACK_SWIPE = 'goback-swipe';
  23045. /** @hidden */
  23046. var GESTURE_MENU_SWIPE = 'menu-swipe';
  23047. /** @hidden */
  23048. var GESTURE_ITEM_SWIPE = 'item-swipe';
  23049. /** @hidden */
  23050. var GESTURE_REFRESHER = 'refresher';
  23051. /** @hidden */
  23052. var GESTURE_TOGGLE = 'toggle';
  23053. /** @hidden */
  23054. var GESTURE_PRIORITY_SLIDING_ITEM = -10;
  23055. /** @hidden */
  23056. var GESTURE_PRIORITY_REFRESHER = 0;
  23057. /** @hidden */
  23058. var GESTURE_PRIORITY_MENU_SWIPE = 10;
  23059. /** @hidden */
  23060. var GESTURE_PRIORITY_GO_BACK_SWIPE = 20;
  23061. /** @hidden */
  23062. var GESTURE_PRIORITY_TOGGLE = 30;
  23063. /**
  23064. * @hidden
  23065. */
  23066. var BLOCK_ALL = {
  23067. disable: [GESTURE_MENU_SWIPE, GESTURE_GO_BACK_SWIPE],
  23068. disableScroll: true
  23069. };
  23070. /**
  23071. * @hidden
  23072. */
  23073. var GestureController = (function () {
  23074. function GestureController(_app) {
  23075. this._app = _app;
  23076. this.id = 1;
  23077. this.requestedStart = {};
  23078. this.disabledGestures = {};
  23079. this.disabledScroll = new Set();
  23080. this.capturedID = null;
  23081. }
  23082. GestureController.prototype.createGesture = function (opts) {
  23083. if (!opts.name) {
  23084. throw new Error('name is undefined');
  23085. }
  23086. return new GestureDelegate(opts.name, this.newID(), this, opts.priority || 0, !!opts.disableScroll);
  23087. };
  23088. GestureController.prototype.createBlocker = function (opts) {
  23089. if (opts === void 0) { opts = {}; }
  23090. return new BlockerDelegate(this.newID(), this, opts.disable, !!opts.disableScroll);
  23091. };
  23092. GestureController.prototype.newID = function () {
  23093. var id = this.id;
  23094. this.id++;
  23095. return id;
  23096. };
  23097. GestureController.prototype.start = function (gestureName, id, priority) {
  23098. if (!this.canStart(gestureName)) {
  23099. delete this.requestedStart[id];
  23100. return false;
  23101. }
  23102. this.requestedStart[id] = priority;
  23103. return true;
  23104. };
  23105. GestureController.prototype.capture = function (gestureName, id, priority) {
  23106. if (!this.start(gestureName, id, priority)) {
  23107. return false;
  23108. }
  23109. var requestedStart = this.requestedStart;
  23110. var maxPriority = -10000;
  23111. for (var gestureID in requestedStart) {
  23112. maxPriority = Math.max(maxPriority, requestedStart[gestureID]);
  23113. }
  23114. if (maxPriority === priority) {
  23115. this.capturedID = id;
  23116. this.requestedStart = {};
  23117. (void 0) /* console.debug */;
  23118. return true;
  23119. }
  23120. delete requestedStart[id];
  23121. (void 0) /* console.debug */;
  23122. return false;
  23123. };
  23124. GestureController.prototype.release = function (id) {
  23125. delete this.requestedStart[id];
  23126. if (this.capturedID && id === this.capturedID) {
  23127. this.capturedID = null;
  23128. }
  23129. };
  23130. GestureController.prototype.disableGesture = function (gestureName, id) {
  23131. var set = this.disabledGestures[gestureName];
  23132. if (!set) {
  23133. set = new Set();
  23134. this.disabledGestures[gestureName] = set;
  23135. }
  23136. set.add(id);
  23137. };
  23138. GestureController.prototype.enableGesture = function (gestureName, id) {
  23139. var set = this.disabledGestures[gestureName];
  23140. if (set) {
  23141. set.delete(id);
  23142. }
  23143. };
  23144. GestureController.prototype.disableScroll = function (id) {
  23145. var isEnabled = !this.isScrollDisabled();
  23146. this.disabledScroll.add(id);
  23147. if (this._app && isEnabled && this.isScrollDisabled()) {
  23148. (void 0) /* console.debug */;
  23149. this._app._setDisableScroll(true);
  23150. }
  23151. };
  23152. GestureController.prototype.enableScroll = function (id) {
  23153. var isDisabled = this.isScrollDisabled();
  23154. this.disabledScroll.delete(id);
  23155. if (this._app && isDisabled && !this.isScrollDisabled()) {
  23156. (void 0) /* console.debug */;
  23157. this._app._setDisableScroll(false);
  23158. }
  23159. };
  23160. GestureController.prototype.canStart = function (gestureName) {
  23161. if (this.capturedID) {
  23162. (void 0) /* console.debug */;
  23163. // a gesture already captured
  23164. return false;
  23165. }
  23166. if (this.isDisabled(gestureName)) {
  23167. (void 0) /* console.debug */;
  23168. return false;
  23169. }
  23170. return true;
  23171. };
  23172. GestureController.prototype.isCaptured = function () {
  23173. return !!this.capturedID;
  23174. };
  23175. GestureController.prototype.isScrollDisabled = function () {
  23176. return this.disabledScroll.size > 0;
  23177. };
  23178. GestureController.prototype.isDisabled = function (gestureName) {
  23179. var disabled = this.disabledGestures[gestureName];
  23180. return !!(disabled && disabled.size > 0);
  23181. };
  23182. GestureController.decorators = [
  23183. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  23184. ];
  23185. /** @nocollapse */
  23186. GestureController.ctorParameters = function () { return [
  23187. { type: __WEBPACK_IMPORTED_MODULE_1__components_app_app__["a" /* App */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return __WEBPACK_IMPORTED_MODULE_1__components_app_app__["a" /* App */]; }),] },] },
  23188. ]; };
  23189. return GestureController;
  23190. }());
  23191. /**
  23192. * @hidden
  23193. */
  23194. var GestureDelegate = (function () {
  23195. function GestureDelegate(name, id, controller, priority, disableScroll) {
  23196. this.name = name;
  23197. this.id = id;
  23198. this.controller = controller;
  23199. this.priority = priority;
  23200. this.disableScroll = disableScroll;
  23201. }
  23202. GestureDelegate.prototype.canStart = function () {
  23203. if (!this.controller) {
  23204. (void 0) /* assert */;
  23205. return false;
  23206. }
  23207. return this.controller.canStart(this.name);
  23208. };
  23209. GestureDelegate.prototype.start = function () {
  23210. if (!this.controller) {
  23211. (void 0) /* assert */;
  23212. return false;
  23213. }
  23214. return this.controller.start(this.name, this.id, this.priority);
  23215. };
  23216. GestureDelegate.prototype.capture = function () {
  23217. if (!this.controller) {
  23218. (void 0) /* assert */;
  23219. return false;
  23220. }
  23221. var captured = this.controller.capture(this.name, this.id, this.priority);
  23222. if (captured && this.disableScroll) {
  23223. this.controller.disableScroll(this.id);
  23224. }
  23225. return captured;
  23226. };
  23227. GestureDelegate.prototype.release = function () {
  23228. if (!this.controller) {
  23229. (void 0) /* assert */;
  23230. return;
  23231. }
  23232. this.controller.release(this.id);
  23233. if (this.disableScroll) {
  23234. this.controller.enableScroll(this.id);
  23235. }
  23236. };
  23237. GestureDelegate.prototype.destroy = function () {
  23238. this.release();
  23239. this.controller = null;
  23240. };
  23241. return GestureDelegate;
  23242. }());
  23243. /**
  23244. * @hidden
  23245. */
  23246. var BlockerDelegate = (function () {
  23247. function BlockerDelegate(id, controller, disable, disableScroll) {
  23248. this.id = id;
  23249. this.controller = controller;
  23250. this.disable = disable;
  23251. this.disableScroll = disableScroll;
  23252. this.blocked = false;
  23253. }
  23254. BlockerDelegate.prototype.block = function () {
  23255. var _this = this;
  23256. if (!this.controller) {
  23257. (void 0) /* assert */;
  23258. return;
  23259. }
  23260. if (this.disable) {
  23261. this.disable.forEach(function (gesture) {
  23262. _this.controller.disableGesture(gesture, _this.id);
  23263. });
  23264. }
  23265. if (this.disableScroll) {
  23266. this.controller.disableScroll(this.id);
  23267. }
  23268. this.blocked = true;
  23269. };
  23270. BlockerDelegate.prototype.unblock = function () {
  23271. var _this = this;
  23272. if (!this.controller) {
  23273. (void 0) /* assert */;
  23274. return;
  23275. }
  23276. if (this.disable) {
  23277. this.disable.forEach(function (gesture) {
  23278. _this.controller.enableGesture(gesture, _this.id);
  23279. });
  23280. }
  23281. if (this.disableScroll) {
  23282. this.controller.enableScroll(this.id);
  23283. }
  23284. this.blocked = false;
  23285. };
  23286. BlockerDelegate.prototype.destroy = function () {
  23287. this.unblock();
  23288. this.controller = null;
  23289. };
  23290. return BlockerDelegate;
  23291. }());
  23292. //# sourceMappingURL=gesture-controller.js.map
  23293. /***/ }),
  23294. /* 14 */
  23295. /***/ (function(module, exports, __webpack_require__) {
  23296. "use strict";
  23297. var isArray_1 = __webpack_require__(26);
  23298. var isObject_1 = __webpack_require__(154);
  23299. var isFunction_1 = __webpack_require__(62);
  23300. var tryCatch_1 = __webpack_require__(17);
  23301. var errorObject_1 = __webpack_require__(16);
  23302. var UnsubscriptionError_1 = __webpack_require__(155);
  23303. /**
  23304. * Represents a disposable resource, such as the execution of an Observable. A
  23305. * Subscription has one important method, `unsubscribe`, that takes no argument
  23306. * and just disposes the resource held by the subscription.
  23307. *
  23308. * Additionally, subscriptions may be grouped together through the `add()`
  23309. * method, which will attach a child Subscription to the current Subscription.
  23310. * When a Subscription is unsubscribed, all its children (and its grandchildren)
  23311. * will be unsubscribed as well.
  23312. *
  23313. * @class Subscription
  23314. */
  23315. var Subscription = (function () {
  23316. /**
  23317. * @param {function(): void} [unsubscribe] A function describing how to
  23318. * perform the disposal of resources when the `unsubscribe` method is called.
  23319. */
  23320. function Subscription(unsubscribe) {
  23321. /**
  23322. * A flag to indicate whether this Subscription has already been unsubscribed.
  23323. * @type {boolean}
  23324. */
  23325. this.closed = false;
  23326. this._parent = null;
  23327. this._parents = null;
  23328. this._subscriptions = null;
  23329. if (unsubscribe) {
  23330. this._unsubscribe = unsubscribe;
  23331. }
  23332. }
  23333. /**
  23334. * Disposes the resources held by the subscription. May, for instance, cancel
  23335. * an ongoing Observable execution or cancel any other type of work that
  23336. * started when the Subscription was created.
  23337. * @return {void}
  23338. */
  23339. Subscription.prototype.unsubscribe = function () {
  23340. var hasErrors = false;
  23341. var errors;
  23342. if (this.closed) {
  23343. return;
  23344. }
  23345. var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
  23346. this.closed = true;
  23347. this._parent = null;
  23348. this._parents = null;
  23349. // null out _subscriptions first so any child subscriptions that attempt
  23350. // to remove themselves from this subscription will noop
  23351. this._subscriptions = null;
  23352. var index = -1;
  23353. var len = _parents ? _parents.length : 0;
  23354. // if this._parent is null, then so is this._parents, and we
  23355. // don't have to remove ourselves from any parent subscriptions.
  23356. while (_parent) {
  23357. _parent.remove(this);
  23358. // if this._parents is null or index >= len,
  23359. // then _parent is set to null, and the loop exits
  23360. _parent = ++index < len && _parents[index] || null;
  23361. }
  23362. if (isFunction_1.isFunction(_unsubscribe)) {
  23363. var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);
  23364. if (trial === errorObject_1.errorObject) {
  23365. hasErrors = true;
  23366. errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?
  23367. flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]);
  23368. }
  23369. }
  23370. if (isArray_1.isArray(_subscriptions)) {
  23371. index = -1;
  23372. len = _subscriptions.length;
  23373. while (++index < len) {
  23374. var sub = _subscriptions[index];
  23375. if (isObject_1.isObject(sub)) {
  23376. var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);
  23377. if (trial === errorObject_1.errorObject) {
  23378. hasErrors = true;
  23379. errors = errors || [];
  23380. var err = errorObject_1.errorObject.e;
  23381. if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {
  23382. errors = errors.concat(flattenUnsubscriptionErrors(err.errors));
  23383. }
  23384. else {
  23385. errors.push(err);
  23386. }
  23387. }
  23388. }
  23389. }
  23390. }
  23391. if (hasErrors) {
  23392. throw new UnsubscriptionError_1.UnsubscriptionError(errors);
  23393. }
  23394. };
  23395. /**
  23396. * Adds a tear down to be called during the unsubscribe() of this
  23397. * Subscription.
  23398. *
  23399. * If the tear down being added is a subscription that is already
  23400. * unsubscribed, is the same reference `add` is being called on, or is
  23401. * `Subscription.EMPTY`, it will not be added.
  23402. *
  23403. * If this subscription is already in an `closed` state, the passed
  23404. * tear down logic will be executed immediately.
  23405. *
  23406. * @param {TeardownLogic} teardown The additional logic to execute on
  23407. * teardown.
  23408. * @return {Subscription} Returns the Subscription used or created to be
  23409. * added to the inner subscriptions list. This Subscription can be used with
  23410. * `remove()` to remove the passed teardown logic from the inner subscriptions
  23411. * list.
  23412. */
  23413. Subscription.prototype.add = function (teardown) {
  23414. if (!teardown || (teardown === Subscription.EMPTY)) {
  23415. return Subscription.EMPTY;
  23416. }
  23417. if (teardown === this) {
  23418. return this;
  23419. }
  23420. var subscription = teardown;
  23421. switch (typeof teardown) {
  23422. case 'function':
  23423. subscription = new Subscription(teardown);
  23424. case 'object':
  23425. if (subscription.closed || typeof subscription.unsubscribe !== 'function') {
  23426. return subscription;
  23427. }
  23428. else if (this.closed) {
  23429. subscription.unsubscribe();
  23430. return subscription;
  23431. }
  23432. else if (typeof subscription._addParent !== 'function' /* quack quack */) {
  23433. var tmp = subscription;
  23434. subscription = new Subscription();
  23435. subscription._subscriptions = [tmp];
  23436. }
  23437. break;
  23438. default:
  23439. throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
  23440. }
  23441. var subscriptions = this._subscriptions || (this._subscriptions = []);
  23442. subscriptions.push(subscription);
  23443. subscription._addParent(this);
  23444. return subscription;
  23445. };
  23446. /**
  23447. * Removes a Subscription from the internal list of subscriptions that will
  23448. * unsubscribe during the unsubscribe process of this Subscription.
  23449. * @param {Subscription} subscription The subscription to remove.
  23450. * @return {void}
  23451. */
  23452. Subscription.prototype.remove = function (subscription) {
  23453. var subscriptions = this._subscriptions;
  23454. if (subscriptions) {
  23455. var subscriptionIndex = subscriptions.indexOf(subscription);
  23456. if (subscriptionIndex !== -1) {
  23457. subscriptions.splice(subscriptionIndex, 1);
  23458. }
  23459. }
  23460. };
  23461. Subscription.prototype._addParent = function (parent) {
  23462. var _a = this, _parent = _a._parent, _parents = _a._parents;
  23463. if (!_parent || _parent === parent) {
  23464. // If we don't have a parent, or the new parent is the same as the
  23465. // current parent, then set this._parent to the new parent.
  23466. this._parent = parent;
  23467. }
  23468. else if (!_parents) {
  23469. // If there's already one parent, but not multiple, allocate an Array to
  23470. // store the rest of the parent Subscriptions.
  23471. this._parents = [parent];
  23472. }
  23473. else if (_parents.indexOf(parent) === -1) {
  23474. // Only add the new parent to the _parents list if it's not already there.
  23475. _parents.push(parent);
  23476. }
  23477. };
  23478. Subscription.EMPTY = (function (empty) {
  23479. empty.closed = true;
  23480. return empty;
  23481. }(new Subscription()));
  23482. return Subscription;
  23483. }());
  23484. exports.Subscription = Subscription;
  23485. function flattenUnsubscriptionErrors(errors) {
  23486. return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);
  23487. }
  23488. //# sourceMappingURL=Subscription.js.map
  23489. /***/ }),
  23490. /* 15 */
  23491. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23492. "use strict";
  23493. /* unused harmony export DomDebouncer */
  23494. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DomController; });
  23495. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  23496. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform__ = __webpack_require__(7);
  23497. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  23498. /**
  23499. * Adopted from FastDom
  23500. * https://github.com/wilsonpage/fastdom
  23501. * MIT License
  23502. */
  23503. /**
  23504. * @hidden
  23505. */
  23506. var DomDebouncer = (function () {
  23507. function DomDebouncer(dom) {
  23508. this.dom = dom;
  23509. this.writeTask = null;
  23510. this.readTask = null;
  23511. }
  23512. DomDebouncer.prototype.read = function (fn) {
  23513. var _this = this;
  23514. if (this.readTask) {
  23515. return;
  23516. }
  23517. return this.readTask = this.dom.read(function (t) {
  23518. _this.readTask = null;
  23519. fn(t);
  23520. });
  23521. };
  23522. DomDebouncer.prototype.write = function (fn) {
  23523. var _this = this;
  23524. if (this.writeTask) {
  23525. return;
  23526. }
  23527. return this.writeTask = this.dom.write(function (t) {
  23528. _this.writeTask = null;
  23529. fn(t);
  23530. });
  23531. };
  23532. DomDebouncer.prototype.cancel = function () {
  23533. var writeTask = this.writeTask;
  23534. writeTask && this.dom.cancel(writeTask);
  23535. var readTask = this.readTask;
  23536. readTask && this.dom.cancel(readTask);
  23537. this.readTask = this.writeTask = null;
  23538. };
  23539. return DomDebouncer;
  23540. }());
  23541. /**
  23542. * @hidden
  23543. */
  23544. var DomController = (function () {
  23545. function DomController(plt) {
  23546. this.plt = plt;
  23547. this.r = [];
  23548. this.w = [];
  23549. }
  23550. DomController.prototype.debouncer = function () {
  23551. return new DomDebouncer(this);
  23552. };
  23553. DomController.prototype.read = function (fn, timeout) {
  23554. var _this = this;
  23555. if (timeout) {
  23556. fn.timeoutId = this.plt.timeout(function () {
  23557. _this.r.push(fn);
  23558. _this._queue();
  23559. }, timeout);
  23560. }
  23561. else {
  23562. this.r.push(fn);
  23563. this._queue();
  23564. }
  23565. return fn;
  23566. };
  23567. DomController.prototype.write = function (fn, timeout) {
  23568. var _this = this;
  23569. if (timeout) {
  23570. fn.timeoutId = this.plt.timeout(function () {
  23571. _this.w.push(fn);
  23572. _this._queue();
  23573. }, timeout);
  23574. }
  23575. else {
  23576. this.w.push(fn);
  23577. this._queue();
  23578. }
  23579. return fn;
  23580. };
  23581. DomController.prototype.cancel = function (fn) {
  23582. if (fn) {
  23583. if (fn.timeoutId) {
  23584. this.plt.cancelTimeout(fn.timeoutId);
  23585. }
  23586. Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["q" /* removeArrayItem */])(this.r, fn) || Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["q" /* removeArrayItem */])(this.w, fn);
  23587. }
  23588. };
  23589. DomController.prototype._queue = function () {
  23590. var self = this;
  23591. if (!self.q) {
  23592. self.q = true;
  23593. self.plt.raf(function rafCallback(timeStamp) {
  23594. self._flush(timeStamp);
  23595. });
  23596. }
  23597. };
  23598. DomController.prototype._flush = function (timeStamp) {
  23599. var err;
  23600. try {
  23601. dispatch(timeStamp, this.r, this.w);
  23602. }
  23603. catch (e) {
  23604. err = e;
  23605. }
  23606. this.q = false;
  23607. if (this.r.length || this.w.length) {
  23608. this._queue();
  23609. }
  23610. if (err) {
  23611. throw err;
  23612. }
  23613. };
  23614. DomController.decorators = [
  23615. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  23616. ];
  23617. /** @nocollapse */
  23618. DomController.ctorParameters = function () { return [
  23619. { type: __WEBPACK_IMPORTED_MODULE_1__platform__["a" /* Platform */], },
  23620. ]; };
  23621. return DomController;
  23622. }());
  23623. function dispatch(timeStamp, r, w) {
  23624. var fn;
  23625. // ******** DOM READS ****************
  23626. while (fn = r.shift()) {
  23627. fn(timeStamp);
  23628. }
  23629. // ******** DOM WRITES ****************
  23630. while (fn = w.shift()) {
  23631. fn(timeStamp);
  23632. }
  23633. }
  23634. //# sourceMappingURL=dom-controller.js.map
  23635. /***/ }),
  23636. /* 16 */
  23637. /***/ (function(module, exports, __webpack_require__) {
  23638. "use strict";
  23639. // typeof any so that it we don't have to cast when comparing a result to the error object
  23640. exports.errorObject = { e: {} };
  23641. //# sourceMappingURL=errorObject.js.map
  23642. /***/ }),
  23643. /* 17 */
  23644. /***/ (function(module, exports, __webpack_require__) {
  23645. "use strict";
  23646. var errorObject_1 = __webpack_require__(16);
  23647. var tryCatchTarget;
  23648. function tryCatcher() {
  23649. try {
  23650. return tryCatchTarget.apply(this, arguments);
  23651. }
  23652. catch (e) {
  23653. errorObject_1.errorObject.e = e;
  23654. return errorObject_1.errorObject;
  23655. }
  23656. }
  23657. function tryCatch(fn) {
  23658. tryCatchTarget = fn;
  23659. return tryCatcher;
  23660. }
  23661. exports.tryCatch = tryCatch;
  23662. ;
  23663. //# sourceMappingURL=tryCatch.js.map
  23664. /***/ }),
  23665. /* 18 */
  23666. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23667. "use strict";
  23668. /* harmony export (immutable) */ __webpack_exports__["c"] = getCss;
  23669. /* harmony export (immutable) */ __webpack_exports__["f"] = pointerCoord;
  23670. /* harmony export (immutable) */ __webpack_exports__["d"] = hasPointerMoved;
  23671. /* harmony export (immutable) */ __webpack_exports__["e"] = isTextInput;
  23672. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NON_TEXT_INPUT_REGEX; });
  23673. /* harmony export (immutable) */ __webpack_exports__["b"] = copyInputAttributes;
  23674. function getCss(docEle) {
  23675. var css = {};
  23676. // transform
  23677. var i;
  23678. var keys = ['webkitTransform', '-webkit-transform', 'webkit-transform', 'transform'];
  23679. for (i = 0; i < keys.length; i++) {
  23680. if (docEle.style[keys[i]] !== undefined) {
  23681. css.transform = keys[i];
  23682. break;
  23683. }
  23684. }
  23685. // transition
  23686. keys = ['webkitTransition', 'transition'];
  23687. for (i = 0; i < keys.length; i++) {
  23688. if (docEle.style[keys[i]] !== undefined) {
  23689. css.transition = keys[i];
  23690. break;
  23691. }
  23692. }
  23693. // The only prefix we care about is webkit for transitions.
  23694. var isWebkit = css.transition.indexOf('webkit') > -1;
  23695. // transition duration
  23696. css.transitionDuration = (isWebkit ? '-webkit-' : '') + 'transition-duration';
  23697. // transition timing function
  23698. css.transitionTimingFn = (isWebkit ? '-webkit-' : '') + 'transition-timing-function';
  23699. // transition delay
  23700. css.transitionDelay = (isWebkit ? '-webkit-' : '') + 'transition-delay';
  23701. // To be sure transitionend works everywhere, include *both* the webkit and non-webkit events
  23702. css.transitionEnd = (isWebkit ? 'webkitTransitionEnd ' : '') + 'transitionend';
  23703. // transform origin
  23704. css.transformOrigin = (isWebkit ? '-webkit-' : '') + 'transform-origin';
  23705. // animation delay
  23706. css.animationDelay = (isWebkit ? 'webkitAnimationDelay' : 'animationDelay');
  23707. return css;
  23708. }
  23709. function pointerCoord(ev) {
  23710. // get coordinates for either a mouse click
  23711. // or a touch depending on the given event
  23712. if (ev) {
  23713. var changedTouches = ev.changedTouches;
  23714. if (changedTouches && changedTouches.length > 0) {
  23715. var touch = changedTouches[0];
  23716. return { x: touch.clientX, y: touch.clientY };
  23717. }
  23718. var pageX = ev.pageX;
  23719. if (pageX !== undefined) {
  23720. return { x: pageX, y: ev.pageY };
  23721. }
  23722. }
  23723. return { x: 0, y: 0 };
  23724. }
  23725. function hasPointerMoved(threshold, startCoord, endCoord) {
  23726. if (startCoord && endCoord) {
  23727. var deltaX = (startCoord.x - endCoord.x);
  23728. var deltaY = (startCoord.y - endCoord.y);
  23729. var distance = deltaX * deltaX + deltaY * deltaY;
  23730. return distance > (threshold * threshold);
  23731. }
  23732. return false;
  23733. }
  23734. function isTextInput(ele) {
  23735. return !!ele &&
  23736. (ele.tagName === 'TEXTAREA' ||
  23737. ele.contentEditable === 'true' ||
  23738. (ele.tagName === 'INPUT' && !(NON_TEXT_INPUT_REGEX.test(ele.type))));
  23739. }
  23740. var NON_TEXT_INPUT_REGEX = /^(radio|checkbox|range|file|submit|reset|color|image|button)$/i;
  23741. var SKIP_INPUT_ATTR = ['value', 'checked', 'disabled', 'readonly', 'placeholder', 'type', 'class', 'style', 'id', 'autofocus', 'autocomplete', 'autocorrect'];
  23742. function copyInputAttributes(srcElement, destElement) {
  23743. // copy attributes from one element to another
  23744. // however, skip over a few of them as they're already
  23745. // handled in the angular world
  23746. var attrs = srcElement.attributes;
  23747. for (var i = 0; i < attrs.length; i++) {
  23748. var attr = attrs[i];
  23749. if (SKIP_INPUT_ATTR.indexOf(attr.name) === -1) {
  23750. destElement.setAttribute(attr.name, attr.value);
  23751. }
  23752. }
  23753. }
  23754. //# sourceMappingURL=dom.js.map
  23755. /***/ }),
  23756. /* 19 */
  23757. /***/ (function(module, exports, __webpack_require__) {
  23758. "use strict";
  23759. /* WEBPACK VAR INJECTION */(function(global) {
  23760. // CommonJS / Node have global context exposed as "global" variable.
  23761. // We don't want to include the whole node.d.ts this this compilation unit so we'll just fake
  23762. // the global "global" var for now.
  23763. var __window = typeof window !== 'undefined' && window;
  23764. var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
  23765. self instanceof WorkerGlobalScope && self;
  23766. var __global = typeof global !== 'undefined' && global;
  23767. var _root = __window || __global || __self;
  23768. exports.root = _root;
  23769. // Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.
  23770. // This is needed when used with angular/tsickle which inserts a goog.module statement.
  23771. // Wrap in IIFE
  23772. (function () {
  23773. if (!_root) {
  23774. throw new Error('RxJS could not find any global context (window, self, global)');
  23775. }
  23776. })();
  23777. //# sourceMappingURL=root.js.map
  23778. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(61)))
  23779. /***/ }),
  23780. /* 20 */
  23781. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23782. "use strict";
  23783. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Animation; });
  23784. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  23785. /**
  23786. * @hidden
  23787. */
  23788. var Animation = (function () {
  23789. function Animation(plt, ele, opts) {
  23790. this._dur = null;
  23791. this._es = null;
  23792. this._rvEs = null;
  23793. this.hasChildren = false;
  23794. this.isPlaying = false;
  23795. this.hasCompleted = false;
  23796. this.plt = plt;
  23797. this.element(ele);
  23798. this.opts = opts;
  23799. }
  23800. Animation.prototype.element = function (ele) {
  23801. if (ele) {
  23802. if (typeof ele === 'string') {
  23803. ele = this.plt.doc().querySelectorAll(ele);
  23804. for (var i = 0; i < ele.length; i++) {
  23805. this._addEle(ele[i]);
  23806. }
  23807. }
  23808. else if (ele.length) {
  23809. for (var i = 0; i < ele.length; i++) {
  23810. this._addEle(ele[i]);
  23811. }
  23812. }
  23813. else {
  23814. this._addEle(ele);
  23815. }
  23816. }
  23817. return this;
  23818. };
  23819. /**
  23820. * NO DOM
  23821. */
  23822. Animation.prototype._addEle = function (ele) {
  23823. if (ele.nativeElement) {
  23824. ele = ele.nativeElement;
  23825. }
  23826. if (ele.nodeType === 1) {
  23827. this._eL = (this._e = this._e || []).push(ele);
  23828. }
  23829. };
  23830. /**
  23831. * Add a child animation to this animation.
  23832. */
  23833. Animation.prototype.add = function (childAnimation) {
  23834. childAnimation.parent = this;
  23835. this.hasChildren = true;
  23836. this._cL = (this._c = this._c || []).push(childAnimation);
  23837. return this;
  23838. };
  23839. /**
  23840. * Get the duration of this animation. If this animation does
  23841. * not have a duration, then it'll get the duration from its parent.
  23842. */
  23843. Animation.prototype.getDuration = function (opts) {
  23844. if (opts && Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["h" /* isDefined */])(opts.duration)) {
  23845. return opts.duration;
  23846. }
  23847. else if (this._dur !== null) {
  23848. return this._dur;
  23849. }
  23850. else if (this.parent) {
  23851. return this.parent.getDuration();
  23852. }
  23853. return 0;
  23854. };
  23855. /**
  23856. * Returns if the animation is a root one.
  23857. */
  23858. Animation.prototype.isRoot = function () {
  23859. return !this.parent;
  23860. };
  23861. /**
  23862. * Set the duration for this animation.
  23863. */
  23864. Animation.prototype.duration = function (milliseconds) {
  23865. this._dur = milliseconds;
  23866. return this;
  23867. };
  23868. /**
  23869. * Get the easing of this animation. If this animation does
  23870. * not have an easing, then it'll get the easing from its parent.
  23871. */
  23872. Animation.prototype.getEasing = function () {
  23873. if (this._rv && this._rvEs) {
  23874. return this._rvEs;
  23875. }
  23876. return this._es !== null ? this._es : (this.parent && this.parent.getEasing()) || null;
  23877. };
  23878. /**
  23879. * Set the easing for this animation.
  23880. */
  23881. Animation.prototype.easing = function (name) {
  23882. this._es = name;
  23883. return this;
  23884. };
  23885. /**
  23886. * Set the easing for this reversed animation.
  23887. */
  23888. Animation.prototype.easingReverse = function (name) {
  23889. this._rvEs = name;
  23890. return this;
  23891. };
  23892. /**
  23893. * Add the "from" value for a specific property.
  23894. */
  23895. Animation.prototype.from = function (prop, val) {
  23896. this._addProp('from', prop, val);
  23897. return this;
  23898. };
  23899. /**
  23900. * Add the "to" value for a specific property.
  23901. */
  23902. Animation.prototype.to = function (prop, val, clearProperyAfterTransition) {
  23903. var fx = this._addProp('to', prop, val);
  23904. if (clearProperyAfterTransition) {
  23905. // if this effect is a transform then clear the transform effect
  23906. // otherwise just clear the actual property
  23907. this.afterClearStyles([fx.trans ? this.plt.Css.transform : prop]);
  23908. }
  23909. return this;
  23910. };
  23911. /**
  23912. * Shortcut to add both the "from" and "to" for the same property.
  23913. */
  23914. Animation.prototype.fromTo = function (prop, fromVal, toVal, clearProperyAfterTransition) {
  23915. return this.from(prop, fromVal).to(prop, toVal, clearProperyAfterTransition);
  23916. };
  23917. /**
  23918. * @hidden
  23919. * NO DOM
  23920. */
  23921. Animation.prototype._getProp = function (name) {
  23922. if (this._fx) {
  23923. return this._fx.find(function (prop) { return prop.name === name; });
  23924. }
  23925. else {
  23926. this._fx = [];
  23927. }
  23928. return null;
  23929. };
  23930. Animation.prototype._addProp = function (state, prop, val) {
  23931. var fxProp = this._getProp(prop);
  23932. if (!fxProp) {
  23933. // first time we've see this EffectProperty
  23934. var shouldTrans = (ANIMATION_TRANSFORMS[prop] === 1);
  23935. fxProp = {
  23936. name: prop,
  23937. trans: shouldTrans,
  23938. // add the will-change property for transforms or opacity
  23939. wc: (shouldTrans ? this.plt.Css.transform : prop)
  23940. };
  23941. this._fx.push(fxProp);
  23942. }
  23943. // add from/to EffectState to the EffectProperty
  23944. var fxState = {
  23945. val: val,
  23946. num: null,
  23947. unit: '',
  23948. };
  23949. fxProp[state] = fxState;
  23950. if (typeof val === 'string' && val.indexOf(' ') < 0) {
  23951. var r = val.match(ANIMATION_CSS_VALUE_REGEX);
  23952. var num = parseFloat(r[1]);
  23953. if (!isNaN(num)) {
  23954. fxState.num = num;
  23955. }
  23956. fxState.unit = (r[0] !== r[2] ? r[2] : '');
  23957. }
  23958. else if (typeof val === 'number') {
  23959. fxState.num = val;
  23960. }
  23961. return fxProp;
  23962. };
  23963. /**
  23964. * Add CSS class to this animation's elements
  23965. * before the animation begins.
  23966. */
  23967. Animation.prototype.beforeAddClass = function (className) {
  23968. (this._bfAdd = this._bfAdd || []).push(className);
  23969. return this;
  23970. };
  23971. /**
  23972. * Remove CSS class from this animation's elements
  23973. * before the animation begins.
  23974. */
  23975. Animation.prototype.beforeRemoveClass = function (className) {
  23976. (this._bfRm = this._bfRm || []).push(className);
  23977. return this;
  23978. };
  23979. /**
  23980. * Set CSS inline styles to this animation's elements
  23981. * before the animation begins.
  23982. */
  23983. Animation.prototype.beforeStyles = function (styles) {
  23984. this._bfSty = styles;
  23985. return this;
  23986. };
  23987. /**
  23988. * Clear CSS inline styles from this animation's elements
  23989. * before the animation begins.
  23990. */
  23991. Animation.prototype.beforeClearStyles = function (propertyNames) {
  23992. this._bfSty = this._bfSty || {};
  23993. for (var i = 0; i < propertyNames.length; i++) {
  23994. this._bfSty[propertyNames[i]] = '';
  23995. }
  23996. return this;
  23997. };
  23998. /**
  23999. * Add a function which contains DOM reads, which will run
  24000. * before the animation begins.
  24001. */
  24002. Animation.prototype.beforeAddRead = function (domReadFn) {
  24003. (this._rdFn = this._rdFn || []).push(domReadFn);
  24004. return this;
  24005. };
  24006. /**
  24007. * Add a function which contains DOM writes, which will run
  24008. * before the animation begins.
  24009. */
  24010. Animation.prototype.beforeAddWrite = function (domWriteFn) {
  24011. (this._wrFn = this._wrFn || []).push(domWriteFn);
  24012. return this;
  24013. };
  24014. /**
  24015. * Add CSS class to this animation's elements
  24016. * after the animation finishes.
  24017. */
  24018. Animation.prototype.afterAddClass = function (className) {
  24019. (this._afAdd = this._afAdd || []).push(className);
  24020. return this;
  24021. };
  24022. /**
  24023. * Remove CSS class from this animation's elements
  24024. * after the animation finishes.
  24025. */
  24026. Animation.prototype.afterRemoveClass = function (className) {
  24027. (this._afRm = this._afRm || []).push(className);
  24028. return this;
  24029. };
  24030. /**
  24031. * Set CSS inline styles to this animation's elements
  24032. * after the animation finishes.
  24033. */
  24034. Animation.prototype.afterStyles = function (styles) {
  24035. this._afSty = styles;
  24036. return this;
  24037. };
  24038. /**
  24039. * Clear CSS inline styles from this animation's elements
  24040. * after the animation finishes.
  24041. */
  24042. Animation.prototype.afterClearStyles = function (propertyNames) {
  24043. this._afSty = this._afSty || {};
  24044. for (var i = 0; i < propertyNames.length; i++) {
  24045. this._afSty[propertyNames[i]] = '';
  24046. }
  24047. return this;
  24048. };
  24049. /**
  24050. * Play the animation.
  24051. */
  24052. Animation.prototype.play = function (opts) {
  24053. var _this = this;
  24054. // If the animation was already invalidated (it did finish), do nothing
  24055. if (!this.plt) {
  24056. return;
  24057. }
  24058. // this is the top level animation and is in full control
  24059. // of when the async play() should actually kick off
  24060. // if there is no duration then it'll set the TO property immediately
  24061. // if there is a duration, then it'll stage all animations at the
  24062. // FROM property and transition duration, wait a few frames, then
  24063. // kick off the animation by setting the TO property for each animation
  24064. this._isAsync = this._hasDuration(opts);
  24065. // ensure all past transition end events have been cleared
  24066. this._clearAsync();
  24067. // recursively kicks off the correct progress step for each child animation
  24068. // ******** DOM WRITE ****************
  24069. this._playInit(opts);
  24070. // doubling up RAFs since this animation was probably triggered
  24071. // from an input event, and just having one RAF would have this code
  24072. // run within the same frame as the triggering input event, and the
  24073. // input event probably already did way too much work for one frame
  24074. this.plt.raf(function () {
  24075. _this.plt.raf(_this._playDomInspect.bind(_this, opts));
  24076. });
  24077. };
  24078. Animation.prototype.syncPlay = function () {
  24079. // If the animation was already invalidated (it did finish), do nothing
  24080. if (!this.plt) {
  24081. return;
  24082. }
  24083. var opts = { duration: 0 };
  24084. this._isAsync = false;
  24085. this._clearAsync();
  24086. this._playInit(opts);
  24087. this._playDomInspect(opts);
  24088. };
  24089. /**
  24090. * @hidden
  24091. * DOM WRITE
  24092. * RECURSION
  24093. */
  24094. Animation.prototype._playInit = function (opts) {
  24095. // always default that an animation does not tween
  24096. // a tween requires that an Animation class has an element
  24097. // and that it has at least one FROM/TO effect
  24098. // and that the FROM/TO effect can tween numeric values
  24099. this._twn = false;
  24100. this.isPlaying = true;
  24101. this.hasCompleted = false;
  24102. this._hasDur = (this.getDuration(opts) > ANIMATION_DURATION_MIN);
  24103. var children = this._c;
  24104. for (var i = 0; i < this._cL; i++) {
  24105. // ******** DOM WRITE ****************
  24106. children[i]._playInit(opts);
  24107. }
  24108. if (this._hasDur) {
  24109. // if there is a duration then we want to start at step 0
  24110. // ******** DOM WRITE ****************
  24111. this._progress(0);
  24112. // add the will-change properties
  24113. // ******** DOM WRITE ****************
  24114. this._willChg(true);
  24115. }
  24116. };
  24117. /**
  24118. * @hidden
  24119. * DOM WRITE
  24120. * NO RECURSION
  24121. * ROOT ANIMATION
  24122. */
  24123. Animation.prototype._playDomInspect = function (opts) {
  24124. // fire off all the "before" function that have DOM READS in them
  24125. // elements will be in the DOM, however visibily hidden
  24126. // so we can read their dimensions if need be
  24127. // ******** DOM READ ****************
  24128. // ******** DOM WRITE ****************
  24129. this._beforeAnimation();
  24130. // for the root animation only
  24131. // set the async TRANSITION END event
  24132. // and run onFinishes when the transition ends
  24133. var dur = this.getDuration(opts);
  24134. if (this._isAsync) {
  24135. this._asyncEnd(dur, true);
  24136. }
  24137. // ******** DOM WRITE ****************
  24138. this._playProgress(opts);
  24139. if (this._isAsync && this.plt) {
  24140. // this animation has a duration so we need another RAF
  24141. // for the CSS TRANSITION properties to kick in
  24142. this.plt.raf(this._playToStep.bind(this, 1));
  24143. }
  24144. };
  24145. /**
  24146. * @hidden
  24147. * DOM WRITE
  24148. * RECURSION
  24149. */
  24150. Animation.prototype._playProgress = function (opts) {
  24151. var children = this._c;
  24152. for (var i = 0; i < this._cL; i++) {
  24153. // ******** DOM WRITE ****************
  24154. children[i]._playProgress(opts);
  24155. }
  24156. if (this._hasDur) {
  24157. // set the CSS TRANSITION duration/easing
  24158. // ******** DOM WRITE ****************
  24159. this._setTrans(this.getDuration(opts), false);
  24160. }
  24161. else {
  24162. // this animation does not have a duration, so it should not animate
  24163. // just go straight to the TO properties and call it done
  24164. // ******** DOM WRITE ****************
  24165. this._progress(1);
  24166. // since there was no animation, immediately run the after
  24167. // ******** DOM WRITE ****************
  24168. this._setAfterStyles();
  24169. // this animation has no duration, so it has finished
  24170. // other animations could still be running
  24171. this._didFinish(true);
  24172. }
  24173. };
  24174. /**
  24175. * @hidden
  24176. * DOM WRITE
  24177. * RECURSION
  24178. */
  24179. Animation.prototype._playToStep = function (stepValue) {
  24180. var children = this._c;
  24181. for (var i = 0; i < this._cL; i++) {
  24182. // ******** DOM WRITE ****************
  24183. children[i]._playToStep(stepValue);
  24184. }
  24185. if (this._hasDur) {
  24186. // browser had some time to render everything in place
  24187. // and the transition duration/easing is set
  24188. // now set the TO properties which will trigger the transition to begin
  24189. // ******** DOM WRITE ****************
  24190. this._progress(stepValue);
  24191. }
  24192. };
  24193. /**
  24194. * @hidden
  24195. * DOM WRITE
  24196. * NO RECURSION
  24197. * ROOT ANIMATION
  24198. */
  24199. Animation.prototype._asyncEnd = function (dur, shouldComplete) {
  24200. (void 0) /* assert */;
  24201. (void 0) /* assert */;
  24202. (void 0) /* assert */;
  24203. var self = this;
  24204. function onTransitionEnd() {
  24205. // congrats! a successful transition completed!
  24206. // ensure transition end events and timeouts have been cleared
  24207. self._clearAsync();
  24208. // ******** DOM WRITE ****************
  24209. self._playEnd();
  24210. // transition finished
  24211. self._didFinishAll(shouldComplete, true, false);
  24212. }
  24213. function onTransitionFallback() {
  24214. (void 0) /* console.debug */;
  24215. // oh noz! the transition end event didn't fire in time!
  24216. // instead the fallback timer when first
  24217. // if all goes well this fallback should never fire
  24218. // clear the other async end events from firing
  24219. self._tm = undefined;
  24220. self._clearAsync();
  24221. // set the after styles
  24222. // ******** DOM WRITE ****************
  24223. self._playEnd(shouldComplete ? 1 : 0);
  24224. // transition finished
  24225. self._didFinishAll(shouldComplete, true, false);
  24226. }
  24227. // set the TRANSITION END event on one of the transition elements
  24228. self._unrgTrns = this.plt.transitionEnd(self._transEl(), onTransitionEnd, false);
  24229. // set a fallback timeout if the transition end event never fires, or is too slow
  24230. // transition end fallback: (animation duration + XXms)
  24231. self._tm = self.plt.timeout(onTransitionFallback, (dur + ANIMATION_TRANSITION_END_FALLBACK_PADDING_MS));
  24232. };
  24233. /**
  24234. * @hidden
  24235. * DOM WRITE
  24236. * RECURSION
  24237. */
  24238. Animation.prototype._playEnd = function (stepValue) {
  24239. var children = this._c;
  24240. for (var i = 0; i < this._cL; i++) {
  24241. // ******** DOM WRITE ****************
  24242. children[i]._playEnd(stepValue);
  24243. }
  24244. if (this._hasDur) {
  24245. if (Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["h" /* isDefined */])(stepValue)) {
  24246. // too late to have a smooth animation, just finish it
  24247. // ******** DOM WRITE ****************
  24248. this._setTrans(0, true);
  24249. // ensure the ending progress step gets rendered
  24250. // ******** DOM WRITE ****************
  24251. this._progress(stepValue);
  24252. }
  24253. // set the after styles
  24254. // ******** DOM WRITE ****************
  24255. this._setAfterStyles();
  24256. // remove the will-change properties
  24257. // ******** DOM WRITE ****************
  24258. this._willChg(false);
  24259. }
  24260. };
  24261. /**
  24262. * @hidden
  24263. * NO DOM
  24264. * RECURSION
  24265. */
  24266. Animation.prototype._hasDuration = function (opts) {
  24267. if (this.getDuration(opts) > ANIMATION_DURATION_MIN) {
  24268. return true;
  24269. }
  24270. var children = this._c;
  24271. for (var i = 0; i < this._cL; i++) {
  24272. if (children[i]._hasDuration(opts)) {
  24273. return true;
  24274. }
  24275. }
  24276. return false;
  24277. };
  24278. /**
  24279. * @hidden
  24280. * NO DOM
  24281. * RECURSION
  24282. */
  24283. Animation.prototype._hasDomReads = function () {
  24284. if (this._rdFn && this._rdFn.length) {
  24285. return true;
  24286. }
  24287. var children = this._c;
  24288. for (var i = 0; i < this._cL; i++) {
  24289. if (children[i]._hasDomReads()) {
  24290. return true;
  24291. }
  24292. }
  24293. return false;
  24294. };
  24295. /**
  24296. * Immediately stop at the end of the animation.
  24297. */
  24298. Animation.prototype.stop = function (stepValue) {
  24299. if (stepValue === void 0) { stepValue = 1; }
  24300. // ensure all past transition end events have been cleared
  24301. this._clearAsync();
  24302. this._hasDur = true;
  24303. this._playEnd(stepValue);
  24304. };
  24305. /**
  24306. * @hidden
  24307. * NO DOM
  24308. * NO RECURSION
  24309. */
  24310. Animation.prototype._clearAsync = function () {
  24311. this._unrgTrns && this._unrgTrns();
  24312. this._tm && clearTimeout(this._tm);
  24313. this._tm = this._unrgTrns = undefined;
  24314. };
  24315. /**
  24316. * @hidden
  24317. * DOM WRITE
  24318. * NO RECURSION
  24319. */
  24320. Animation.prototype._progress = function (stepValue) {
  24321. // bread 'n butter
  24322. var val;
  24323. var effects = this._fx;
  24324. var nuElements = this._eL;
  24325. if (!effects || !nuElements) {
  24326. return;
  24327. }
  24328. // flip the number if we're going in reverse
  24329. if (this._rv) {
  24330. stepValue = ((stepValue * -1) + 1);
  24331. }
  24332. var i, j;
  24333. var finalTransform = '';
  24334. var elements = this._e;
  24335. for (i = 0; i < effects.length; i++) {
  24336. var fx = effects[i];
  24337. if (fx.from && fx.to) {
  24338. var fromNum = fx.from.num;
  24339. var toNum = fx.to.num;
  24340. var tweenEffect = (fromNum !== toNum);
  24341. (void 0) /* assert */;
  24342. if (tweenEffect) {
  24343. this._twn = true;
  24344. }
  24345. if (stepValue === 0) {
  24346. // FROM
  24347. val = fx.from.val;
  24348. }
  24349. else if (stepValue === 1) {
  24350. // TO
  24351. val = fx.to.val;
  24352. }
  24353. else if (tweenEffect) {
  24354. // EVERYTHING IN BETWEEN
  24355. var valNum = (((toNum - fromNum) * stepValue) + fromNum);
  24356. var unit = fx.to.unit;
  24357. if (unit === 'px') {
  24358. valNum = Math.round(valNum);
  24359. }
  24360. val = valNum + unit;
  24361. }
  24362. if (val !== null) {
  24363. var prop = fx.name;
  24364. if (fx.trans) {
  24365. finalTransform += prop + '(' + val + ') ';
  24366. }
  24367. else {
  24368. for (j = 0; j < nuElements; j++) {
  24369. // ******** DOM WRITE ****************
  24370. elements[j].style[prop] = val;
  24371. }
  24372. }
  24373. }
  24374. }
  24375. }
  24376. // place all transforms on the same property
  24377. if (finalTransform.length) {
  24378. if (!this._rv && stepValue !== 1 || this._rv && stepValue !== 0) {
  24379. finalTransform += 'translateZ(0px)';
  24380. }
  24381. var cssTransform = this.plt.Css.transform;
  24382. for (i = 0; i < elements.length; i++) {
  24383. // ******** DOM WRITE ****************
  24384. elements[i].style[cssTransform] = finalTransform;
  24385. }
  24386. }
  24387. };
  24388. /**
  24389. * @hidden
  24390. * DOM WRITE
  24391. * NO RECURSION
  24392. */
  24393. Animation.prototype._setTrans = function (dur, forcedLinearEasing) {
  24394. // Transition is not enabled if there are not effects
  24395. if (!this._fx) {
  24396. return;
  24397. }
  24398. // set the TRANSITION properties inline on the element
  24399. var elements = this._e;
  24400. var easing = (forcedLinearEasing ? 'linear' : this.getEasing());
  24401. var durString = dur + 'ms';
  24402. var Css = this.plt.Css;
  24403. var cssTransform = Css.transition;
  24404. var cssTransitionDuration = Css.transitionDuration;
  24405. var cssTransitionTimingFn = Css.transitionTimingFn;
  24406. var eleStyle;
  24407. for (var i = 0; i < this._eL; i++) {
  24408. eleStyle = elements[i].style;
  24409. if (dur > 0) {
  24410. // ******** DOM WRITE ****************
  24411. eleStyle[cssTransform] = '';
  24412. eleStyle[cssTransitionDuration] = durString;
  24413. // each animation can have a different easing
  24414. if (easing) {
  24415. // ******** DOM WRITE ****************
  24416. eleStyle[cssTransitionTimingFn] = easing;
  24417. }
  24418. }
  24419. else {
  24420. eleStyle[cssTransform] = 'none';
  24421. }
  24422. }
  24423. };
  24424. /**
  24425. * @hidden
  24426. * DOM READ
  24427. * DOM WRITE
  24428. * RECURSION
  24429. */
  24430. Animation.prototype._beforeAnimation = function () {
  24431. // fire off all the "before" function that have DOM READS in them
  24432. // elements will be in the DOM, however visibily hidden
  24433. // so we can read their dimensions if need be
  24434. // ******** DOM READ ****************
  24435. this._fireBeforeReadFunc();
  24436. // ******** DOM READS ABOVE / DOM WRITES BELOW ****************
  24437. // fire off all the "before" function that have DOM WRITES in them
  24438. // ******** DOM WRITE ****************
  24439. this._fireBeforeWriteFunc();
  24440. // stage all of the before css classes and inline styles
  24441. // ******** DOM WRITE ****************
  24442. this._setBeforeStyles();
  24443. };
  24444. /**
  24445. * @hidden
  24446. * DOM WRITE
  24447. * RECURSION
  24448. */
  24449. Animation.prototype._setBeforeStyles = function () {
  24450. var i, j;
  24451. var children = this._c;
  24452. for (i = 0; i < this._cL; i++) {
  24453. children[i]._setBeforeStyles();
  24454. }
  24455. // before the animations have started
  24456. // only set before styles if animation is not reversed
  24457. if (this._rv) {
  24458. return;
  24459. }
  24460. var addClasses = this._bfAdd;
  24461. var removeClasses = this._bfRm;
  24462. var ele;
  24463. var eleClassList;
  24464. var prop;
  24465. for (i = 0; i < this._eL; i++) {
  24466. ele = this._e[i];
  24467. eleClassList = ele.classList;
  24468. // css classes to add before the animation
  24469. if (addClasses) {
  24470. for (j = 0; j < addClasses.length; j++) {
  24471. // ******** DOM WRITE ****************
  24472. eleClassList.add(addClasses[j]);
  24473. }
  24474. }
  24475. // css classes to remove before the animation
  24476. if (removeClasses) {
  24477. for (j = 0; j < removeClasses.length; j++) {
  24478. // ******** DOM WRITE ****************
  24479. eleClassList.remove(removeClasses[j]);
  24480. }
  24481. }
  24482. // inline styles to add before the animation
  24483. if (this._bfSty) {
  24484. for (prop in this._bfSty) {
  24485. // ******** DOM WRITE ****************
  24486. ele.style[prop] = this._bfSty[prop];
  24487. }
  24488. }
  24489. }
  24490. };
  24491. /**
  24492. * @hidden
  24493. * DOM READ
  24494. * RECURSION
  24495. */
  24496. Animation.prototype._fireBeforeReadFunc = function () {
  24497. var children = this._c;
  24498. for (var i = 0; i < this._cL; i++) {
  24499. // ******** DOM READ ****************
  24500. children[i]._fireBeforeReadFunc();
  24501. }
  24502. var readFunctions = this._rdFn;
  24503. if (readFunctions) {
  24504. for (var i = 0; i < readFunctions.length; i++) {
  24505. // ******** DOM READ ****************
  24506. readFunctions[i]();
  24507. }
  24508. }
  24509. };
  24510. /**
  24511. * @hidden
  24512. * DOM WRITE
  24513. * RECURSION
  24514. */
  24515. Animation.prototype._fireBeforeWriteFunc = function () {
  24516. var children = this._c;
  24517. for (var i = 0; i < this._cL; i++) {
  24518. // ******** DOM WRITE ****************
  24519. children[i]._fireBeforeWriteFunc();
  24520. }
  24521. var writeFunctions = this._wrFn;
  24522. if (this._wrFn) {
  24523. for (var i = 0; i < writeFunctions.length; i++) {
  24524. // ******** DOM WRITE ****************
  24525. writeFunctions[i]();
  24526. }
  24527. }
  24528. };
  24529. /**
  24530. * @hidden
  24531. * DOM WRITE
  24532. */
  24533. Animation.prototype._setAfterStyles = function () {
  24534. var i, j;
  24535. var ele;
  24536. var eleClassList;
  24537. var elements = this._e;
  24538. for (i = 0; i < this._eL; i++) {
  24539. ele = elements[i];
  24540. eleClassList = ele.classList;
  24541. // remove the transition duration/easing
  24542. // ******** DOM WRITE ****************
  24543. ele.style[this.plt.Css.transitionDuration] = ele.style[this.plt.Css.transitionTimingFn] = '';
  24544. if (this._rv) {
  24545. // finished in reverse direction
  24546. // css classes that were added before the animation should be removed
  24547. if (this._bfAdd) {
  24548. for (j = 0; j < this._bfAdd.length; j++) {
  24549. // ******** DOM WRITE ****************
  24550. eleClassList.remove(this._bfAdd[j]);
  24551. }
  24552. }
  24553. // css classes that were removed before the animation should be added
  24554. if (this._bfRm) {
  24555. for (j = 0; j < this._bfRm.length; j++) {
  24556. // ******** DOM WRITE ****************
  24557. eleClassList.add(this._bfRm[j]);
  24558. }
  24559. }
  24560. // inline styles that were added before the animation should be removed
  24561. if (this._bfSty) {
  24562. for (var prop in this._bfSty) {
  24563. // ******** DOM WRITE ****************
  24564. ele.style[prop] = '';
  24565. }
  24566. }
  24567. }
  24568. else {
  24569. // finished in forward direction
  24570. // css classes to add after the animation
  24571. if (this._afAdd) {
  24572. for (j = 0; j < this._afAdd.length; j++) {
  24573. // ******** DOM WRITE ****************
  24574. eleClassList.add(this._afAdd[j]);
  24575. }
  24576. }
  24577. // css classes to remove after the animation
  24578. if (this._afRm) {
  24579. for (j = 0; j < this._afRm.length; j++) {
  24580. // ******** DOM WRITE ****************
  24581. eleClassList.remove(this._afRm[j]);
  24582. }
  24583. }
  24584. // inline styles to add after the animation
  24585. if (this._afSty) {
  24586. for (var prop in this._afSty) {
  24587. // ******** DOM WRITE ****************
  24588. ele.style[prop] = this._afSty[prop];
  24589. }
  24590. }
  24591. }
  24592. }
  24593. };
  24594. /**
  24595. * @hidden
  24596. * DOM WRITE
  24597. * NO RECURSION
  24598. */
  24599. Animation.prototype._willChg = function (addWillChange) {
  24600. var wc;
  24601. var effects = this._fx;
  24602. var willChange;
  24603. if (addWillChange && effects) {
  24604. wc = [];
  24605. for (var i = 0; i < effects.length; i++) {
  24606. var propWC = effects[i].wc;
  24607. if (propWC === 'webkitTransform') {
  24608. wc.push('transform', '-webkit-transform');
  24609. }
  24610. else {
  24611. wc.push(propWC);
  24612. }
  24613. }
  24614. willChange = wc.join(',');
  24615. }
  24616. else {
  24617. willChange = '';
  24618. }
  24619. for (var i = 0; i < this._eL; i++) {
  24620. // ******** DOM WRITE ****************
  24621. this._e[i].style.willChange = willChange;
  24622. }
  24623. };
  24624. /**
  24625. * Start the animation with a user controlled progress.
  24626. */
  24627. Animation.prototype.progressStart = function () {
  24628. // ensure all past transition end events have been cleared
  24629. this._clearAsync();
  24630. // ******** DOM READ/WRITE ****************
  24631. this._beforeAnimation();
  24632. // ******** DOM WRITE ****************
  24633. this._progressStart();
  24634. };
  24635. /**
  24636. * @hidden
  24637. * DOM WRITE
  24638. * RECURSION
  24639. */
  24640. Animation.prototype._progressStart = function () {
  24641. var children = this._c;
  24642. for (var i = 0; i < this._cL; i++) {
  24643. // ******** DOM WRITE ****************
  24644. children[i]._progressStart();
  24645. }
  24646. // force no duration, linear easing
  24647. // ******** DOM WRITE ****************
  24648. this._setTrans(0, true);
  24649. // ******** DOM WRITE ****************
  24650. this._willChg(true);
  24651. };
  24652. /**
  24653. * Set the progress step for this animation.
  24654. * progressStep() is not debounced, so it should not be called faster than 60FPS.
  24655. */
  24656. Animation.prototype.progressStep = function (stepValue) {
  24657. // only update if the last update was more than 16ms ago
  24658. stepValue = Math.min(1, Math.max(0, stepValue));
  24659. var children = this._c;
  24660. for (var i = 0; i < this._cL; i++) {
  24661. // ******** DOM WRITE ****************
  24662. children[i].progressStep(stepValue);
  24663. }
  24664. if (this._rv) {
  24665. // if the animation is going in reverse then
  24666. // flip the step value: 0 becomes 1, 1 becomes 0
  24667. stepValue = ((stepValue * -1) + 1);
  24668. }
  24669. // ******** DOM WRITE ****************
  24670. this._progress(stepValue);
  24671. };
  24672. /**
  24673. * End the progress animation.
  24674. */
  24675. Animation.prototype.progressEnd = function (shouldComplete, currentStepValue, dur) {
  24676. if (dur === void 0) { dur = -1; }
  24677. (void 0) /* console.debug */;
  24678. if (this._rv) {
  24679. // if the animation is going in reverse then
  24680. // flip the step value: 0 becomes 1, 1 becomes 0
  24681. currentStepValue = ((currentStepValue * -1) + 1);
  24682. }
  24683. var stepValue = shouldComplete ? 1 : 0;
  24684. var diff = Math.abs(currentStepValue - stepValue);
  24685. if (diff < 0.05) {
  24686. dur = 0;
  24687. }
  24688. else if (dur < 0) {
  24689. dur = this._dur;
  24690. }
  24691. this._isAsync = (dur > 30);
  24692. this._progressEnd(shouldComplete, stepValue, dur, this._isAsync);
  24693. if (this._isAsync) {
  24694. // for the root animation only
  24695. // set the async TRANSITION END event
  24696. // and run onFinishes when the transition ends
  24697. // ******** DOM WRITE ****************
  24698. this._asyncEnd(dur, shouldComplete);
  24699. // this animation has a duration so we need another RAF
  24700. // for the CSS TRANSITION properties to kick in
  24701. this.plt && this.plt.raf(this._playToStep.bind(this, stepValue));
  24702. }
  24703. };
  24704. /**
  24705. * @hidden
  24706. * DOM WRITE
  24707. * RECURSION
  24708. */
  24709. Animation.prototype._progressEnd = function (shouldComplete, stepValue, dur, isAsync) {
  24710. var children = this._c;
  24711. for (var i = 0; i < this._cL; i++) {
  24712. // ******** DOM WRITE ****************
  24713. children[i]._progressEnd(shouldComplete, stepValue, dur, isAsync);
  24714. }
  24715. if (!isAsync) {
  24716. // stop immediately
  24717. // set all the animations to their final position
  24718. // ******** DOM WRITE ****************
  24719. this._progress(stepValue);
  24720. this._willChg(false);
  24721. this._setAfterStyles();
  24722. this._didFinish(shouldComplete);
  24723. }
  24724. else {
  24725. // animate it back to it's ending position
  24726. this.isPlaying = true;
  24727. this.hasCompleted = false;
  24728. this._hasDur = true;
  24729. // ******** DOM WRITE ****************
  24730. this._willChg(true);
  24731. this._setTrans(dur, false);
  24732. }
  24733. };
  24734. /**
  24735. * Add a callback to fire when the animation has finished.
  24736. */
  24737. Animation.prototype.onFinish = function (callback, onceTimeCallback, clearOnFinishCallacks) {
  24738. if (onceTimeCallback === void 0) { onceTimeCallback = false; }
  24739. if (clearOnFinishCallacks === void 0) { clearOnFinishCallacks = false; }
  24740. if (clearOnFinishCallacks) {
  24741. this._fFn = this._fOneFn = undefined;
  24742. }
  24743. if (onceTimeCallback) {
  24744. this._fOneFn = this._fOneFn || [];
  24745. this._fOneFn.push(callback);
  24746. }
  24747. else {
  24748. this._fFn = this._fFn || [];
  24749. this._fFn.push(callback);
  24750. }
  24751. return this;
  24752. };
  24753. /**
  24754. * @hidden
  24755. * NO DOM
  24756. * RECURSION
  24757. */
  24758. Animation.prototype._didFinishAll = function (hasCompleted, finishAsyncAnimations, finishNoDurationAnimations) {
  24759. var children = this._c;
  24760. for (var i = 0; i < this._cL; i++) {
  24761. children[i]._didFinishAll(hasCompleted, finishAsyncAnimations, finishNoDurationAnimations);
  24762. }
  24763. if (finishAsyncAnimations && this._isAsync || finishNoDurationAnimations && !this._isAsync) {
  24764. this._didFinish(hasCompleted);
  24765. }
  24766. };
  24767. /**
  24768. * @hidden
  24769. * NO RECURSION
  24770. */
  24771. Animation.prototype._didFinish = function (hasCompleted) {
  24772. this.isPlaying = false;
  24773. this.hasCompleted = hasCompleted;
  24774. if (this._fFn) {
  24775. // run all finish callbacks
  24776. for (var i = 0; i < this._fFn.length; i++) {
  24777. this._fFn[i](this);
  24778. }
  24779. }
  24780. if (this._fOneFn) {
  24781. // run all "onetime" finish callbacks
  24782. for (var i = 0; i < this._fOneFn.length; i++) {
  24783. this._fOneFn[i](this);
  24784. }
  24785. this._fOneFn.length = 0;
  24786. }
  24787. };
  24788. /**
  24789. * Reverse the animation.
  24790. */
  24791. Animation.prototype.reverse = function (shouldReverse) {
  24792. if (shouldReverse === void 0) { shouldReverse = true; }
  24793. var children = this._c;
  24794. for (var i = 0; i < this._cL; i++) {
  24795. children[i].reverse(shouldReverse);
  24796. }
  24797. this._rv = shouldReverse;
  24798. return this;
  24799. };
  24800. /**
  24801. * Recursively destroy this animation and all child animations.
  24802. */
  24803. Animation.prototype.destroy = function () {
  24804. var children = this._c;
  24805. for (var i = 0; i < this._cL; i++) {
  24806. children[i].destroy();
  24807. }
  24808. this._clearAsync();
  24809. this.parent = this.plt = this._e = this._rdFn = this._wrFn = null;
  24810. if (this._c) {
  24811. this._c.length = this._cL = 0;
  24812. }
  24813. if (this._fFn) {
  24814. this._fFn.length = 0;
  24815. }
  24816. if (this._fOneFn) {
  24817. this._fOneFn.length = 0;
  24818. }
  24819. };
  24820. /**
  24821. * @hidden
  24822. * NO DOM
  24823. */
  24824. Animation.prototype._transEl = function () {
  24825. // get the lowest level element that has an Animation
  24826. var targetEl;
  24827. for (var i = 0; i < this._cL; i++) {
  24828. targetEl = this._c[i]._transEl();
  24829. if (targetEl) {
  24830. return targetEl;
  24831. }
  24832. }
  24833. return (this._twn && this._hasDur && this._eL ? this._e[0] : null);
  24834. };
  24835. return Animation;
  24836. }());
  24837. var ANIMATION_TRANSFORMS = {
  24838. 'translateX': 1,
  24839. 'translateY': 1,
  24840. 'translateZ': 1,
  24841. 'scale': 1,
  24842. 'scaleX': 1,
  24843. 'scaleY': 1,
  24844. 'scaleZ': 1,
  24845. 'rotate': 1,
  24846. 'rotateX': 1,
  24847. 'rotateY': 1,
  24848. 'rotateZ': 1,
  24849. 'skewX': 1,
  24850. 'skewY': 1,
  24851. 'perspective': 1
  24852. };
  24853. var ANIMATION_CSS_VALUE_REGEX = /(^-?\d*\.?\d*)(.*)/;
  24854. var ANIMATION_DURATION_MIN = 32;
  24855. var ANIMATION_TRANSITION_END_FALLBACK_PADDING_MS = 400;
  24856. //# sourceMappingURL=animation.js.map
  24857. /***/ }),
  24858. /* 21 */
  24859. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24860. "use strict";
  24861. /* harmony export (immutable) */ __webpack_exports__["m"] = round;
  24862. /* harmony export (immutable) */ __webpack_exports__["e"] = inlineStyle;
  24863. /* harmony export (immutable) */ __webpack_exports__["b"] = addClass;
  24864. /* harmony export (immutable) */ __webpack_exports__["l"] = removeClass;
  24865. /* harmony export (immutable) */ __webpack_exports__["d"] = getElementIndex;
  24866. /* harmony export (immutable) */ __webpack_exports__["k"] = queryChildren;
  24867. /* harmony export (immutable) */ __webpack_exports__["c"] = eachChild;
  24868. /* harmony export (immutable) */ __webpack_exports__["n"] = transform;
  24869. /* harmony export (immutable) */ __webpack_exports__["o"] = transition;
  24870. /* harmony export (immutable) */ __webpack_exports__["p"] = triggerTransitionEnd;
  24871. /* harmony export (immutable) */ __webpack_exports__["j"] = offset;
  24872. /* harmony export (immutable) */ __webpack_exports__["q"] = updateSlidesOffset;
  24873. /* harmony export (immutable) */ __webpack_exports__["g"] = isHorizontal;
  24874. /* harmony export (immutable) */ __webpack_exports__["f"] = isFormElement;
  24875. /* harmony export (immutable) */ __webpack_exports__["i"] = minTranslate;
  24876. /* harmony export (immutable) */ __webpack_exports__["h"] = maxTranslate;
  24877. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CLS; });
  24878. function round(a) {
  24879. return Math.floor(a);
  24880. }
  24881. function inlineStyle(ele, styles) {
  24882. if (ele) {
  24883. if (ele.length) {
  24884. for (var i = 0; i < ele.length; i++) {
  24885. inlineStyle(ele[i], styles);
  24886. }
  24887. }
  24888. else if (ele.nodeType) {
  24889. var cssProps = Object.keys(styles);
  24890. for (var i_1 = 0; i_1 < cssProps.length; i_1++) {
  24891. ele.style[cssProps[i_1]] = styles[cssProps[i_1]];
  24892. }
  24893. }
  24894. }
  24895. }
  24896. function addClass(ele, className) {
  24897. if (ele) {
  24898. if (ele.length) {
  24899. for (var i = 0; i < ele.length; i++) {
  24900. addClass(ele[i], className);
  24901. }
  24902. }
  24903. else if (ele.nodeType) {
  24904. if (Array.isArray(className)) {
  24905. className.forEach(function (cls) {
  24906. ele.classList.add(cls);
  24907. });
  24908. }
  24909. else {
  24910. ele.classList.add(className);
  24911. }
  24912. }
  24913. }
  24914. }
  24915. function removeClass(ele, className) {
  24916. if (ele) {
  24917. if (ele.length) {
  24918. for (var i = 0; i < ele.length; i++) {
  24919. removeClass(ele[i], className);
  24920. }
  24921. }
  24922. else if (ele.nodeType) {
  24923. if (Array.isArray(className)) {
  24924. className.forEach(function (cls) {
  24925. ele.classList.remove(cls);
  24926. });
  24927. }
  24928. else {
  24929. ele.classList.remove(className);
  24930. }
  24931. }
  24932. }
  24933. }
  24934. function getElementIndex(ele) {
  24935. var i = 0;
  24936. if (ele) {
  24937. while ((ele = ele.previousSibling) !== null) {
  24938. if (ele.nodeType === 1)
  24939. i++;
  24940. }
  24941. }
  24942. return i;
  24943. }
  24944. function queryChildren(parentEle, query) {
  24945. if (parentEle) {
  24946. return parentEle.querySelectorAll(query);
  24947. }
  24948. return [];
  24949. }
  24950. function eachChild(parentEle, query, callback) {
  24951. if (parentEle) {
  24952. var nodes = parentEle.querySelectorAll(query);
  24953. for (var i = 0; i < nodes.length; i++) {
  24954. callback(nodes[i]);
  24955. }
  24956. }
  24957. }
  24958. function transform(ele, val) {
  24959. if (ele) {
  24960. var elStyle = ele.style;
  24961. elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.transform = val;
  24962. }
  24963. }
  24964. function transition(ele, duration) {
  24965. if (ele) {
  24966. if (typeof duration !== 'string') {
  24967. duration = duration + 'ms';
  24968. }
  24969. var elStyle = ele.style;
  24970. elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.transitionDuration = duration;
  24971. }
  24972. }
  24973. function triggerTransitionEnd(plt, ele) {
  24974. try {
  24975. var win = plt.win();
  24976. var evt = new win.CustomEvent('transitionend', { bubbles: true, cancelable: true });
  24977. ele.dispatchEvent(evt);
  24978. }
  24979. catch (e) { }
  24980. }
  24981. function offset(ele, plt) {
  24982. if (ele) {
  24983. var box = plt.getElementBoundingClientRect(ele);
  24984. var body = plt.doc().body;
  24985. var win = plt.win();
  24986. var clientTop = ele.clientTop || body.clientTop || 0;
  24987. var clientLeft = ele.clientLeft || body.clientLeft || 0;
  24988. var scrollTop = win.pageYOffset || ele.scrollTop;
  24989. var scrollLeft = win.pageXOffset || ele.scrollLeft;
  24990. return {
  24991. top: box.top + scrollTop - clientTop,
  24992. left: box.left + scrollLeft - clientLeft
  24993. };
  24994. }
  24995. return null;
  24996. }
  24997. function updateSlidesOffset(s) {
  24998. for (var i = 0; i < s._slides.length; i++) {
  24999. s._slides[i].swiperSlideOffset = isHorizontal(s) ? s._slides[i].offsetLeft : s._slides[i].offsetTop;
  25000. }
  25001. }
  25002. function isHorizontal(s) {
  25003. return s.direction === 'horizontal';
  25004. }
  25005. var formElements = ['INPUT', 'SELECT', 'TEXTAREA', 'BUTTON', 'VIDEO'];
  25006. function isFormElement(el) {
  25007. return !!el && formElements.indexOf(el.tagName) > -1;
  25008. }
  25009. /*=========================
  25010. Min/Max Translate
  25011. ===========================*/
  25012. function minTranslate(s) {
  25013. return (-s._snapGrid[0]);
  25014. }
  25015. function maxTranslate(s) {
  25016. return (-s._snapGrid[s._snapGrid.length - 1]);
  25017. }
  25018. var CLS = {
  25019. // Classnames
  25020. noSwiping: 'swiper-no-swiping',
  25021. containerModifier: 'swiper-container-',
  25022. slide: 'swiper-slide',
  25023. slideActive: 'swiper-slide-active',
  25024. slideDuplicateActive: 'swiper-slide-duplicate-active',
  25025. slideVisible: 'swiper-slide-visible',
  25026. slideDuplicate: 'swiper-slide-duplicate',
  25027. slideNext: 'swiper-slide-next',
  25028. slideDuplicateNext: 'swiper-slide-duplicate-next',
  25029. slidePrev: 'swiper-slide-prev',
  25030. slideDuplicatePrev: 'swiper-slide-duplicate-prev',
  25031. wrapper: 'swiper-wrapper',
  25032. bullet: 'swiper-pagination-bullet',
  25033. bulletActive: 'swiper-pagination-bullet-active',
  25034. buttonDisabled: 'swiper-button-disabled',
  25035. paginationCurrent: 'swiper-pagination-current',
  25036. paginationTotal: 'swiper-pagination-total',
  25037. paginationHidden: 'swiper-pagination-hidden',
  25038. paginationProgressbar: 'swiper-pagination-progressbar',
  25039. paginationClickable: 'swiper-pagination-clickable',
  25040. paginationModifier: 'swiper-pagination-',
  25041. lazyLoading: 'swiper-lazy',
  25042. lazyStatusLoading: 'swiper-lazy-loading',
  25043. lazyStatusLoaded: 'swiper-lazy-loaded',
  25044. lazyPreloader: 'swiper-lazy-preloader',
  25045. notification: 'swiper-notification',
  25046. preloader: 'preloader',
  25047. zoomContainer: 'swiper-zoom-container',
  25048. };
  25049. //# sourceMappingURL=swiper-utils.js.map
  25050. /***/ }),
  25051. /* 22 */
  25052. /***/ (function(module, exports, __webpack_require__) {
  25053. "use strict";
  25054. function isScheduler(value) {
  25055. return value && typeof value.schedule === 'function';
  25056. }
  25057. exports.isScheduler = isScheduler;
  25058. //# sourceMappingURL=isScheduler.js.map
  25059. /***/ }),
  25060. /* 23 */
  25061. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  25062. "use strict";
  25063. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavParams; });
  25064. /**
  25065. * @name NavParams
  25066. * @description
  25067. * NavParams are an object that exists on a page and can contain data for that particular view.
  25068. * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible
  25069. * option with a simple `get` method.
  25070. *
  25071. * @usage
  25072. * ```ts
  25073. * import { NavParams } from 'ionic-angular';
  25074. *
  25075. * export class MyClass{
  25076. *
  25077. * constructor(navParams: NavParams){
  25078. * // userParams is an object we have in our nav-parameters
  25079. * navParams.get('userParams');
  25080. * }
  25081. *
  25082. * }
  25083. * ```
  25084. * @demo /docs/demos/src/nav-params/
  25085. * @see {@link /docs/components#navigation Navigation Component Docs}
  25086. * @see {@link ../NavController/ NavController API Docs}
  25087. * @see {@link /docs/api/components/nav/Nav/ Nav API Docs}
  25088. * @see {@link /docs/api/components/nav/NavPush/ NavPush API Docs}
  25089. */
  25090. var NavParams = (function () {
  25091. /**
  25092. * @hidden
  25093. * @param {TODO} data TODO
  25094. */
  25095. function NavParams(data) {
  25096. if (data === void 0) { data = {}; }
  25097. this.data = data;
  25098. }
  25099. /**
  25100. * Get the value of a nav-parameter for the current view
  25101. *
  25102. * ```ts
  25103. * import { NavParams } from 'ionic-angular';
  25104. *
  25105. * export class MyClass{
  25106. * constructor(public navParams: NavParams){
  25107. * // userParams is an object we have in our nav-parameters
  25108. * this.navParams.get('userParams');
  25109. * }
  25110. * }
  25111. * ```
  25112. *
  25113. *
  25114. * @param {string} param Which param you want to look up
  25115. */
  25116. NavParams.prototype.get = function (param) {
  25117. return this.data[param];
  25118. };
  25119. return NavParams;
  25120. }());
  25121. //# sourceMappingURL=nav-params.js.map
  25122. /***/ }),
  25123. /* 24 */
  25124. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  25125. "use strict";
  25126. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DeepLinker; });
  25127. /* harmony export (immutable) */ __webpack_exports__["b"] = setupDeepLinker;
  25128. /* unused harmony export normalizeUrl */
  25129. /* unused harmony export getNavFromTree */
  25130. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__nav_util__ = __webpack_require__(34);
  25131. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  25132. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__url_serializer__ = __webpack_require__(68);
  25133. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__view_controller__ = __webpack_require__(9);
  25134. /**
  25135. * @hidden
  25136. */
  25137. var DeepLinker = (function () {
  25138. function DeepLinker(_app, _serializer, _location, _moduleLoader, _baseCfr) {
  25139. this._app = _app;
  25140. this._serializer = _serializer;
  25141. this._location = _location;
  25142. this._moduleLoader = _moduleLoader;
  25143. this._baseCfr = _baseCfr;
  25144. /** @internal */
  25145. this._history = [];
  25146. }
  25147. /**
  25148. * @internal
  25149. */
  25150. DeepLinker.prototype.init = function () {
  25151. var _this = this;
  25152. // scenario 1: Initial load of all navs from the initial browser URL
  25153. var browserUrl = normalizeUrl(this._location.path());
  25154. (void 0) /* console.debug */;
  25155. // remember this URL in our internal history stack
  25156. this._historyPush(browserUrl);
  25157. // listen for browser URL changes
  25158. this._location.subscribe(function (locationChg) {
  25159. _this._urlChange(normalizeUrl(locationChg.url));
  25160. });
  25161. };
  25162. /**
  25163. * The browser's location has been updated somehow.
  25164. * @internal
  25165. */
  25166. DeepLinker.prototype._urlChange = function (browserUrl) {
  25167. var _this = this;
  25168. // do nothing if this url is the same as the current one
  25169. if (!this._isCurrentUrl(browserUrl)) {
  25170. var isGoingBack = true;
  25171. if (this._isBackUrl(browserUrl)) {
  25172. // scenario 2: user clicked the browser back button
  25173. // scenario 4: user changed the browser URL to what was the back url was
  25174. // scenario 5: user clicked a link href that was the back url
  25175. (void 0) /* console.debug */;
  25176. this._historyPop();
  25177. }
  25178. else {
  25179. // scenario 3: user click forward button
  25180. // scenario 4: user changed browser URL that wasn't the back url
  25181. // scenario 5: user clicked a link href that wasn't the back url
  25182. isGoingBack = false;
  25183. (void 0) /* console.debug */;
  25184. this._historyPush(browserUrl);
  25185. }
  25186. // get the app's root nav container
  25187. var activeNavContainers_1 = this._app.getActiveNavContainers();
  25188. if (activeNavContainers_1 && activeNavContainers_1.length) {
  25189. if (browserUrl === '/') {
  25190. // a url change to the index url
  25191. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(this._indexAliasUrl)) {
  25192. // we already know the indexAliasUrl
  25193. // update the url to use the know alias
  25194. browserUrl = this._indexAliasUrl;
  25195. }
  25196. else {
  25197. // the url change is to the root but we don't
  25198. // already know the url used. So let's just
  25199. // reset the root nav to its root page
  25200. activeNavContainers_1.forEach(function (navContainer) {
  25201. navContainer.goToRoot({
  25202. updateUrl: false,
  25203. isNavRoot: true
  25204. });
  25205. });
  25206. return;
  25207. }
  25208. }
  25209. // normal url
  25210. var segments = this.getCurrentSegments(browserUrl);
  25211. segments
  25212. .map(function (segment) {
  25213. // find the matching nav container
  25214. for (var _i = 0, activeNavContainers_2 = activeNavContainers_1; _i < activeNavContainers_2.length; _i++) {
  25215. var navContainer = activeNavContainers_2[_i];
  25216. var nav = getNavFromTree(navContainer, segment.navId);
  25217. if (nav) {
  25218. return {
  25219. segment: segment,
  25220. navContainer: nav
  25221. };
  25222. }
  25223. }
  25224. })
  25225. .filter(function (pair) { return !!pair; })
  25226. .forEach(function (pair) {
  25227. _this._loadViewForSegment(pair.navContainer, pair.segment, function () { });
  25228. });
  25229. }
  25230. }
  25231. };
  25232. DeepLinker.prototype.getCurrentSegments = function (browserUrl) {
  25233. if (!browserUrl) {
  25234. browserUrl = normalizeUrl(this._location.path());
  25235. }
  25236. return this._serializer.parse(browserUrl);
  25237. };
  25238. /**
  25239. * Update the deep linker using the NavController's current active view.
  25240. * @internal
  25241. */
  25242. DeepLinker.prototype.navChange = function (direction) {
  25243. if (direction) {
  25244. var activeNavContainers = this._app.getActiveNavContainers();
  25245. // the only time you'll ever get a TABS here is when loading directly from a URL
  25246. // this method will be called again when the TAB is loaded
  25247. // so just don't worry about the TABS for now
  25248. // if you encounter a TABS, just return
  25249. for (var _i = 0, activeNavContainers_3 = activeNavContainers; _i < activeNavContainers_3.length; _i++) {
  25250. var activeNavContainer = activeNavContainers_3[_i];
  25251. if (Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["m" /* isTabs */])(activeNavContainer) || activeNavContainer.isTransitioning()) {
  25252. return;
  25253. }
  25254. }
  25255. // okay, get the root navs and build the segments up
  25256. var segments = [];
  25257. var navContainers = this._app.getRootNavs();
  25258. for (var _a = 0, navContainers_1 = navContainers; _a < navContainers_1.length; _a++) {
  25259. var navContainer = navContainers_1[_a];
  25260. var segmentsForNav = this.getSegmentsFromNav(navContainer);
  25261. segments = segments.concat(segmentsForNav);
  25262. }
  25263. segments = segments.filter(function (segment) { return !!segment; });
  25264. if (segments.length) {
  25265. var browserUrl = this._serializer.serialize(segments);
  25266. this._updateLocation(browserUrl, direction);
  25267. }
  25268. }
  25269. };
  25270. DeepLinker.prototype.getSegmentsFromNav = function (nav) {
  25271. var _this = this;
  25272. var segments = [];
  25273. if (Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["k" /* isNav */])(nav)) {
  25274. segments.push(this.getSegmentFromNav(nav));
  25275. }
  25276. else if (Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["l" /* isTab */])(nav)) {
  25277. segments.push(this.getSegmentFromTab(nav));
  25278. }
  25279. nav.getActiveChildNavs().forEach(function (child) {
  25280. segments = segments.concat(_this.getSegmentsFromNav(child));
  25281. });
  25282. return segments;
  25283. };
  25284. DeepLinker.prototype.getSegmentFromNav = function (nav, component, data) {
  25285. if (!component) {
  25286. var viewController = nav.getActive(true);
  25287. if (viewController) {
  25288. component = viewController.component;
  25289. data = viewController.data;
  25290. }
  25291. }
  25292. return this._serializer.serializeComponent(nav, component, data);
  25293. };
  25294. DeepLinker.prototype.getSegmentFromTab = function (navContainer, component, data) {
  25295. if (navContainer && navContainer.parent) {
  25296. var tabsNavContainer = navContainer.parent;
  25297. var activeChildNavs = tabsNavContainer.getActiveChildNavs();
  25298. if (activeChildNavs && activeChildNavs.length) {
  25299. var activeChildNav = activeChildNavs[0];
  25300. var viewController = activeChildNav.getActive(true);
  25301. if (viewController) {
  25302. component = viewController.component;
  25303. data = viewController.data;
  25304. }
  25305. return this._serializer.serializeComponent(tabsNavContainer, component, data);
  25306. }
  25307. }
  25308. };
  25309. /**
  25310. * @internal
  25311. */
  25312. DeepLinker.prototype._updateLocation = function (browserUrl, direction) {
  25313. if (this._indexAliasUrl === browserUrl) {
  25314. browserUrl = '/';
  25315. }
  25316. if (direction === __WEBPACK_IMPORTED_MODULE_0__nav_util__["a" /* DIRECTION_BACK */] && this._isBackUrl(browserUrl)) {
  25317. // this URL is exactly the same as the back URL
  25318. // it's safe to use the browser's location.back()
  25319. (void 0) /* console.debug */;
  25320. this._historyPop();
  25321. this._location.back();
  25322. }
  25323. else if (!this._isCurrentUrl(browserUrl)) {
  25324. // probably navigating forward
  25325. (void 0) /* console.debug */;
  25326. this._historyPush(browserUrl);
  25327. this._location.go(browserUrl);
  25328. }
  25329. };
  25330. DeepLinker.prototype.getComponentFromName = function (componentName) {
  25331. var link = this._serializer.getLinkFromName(componentName);
  25332. if (link) {
  25333. // cool, we found the right link for this component name
  25334. return this.getNavLinkComponent(link);
  25335. }
  25336. // umm, idk
  25337. return Promise.reject("invalid link: " + componentName);
  25338. };
  25339. DeepLinker.prototype.getNavLinkComponent = function (link) {
  25340. if (link.component) {
  25341. // sweet, we're already got a component loaded for this link
  25342. return Promise.resolve(link.component);
  25343. }
  25344. if (link.loadChildren) {
  25345. // awesome, looks like we'll lazy load this component
  25346. // using loadChildren as the URL to request
  25347. return this._moduleLoader.load(link.loadChildren).then(function (response) {
  25348. link.component = response.component;
  25349. return response.component;
  25350. });
  25351. }
  25352. return Promise.reject("invalid link component: " + link.name);
  25353. };
  25354. /**
  25355. * @internal
  25356. */
  25357. DeepLinker.prototype.resolveComponent = function (component) {
  25358. var cfr = this._moduleLoader.getComponentFactoryResolver(component);
  25359. if (!cfr) {
  25360. cfr = this._baseCfr;
  25361. }
  25362. return cfr.resolveComponentFactory(component);
  25363. };
  25364. /**
  25365. * @internal
  25366. */
  25367. DeepLinker.prototype.createUrl = function (navContainer, nameOrComponent, _data, prepareExternalUrl) {
  25368. if (prepareExternalUrl === void 0) { prepareExternalUrl = true; }
  25369. // create a segment out of just the passed in name
  25370. var segment = this._serializer.createSegmentFromName(navContainer, nameOrComponent);
  25371. var allSegments = this.getCurrentSegments();
  25372. if (segment) {
  25373. for (var i = 0; i < allSegments.length; i++) {
  25374. if (allSegments[i].navId === navContainer.name || allSegments[i].navId === navContainer.id) {
  25375. allSegments[i] = segment;
  25376. var url = this._serializer.serialize(allSegments);
  25377. return prepareExternalUrl ? this._location.prepareExternalUrl(url) : url;
  25378. }
  25379. }
  25380. }
  25381. return '';
  25382. };
  25383. /**
  25384. * Each NavController will call this method when it initializes for
  25385. * the first time. This allows each NavController to figure out
  25386. * where it lives in the path and load up the correct component.
  25387. * @internal
  25388. */
  25389. DeepLinker.prototype.getSegmentByNavIdOrName = function (navId, name) {
  25390. var browserUrl = normalizeUrl(this._location.path());
  25391. var segments = this._serializer.parse(browserUrl);
  25392. for (var _i = 0, segments_1 = segments; _i < segments_1.length; _i++) {
  25393. var segment = segments_1[_i];
  25394. if (segment.navId === navId || segment.navId === name) {
  25395. return segment;
  25396. }
  25397. }
  25398. return null;
  25399. };
  25400. /**
  25401. * @internal
  25402. */
  25403. DeepLinker.prototype.initViews = function (segment) {
  25404. var _this = this;
  25405. var link = this._serializer.getLinkFromName(segment.name);
  25406. return this.getNavLinkComponent(link).then(function (component) {
  25407. segment.component = component;
  25408. var view = new __WEBPACK_IMPORTED_MODULE_3__view_controller__["a" /* ViewController */](component, segment.data);
  25409. view.id = segment.id;
  25410. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["e" /* isArray */])(segment.defaultHistory)) {
  25411. return Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["i" /* convertToViews */])(_this, segment.defaultHistory).then(function (views) {
  25412. views.push(view);
  25413. return views;
  25414. });
  25415. }
  25416. return [view];
  25417. });
  25418. };
  25419. /**
  25420. * @internal
  25421. */
  25422. DeepLinker.prototype._isBackUrl = function (browserUrl) {
  25423. return (browserUrl === this._history[this._history.length - 2]);
  25424. };
  25425. /**
  25426. * @internal
  25427. */
  25428. DeepLinker.prototype._isCurrentUrl = function (browserUrl) {
  25429. return (browserUrl === this._history[this._history.length - 1]);
  25430. };
  25431. /**
  25432. * @internal
  25433. */
  25434. DeepLinker.prototype._historyPush = function (browserUrl) {
  25435. if (!this._isCurrentUrl(browserUrl)) {
  25436. this._history.push(browserUrl);
  25437. if (this._history.length > 30) {
  25438. this._history.shift();
  25439. }
  25440. }
  25441. };
  25442. /**
  25443. * @internal
  25444. */
  25445. DeepLinker.prototype._historyPop = function () {
  25446. this._history.pop();
  25447. if (!this._history.length) {
  25448. this._historyPush(this._location.path());
  25449. }
  25450. };
  25451. /**
  25452. * @internal
  25453. */
  25454. DeepLinker.prototype._getTabSelector = function (tab) {
  25455. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(tab.tabUrlPath)) {
  25456. return tab.tabUrlPath;
  25457. }
  25458. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(tab.tabTitle)) {
  25459. return Object(__WEBPACK_IMPORTED_MODULE_2__url_serializer__["c" /* formatUrlPart */])(tab.tabTitle);
  25460. }
  25461. return "tab-" + tab.index;
  25462. };
  25463. /**
  25464. * Using the known Path of Segments, walk down all descendents
  25465. * from the root NavController and load each NavController according
  25466. * to each Segment. This is usually called after a browser URL and
  25467. * Path changes and needs to update all NavControllers to match
  25468. * the new browser URL. Because the URL is already known, it will
  25469. * not update the browser's URL when transitions have completed.
  25470. *
  25471. * @internal
  25472. */
  25473. DeepLinker.prototype._loadViewForSegment = function (navContainer, segment, done) {
  25474. if (!segment) {
  25475. return done(false, false);
  25476. }
  25477. if (Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["m" /* isTabs */])(navContainer) || (Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["l" /* isTab */])(navContainer) && navContainer.parent)) {
  25478. var tabs = (Object(__WEBPACK_IMPORTED_MODULE_0__nav_util__["m" /* isTabs */])(navContainer) ? navContainer : navContainer.parent);
  25479. var selectedIndex = tabs._getSelectedTabIndex(segment.secondaryId);
  25480. var tab = tabs.getByIndex(selectedIndex);
  25481. tab._segment = segment;
  25482. tabs.select(tab, {
  25483. updateUrl: false,
  25484. animate: false
  25485. }, true);
  25486. return done(false, false);
  25487. }
  25488. var navController = navContainer;
  25489. var numViews = navController.length() - 1;
  25490. // walk backwards to see if the exact view we want to show here
  25491. // is already in the stack that we can just pop back to
  25492. for (var i = numViews; i >= 0; i--) {
  25493. var viewController = navController.getByIndex(i);
  25494. if (viewController && (viewController.id === segment.id || viewController.id === segment.name)) {
  25495. // hooray! we've already got a view loaded in the stack
  25496. // matching the view they wanted to show
  25497. if (i === numViews) {
  25498. // this is the last view in the stack and it's the same
  25499. // as the segment so there's no change needed
  25500. return done(false, false);
  25501. }
  25502. else {
  25503. // it's not the exact view as the end
  25504. // let's have this nav go back to this exact view
  25505. return navController.popTo(viewController, {
  25506. animate: false,
  25507. updateUrl: false,
  25508. }, done);
  25509. }
  25510. }
  25511. }
  25512. // ok, so we don't know about a view that they're navigating to
  25513. // so we might as well just call setRoot and make tthe view the first view
  25514. // this seems like the least bad option
  25515. return navController.setRoot(segment.component || segment.name, segment.data, {
  25516. id: segment.id, animate: false, updateUrl: false
  25517. }, done);
  25518. };
  25519. return DeepLinker;
  25520. }());
  25521. function setupDeepLinker(app, serializer, location, moduleLoader, cfr) {
  25522. var deepLinker = new DeepLinker(app, serializer, location, moduleLoader, cfr);
  25523. deepLinker.init();
  25524. return deepLinker;
  25525. }
  25526. function normalizeUrl(browserUrl) {
  25527. browserUrl = browserUrl.trim();
  25528. if (browserUrl.charAt(0) !== '/') {
  25529. // ensure first char is a /
  25530. browserUrl = '/' + browserUrl;
  25531. }
  25532. if (browserUrl.length > 1 && browserUrl.charAt(browserUrl.length - 1) === '/') {
  25533. // ensure last char is not a /
  25534. browserUrl = browserUrl.substr(0, browserUrl.length - 1);
  25535. }
  25536. return browserUrl;
  25537. }
  25538. function getNavFromTree(nav, id) {
  25539. while (nav) {
  25540. if (nav.id === id || nav.name === id) {
  25541. return nav;
  25542. }
  25543. nav = nav.parent;
  25544. }
  25545. return null;
  25546. }
  25547. //# sourceMappingURL=deep-linker.js.map
  25548. /***/ }),
  25549. /* 25 */
  25550. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  25551. "use strict";
  25552. /* unused harmony export AbstractControlDirective */
  25553. /* unused harmony export AbstractFormGroupDirective */
  25554. /* unused harmony export CheckboxControlValueAccessor */
  25555. /* unused harmony export ControlContainer */
  25556. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return NG_VALUE_ACCESSOR; });
  25557. /* unused harmony export COMPOSITION_BUFFER_MODE */
  25558. /* unused harmony export DefaultValueAccessor */
  25559. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return NgControl; });
  25560. /* unused harmony export NgControlStatus */
  25561. /* unused harmony export NgControlStatusGroup */
  25562. /* unused harmony export NgForm */
  25563. /* unused harmony export NgModel */
  25564. /* unused harmony export NgModelGroup */
  25565. /* unused harmony export RadioControlValueAccessor */
  25566. /* unused harmony export FormControlDirective */
  25567. /* unused harmony export FormControlName */
  25568. /* unused harmony export FormGroupDirective */
  25569. /* unused harmony export FormArrayName */
  25570. /* unused harmony export FormGroupName */
  25571. /* unused harmony export NgSelectOption */
  25572. /* unused harmony export SelectControlValueAccessor */
  25573. /* unused harmony export SelectMultipleControlValueAccessor */
  25574. /* unused harmony export CheckboxRequiredValidator */
  25575. /* unused harmony export EmailValidator */
  25576. /* unused harmony export MaxLengthValidator */
  25577. /* unused harmony export MinLengthValidator */
  25578. /* unused harmony export PatternValidator */
  25579. /* unused harmony export RequiredValidator */
  25580. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FormBuilder; });
  25581. /* unused harmony export AbstractControl */
  25582. /* unused harmony export FormArray */
  25583. /* unused harmony export FormControl */
  25584. /* unused harmony export FormGroup */
  25585. /* unused harmony export NG_ASYNC_VALIDATORS */
  25586. /* unused harmony export NG_VALIDATORS */
  25587. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return Validators; });
  25588. /* unused harmony export VERSION */
  25589. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return FormsModule; });
  25590. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return ReactiveFormsModule; });
  25591. /* unused harmony export ɵba */
  25592. /* unused harmony export ɵz */
  25593. /* unused harmony export ɵx */
  25594. /* unused harmony export ɵy */
  25595. /* unused harmony export ɵa */
  25596. /* unused harmony export ɵb */
  25597. /* unused harmony export ɵc */
  25598. /* unused harmony export ɵd */
  25599. /* unused harmony export ɵe */
  25600. /* unused harmony export ɵf */
  25601. /* unused harmony export ɵg */
  25602. /* unused harmony export ɵbf */
  25603. /* unused harmony export ɵbb */
  25604. /* unused harmony export ɵbc */
  25605. /* unused harmony export ɵh */
  25606. /* unused harmony export ɵi */
  25607. /* unused harmony export ɵbd */
  25608. /* unused harmony export ɵbe */
  25609. /* unused harmony export ɵj */
  25610. /* unused harmony export ɵk */
  25611. /* unused harmony export ɵl */
  25612. /* unused harmony export ɵn */
  25613. /* unused harmony export ɵm */
  25614. /* unused harmony export ɵo */
  25615. /* unused harmony export ɵq */
  25616. /* unused harmony export ɵp */
  25617. /* unused harmony export ɵs */
  25618. /* unused harmony export ɵt */
  25619. /* unused harmony export ɵv */
  25620. /* unused harmony export ɵu */
  25621. /* unused harmony export ɵw */
  25622. /* unused harmony export ɵr */
  25623. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(38);
  25624. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(1);
  25625. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__ = __webpack_require__(177);
  25626. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__);
  25627. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__ = __webpack_require__(178);
  25628. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__);
  25629. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__ = __webpack_require__(180);
  25630. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__);
  25631. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__ = __webpack_require__(40);
  25632. /**
  25633. * @license Angular v5.2.11
  25634. * (c) 2010-2018 Google, Inc. https://angular.io/
  25635. * License: MIT
  25636. */
  25637. /**
  25638. * @fileoverview added by tsickle
  25639. * @suppress {checkTypes} checked by tsc
  25640. */
  25641. /**
  25642. * @license
  25643. * Copyright Google Inc. All Rights Reserved.
  25644. *
  25645. * Use of this source code is governed by an MIT-style license that can be
  25646. * found in the LICENSE file at https://angular.io/license
  25647. */
  25648. /**
  25649. * Base class for control directives.
  25650. *
  25651. * Only used internally in the forms module.
  25652. *
  25653. * \@stable
  25654. * @abstract
  25655. */
  25656. var AbstractControlDirective = /** @class */ (function () {
  25657. function AbstractControlDirective() {
  25658. }
  25659. Object.defineProperty(AbstractControlDirective.prototype, "value", {
  25660. /** The value of the control. */
  25661. get: /**
  25662. * The value of the control.
  25663. * @return {?}
  25664. */
  25665. function () { return this.control ? this.control.value : null; },
  25666. enumerable: true,
  25667. configurable: true
  25668. });
  25669. Object.defineProperty(AbstractControlDirective.prototype, "valid", {
  25670. /**
  25671. * A control is `valid` when its `status === VALID`.
  25672. *
  25673. * In order to have this status, the control must have passed all its
  25674. * validation checks.
  25675. */
  25676. get: /**
  25677. * A control is `valid` when its `status === VALID`.
  25678. *
  25679. * In order to have this status, the control must have passed all its
  25680. * validation checks.
  25681. * @return {?}
  25682. */
  25683. function () { return this.control ? this.control.valid : null; },
  25684. enumerable: true,
  25685. configurable: true
  25686. });
  25687. Object.defineProperty(AbstractControlDirective.prototype, "invalid", {
  25688. /**
  25689. * A control is `invalid` when its `status === INVALID`.
  25690. *
  25691. * In order to have this status, the control must have failed
  25692. * at least one of its validation checks.
  25693. */
  25694. get: /**
  25695. * A control is `invalid` when its `status === INVALID`.
  25696. *
  25697. * In order to have this status, the control must have failed
  25698. * at least one of its validation checks.
  25699. * @return {?}
  25700. */
  25701. function () { return this.control ? this.control.invalid : null; },
  25702. enumerable: true,
  25703. configurable: true
  25704. });
  25705. Object.defineProperty(AbstractControlDirective.prototype, "pending", {
  25706. /**
  25707. * A control is `pending` when its `status === PENDING`.
  25708. *
  25709. * In order to have this status, the control must be in the
  25710. * middle of conducting a validation check.
  25711. */
  25712. get: /**
  25713. * A control is `pending` when its `status === PENDING`.
  25714. *
  25715. * In order to have this status, the control must be in the
  25716. * middle of conducting a validation check.
  25717. * @return {?}
  25718. */
  25719. function () { return this.control ? this.control.pending : null; },
  25720. enumerable: true,
  25721. configurable: true
  25722. });
  25723. Object.defineProperty(AbstractControlDirective.prototype, "disabled", {
  25724. /**
  25725. * A control is `disabled` when its `status === DISABLED`.
  25726. *
  25727. * Disabled controls are exempt from validation checks and
  25728. * are not included in the aggregate value of their ancestor
  25729. * controls.
  25730. */
  25731. get: /**
  25732. * A control is `disabled` when its `status === DISABLED`.
  25733. *
  25734. * Disabled controls are exempt from validation checks and
  25735. * are not included in the aggregate value of their ancestor
  25736. * controls.
  25737. * @return {?}
  25738. */
  25739. function () { return this.control ? this.control.disabled : null; },
  25740. enumerable: true,
  25741. configurable: true
  25742. });
  25743. Object.defineProperty(AbstractControlDirective.prototype, "enabled", {
  25744. /**
  25745. * A control is `enabled` as long as its `status !== DISABLED`.
  25746. *
  25747. * In other words, it has a status of `VALID`, `INVALID`, or
  25748. * `PENDING`.
  25749. */
  25750. get: /**
  25751. * A control is `enabled` as long as its `status !== DISABLED`.
  25752. *
  25753. * In other words, it has a status of `VALID`, `INVALID`, or
  25754. * `PENDING`.
  25755. * @return {?}
  25756. */
  25757. function () { return this.control ? this.control.enabled : null; },
  25758. enumerable: true,
  25759. configurable: true
  25760. });
  25761. Object.defineProperty(AbstractControlDirective.prototype, "errors", {
  25762. /**
  25763. * Returns any errors generated by failing validation. If there
  25764. * are no errors, it will return null.
  25765. */
  25766. get: /**
  25767. * Returns any errors generated by failing validation. If there
  25768. * are no errors, it will return null.
  25769. * @return {?}
  25770. */
  25771. function () { return this.control ? this.control.errors : null; },
  25772. enumerable: true,
  25773. configurable: true
  25774. });
  25775. Object.defineProperty(AbstractControlDirective.prototype, "pristine", {
  25776. /**
  25777. * A control is `pristine` if the user has not yet changed
  25778. * the value in the UI.
  25779. *
  25780. * Note that programmatic changes to a control's value will
  25781. * *not* mark it dirty.
  25782. */
  25783. get: /**
  25784. * A control is `pristine` if the user has not yet changed
  25785. * the value in the UI.
  25786. *
  25787. * Note that programmatic changes to a control's value will
  25788. * *not* mark it dirty.
  25789. * @return {?}
  25790. */
  25791. function () { return this.control ? this.control.pristine : null; },
  25792. enumerable: true,
  25793. configurable: true
  25794. });
  25795. Object.defineProperty(AbstractControlDirective.prototype, "dirty", {
  25796. /**
  25797. * A control is `dirty` if the user has changed the value
  25798. * in the UI.
  25799. *
  25800. * Note that programmatic changes to a control's value will
  25801. * *not* mark it dirty.
  25802. */
  25803. get: /**
  25804. * A control is `dirty` if the user has changed the value
  25805. * in the UI.
  25806. *
  25807. * Note that programmatic changes to a control's value will
  25808. * *not* mark it dirty.
  25809. * @return {?}
  25810. */
  25811. function () { return this.control ? this.control.dirty : null; },
  25812. enumerable: true,
  25813. configurable: true
  25814. });
  25815. Object.defineProperty(AbstractControlDirective.prototype, "touched", {
  25816. /**
  25817. * A control is marked `touched` once the user has triggered
  25818. * a `blur` event on it.
  25819. */
  25820. get: /**
  25821. * A control is marked `touched` once the user has triggered
  25822. * a `blur` event on it.
  25823. * @return {?}
  25824. */
  25825. function () { return this.control ? this.control.touched : null; },
  25826. enumerable: true,
  25827. configurable: true
  25828. });
  25829. Object.defineProperty(AbstractControlDirective.prototype, "status", {
  25830. get: /**
  25831. * @return {?}
  25832. */
  25833. function () { return this.control ? this.control.status : null; },
  25834. enumerable: true,
  25835. configurable: true
  25836. });
  25837. Object.defineProperty(AbstractControlDirective.prototype, "untouched", {
  25838. /**
  25839. * A control is `untouched` if the user has not yet triggered
  25840. * a `blur` event on it.
  25841. */
  25842. get: /**
  25843. * A control is `untouched` if the user has not yet triggered
  25844. * a `blur` event on it.
  25845. * @return {?}
  25846. */
  25847. function () { return this.control ? this.control.untouched : null; },
  25848. enumerable: true,
  25849. configurable: true
  25850. });
  25851. Object.defineProperty(AbstractControlDirective.prototype, "statusChanges", {
  25852. /**
  25853. * Emits an event every time the validation status of the control
  25854. * is re-calculated.
  25855. */
  25856. get: /**
  25857. * Emits an event every time the validation status of the control
  25858. * is re-calculated.
  25859. * @return {?}
  25860. */
  25861. function () {
  25862. return this.control ? this.control.statusChanges : null;
  25863. },
  25864. enumerable: true,
  25865. configurable: true
  25866. });
  25867. Object.defineProperty(AbstractControlDirective.prototype, "valueChanges", {
  25868. /**
  25869. * Emits an event every time the value of the control changes, in
  25870. * the UI or programmatically.
  25871. */
  25872. get: /**
  25873. * Emits an event every time the value of the control changes, in
  25874. * the UI or programmatically.
  25875. * @return {?}
  25876. */
  25877. function () {
  25878. return this.control ? this.control.valueChanges : null;
  25879. },
  25880. enumerable: true,
  25881. configurable: true
  25882. });
  25883. Object.defineProperty(AbstractControlDirective.prototype, "path", {
  25884. /**
  25885. * Returns an array that represents the path from the top-level form
  25886. * to this control. Each index is the string name of the control on
  25887. * that level.
  25888. */
  25889. get: /**
  25890. * Returns an array that represents the path from the top-level form
  25891. * to this control. Each index is the string name of the control on
  25892. * that level.
  25893. * @return {?}
  25894. */
  25895. function () { return null; },
  25896. enumerable: true,
  25897. configurable: true
  25898. });
  25899. /**
  25900. * Resets the form control. This means by default:
  25901. *
  25902. * * it is marked as `pristine`
  25903. * * it is marked as `untouched`
  25904. * * value is set to null
  25905. *
  25906. * For more information, see {@link AbstractControl}.
  25907. */
  25908. /**
  25909. * Resets the form control. This means by default:
  25910. *
  25911. * * it is marked as `pristine`
  25912. * * it is marked as `untouched`
  25913. * * value is set to null
  25914. *
  25915. * For more information, see {\@link AbstractControl}.
  25916. * @param {?=} value
  25917. * @return {?}
  25918. */
  25919. AbstractControlDirective.prototype.reset = /**
  25920. * Resets the form control. This means by default:
  25921. *
  25922. * * it is marked as `pristine`
  25923. * * it is marked as `untouched`
  25924. * * value is set to null
  25925. *
  25926. * For more information, see {\@link AbstractControl}.
  25927. * @param {?=} value
  25928. * @return {?}
  25929. */
  25930. function (value) {
  25931. if (value === void 0) { value = undefined; }
  25932. if (this.control)
  25933. this.control.reset(value);
  25934. };
  25935. /**
  25936. * Returns true if the control with the given path has the error specified. Otherwise
  25937. * returns false.
  25938. *
  25939. * If no path is given, it checks for the error on the present control.
  25940. */
  25941. /**
  25942. * Returns true if the control with the given path has the error specified. Otherwise
  25943. * returns false.
  25944. *
  25945. * If no path is given, it checks for the error on the present control.
  25946. * @param {?} errorCode
  25947. * @param {?=} path
  25948. * @return {?}
  25949. */
  25950. AbstractControlDirective.prototype.hasError = /**
  25951. * Returns true if the control with the given path has the error specified. Otherwise
  25952. * returns false.
  25953. *
  25954. * If no path is given, it checks for the error on the present control.
  25955. * @param {?} errorCode
  25956. * @param {?=} path
  25957. * @return {?}
  25958. */
  25959. function (errorCode, path) {
  25960. return this.control ? this.control.hasError(errorCode, path) : false;
  25961. };
  25962. /**
  25963. * Returns error data if the control with the given path has the error specified. Otherwise
  25964. * returns null or undefined.
  25965. *
  25966. * If no path is given, it checks for the error on the present control.
  25967. */
  25968. /**
  25969. * Returns error data if the control with the given path has the error specified. Otherwise
  25970. * returns null or undefined.
  25971. *
  25972. * If no path is given, it checks for the error on the present control.
  25973. * @param {?} errorCode
  25974. * @param {?=} path
  25975. * @return {?}
  25976. */
  25977. AbstractControlDirective.prototype.getError = /**
  25978. * Returns error data if the control with the given path has the error specified. Otherwise
  25979. * returns null or undefined.
  25980. *
  25981. * If no path is given, it checks for the error on the present control.
  25982. * @param {?} errorCode
  25983. * @param {?=} path
  25984. * @return {?}
  25985. */
  25986. function (errorCode, path) {
  25987. return this.control ? this.control.getError(errorCode, path) : null;
  25988. };
  25989. return AbstractControlDirective;
  25990. }());
  25991. /**
  25992. * @fileoverview added by tsickle
  25993. * @suppress {checkTypes} checked by tsc
  25994. */
  25995. /**
  25996. * @license
  25997. * Copyright Google Inc. All Rights Reserved.
  25998. *
  25999. * Use of this source code is governed by an MIT-style license that can be
  26000. * found in the LICENSE file at https://angular.io/license
  26001. */
  26002. /**
  26003. * A directive that contains multiple {\@link NgControl}s.
  26004. *
  26005. * Only used by the forms module.
  26006. *
  26007. * \@stable
  26008. * @abstract
  26009. */
  26010. var ControlContainer = /** @class */ (function (_super) {
  26011. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ControlContainer, _super);
  26012. function ControlContainer() {
  26013. return _super !== null && _super.apply(this, arguments) || this;
  26014. }
  26015. Object.defineProperty(ControlContainer.prototype, "formDirective", {
  26016. /**
  26017. * Get the form to which this container belongs.
  26018. */
  26019. get: /**
  26020. * Get the form to which this container belongs.
  26021. * @return {?}
  26022. */
  26023. function () { return null; },
  26024. enumerable: true,
  26025. configurable: true
  26026. });
  26027. Object.defineProperty(ControlContainer.prototype, "path", {
  26028. /**
  26029. * Get the path to this container.
  26030. */
  26031. get: /**
  26032. * Get the path to this container.
  26033. * @return {?}
  26034. */
  26035. function () { return null; },
  26036. enumerable: true,
  26037. configurable: true
  26038. });
  26039. return ControlContainer;
  26040. }(AbstractControlDirective));
  26041. /**
  26042. * @fileoverview added by tsickle
  26043. * @suppress {checkTypes} checked by tsc
  26044. */
  26045. /**
  26046. * @license
  26047. * Copyright Google Inc. All Rights Reserved.
  26048. *
  26049. * Use of this source code is governed by an MIT-style license that can be
  26050. * found in the LICENSE file at https://angular.io/license
  26051. */
  26052. /**
  26053. * @param {?} value
  26054. * @return {?}
  26055. */
  26056. function isEmptyInputValue(value) {
  26057. // we don't check for string here so it also works with arrays
  26058. return value == null || value.length === 0;
  26059. }
  26060. /**
  26061. * Providers for validators to be used for {\@link FormControl}s in a form.
  26062. *
  26063. * Provide this using `multi: true` to add validators.
  26064. *
  26065. * ### Example
  26066. *
  26067. * ```typescript
  26068. * \@Directive({
  26069. * selector: '[custom-validator]',
  26070. * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]
  26071. * })
  26072. * class CustomValidatorDirective implements Validator {
  26073. * validate(control: AbstractControl): ValidationErrors | null {
  26074. * return {"custom": true};
  26075. * }
  26076. * }
  26077. * ```
  26078. *
  26079. * \@stable
  26080. */
  26081. var NG_VALIDATORS = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('NgValidators');
  26082. /**
  26083. * Providers for asynchronous validators to be used for {\@link FormControl}s
  26084. * in a form.
  26085. *
  26086. * Provide this using `multi: true` to add validators.
  26087. *
  26088. * See {\@link NG_VALIDATORS} for more details.
  26089. *
  26090. * \@stable
  26091. */
  26092. var NG_ASYNC_VALIDATORS = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('NgAsyncValidators');
  26093. var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;
  26094. /**
  26095. * Provides a set of validators used by form controls.
  26096. *
  26097. * A validator is a function that processes a {\@link FormControl} or collection of
  26098. * controls and returns a map of errors. A null map means that validation has passed.
  26099. *
  26100. * ### Example
  26101. *
  26102. * ```typescript
  26103. * var loginControl = new FormControl("", Validators.required)
  26104. * ```
  26105. *
  26106. * \@stable
  26107. */
  26108. var Validators = /** @class */ (function () {
  26109. function Validators() {
  26110. }
  26111. /**
  26112. * Validator that requires controls to have a value greater than a number.
  26113. *`min()` exists only as a function, not as a directive. For example,
  26114. * `control = new FormControl('', Validators.min(3));`.
  26115. */
  26116. /**
  26117. * Validator that requires controls to have a value greater than a number.
  26118. * `min()` exists only as a function, not as a directive. For example,
  26119. * `control = new FormControl('', Validators.min(3));`.
  26120. * @param {?} min
  26121. * @return {?}
  26122. */
  26123. Validators.min = /**
  26124. * Validator that requires controls to have a value greater than a number.
  26125. * `min()` exists only as a function, not as a directive. For example,
  26126. * `control = new FormControl('', Validators.min(3));`.
  26127. * @param {?} min
  26128. * @return {?}
  26129. */
  26130. function (min) {
  26131. return function (control) {
  26132. if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {
  26133. return null; // don't validate empty values to allow optional controls
  26134. }
  26135. var /** @type {?} */ value = parseFloat(control.value);
  26136. // Controls with NaN values after parsing should be treated as not having a
  26137. // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min
  26138. return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;
  26139. };
  26140. };
  26141. /**
  26142. * Validator that requires controls to have a value less than a number.
  26143. * `max()` exists only as a function, not as a directive. For example,
  26144. * `control = new FormControl('', Validators.max(15));`.
  26145. */
  26146. /**
  26147. * Validator that requires controls to have a value less than a number.
  26148. * `max()` exists only as a function, not as a directive. For example,
  26149. * `control = new FormControl('', Validators.max(15));`.
  26150. * @param {?} max
  26151. * @return {?}
  26152. */
  26153. Validators.max = /**
  26154. * Validator that requires controls to have a value less than a number.
  26155. * `max()` exists only as a function, not as a directive. For example,
  26156. * `control = new FormControl('', Validators.max(15));`.
  26157. * @param {?} max
  26158. * @return {?}
  26159. */
  26160. function (max) {
  26161. return function (control) {
  26162. if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {
  26163. return null; // don't validate empty values to allow optional controls
  26164. }
  26165. var /** @type {?} */ value = parseFloat(control.value);
  26166. // Controls with NaN values after parsing should be treated as not having a
  26167. // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max
  26168. return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;
  26169. };
  26170. };
  26171. /**
  26172. * Validator that requires controls to have a non-empty value.
  26173. */
  26174. /**
  26175. * Validator that requires controls to have a non-empty value.
  26176. * @param {?} control
  26177. * @return {?}
  26178. */
  26179. Validators.required = /**
  26180. * Validator that requires controls to have a non-empty value.
  26181. * @param {?} control
  26182. * @return {?}
  26183. */
  26184. function (control) {
  26185. return isEmptyInputValue(control.value) ? { 'required': true } : null;
  26186. };
  26187. /**
  26188. * Validator that requires control value to be true.
  26189. */
  26190. /**
  26191. * Validator that requires control value to be true.
  26192. * @param {?} control
  26193. * @return {?}
  26194. */
  26195. Validators.requiredTrue = /**
  26196. * Validator that requires control value to be true.
  26197. * @param {?} control
  26198. * @return {?}
  26199. */
  26200. function (control) {
  26201. return control.value === true ? null : { 'required': true };
  26202. };
  26203. /**
  26204. * Validator that performs email validation.
  26205. */
  26206. /**
  26207. * Validator that performs email validation.
  26208. * @param {?} control
  26209. * @return {?}
  26210. */
  26211. Validators.email = /**
  26212. * Validator that performs email validation.
  26213. * @param {?} control
  26214. * @return {?}
  26215. */
  26216. function (control) {
  26217. return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };
  26218. };
  26219. /**
  26220. * Validator that requires controls to have a value of a minimum length.
  26221. */
  26222. /**
  26223. * Validator that requires controls to have a value of a minimum length.
  26224. * @param {?} minLength
  26225. * @return {?}
  26226. */
  26227. Validators.minLength = /**
  26228. * Validator that requires controls to have a value of a minimum length.
  26229. * @param {?} minLength
  26230. * @return {?}
  26231. */
  26232. function (minLength) {
  26233. return function (control) {
  26234. if (isEmptyInputValue(control.value)) {
  26235. return null; // don't validate empty values to allow optional controls
  26236. }
  26237. var /** @type {?} */ length = control.value ? control.value.length : 0;
  26238. return length < minLength ?
  26239. { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :
  26240. null;
  26241. };
  26242. };
  26243. /**
  26244. * Validator that requires controls to have a value of a maximum length.
  26245. */
  26246. /**
  26247. * Validator that requires controls to have a value of a maximum length.
  26248. * @param {?} maxLength
  26249. * @return {?}
  26250. */
  26251. Validators.maxLength = /**
  26252. * Validator that requires controls to have a value of a maximum length.
  26253. * @param {?} maxLength
  26254. * @return {?}
  26255. */
  26256. function (maxLength) {
  26257. return function (control) {
  26258. var /** @type {?} */ length = control.value ? control.value.length : 0;
  26259. return length > maxLength ?
  26260. { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :
  26261. null;
  26262. };
  26263. };
  26264. /**
  26265. * Validator that requires a control to match a regex to its value.
  26266. */
  26267. /**
  26268. * Validator that requires a control to match a regex to its value.
  26269. * @param {?} pattern
  26270. * @return {?}
  26271. */
  26272. Validators.pattern = /**
  26273. * Validator that requires a control to match a regex to its value.
  26274. * @param {?} pattern
  26275. * @return {?}
  26276. */
  26277. function (pattern) {
  26278. if (!pattern)
  26279. return Validators.nullValidator;
  26280. var /** @type {?} */ regex;
  26281. var /** @type {?} */ regexStr;
  26282. if (typeof pattern === 'string') {
  26283. regexStr = '';
  26284. if (pattern.charAt(0) !== '^')
  26285. regexStr += '^';
  26286. regexStr += pattern;
  26287. if (pattern.charAt(pattern.length - 1) !== '$')
  26288. regexStr += '$';
  26289. regex = new RegExp(regexStr);
  26290. }
  26291. else {
  26292. regexStr = pattern.toString();
  26293. regex = pattern;
  26294. }
  26295. return function (control) {
  26296. if (isEmptyInputValue(control.value)) {
  26297. return null; // don't validate empty values to allow optional controls
  26298. }
  26299. var /** @type {?} */ value = control.value;
  26300. return regex.test(value) ? null :
  26301. { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };
  26302. };
  26303. };
  26304. /**
  26305. * No-op validator.
  26306. */
  26307. /**
  26308. * No-op validator.
  26309. * @param {?} c
  26310. * @return {?}
  26311. */
  26312. Validators.nullValidator = /**
  26313. * No-op validator.
  26314. * @param {?} c
  26315. * @return {?}
  26316. */
  26317. function (c) { return null; };
  26318. /**
  26319. * @param {?} validators
  26320. * @return {?}
  26321. */
  26322. Validators.compose = /**
  26323. * @param {?} validators
  26324. * @return {?}
  26325. */
  26326. function (validators) {
  26327. if (!validators)
  26328. return null;
  26329. var /** @type {?} */ presentValidators = /** @type {?} */ (validators.filter(isPresent));
  26330. if (presentValidators.length == 0)
  26331. return null;
  26332. return function (control) {
  26333. return _mergeErrors(_executeValidators(control, presentValidators));
  26334. };
  26335. };
  26336. /**
  26337. * @param {?} validators
  26338. * @return {?}
  26339. */
  26340. Validators.composeAsync = /**
  26341. * @param {?} validators
  26342. * @return {?}
  26343. */
  26344. function (validators) {
  26345. if (!validators)
  26346. return null;
  26347. var /** @type {?} */ presentValidators = /** @type {?} */ (validators.filter(isPresent));
  26348. if (presentValidators.length == 0)
  26349. return null;
  26350. return function (control) {
  26351. var /** @type {?} */ observables = _executeAsyncValidators(control, presentValidators).map(toObservable);
  26352. return __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__["map"].call(Object(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__["forkJoin"])(observables), _mergeErrors);
  26353. };
  26354. };
  26355. return Validators;
  26356. }());
  26357. /**
  26358. * @param {?} o
  26359. * @return {?}
  26360. */
  26361. function isPresent(o) {
  26362. return o != null;
  26363. }
  26364. /**
  26365. * @param {?} r
  26366. * @return {?}
  26367. */
  26368. function toObservable(r) {
  26369. var /** @type {?} */ obs = Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_35" /* ɵisPromise */])(r) ? Object(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__["fromPromise"])(r) : r;
  26370. if (!(Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_34" /* ɵisObservable */])(obs))) {
  26371. throw new Error("Expected validator to return Promise or Observable.");
  26372. }
  26373. return obs;
  26374. }
  26375. /**
  26376. * @param {?} control
  26377. * @param {?} validators
  26378. * @return {?}
  26379. */
  26380. function _executeValidators(control, validators) {
  26381. return validators.map(function (v) { return v(control); });
  26382. }
  26383. /**
  26384. * @param {?} control
  26385. * @param {?} validators
  26386. * @return {?}
  26387. */
  26388. function _executeAsyncValidators(control, validators) {
  26389. return validators.map(function (v) { return v(control); });
  26390. }
  26391. /**
  26392. * @param {?} arrayOfErrors
  26393. * @return {?}
  26394. */
  26395. function _mergeErrors(arrayOfErrors) {
  26396. var /** @type {?} */ res = arrayOfErrors.reduce(function (res, errors) {
  26397. return errors != null ? Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, /** @type {?} */ ((res)), errors) : /** @type {?} */ ((res));
  26398. }, {});
  26399. return Object.keys(res).length === 0 ? null : res;
  26400. }
  26401. /**
  26402. * @fileoverview added by tsickle
  26403. * @suppress {checkTypes} checked by tsc
  26404. */
  26405. /**
  26406. * @license
  26407. * Copyright Google Inc. All Rights Reserved.
  26408. *
  26409. * Use of this source code is governed by an MIT-style license that can be
  26410. * found in the LICENSE file at https://angular.io/license
  26411. */
  26412. /**
  26413. * A `ControlValueAccessor` acts as a bridge between the Angular forms API and a
  26414. * native element in the DOM.
  26415. *
  26416. * Implement this interface if you want to create a custom form control directive
  26417. * that integrates with Angular forms.
  26418. *
  26419. * \@stable
  26420. * @record
  26421. */
  26422. /**
  26423. * Used to provide a {\@link ControlValueAccessor} for form controls.
  26424. *
  26425. * See {\@link DefaultValueAccessor} for how to implement one.
  26426. * \@stable
  26427. */
  26428. var NG_VALUE_ACCESSOR = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('NgValueAccessor');
  26429. /**
  26430. * @fileoverview added by tsickle
  26431. * @suppress {checkTypes} checked by tsc
  26432. */
  26433. /**
  26434. * @license
  26435. * Copyright Google Inc. All Rights Reserved.
  26436. *
  26437. * Use of this source code is governed by an MIT-style license that can be
  26438. * found in the LICENSE file at https://angular.io/license
  26439. */
  26440. var CHECKBOX_VALUE_ACCESSOR = {
  26441. provide: NG_VALUE_ACCESSOR,
  26442. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return CheckboxControlValueAccessor; }),
  26443. multi: true,
  26444. };
  26445. /**
  26446. * The accessor for writing a value and listening to changes on a checkbox input element.
  26447. *
  26448. * ### Example
  26449. * ```
  26450. * <input type="checkbox" name="rememberLogin" ngModel>
  26451. * ```
  26452. *
  26453. * \@stable
  26454. */
  26455. var CheckboxControlValueAccessor = /** @class */ (function () {
  26456. function CheckboxControlValueAccessor(_renderer, _elementRef) {
  26457. this._renderer = _renderer;
  26458. this._elementRef = _elementRef;
  26459. this.onChange = function (_) { };
  26460. this.onTouched = function () { };
  26461. }
  26462. /**
  26463. * @param {?} value
  26464. * @return {?}
  26465. */
  26466. CheckboxControlValueAccessor.prototype.writeValue = /**
  26467. * @param {?} value
  26468. * @return {?}
  26469. */
  26470. function (value) {
  26471. this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);
  26472. };
  26473. /**
  26474. * @param {?} fn
  26475. * @return {?}
  26476. */
  26477. CheckboxControlValueAccessor.prototype.registerOnChange = /**
  26478. * @param {?} fn
  26479. * @return {?}
  26480. */
  26481. function (fn) { this.onChange = fn; };
  26482. /**
  26483. * @param {?} fn
  26484. * @return {?}
  26485. */
  26486. CheckboxControlValueAccessor.prototype.registerOnTouched = /**
  26487. * @param {?} fn
  26488. * @return {?}
  26489. */
  26490. function (fn) { this.onTouched = fn; };
  26491. /**
  26492. * @param {?} isDisabled
  26493. * @return {?}
  26494. */
  26495. CheckboxControlValueAccessor.prototype.setDisabledState = /**
  26496. * @param {?} isDisabled
  26497. * @return {?}
  26498. */
  26499. function (isDisabled) {
  26500. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  26501. };
  26502. CheckboxControlValueAccessor.decorators = [
  26503. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  26504. selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',
  26505. host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },
  26506. providers: [CHECKBOX_VALUE_ACCESSOR]
  26507. },] },
  26508. ];
  26509. /** @nocollapse */
  26510. CheckboxControlValueAccessor.ctorParameters = function () { return [
  26511. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  26512. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  26513. ]; };
  26514. return CheckboxControlValueAccessor;
  26515. }());
  26516. /**
  26517. * @fileoverview added by tsickle
  26518. * @suppress {checkTypes} checked by tsc
  26519. */
  26520. /**
  26521. * @license
  26522. * Copyright Google Inc. All Rights Reserved.
  26523. *
  26524. * Use of this source code is governed by an MIT-style license that can be
  26525. * found in the LICENSE file at https://angular.io/license
  26526. */
  26527. var DEFAULT_VALUE_ACCESSOR = {
  26528. provide: NG_VALUE_ACCESSOR,
  26529. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return DefaultValueAccessor; }),
  26530. multi: true
  26531. };
  26532. /**
  26533. * We must check whether the agent is Android because composition events
  26534. * behave differently between iOS and Android.
  26535. * @return {?}
  26536. */
  26537. function _isAndroid() {
  26538. var /** @type {?} */ userAgent = Object(__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__["g" /* ɵgetDOM */])() ? Object(__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__["g" /* ɵgetDOM */])().getUserAgent() : '';
  26539. return /android (\d+)/.test(userAgent.toLowerCase());
  26540. }
  26541. /**
  26542. * Turn this mode on if you want form directives to buffer IME input until compositionend
  26543. * \@experimental
  26544. */
  26545. var COMPOSITION_BUFFER_MODE = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('CompositionEventMode');
  26546. /**
  26547. * The default accessor for writing a value and listening to changes that is used by the
  26548. * {\@link NgModel}, {\@link FormControlDirective}, and {\@link FormControlName} directives.
  26549. *
  26550. * ### Example
  26551. * ```
  26552. * <input type="text" name="searchQuery" ngModel>
  26553. * ```
  26554. *
  26555. * \@stable
  26556. */
  26557. var DefaultValueAccessor = /** @class */ (function () {
  26558. function DefaultValueAccessor(_renderer, _elementRef, _compositionMode) {
  26559. this._renderer = _renderer;
  26560. this._elementRef = _elementRef;
  26561. this._compositionMode = _compositionMode;
  26562. this.onChange = function (_) { };
  26563. this.onTouched = function () { };
  26564. /**
  26565. * Whether the user is creating a composition string (IME events).
  26566. */
  26567. this._composing = false;
  26568. if (this._compositionMode == null) {
  26569. this._compositionMode = !_isAndroid();
  26570. }
  26571. }
  26572. /**
  26573. * @param {?} value
  26574. * @return {?}
  26575. */
  26576. DefaultValueAccessor.prototype.writeValue = /**
  26577. * @param {?} value
  26578. * @return {?}
  26579. */
  26580. function (value) {
  26581. var /** @type {?} */ normalizedValue = value == null ? '' : value;
  26582. this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
  26583. };
  26584. /**
  26585. * @param {?} fn
  26586. * @return {?}
  26587. */
  26588. DefaultValueAccessor.prototype.registerOnChange = /**
  26589. * @param {?} fn
  26590. * @return {?}
  26591. */
  26592. function (fn) { this.onChange = fn; };
  26593. /**
  26594. * @param {?} fn
  26595. * @return {?}
  26596. */
  26597. DefaultValueAccessor.prototype.registerOnTouched = /**
  26598. * @param {?} fn
  26599. * @return {?}
  26600. */
  26601. function (fn) { this.onTouched = fn; };
  26602. /**
  26603. * @param {?} isDisabled
  26604. * @return {?}
  26605. */
  26606. DefaultValueAccessor.prototype.setDisabledState = /**
  26607. * @param {?} isDisabled
  26608. * @return {?}
  26609. */
  26610. function (isDisabled) {
  26611. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  26612. };
  26613. /** @internal */
  26614. /**
  26615. * \@internal
  26616. * @param {?} value
  26617. * @return {?}
  26618. */
  26619. DefaultValueAccessor.prototype._handleInput = /**
  26620. * \@internal
  26621. * @param {?} value
  26622. * @return {?}
  26623. */
  26624. function (value) {
  26625. if (!this._compositionMode || (this._compositionMode && !this._composing)) {
  26626. this.onChange(value);
  26627. }
  26628. };
  26629. /** @internal */
  26630. /**
  26631. * \@internal
  26632. * @return {?}
  26633. */
  26634. DefaultValueAccessor.prototype._compositionStart = /**
  26635. * \@internal
  26636. * @return {?}
  26637. */
  26638. function () { this._composing = true; };
  26639. /** @internal */
  26640. /**
  26641. * \@internal
  26642. * @param {?} value
  26643. * @return {?}
  26644. */
  26645. DefaultValueAccessor.prototype._compositionEnd = /**
  26646. * \@internal
  26647. * @param {?} value
  26648. * @return {?}
  26649. */
  26650. function (value) {
  26651. this._composing = false;
  26652. this._compositionMode && this.onChange(value);
  26653. };
  26654. DefaultValueAccessor.decorators = [
  26655. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  26656. selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',
  26657. // TODO: vsavkin replace the above selector with the one below it once
  26658. // https://github.com/angular/angular/issues/3011 is implemented
  26659. // selector: '[ngModel],[formControl],[formControlName]',
  26660. host: {
  26661. '(input)': '$any(this)._handleInput($event.target.value)',
  26662. '(blur)': 'onTouched()',
  26663. '(compositionstart)': '$any(this)._compositionStart()',
  26664. '(compositionend)': '$any(this)._compositionEnd($event.target.value)'
  26665. },
  26666. providers: [DEFAULT_VALUE_ACCESSOR]
  26667. },] },
  26668. ];
  26669. /** @nocollapse */
  26670. DefaultValueAccessor.ctorParameters = function () { return [
  26671. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  26672. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  26673. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [COMPOSITION_BUFFER_MODE,] },] },
  26674. ]; };
  26675. return DefaultValueAccessor;
  26676. }());
  26677. /**
  26678. * @fileoverview added by tsickle
  26679. * @suppress {checkTypes} checked by tsc
  26680. */
  26681. /**
  26682. * @license
  26683. * Copyright Google Inc. All Rights Reserved.
  26684. *
  26685. * Use of this source code is governed by an MIT-style license that can be
  26686. * found in the LICENSE file at https://angular.io/license
  26687. */
  26688. /**
  26689. * @param {?} validator
  26690. * @return {?}
  26691. */
  26692. function normalizeValidator(validator) {
  26693. if ((/** @type {?} */ (validator)).validate) {
  26694. return function (c) { return (/** @type {?} */ (validator)).validate(c); };
  26695. }
  26696. else {
  26697. return /** @type {?} */ (validator);
  26698. }
  26699. }
  26700. /**
  26701. * @param {?} validator
  26702. * @return {?}
  26703. */
  26704. function normalizeAsyncValidator(validator) {
  26705. if ((/** @type {?} */ (validator)).validate) {
  26706. return function (c) { return (/** @type {?} */ (validator)).validate(c); };
  26707. }
  26708. else {
  26709. return /** @type {?} */ (validator);
  26710. }
  26711. }
  26712. /**
  26713. * @fileoverview added by tsickle
  26714. * @suppress {checkTypes} checked by tsc
  26715. */
  26716. /**
  26717. * @license
  26718. * Copyright Google Inc. All Rights Reserved.
  26719. *
  26720. * Use of this source code is governed by an MIT-style license that can be
  26721. * found in the LICENSE file at https://angular.io/license
  26722. */
  26723. var NUMBER_VALUE_ACCESSOR = {
  26724. provide: NG_VALUE_ACCESSOR,
  26725. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return NumberValueAccessor; }),
  26726. multi: true
  26727. };
  26728. /**
  26729. * The accessor for writing a number value and listening to changes that is used by the
  26730. * {\@link NgModel}, {\@link FormControlDirective}, and {\@link FormControlName} directives.
  26731. *
  26732. * ### Example
  26733. * ```
  26734. * <input type="number" [(ngModel)]="age">
  26735. * ```
  26736. */
  26737. var NumberValueAccessor = /** @class */ (function () {
  26738. function NumberValueAccessor(_renderer, _elementRef) {
  26739. this._renderer = _renderer;
  26740. this._elementRef = _elementRef;
  26741. this.onChange = function (_) { };
  26742. this.onTouched = function () { };
  26743. }
  26744. /**
  26745. * @param {?} value
  26746. * @return {?}
  26747. */
  26748. NumberValueAccessor.prototype.writeValue = /**
  26749. * @param {?} value
  26750. * @return {?}
  26751. */
  26752. function (value) {
  26753. // The value needs to be normalized for IE9, otherwise it is set to 'null' when null
  26754. var /** @type {?} */ normalizedValue = value == null ? '' : value;
  26755. this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);
  26756. };
  26757. /**
  26758. * @param {?} fn
  26759. * @return {?}
  26760. */
  26761. NumberValueAccessor.prototype.registerOnChange = /**
  26762. * @param {?} fn
  26763. * @return {?}
  26764. */
  26765. function (fn) {
  26766. this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };
  26767. };
  26768. /**
  26769. * @param {?} fn
  26770. * @return {?}
  26771. */
  26772. NumberValueAccessor.prototype.registerOnTouched = /**
  26773. * @param {?} fn
  26774. * @return {?}
  26775. */
  26776. function (fn) { this.onTouched = fn; };
  26777. /**
  26778. * @param {?} isDisabled
  26779. * @return {?}
  26780. */
  26781. NumberValueAccessor.prototype.setDisabledState = /**
  26782. * @param {?} isDisabled
  26783. * @return {?}
  26784. */
  26785. function (isDisabled) {
  26786. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  26787. };
  26788. NumberValueAccessor.decorators = [
  26789. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  26790. selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',
  26791. host: {
  26792. '(change)': 'onChange($event.target.value)',
  26793. '(input)': 'onChange($event.target.value)',
  26794. '(blur)': 'onTouched()'
  26795. },
  26796. providers: [NUMBER_VALUE_ACCESSOR]
  26797. },] },
  26798. ];
  26799. /** @nocollapse */
  26800. NumberValueAccessor.ctorParameters = function () { return [
  26801. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  26802. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  26803. ]; };
  26804. return NumberValueAccessor;
  26805. }());
  26806. /**
  26807. * @fileoverview added by tsickle
  26808. * @suppress {checkTypes} checked by tsc
  26809. */
  26810. /**
  26811. * @license
  26812. * Copyright Google Inc. All Rights Reserved.
  26813. *
  26814. * Use of this source code is governed by an MIT-style license that can be
  26815. * found in the LICENSE file at https://angular.io/license
  26816. */
  26817. /**
  26818. * @return {?}
  26819. */
  26820. function unimplemented() {
  26821. throw new Error('unimplemented');
  26822. }
  26823. /**
  26824. * A base class that all control directive extend.
  26825. * It binds a {\@link FormControl} object to a DOM element.
  26826. *
  26827. * Used internally by Angular forms.
  26828. *
  26829. * \@stable
  26830. * @abstract
  26831. */
  26832. var NgControl = /** @class */ (function (_super) {
  26833. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgControl, _super);
  26834. function NgControl() {
  26835. var _this = _super !== null && _super.apply(this, arguments) || this;
  26836. /**
  26837. * \@internal
  26838. */
  26839. _this._parent = null;
  26840. _this.name = null;
  26841. _this.valueAccessor = null;
  26842. /**
  26843. * \@internal
  26844. */
  26845. _this._rawValidators = [];
  26846. /**
  26847. * \@internal
  26848. */
  26849. _this._rawAsyncValidators = [];
  26850. return _this;
  26851. }
  26852. Object.defineProperty(NgControl.prototype, "validator", {
  26853. get: /**
  26854. * @return {?}
  26855. */
  26856. function () { return /** @type {?} */ (unimplemented()); },
  26857. enumerable: true,
  26858. configurable: true
  26859. });
  26860. Object.defineProperty(NgControl.prototype, "asyncValidator", {
  26861. get: /**
  26862. * @return {?}
  26863. */
  26864. function () { return /** @type {?} */ (unimplemented()); },
  26865. enumerable: true,
  26866. configurable: true
  26867. });
  26868. return NgControl;
  26869. }(AbstractControlDirective));
  26870. /**
  26871. * @fileoverview added by tsickle
  26872. * @suppress {checkTypes} checked by tsc
  26873. */
  26874. /**
  26875. * @license
  26876. * Copyright Google Inc. All Rights Reserved.
  26877. *
  26878. * Use of this source code is governed by an MIT-style license that can be
  26879. * found in the LICENSE file at https://angular.io/license
  26880. */
  26881. var RADIO_VALUE_ACCESSOR = {
  26882. provide: NG_VALUE_ACCESSOR,
  26883. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return RadioControlValueAccessor; }),
  26884. multi: true
  26885. };
  26886. /**
  26887. * Internal class used by Angular to uncheck radio buttons with the matching name.
  26888. */
  26889. var RadioControlRegistry = /** @class */ (function () {
  26890. function RadioControlRegistry() {
  26891. this._accessors = [];
  26892. }
  26893. /**
  26894. * @param {?} control
  26895. * @param {?} accessor
  26896. * @return {?}
  26897. */
  26898. RadioControlRegistry.prototype.add = /**
  26899. * @param {?} control
  26900. * @param {?} accessor
  26901. * @return {?}
  26902. */
  26903. function (control, accessor) {
  26904. this._accessors.push([control, accessor]);
  26905. };
  26906. /**
  26907. * @param {?} accessor
  26908. * @return {?}
  26909. */
  26910. RadioControlRegistry.prototype.remove = /**
  26911. * @param {?} accessor
  26912. * @return {?}
  26913. */
  26914. function (accessor) {
  26915. for (var /** @type {?} */ i = this._accessors.length - 1; i >= 0; --i) {
  26916. if (this._accessors[i][1] === accessor) {
  26917. this._accessors.splice(i, 1);
  26918. return;
  26919. }
  26920. }
  26921. };
  26922. /**
  26923. * @param {?} accessor
  26924. * @return {?}
  26925. */
  26926. RadioControlRegistry.prototype.select = /**
  26927. * @param {?} accessor
  26928. * @return {?}
  26929. */
  26930. function (accessor) {
  26931. var _this = this;
  26932. this._accessors.forEach(function (c) {
  26933. if (_this._isSameGroup(c, accessor) && c[1] !== accessor) {
  26934. c[1].fireUncheck(accessor.value);
  26935. }
  26936. });
  26937. };
  26938. /**
  26939. * @param {?} controlPair
  26940. * @param {?} accessor
  26941. * @return {?}
  26942. */
  26943. RadioControlRegistry.prototype._isSameGroup = /**
  26944. * @param {?} controlPair
  26945. * @param {?} accessor
  26946. * @return {?}
  26947. */
  26948. function (controlPair, accessor) {
  26949. if (!controlPair[0].control)
  26950. return false;
  26951. return controlPair[0]._parent === accessor._control._parent &&
  26952. controlPair[1].name === accessor.name;
  26953. };
  26954. RadioControlRegistry.decorators = [
  26955. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  26956. ];
  26957. /** @nocollapse */
  26958. RadioControlRegistry.ctorParameters = function () { return []; };
  26959. return RadioControlRegistry;
  26960. }());
  26961. /**
  26962. * \@whatItDoes Writes radio control values and listens to radio control changes.
  26963. *
  26964. * Used by {\@link NgModel}, {\@link FormControlDirective}, and {\@link FormControlName}
  26965. * to keep the view synced with the {\@link FormControl} model.
  26966. *
  26967. * \@howToUse
  26968. *
  26969. * If you have imported the {\@link FormsModule} or the {\@link ReactiveFormsModule}, this
  26970. * value accessor will be active on any radio control that has a form directive. You do
  26971. * **not** need to add a special selector to activate it.
  26972. *
  26973. * ### How to use radio buttons with form directives
  26974. *
  26975. * To use radio buttons in a template-driven form, you'll want to ensure that radio buttons
  26976. * in the same group have the same `name` attribute. Radio buttons with different `name`
  26977. * attributes do not affect each other.
  26978. *
  26979. * {\@example forms/ts/radioButtons/radio_button_example.ts region='TemplateDriven'}
  26980. *
  26981. * When using radio buttons in a reactive form, radio buttons in the same group should have the
  26982. * same `formControlName`. You can also add a `name` attribute, but it's optional.
  26983. *
  26984. * {\@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}
  26985. *
  26986. * * **npm package**: `\@angular/forms`
  26987. *
  26988. * \@stable
  26989. */
  26990. var RadioControlValueAccessor = /** @class */ (function () {
  26991. function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {
  26992. this._renderer = _renderer;
  26993. this._elementRef = _elementRef;
  26994. this._registry = _registry;
  26995. this._injector = _injector;
  26996. this.onChange = function () { };
  26997. this.onTouched = function () { };
  26998. }
  26999. /**
  27000. * @return {?}
  27001. */
  27002. RadioControlValueAccessor.prototype.ngOnInit = /**
  27003. * @return {?}
  27004. */
  27005. function () {
  27006. this._control = this._injector.get(NgControl);
  27007. this._checkName();
  27008. this._registry.add(this._control, this);
  27009. };
  27010. /**
  27011. * @return {?}
  27012. */
  27013. RadioControlValueAccessor.prototype.ngOnDestroy = /**
  27014. * @return {?}
  27015. */
  27016. function () { this._registry.remove(this); };
  27017. /**
  27018. * @param {?} value
  27019. * @return {?}
  27020. */
  27021. RadioControlValueAccessor.prototype.writeValue = /**
  27022. * @param {?} value
  27023. * @return {?}
  27024. */
  27025. function (value) {
  27026. this._state = value === this.value;
  27027. this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);
  27028. };
  27029. /**
  27030. * @param {?} fn
  27031. * @return {?}
  27032. */
  27033. RadioControlValueAccessor.prototype.registerOnChange = /**
  27034. * @param {?} fn
  27035. * @return {?}
  27036. */
  27037. function (fn) {
  27038. var _this = this;
  27039. this._fn = fn;
  27040. this.onChange = function () {
  27041. fn(_this.value);
  27042. _this._registry.select(_this);
  27043. };
  27044. };
  27045. /**
  27046. * @param {?} value
  27047. * @return {?}
  27048. */
  27049. RadioControlValueAccessor.prototype.fireUncheck = /**
  27050. * @param {?} value
  27051. * @return {?}
  27052. */
  27053. function (value) { this.writeValue(value); };
  27054. /**
  27055. * @param {?} fn
  27056. * @return {?}
  27057. */
  27058. RadioControlValueAccessor.prototype.registerOnTouched = /**
  27059. * @param {?} fn
  27060. * @return {?}
  27061. */
  27062. function (fn) { this.onTouched = fn; };
  27063. /**
  27064. * @param {?} isDisabled
  27065. * @return {?}
  27066. */
  27067. RadioControlValueAccessor.prototype.setDisabledState = /**
  27068. * @param {?} isDisabled
  27069. * @return {?}
  27070. */
  27071. function (isDisabled) {
  27072. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  27073. };
  27074. /**
  27075. * @return {?}
  27076. */
  27077. RadioControlValueAccessor.prototype._checkName = /**
  27078. * @return {?}
  27079. */
  27080. function () {
  27081. if (this.name && this.formControlName && this.name !== this.formControlName) {
  27082. this._throwNameError();
  27083. }
  27084. if (!this.name && this.formControlName)
  27085. this.name = this.formControlName;
  27086. };
  27087. /**
  27088. * @return {?}
  27089. */
  27090. RadioControlValueAccessor.prototype._throwNameError = /**
  27091. * @return {?}
  27092. */
  27093. function () {
  27094. throw new Error("\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n ");
  27095. };
  27096. RadioControlValueAccessor.decorators = [
  27097. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  27098. selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',
  27099. host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },
  27100. providers: [RADIO_VALUE_ACCESSOR]
  27101. },] },
  27102. ];
  27103. /** @nocollapse */
  27104. RadioControlValueAccessor.ctorParameters = function () { return [
  27105. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  27106. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  27107. { type: RadioControlRegistry, },
  27108. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["C" /* Injector */], },
  27109. ]; };
  27110. RadioControlValueAccessor.propDecorators = {
  27111. "name": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  27112. "formControlName": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  27113. "value": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  27114. };
  27115. return RadioControlValueAccessor;
  27116. }());
  27117. /**
  27118. * @fileoverview added by tsickle
  27119. * @suppress {checkTypes} checked by tsc
  27120. */
  27121. /**
  27122. * @license
  27123. * Copyright Google Inc. All Rights Reserved.
  27124. *
  27125. * Use of this source code is governed by an MIT-style license that can be
  27126. * found in the LICENSE file at https://angular.io/license
  27127. */
  27128. var RANGE_VALUE_ACCESSOR = {
  27129. provide: NG_VALUE_ACCESSOR,
  27130. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return RangeValueAccessor; }),
  27131. multi: true
  27132. };
  27133. /**
  27134. * The accessor for writing a range value and listening to changes that is used by the
  27135. * {\@link NgModel}, {\@link FormControlDirective}, and {\@link FormControlName} directives.
  27136. *
  27137. * ### Example
  27138. * ```
  27139. * <input type="range" [(ngModel)]="age" >
  27140. * ```
  27141. */
  27142. var RangeValueAccessor = /** @class */ (function () {
  27143. function RangeValueAccessor(_renderer, _elementRef) {
  27144. this._renderer = _renderer;
  27145. this._elementRef = _elementRef;
  27146. this.onChange = function (_) { };
  27147. this.onTouched = function () { };
  27148. }
  27149. /**
  27150. * @param {?} value
  27151. * @return {?}
  27152. */
  27153. RangeValueAccessor.prototype.writeValue = /**
  27154. * @param {?} value
  27155. * @return {?}
  27156. */
  27157. function (value) {
  27158. this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));
  27159. };
  27160. /**
  27161. * @param {?} fn
  27162. * @return {?}
  27163. */
  27164. RangeValueAccessor.prototype.registerOnChange = /**
  27165. * @param {?} fn
  27166. * @return {?}
  27167. */
  27168. function (fn) {
  27169. this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };
  27170. };
  27171. /**
  27172. * @param {?} fn
  27173. * @return {?}
  27174. */
  27175. RangeValueAccessor.prototype.registerOnTouched = /**
  27176. * @param {?} fn
  27177. * @return {?}
  27178. */
  27179. function (fn) { this.onTouched = fn; };
  27180. /**
  27181. * @param {?} isDisabled
  27182. * @return {?}
  27183. */
  27184. RangeValueAccessor.prototype.setDisabledState = /**
  27185. * @param {?} isDisabled
  27186. * @return {?}
  27187. */
  27188. function (isDisabled) {
  27189. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  27190. };
  27191. RangeValueAccessor.decorators = [
  27192. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  27193. selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',
  27194. host: {
  27195. '(change)': 'onChange($event.target.value)',
  27196. '(input)': 'onChange($event.target.value)',
  27197. '(blur)': 'onTouched()'
  27198. },
  27199. providers: [RANGE_VALUE_ACCESSOR]
  27200. },] },
  27201. ];
  27202. /** @nocollapse */
  27203. RangeValueAccessor.ctorParameters = function () { return [
  27204. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  27205. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  27206. ]; };
  27207. return RangeValueAccessor;
  27208. }());
  27209. /**
  27210. * @fileoverview added by tsickle
  27211. * @suppress {checkTypes} checked by tsc
  27212. */
  27213. /**
  27214. * @license
  27215. * Copyright Google Inc. All Rights Reserved.
  27216. *
  27217. * Use of this source code is governed by an MIT-style license that can be
  27218. * found in the LICENSE file at https://angular.io/license
  27219. */
  27220. var SELECT_VALUE_ACCESSOR = {
  27221. provide: NG_VALUE_ACCESSOR,
  27222. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return SelectControlValueAccessor; }),
  27223. multi: true
  27224. };
  27225. /**
  27226. * @param {?} id
  27227. * @param {?} value
  27228. * @return {?}
  27229. */
  27230. function _buildValueString(id, value) {
  27231. if (id == null)
  27232. return "" + value;
  27233. if (value && typeof value === 'object')
  27234. value = 'Object';
  27235. return (id + ": " + value).slice(0, 50);
  27236. }
  27237. /**
  27238. * @param {?} valueString
  27239. * @return {?}
  27240. */
  27241. function _extractId(valueString) {
  27242. return valueString.split(':')[0];
  27243. }
  27244. /**
  27245. * \@whatItDoes Writes values and listens to changes on a select element.
  27246. *
  27247. * Used by {\@link NgModel}, {\@link FormControlDirective}, and {\@link FormControlName}
  27248. * to keep the view synced with the {\@link FormControl} model.
  27249. *
  27250. * \@howToUse
  27251. *
  27252. * If you have imported the {\@link FormsModule} or the {\@link ReactiveFormsModule}, this
  27253. * value accessor will be active on any select control that has a form directive. You do
  27254. * **not** need to add a special selector to activate it.
  27255. *
  27256. * ### How to use select controls with form directives
  27257. *
  27258. * To use a select in a template-driven form, simply add an `ngModel` and a `name`
  27259. * attribute to the main `<select>` tag.
  27260. *
  27261. * If your option values are simple strings, you can bind to the normal `value` property
  27262. * on the option. If your option values happen to be objects (and you'd like to save the
  27263. * selection in your form as an object), use `ngValue` instead:
  27264. *
  27265. * {\@example forms/ts/selectControl/select_control_example.ts region='Component'}
  27266. *
  27267. * In reactive forms, you'll also want to add your form directive (`formControlName` or
  27268. * `formControl`) on the main `<select>` tag. Like in the former example, you have the
  27269. * choice of binding to the `value` or `ngValue` property on the select's options.
  27270. *
  27271. * {\@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}
  27272. *
  27273. * ### Caveat: Option selection
  27274. *
  27275. * Angular uses object identity to select option. It's possible for the identities of items
  27276. * to change while the data does not. This can happen, for example, if the items are produced
  27277. * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the
  27278. * second response will produce objects with different identities.
  27279. *
  27280. * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.
  27281. * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.
  27282. * If `compareWith` is given, Angular selects option by the return value of the function.
  27283. *
  27284. * #### Syntax
  27285. *
  27286. * ```
  27287. * <select [compareWith]="compareFn" [(ngModel)]="selectedCountries">
  27288. * <option *ngFor="let country of countries" [ngValue]="country">
  27289. * {{country.name}}
  27290. * </option>
  27291. * </select>
  27292. *
  27293. * compareFn(c1: Country, c2: Country): boolean {
  27294. * return c1 && c2 ? c1.id === c2.id : c1 === c2;
  27295. * }
  27296. * ```
  27297. *
  27298. * Note: We listen to the 'change' event because 'input' events aren't fired
  27299. * for selects in Firefox and IE:
  27300. * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350
  27301. * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/
  27302. *
  27303. * * **npm package**: `\@angular/forms`
  27304. *
  27305. * \@stable
  27306. */
  27307. var SelectControlValueAccessor = /** @class */ (function () {
  27308. function SelectControlValueAccessor(_renderer, _elementRef) {
  27309. this._renderer = _renderer;
  27310. this._elementRef = _elementRef;
  27311. /**
  27312. * \@internal
  27313. */
  27314. this._optionMap = new Map();
  27315. /**
  27316. * \@internal
  27317. */
  27318. this._idCounter = 0;
  27319. this.onChange = function (_) { };
  27320. this.onTouched = function () { };
  27321. this._compareWith = __WEBPACK_IMPORTED_MODULE_1__angular_core__["_36" /* ɵlooseIdentical */];
  27322. }
  27323. Object.defineProperty(SelectControlValueAccessor.prototype, "compareWith", {
  27324. set: /**
  27325. * @param {?} fn
  27326. * @return {?}
  27327. */
  27328. function (fn) {
  27329. if (typeof fn !== 'function') {
  27330. throw new Error("compareWith must be a function, but received " + JSON.stringify(fn));
  27331. }
  27332. this._compareWith = fn;
  27333. },
  27334. enumerable: true,
  27335. configurable: true
  27336. });
  27337. /**
  27338. * @param {?} value
  27339. * @return {?}
  27340. */
  27341. SelectControlValueAccessor.prototype.writeValue = /**
  27342. * @param {?} value
  27343. * @return {?}
  27344. */
  27345. function (value) {
  27346. this.value = value;
  27347. var /** @type {?} */ id = this._getOptionId(value);
  27348. if (id == null) {
  27349. this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);
  27350. }
  27351. var /** @type {?} */ valueString = _buildValueString(id, value);
  27352. this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);
  27353. };
  27354. /**
  27355. * @param {?} fn
  27356. * @return {?}
  27357. */
  27358. SelectControlValueAccessor.prototype.registerOnChange = /**
  27359. * @param {?} fn
  27360. * @return {?}
  27361. */
  27362. function (fn) {
  27363. var _this = this;
  27364. this.onChange = function (valueString) {
  27365. _this.value = _this._getOptionValue(valueString);
  27366. fn(_this.value);
  27367. };
  27368. };
  27369. /**
  27370. * @param {?} fn
  27371. * @return {?}
  27372. */
  27373. SelectControlValueAccessor.prototype.registerOnTouched = /**
  27374. * @param {?} fn
  27375. * @return {?}
  27376. */
  27377. function (fn) { this.onTouched = fn; };
  27378. /**
  27379. * @param {?} isDisabled
  27380. * @return {?}
  27381. */
  27382. SelectControlValueAccessor.prototype.setDisabledState = /**
  27383. * @param {?} isDisabled
  27384. * @return {?}
  27385. */
  27386. function (isDisabled) {
  27387. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  27388. };
  27389. /** @internal */
  27390. /**
  27391. * \@internal
  27392. * @return {?}
  27393. */
  27394. SelectControlValueAccessor.prototype._registerOption = /**
  27395. * \@internal
  27396. * @return {?}
  27397. */
  27398. function () { return (this._idCounter++).toString(); };
  27399. /** @internal */
  27400. /**
  27401. * \@internal
  27402. * @param {?} value
  27403. * @return {?}
  27404. */
  27405. SelectControlValueAccessor.prototype._getOptionId = /**
  27406. * \@internal
  27407. * @param {?} value
  27408. * @return {?}
  27409. */
  27410. function (value) {
  27411. for (var _i = 0, _a = Array.from(this._optionMap.keys()); _i < _a.length; _i++) {
  27412. var id = _a[_i];
  27413. if (this._compareWith(this._optionMap.get(id), value))
  27414. return id;
  27415. }
  27416. return null;
  27417. };
  27418. /** @internal */
  27419. /**
  27420. * \@internal
  27421. * @param {?} valueString
  27422. * @return {?}
  27423. */
  27424. SelectControlValueAccessor.prototype._getOptionValue = /**
  27425. * \@internal
  27426. * @param {?} valueString
  27427. * @return {?}
  27428. */
  27429. function (valueString) {
  27430. var /** @type {?} */ id = _extractId(valueString);
  27431. return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;
  27432. };
  27433. SelectControlValueAccessor.decorators = [
  27434. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  27435. selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',
  27436. host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },
  27437. providers: [SELECT_VALUE_ACCESSOR]
  27438. },] },
  27439. ];
  27440. /** @nocollapse */
  27441. SelectControlValueAccessor.ctorParameters = function () { return [
  27442. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  27443. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  27444. ]; };
  27445. SelectControlValueAccessor.propDecorators = {
  27446. "compareWith": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  27447. };
  27448. return SelectControlValueAccessor;
  27449. }());
  27450. /**
  27451. * \@whatItDoes Marks `<option>` as dynamic, so Angular can be notified when options change.
  27452. *
  27453. * \@howToUse
  27454. *
  27455. * See docs for {\@link SelectControlValueAccessor} for usage examples.
  27456. *
  27457. * \@stable
  27458. */
  27459. var NgSelectOption = /** @class */ (function () {
  27460. function NgSelectOption(_element, _renderer, _select) {
  27461. this._element = _element;
  27462. this._renderer = _renderer;
  27463. this._select = _select;
  27464. if (this._select)
  27465. this.id = this._select._registerOption();
  27466. }
  27467. Object.defineProperty(NgSelectOption.prototype, "ngValue", {
  27468. set: /**
  27469. * @param {?} value
  27470. * @return {?}
  27471. */
  27472. function (value) {
  27473. if (this._select == null)
  27474. return;
  27475. this._select._optionMap.set(this.id, value);
  27476. this._setElementValue(_buildValueString(this.id, value));
  27477. this._select.writeValue(this._select.value);
  27478. },
  27479. enumerable: true,
  27480. configurable: true
  27481. });
  27482. Object.defineProperty(NgSelectOption.prototype, "value", {
  27483. set: /**
  27484. * @param {?} value
  27485. * @return {?}
  27486. */
  27487. function (value) {
  27488. this._setElementValue(value);
  27489. if (this._select)
  27490. this._select.writeValue(this._select.value);
  27491. },
  27492. enumerable: true,
  27493. configurable: true
  27494. });
  27495. /** @internal */
  27496. /**
  27497. * \@internal
  27498. * @param {?} value
  27499. * @return {?}
  27500. */
  27501. NgSelectOption.prototype._setElementValue = /**
  27502. * \@internal
  27503. * @param {?} value
  27504. * @return {?}
  27505. */
  27506. function (value) {
  27507. this._renderer.setProperty(this._element.nativeElement, 'value', value);
  27508. };
  27509. /**
  27510. * @return {?}
  27511. */
  27512. NgSelectOption.prototype.ngOnDestroy = /**
  27513. * @return {?}
  27514. */
  27515. function () {
  27516. if (this._select) {
  27517. this._select._optionMap.delete(this.id);
  27518. this._select.writeValue(this._select.value);
  27519. }
  27520. };
  27521. NgSelectOption.decorators = [
  27522. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: 'option' },] },
  27523. ];
  27524. /** @nocollapse */
  27525. NgSelectOption.ctorParameters = function () { return [
  27526. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  27527. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  27528. { type: SelectControlValueAccessor, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] },] },
  27529. ]; };
  27530. NgSelectOption.propDecorators = {
  27531. "ngValue": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngValue',] },],
  27532. "value": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['value',] },],
  27533. };
  27534. return NgSelectOption;
  27535. }());
  27536. /**
  27537. * @fileoverview added by tsickle
  27538. * @suppress {checkTypes} checked by tsc
  27539. */
  27540. /**
  27541. * @license
  27542. * Copyright Google Inc. All Rights Reserved.
  27543. *
  27544. * Use of this source code is governed by an MIT-style license that can be
  27545. * found in the LICENSE file at https://angular.io/license
  27546. */
  27547. var SELECT_MULTIPLE_VALUE_ACCESSOR = {
  27548. provide: NG_VALUE_ACCESSOR,
  27549. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return SelectMultipleControlValueAccessor; }),
  27550. multi: true
  27551. };
  27552. /**
  27553. * @param {?} id
  27554. * @param {?} value
  27555. * @return {?}
  27556. */
  27557. function _buildValueString$1(id, value) {
  27558. if (id == null)
  27559. return "" + value;
  27560. if (typeof value === 'string')
  27561. value = "'" + value + "'";
  27562. if (value && typeof value === 'object')
  27563. value = 'Object';
  27564. return (id + ": " + value).slice(0, 50);
  27565. }
  27566. /**
  27567. * @param {?} valueString
  27568. * @return {?}
  27569. */
  27570. function _extractId$1(valueString) {
  27571. return valueString.split(':')[0];
  27572. }
  27573. /**
  27574. * The accessor for writing a value and listening to changes on a select element.
  27575. *
  27576. * ### Caveat: Options selection
  27577. *
  27578. * Angular uses object identity to select options. It's possible for the identities of items
  27579. * to change while the data does not. This can happen, for example, if the items are produced
  27580. * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the
  27581. * second response will produce objects with different identities.
  27582. *
  27583. * To customize the default option comparison algorithm, `<select multiple>` supports `compareWith`
  27584. * input. `compareWith` takes a **function** which has two arguments: `option1` and `option2`.
  27585. * If `compareWith` is given, Angular selects options by the return value of the function.
  27586. *
  27587. * #### Syntax
  27588. *
  27589. * ```
  27590. * <select multiple [compareWith]="compareFn" [(ngModel)]="selectedCountries">
  27591. * <option *ngFor="let country of countries" [ngValue]="country">
  27592. * {{country.name}}
  27593. * </option>
  27594. * </select>
  27595. *
  27596. * compareFn(c1: Country, c2: Country): boolean {
  27597. * return c1 && c2 ? c1.id === c2.id : c1 === c2;
  27598. * }
  27599. * ```
  27600. *
  27601. * \@stable
  27602. */
  27603. var SelectMultipleControlValueAccessor = /** @class */ (function () {
  27604. function SelectMultipleControlValueAccessor(_renderer, _elementRef) {
  27605. this._renderer = _renderer;
  27606. this._elementRef = _elementRef;
  27607. /**
  27608. * \@internal
  27609. */
  27610. this._optionMap = new Map();
  27611. /**
  27612. * \@internal
  27613. */
  27614. this._idCounter = 0;
  27615. this.onChange = function (_) { };
  27616. this.onTouched = function () { };
  27617. this._compareWith = __WEBPACK_IMPORTED_MODULE_1__angular_core__["_36" /* ɵlooseIdentical */];
  27618. }
  27619. Object.defineProperty(SelectMultipleControlValueAccessor.prototype, "compareWith", {
  27620. set: /**
  27621. * @param {?} fn
  27622. * @return {?}
  27623. */
  27624. function (fn) {
  27625. if (typeof fn !== 'function') {
  27626. throw new Error("compareWith must be a function, but received " + JSON.stringify(fn));
  27627. }
  27628. this._compareWith = fn;
  27629. },
  27630. enumerable: true,
  27631. configurable: true
  27632. });
  27633. /**
  27634. * @param {?} value
  27635. * @return {?}
  27636. */
  27637. SelectMultipleControlValueAccessor.prototype.writeValue = /**
  27638. * @param {?} value
  27639. * @return {?}
  27640. */
  27641. function (value) {
  27642. var _this = this;
  27643. this.value = value;
  27644. var /** @type {?} */ optionSelectedStateSetter;
  27645. if (Array.isArray(value)) {
  27646. // convert values to ids
  27647. var /** @type {?} */ ids_1 = value.map(function (v) { return _this._getOptionId(v); });
  27648. optionSelectedStateSetter = function (opt, o) { opt._setSelected(ids_1.indexOf(o.toString()) > -1); };
  27649. }
  27650. else {
  27651. optionSelectedStateSetter = function (opt, o) { opt._setSelected(false); };
  27652. }
  27653. this._optionMap.forEach(optionSelectedStateSetter);
  27654. };
  27655. /**
  27656. * @param {?} fn
  27657. * @return {?}
  27658. */
  27659. SelectMultipleControlValueAccessor.prototype.registerOnChange = /**
  27660. * @param {?} fn
  27661. * @return {?}
  27662. */
  27663. function (fn) {
  27664. var _this = this;
  27665. this.onChange = function (_) {
  27666. var /** @type {?} */ selected = [];
  27667. if (_.hasOwnProperty('selectedOptions')) {
  27668. var /** @type {?} */ options = _.selectedOptions;
  27669. for (var /** @type {?} */ i = 0; i < options.length; i++) {
  27670. var /** @type {?} */ opt = options.item(i);
  27671. var /** @type {?} */ val = _this._getOptionValue(opt.value);
  27672. selected.push(val);
  27673. }
  27674. }
  27675. else {
  27676. var /** @type {?} */ options = /** @type {?} */ (_.options);
  27677. for (var /** @type {?} */ i = 0; i < options.length; i++) {
  27678. var /** @type {?} */ opt = options.item(i);
  27679. if (opt.selected) {
  27680. var /** @type {?} */ val = _this._getOptionValue(opt.value);
  27681. selected.push(val);
  27682. }
  27683. }
  27684. }
  27685. _this.value = selected;
  27686. fn(selected);
  27687. };
  27688. };
  27689. /**
  27690. * @param {?} fn
  27691. * @return {?}
  27692. */
  27693. SelectMultipleControlValueAccessor.prototype.registerOnTouched = /**
  27694. * @param {?} fn
  27695. * @return {?}
  27696. */
  27697. function (fn) { this.onTouched = fn; };
  27698. /**
  27699. * @param {?} isDisabled
  27700. * @return {?}
  27701. */
  27702. SelectMultipleControlValueAccessor.prototype.setDisabledState = /**
  27703. * @param {?} isDisabled
  27704. * @return {?}
  27705. */
  27706. function (isDisabled) {
  27707. this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  27708. };
  27709. /** @internal */
  27710. /**
  27711. * \@internal
  27712. * @param {?} value
  27713. * @return {?}
  27714. */
  27715. SelectMultipleControlValueAccessor.prototype._registerOption = /**
  27716. * \@internal
  27717. * @param {?} value
  27718. * @return {?}
  27719. */
  27720. function (value) {
  27721. var /** @type {?} */ id = (this._idCounter++).toString();
  27722. this._optionMap.set(id, value);
  27723. return id;
  27724. };
  27725. /** @internal */
  27726. /**
  27727. * \@internal
  27728. * @param {?} value
  27729. * @return {?}
  27730. */
  27731. SelectMultipleControlValueAccessor.prototype._getOptionId = /**
  27732. * \@internal
  27733. * @param {?} value
  27734. * @return {?}
  27735. */
  27736. function (value) {
  27737. for (var _i = 0, _a = Array.from(this._optionMap.keys()); _i < _a.length; _i++) {
  27738. var id = _a[_i];
  27739. if (this._compareWith(/** @type {?} */ ((this._optionMap.get(id)))._value, value))
  27740. return id;
  27741. }
  27742. return null;
  27743. };
  27744. /** @internal */
  27745. /**
  27746. * \@internal
  27747. * @param {?} valueString
  27748. * @return {?}
  27749. */
  27750. SelectMultipleControlValueAccessor.prototype._getOptionValue = /**
  27751. * \@internal
  27752. * @param {?} valueString
  27753. * @return {?}
  27754. */
  27755. function (valueString) {
  27756. var /** @type {?} */ id = _extractId$1(valueString);
  27757. return this._optionMap.has(id) ? /** @type {?} */ ((this._optionMap.get(id)))._value : valueString;
  27758. };
  27759. SelectMultipleControlValueAccessor.decorators = [
  27760. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  27761. selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',
  27762. host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },
  27763. providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]
  27764. },] },
  27765. ];
  27766. /** @nocollapse */
  27767. SelectMultipleControlValueAccessor.ctorParameters = function () { return [
  27768. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  27769. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  27770. ]; };
  27771. SelectMultipleControlValueAccessor.propDecorators = {
  27772. "compareWith": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  27773. };
  27774. return SelectMultipleControlValueAccessor;
  27775. }());
  27776. /**
  27777. * Marks `<option>` as dynamic, so Angular can be notified when options change.
  27778. *
  27779. * ### Example
  27780. *
  27781. * ```
  27782. * <select multiple name="city" ngModel>
  27783. * <option *ngFor="let c of cities" [value]="c"></option>
  27784. * </select>
  27785. * ```
  27786. */
  27787. var NgSelectMultipleOption = /** @class */ (function () {
  27788. function NgSelectMultipleOption(_element, _renderer, _select) {
  27789. this._element = _element;
  27790. this._renderer = _renderer;
  27791. this._select = _select;
  27792. if (this._select) {
  27793. this.id = this._select._registerOption(this);
  27794. }
  27795. }
  27796. Object.defineProperty(NgSelectMultipleOption.prototype, "ngValue", {
  27797. set: /**
  27798. * @param {?} value
  27799. * @return {?}
  27800. */
  27801. function (value) {
  27802. if (this._select == null)
  27803. return;
  27804. this._value = value;
  27805. this._setElementValue(_buildValueString$1(this.id, value));
  27806. this._select.writeValue(this._select.value);
  27807. },
  27808. enumerable: true,
  27809. configurable: true
  27810. });
  27811. Object.defineProperty(NgSelectMultipleOption.prototype, "value", {
  27812. set: /**
  27813. * @param {?} value
  27814. * @return {?}
  27815. */
  27816. function (value) {
  27817. if (this._select) {
  27818. this._value = value;
  27819. this._setElementValue(_buildValueString$1(this.id, value));
  27820. this._select.writeValue(this._select.value);
  27821. }
  27822. else {
  27823. this._setElementValue(value);
  27824. }
  27825. },
  27826. enumerable: true,
  27827. configurable: true
  27828. });
  27829. /** @internal */
  27830. /**
  27831. * \@internal
  27832. * @param {?} value
  27833. * @return {?}
  27834. */
  27835. NgSelectMultipleOption.prototype._setElementValue = /**
  27836. * \@internal
  27837. * @param {?} value
  27838. * @return {?}
  27839. */
  27840. function (value) {
  27841. this._renderer.setProperty(this._element.nativeElement, 'value', value);
  27842. };
  27843. /** @internal */
  27844. /**
  27845. * \@internal
  27846. * @param {?} selected
  27847. * @return {?}
  27848. */
  27849. NgSelectMultipleOption.prototype._setSelected = /**
  27850. * \@internal
  27851. * @param {?} selected
  27852. * @return {?}
  27853. */
  27854. function (selected) {
  27855. this._renderer.setProperty(this._element.nativeElement, 'selected', selected);
  27856. };
  27857. /**
  27858. * @return {?}
  27859. */
  27860. NgSelectMultipleOption.prototype.ngOnDestroy = /**
  27861. * @return {?}
  27862. */
  27863. function () {
  27864. if (this._select) {
  27865. this._select._optionMap.delete(this.id);
  27866. this._select.writeValue(this._select.value);
  27867. }
  27868. };
  27869. NgSelectMultipleOption.decorators = [
  27870. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: 'option' },] },
  27871. ];
  27872. /** @nocollapse */
  27873. NgSelectMultipleOption.ctorParameters = function () { return [
  27874. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */], },
  27875. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["W" /* Renderer2 */], },
  27876. { type: SelectMultipleControlValueAccessor, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] },] },
  27877. ]; };
  27878. NgSelectMultipleOption.propDecorators = {
  27879. "ngValue": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngValue',] },],
  27880. "value": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['value',] },],
  27881. };
  27882. return NgSelectMultipleOption;
  27883. }());
  27884. /**
  27885. * @fileoverview added by tsickle
  27886. * @suppress {checkTypes} checked by tsc
  27887. */
  27888. /**
  27889. * @license
  27890. * Copyright Google Inc. All Rights Reserved.
  27891. *
  27892. * Use of this source code is governed by an MIT-style license that can be
  27893. * found in the LICENSE file at https://angular.io/license
  27894. */
  27895. /**
  27896. * @param {?} name
  27897. * @param {?} parent
  27898. * @return {?}
  27899. */
  27900. function controlPath(name, parent) {
  27901. return /** @type {?} */ ((parent.path)).concat([name]);
  27902. }
  27903. /**
  27904. * @param {?} control
  27905. * @param {?} dir
  27906. * @return {?}
  27907. */
  27908. function setUpControl(control, dir) {
  27909. if (!control)
  27910. _throwError(dir, 'Cannot find control with');
  27911. if (!dir.valueAccessor)
  27912. _throwError(dir, 'No value accessor for form control with');
  27913. control.validator = Validators.compose([/** @type {?} */ ((control.validator)), dir.validator]);
  27914. control.asyncValidator = Validators.composeAsync([/** @type {?} */ ((control.asyncValidator)), dir.asyncValidator]); /** @type {?} */
  27915. ((dir.valueAccessor)).writeValue(control.value);
  27916. setUpViewChangePipeline(control, dir);
  27917. setUpModelChangePipeline(control, dir);
  27918. setUpBlurPipeline(control, dir);
  27919. if (/** @type {?} */ ((dir.valueAccessor)).setDisabledState) {
  27920. control.registerOnDisabledChange(function (isDisabled) { /** @type {?} */ ((/** @type {?} */ ((dir.valueAccessor)).setDisabledState))(isDisabled); });
  27921. }
  27922. // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4
  27923. dir._rawValidators.forEach(function (validator) {
  27924. if ((/** @type {?} */ (validator)).registerOnValidatorChange)
  27925. /** @type {?} */ (((/** @type {?} */ (validator)).registerOnValidatorChange))(function () { return control.updateValueAndValidity(); });
  27926. });
  27927. dir._rawAsyncValidators.forEach(function (validator) {
  27928. if ((/** @type {?} */ (validator)).registerOnValidatorChange)
  27929. /** @type {?} */ (((/** @type {?} */ (validator)).registerOnValidatorChange))(function () { return control.updateValueAndValidity(); });
  27930. });
  27931. }
  27932. /**
  27933. * @param {?} control
  27934. * @param {?} dir
  27935. * @return {?}
  27936. */
  27937. function cleanUpControl(control, dir) {
  27938. /** @type {?} */ ((dir.valueAccessor)).registerOnChange(function () { return _noControlError(dir); }); /** @type {?} */
  27939. ((dir.valueAccessor)).registerOnTouched(function () { return _noControlError(dir); });
  27940. dir._rawValidators.forEach(function (validator) {
  27941. if (validator.registerOnValidatorChange) {
  27942. validator.registerOnValidatorChange(null);
  27943. }
  27944. });
  27945. dir._rawAsyncValidators.forEach(function (validator) {
  27946. if (validator.registerOnValidatorChange) {
  27947. validator.registerOnValidatorChange(null);
  27948. }
  27949. });
  27950. if (control)
  27951. control._clearChangeFns();
  27952. }
  27953. /**
  27954. * @param {?} control
  27955. * @param {?} dir
  27956. * @return {?}
  27957. */
  27958. function setUpViewChangePipeline(control, dir) {
  27959. /** @type {?} */ ((dir.valueAccessor)).registerOnChange(function (newValue) {
  27960. control._pendingValue = newValue;
  27961. control._pendingChange = true;
  27962. control._pendingDirty = true;
  27963. if (control.updateOn === 'change')
  27964. updateControl(control, dir);
  27965. });
  27966. }
  27967. /**
  27968. * @param {?} control
  27969. * @param {?} dir
  27970. * @return {?}
  27971. */
  27972. function setUpBlurPipeline(control, dir) {
  27973. /** @type {?} */ ((dir.valueAccessor)).registerOnTouched(function () {
  27974. control._pendingTouched = true;
  27975. if (control.updateOn === 'blur' && control._pendingChange)
  27976. updateControl(control, dir);
  27977. if (control.updateOn !== 'submit')
  27978. control.markAsTouched();
  27979. });
  27980. }
  27981. /**
  27982. * @param {?} control
  27983. * @param {?} dir
  27984. * @return {?}
  27985. */
  27986. function updateControl(control, dir) {
  27987. dir.viewToModelUpdate(control._pendingValue);
  27988. if (control._pendingDirty)
  27989. control.markAsDirty();
  27990. control.setValue(control._pendingValue, { emitModelToViewChange: false });
  27991. control._pendingChange = false;
  27992. }
  27993. /**
  27994. * @param {?} control
  27995. * @param {?} dir
  27996. * @return {?}
  27997. */
  27998. function setUpModelChangePipeline(control, dir) {
  27999. control.registerOnChange(function (newValue, emitModelEvent) {
  28000. /** @type {?} */ ((
  28001. // control -> view
  28002. dir.valueAccessor)).writeValue(newValue);
  28003. // control -> ngModel
  28004. if (emitModelEvent)
  28005. dir.viewToModelUpdate(newValue);
  28006. });
  28007. }
  28008. /**
  28009. * @param {?} control
  28010. * @param {?} dir
  28011. * @return {?}
  28012. */
  28013. function setUpFormContainer(control, dir) {
  28014. if (control == null)
  28015. _throwError(dir, 'Cannot find control with');
  28016. control.validator = Validators.compose([control.validator, dir.validator]);
  28017. control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);
  28018. }
  28019. /**
  28020. * @param {?} dir
  28021. * @return {?}
  28022. */
  28023. function _noControlError(dir) {
  28024. return _throwError(dir, 'There is no FormControl instance attached to form control element with');
  28025. }
  28026. /**
  28027. * @param {?} dir
  28028. * @param {?} message
  28029. * @return {?}
  28030. */
  28031. function _throwError(dir, message) {
  28032. var /** @type {?} */ messageEnd;
  28033. if (/** @type {?} */ ((dir.path)).length > 1) {
  28034. messageEnd = "path: '" + (/** @type {?} */ ((dir.path))).join(' -> ') + "'";
  28035. }
  28036. else if (/** @type {?} */ ((dir.path))[0]) {
  28037. messageEnd = "name: '" + dir.path + "'";
  28038. }
  28039. else {
  28040. messageEnd = 'unspecified name attribute';
  28041. }
  28042. throw new Error(message + " " + messageEnd);
  28043. }
  28044. /**
  28045. * @param {?} validators
  28046. * @return {?}
  28047. */
  28048. function composeValidators(validators) {
  28049. return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;
  28050. }
  28051. /**
  28052. * @param {?} validators
  28053. * @return {?}
  28054. */
  28055. function composeAsyncValidators(validators) {
  28056. return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :
  28057. null;
  28058. }
  28059. /**
  28060. * @param {?} changes
  28061. * @param {?} viewModel
  28062. * @return {?}
  28063. */
  28064. function isPropertyUpdated(changes, viewModel) {
  28065. if (!changes.hasOwnProperty('model'))
  28066. return false;
  28067. var /** @type {?} */ change = changes['model'];
  28068. if (change.isFirstChange())
  28069. return true;
  28070. return !Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_36" /* ɵlooseIdentical */])(viewModel, change.currentValue);
  28071. }
  28072. var BUILTIN_ACCESSORS = [
  28073. CheckboxControlValueAccessor,
  28074. RangeValueAccessor,
  28075. NumberValueAccessor,
  28076. SelectControlValueAccessor,
  28077. SelectMultipleControlValueAccessor,
  28078. RadioControlValueAccessor,
  28079. ];
  28080. /**
  28081. * @param {?} valueAccessor
  28082. * @return {?}
  28083. */
  28084. function isBuiltInAccessor(valueAccessor) {
  28085. return BUILTIN_ACCESSORS.some(function (a) { return valueAccessor.constructor === a; });
  28086. }
  28087. /**
  28088. * @param {?} form
  28089. * @param {?} directives
  28090. * @return {?}
  28091. */
  28092. function syncPendingControls(form, directives) {
  28093. form._syncPendingControls();
  28094. directives.forEach(function (dir) {
  28095. var /** @type {?} */ control = /** @type {?} */ (dir.control);
  28096. if (control.updateOn === 'submit' && control._pendingChange) {
  28097. dir.viewToModelUpdate(control._pendingValue);
  28098. control._pendingChange = false;
  28099. }
  28100. });
  28101. }
  28102. /**
  28103. * @param {?} dir
  28104. * @param {?} valueAccessors
  28105. * @return {?}
  28106. */
  28107. function selectValueAccessor(dir, valueAccessors) {
  28108. if (!valueAccessors)
  28109. return null;
  28110. if (!Array.isArray(valueAccessors))
  28111. _throwError(dir, 'Value accessor was not provided as an array for form control with');
  28112. var /** @type {?} */ defaultAccessor = undefined;
  28113. var /** @type {?} */ builtinAccessor = undefined;
  28114. var /** @type {?} */ customAccessor = undefined;
  28115. valueAccessors.forEach(function (v) {
  28116. if (v.constructor === DefaultValueAccessor) {
  28117. defaultAccessor = v;
  28118. }
  28119. else if (isBuiltInAccessor(v)) {
  28120. if (builtinAccessor)
  28121. _throwError(dir, 'More than one built-in value accessor matches form control with');
  28122. builtinAccessor = v;
  28123. }
  28124. else {
  28125. if (customAccessor)
  28126. _throwError(dir, 'More than one custom value accessor matches form control with');
  28127. customAccessor = v;
  28128. }
  28129. });
  28130. if (customAccessor)
  28131. return customAccessor;
  28132. if (builtinAccessor)
  28133. return builtinAccessor;
  28134. if (defaultAccessor)
  28135. return defaultAccessor;
  28136. _throwError(dir, 'No valid value accessor for form control with');
  28137. return null;
  28138. }
  28139. /**
  28140. * @template T
  28141. * @param {?} list
  28142. * @param {?} el
  28143. * @return {?}
  28144. */
  28145. function removeDir(list, el) {
  28146. var /** @type {?} */ index = list.indexOf(el);
  28147. if (index > -1)
  28148. list.splice(index, 1);
  28149. }
  28150. /**
  28151. * @fileoverview added by tsickle
  28152. * @suppress {checkTypes} checked by tsc
  28153. */
  28154. /**
  28155. * @license
  28156. * Copyright Google Inc. All Rights Reserved.
  28157. *
  28158. * Use of this source code is governed by an MIT-style license that can be
  28159. * found in the LICENSE file at https://angular.io/license
  28160. */
  28161. /**
  28162. * This is a base class for code shared between {\@link NgModelGroup} and {\@link FormGroupName}.
  28163. *
  28164. * \@stable
  28165. */
  28166. var AbstractFormGroupDirective = /** @class */ (function (_super) {
  28167. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(AbstractFormGroupDirective, _super);
  28168. function AbstractFormGroupDirective() {
  28169. return _super !== null && _super.apply(this, arguments) || this;
  28170. }
  28171. /**
  28172. * @return {?}
  28173. */
  28174. AbstractFormGroupDirective.prototype.ngOnInit = /**
  28175. * @return {?}
  28176. */
  28177. function () {
  28178. this._checkParentType(); /** @type {?} */
  28179. ((this.formDirective)).addFormGroup(this);
  28180. };
  28181. /**
  28182. * @return {?}
  28183. */
  28184. AbstractFormGroupDirective.prototype.ngOnDestroy = /**
  28185. * @return {?}
  28186. */
  28187. function () {
  28188. if (this.formDirective) {
  28189. this.formDirective.removeFormGroup(this);
  28190. }
  28191. };
  28192. Object.defineProperty(AbstractFormGroupDirective.prototype, "control", {
  28193. /**
  28194. * Get the {@link FormGroup} backing this binding.
  28195. */
  28196. get: /**
  28197. * Get the {\@link FormGroup} backing this binding.
  28198. * @return {?}
  28199. */
  28200. function () { return /** @type {?} */ ((this.formDirective)).getFormGroup(this); },
  28201. enumerable: true,
  28202. configurable: true
  28203. });
  28204. Object.defineProperty(AbstractFormGroupDirective.prototype, "path", {
  28205. /**
  28206. * Get the path to this control group.
  28207. */
  28208. get: /**
  28209. * Get the path to this control group.
  28210. * @return {?}
  28211. */
  28212. function () { return controlPath(this.name, this._parent); },
  28213. enumerable: true,
  28214. configurable: true
  28215. });
  28216. Object.defineProperty(AbstractFormGroupDirective.prototype, "formDirective", {
  28217. /**
  28218. * Get the {@link Form} to which this group belongs.
  28219. */
  28220. get: /**
  28221. * Get the {\@link Form} to which this group belongs.
  28222. * @return {?}
  28223. */
  28224. function () { return this._parent ? this._parent.formDirective : null; },
  28225. enumerable: true,
  28226. configurable: true
  28227. });
  28228. Object.defineProperty(AbstractFormGroupDirective.prototype, "validator", {
  28229. get: /**
  28230. * @return {?}
  28231. */
  28232. function () { return composeValidators(this._validators); },
  28233. enumerable: true,
  28234. configurable: true
  28235. });
  28236. Object.defineProperty(AbstractFormGroupDirective.prototype, "asyncValidator", {
  28237. get: /**
  28238. * @return {?}
  28239. */
  28240. function () {
  28241. return composeAsyncValidators(this._asyncValidators);
  28242. },
  28243. enumerable: true,
  28244. configurable: true
  28245. });
  28246. /** @internal */
  28247. /**
  28248. * \@internal
  28249. * @return {?}
  28250. */
  28251. AbstractFormGroupDirective.prototype._checkParentType = /**
  28252. * \@internal
  28253. * @return {?}
  28254. */
  28255. function () { };
  28256. return AbstractFormGroupDirective;
  28257. }(ControlContainer));
  28258. /**
  28259. * @fileoverview added by tsickle
  28260. * @suppress {checkTypes} checked by tsc
  28261. */
  28262. /**
  28263. * @license
  28264. * Copyright Google Inc. All Rights Reserved.
  28265. *
  28266. * Use of this source code is governed by an MIT-style license that can be
  28267. * found in the LICENSE file at https://angular.io/license
  28268. */
  28269. var AbstractControlStatus = /** @class */ (function () {
  28270. function AbstractControlStatus(cd) {
  28271. this._cd = cd;
  28272. }
  28273. Object.defineProperty(AbstractControlStatus.prototype, "ngClassUntouched", {
  28274. get: /**
  28275. * @return {?}
  28276. */
  28277. function () { return this._cd.control ? this._cd.control.untouched : false; },
  28278. enumerable: true,
  28279. configurable: true
  28280. });
  28281. Object.defineProperty(AbstractControlStatus.prototype, "ngClassTouched", {
  28282. get: /**
  28283. * @return {?}
  28284. */
  28285. function () { return this._cd.control ? this._cd.control.touched : false; },
  28286. enumerable: true,
  28287. configurable: true
  28288. });
  28289. Object.defineProperty(AbstractControlStatus.prototype, "ngClassPristine", {
  28290. get: /**
  28291. * @return {?}
  28292. */
  28293. function () { return this._cd.control ? this._cd.control.pristine : false; },
  28294. enumerable: true,
  28295. configurable: true
  28296. });
  28297. Object.defineProperty(AbstractControlStatus.prototype, "ngClassDirty", {
  28298. get: /**
  28299. * @return {?}
  28300. */
  28301. function () { return this._cd.control ? this._cd.control.dirty : false; },
  28302. enumerable: true,
  28303. configurable: true
  28304. });
  28305. Object.defineProperty(AbstractControlStatus.prototype, "ngClassValid", {
  28306. get: /**
  28307. * @return {?}
  28308. */
  28309. function () { return this._cd.control ? this._cd.control.valid : false; },
  28310. enumerable: true,
  28311. configurable: true
  28312. });
  28313. Object.defineProperty(AbstractControlStatus.prototype, "ngClassInvalid", {
  28314. get: /**
  28315. * @return {?}
  28316. */
  28317. function () { return this._cd.control ? this._cd.control.invalid : false; },
  28318. enumerable: true,
  28319. configurable: true
  28320. });
  28321. Object.defineProperty(AbstractControlStatus.prototype, "ngClassPending", {
  28322. get: /**
  28323. * @return {?}
  28324. */
  28325. function () { return this._cd.control ? this._cd.control.pending : false; },
  28326. enumerable: true,
  28327. configurable: true
  28328. });
  28329. return AbstractControlStatus;
  28330. }());
  28331. var ngControlStatusHost = {
  28332. '[class.ng-untouched]': 'ngClassUntouched',
  28333. '[class.ng-touched]': 'ngClassTouched',
  28334. '[class.ng-pristine]': 'ngClassPristine',
  28335. '[class.ng-dirty]': 'ngClassDirty',
  28336. '[class.ng-valid]': 'ngClassValid',
  28337. '[class.ng-invalid]': 'ngClassInvalid',
  28338. '[class.ng-pending]': 'ngClassPending',
  28339. };
  28340. /**
  28341. * Directive automatically applied to Angular form controls that sets CSS classes
  28342. * based on control status. The following classes are applied as the properties
  28343. * become true:
  28344. *
  28345. * * ng-valid
  28346. * * ng-invalid
  28347. * * ng-pending
  28348. * * ng-pristine
  28349. * * ng-dirty
  28350. * * ng-untouched
  28351. * * ng-touched
  28352. *
  28353. * \@stable
  28354. */
  28355. var NgControlStatus = /** @class */ (function (_super) {
  28356. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgControlStatus, _super);
  28357. function NgControlStatus(cd) {
  28358. return _super.call(this, cd) || this;
  28359. }
  28360. NgControlStatus.decorators = [
  28361. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost },] },
  28362. ];
  28363. /** @nocollapse */
  28364. NgControlStatus.ctorParameters = function () { return [
  28365. { type: NgControl, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] },] },
  28366. ]; };
  28367. return NgControlStatus;
  28368. }(AbstractControlStatus));
  28369. /**
  28370. * Directive automatically applied to Angular form groups that sets CSS classes
  28371. * based on control status (valid/invalid/dirty/etc).
  28372. *
  28373. * \@stable
  28374. */
  28375. var NgControlStatusGroup = /** @class */ (function (_super) {
  28376. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgControlStatusGroup, _super);
  28377. function NgControlStatusGroup(cd) {
  28378. return _super.call(this, cd) || this;
  28379. }
  28380. NgControlStatusGroup.decorators = [
  28381. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  28382. selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',
  28383. host: ngControlStatusHost
  28384. },] },
  28385. ];
  28386. /** @nocollapse */
  28387. NgControlStatusGroup.ctorParameters = function () { return [
  28388. { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] },] },
  28389. ]; };
  28390. return NgControlStatusGroup;
  28391. }(AbstractControlStatus));
  28392. /**
  28393. * @fileoverview added by tsickle
  28394. * @suppress {checkTypes} checked by tsc
  28395. */
  28396. /**
  28397. * @license
  28398. * Copyright Google Inc. All Rights Reserved.
  28399. *
  28400. * Use of this source code is governed by an MIT-style license that can be
  28401. * found in the LICENSE file at https://angular.io/license
  28402. */
  28403. /**
  28404. * Indicates that a FormControl is valid, i.e. that no errors exist in the input value.
  28405. */
  28406. var VALID = 'VALID';
  28407. /**
  28408. * Indicates that a FormControl is invalid, i.e. that an error exists in the input value.
  28409. */
  28410. var INVALID = 'INVALID';
  28411. /**
  28412. * Indicates that a FormControl is pending, i.e. that async validation is occurring and
  28413. * errors are not yet available for the input value.
  28414. */
  28415. var PENDING = 'PENDING';
  28416. /**
  28417. * Indicates that a FormControl is disabled, i.e. that the control is exempt from ancestor
  28418. * calculations of validity or value.
  28419. */
  28420. var DISABLED = 'DISABLED';
  28421. /**
  28422. * @param {?} control
  28423. * @param {?} path
  28424. * @param {?} delimiter
  28425. * @return {?}
  28426. */
  28427. function _find(control, path, delimiter) {
  28428. if (path == null)
  28429. return null;
  28430. if (!(path instanceof Array)) {
  28431. path = (/** @type {?} */ (path)).split(delimiter);
  28432. }
  28433. if (path instanceof Array && (path.length === 0))
  28434. return null;
  28435. return (/** @type {?} */ (path)).reduce(function (v, name) {
  28436. if (v instanceof FormGroup) {
  28437. return v.controls[name] || null;
  28438. }
  28439. if (v instanceof FormArray) {
  28440. return v.at(/** @type {?} */ (name)) || null;
  28441. }
  28442. return null;
  28443. }, control);
  28444. }
  28445. /**
  28446. * @param {?=} validatorOrOpts
  28447. * @return {?}
  28448. */
  28449. function coerceToValidator(validatorOrOpts) {
  28450. var /** @type {?} */ validator = /** @type {?} */ ((isOptionsObj(validatorOrOpts) ? (/** @type {?} */ (validatorOrOpts)).validators :
  28451. validatorOrOpts));
  28452. return Array.isArray(validator) ? composeValidators(validator) : validator || null;
  28453. }
  28454. /**
  28455. * @param {?=} asyncValidator
  28456. * @param {?=} validatorOrOpts
  28457. * @return {?}
  28458. */
  28459. function coerceToAsyncValidator(asyncValidator, validatorOrOpts) {
  28460. var /** @type {?} */ origAsyncValidator = /** @type {?} */ ((isOptionsObj(validatorOrOpts) ? (/** @type {?} */ (validatorOrOpts)).asyncValidators :
  28461. asyncValidator));
  28462. return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :
  28463. origAsyncValidator || null;
  28464. }
  28465. /**
  28466. * @record
  28467. */
  28468. /**
  28469. * @param {?=} validatorOrOpts
  28470. * @return {?}
  28471. */
  28472. function isOptionsObj(validatorOrOpts) {
  28473. return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&
  28474. typeof validatorOrOpts === 'object';
  28475. }
  28476. /**
  28477. * \@whatItDoes This is the base class for {\@link FormControl}, {\@link FormGroup}, and
  28478. * {\@link FormArray}.
  28479. *
  28480. * It provides some of the shared behavior that all controls and groups of controls have, like
  28481. * running validators, calculating status, and resetting state. It also defines the properties
  28482. * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be
  28483. * instantiated directly.
  28484. *
  28485. * \@stable
  28486. * @abstract
  28487. */
  28488. var AbstractControl = /** @class */ (function () {
  28489. function AbstractControl(validator, asyncValidator) {
  28490. this.validator = validator;
  28491. this.asyncValidator = asyncValidator;
  28492. /**
  28493. * \@internal
  28494. */
  28495. this._onCollectionChange = function () { };
  28496. /**
  28497. * A control is `pristine` if the user has not yet changed
  28498. * the value in the UI.
  28499. *
  28500. * Note that programmatic changes to a control's value will
  28501. * *not* mark it dirty.
  28502. */
  28503. this.pristine = true;
  28504. /**
  28505. * A control is marked `touched` once the user has triggered
  28506. * a `blur` event on it.
  28507. */
  28508. this.touched = false;
  28509. /**
  28510. * \@internal
  28511. */
  28512. this._onDisabledChange = [];
  28513. }
  28514. Object.defineProperty(AbstractControl.prototype, "parent", {
  28515. /**
  28516. * The parent control.
  28517. */
  28518. get: /**
  28519. * The parent control.
  28520. * @return {?}
  28521. */
  28522. function () { return this._parent; },
  28523. enumerable: true,
  28524. configurable: true
  28525. });
  28526. Object.defineProperty(AbstractControl.prototype, "valid", {
  28527. /**
  28528. * A control is `valid` when its `status === VALID`.
  28529. *
  28530. * In order to have this status, the control must have passed all its
  28531. * validation checks.
  28532. */
  28533. get: /**
  28534. * A control is `valid` when its `status === VALID`.
  28535. *
  28536. * In order to have this status, the control must have passed all its
  28537. * validation checks.
  28538. * @return {?}
  28539. */
  28540. function () { return this.status === VALID; },
  28541. enumerable: true,
  28542. configurable: true
  28543. });
  28544. Object.defineProperty(AbstractControl.prototype, "invalid", {
  28545. /**
  28546. * A control is `invalid` when its `status === INVALID`.
  28547. *
  28548. * In order to have this status, the control must have failed
  28549. * at least one of its validation checks.
  28550. */
  28551. get: /**
  28552. * A control is `invalid` when its `status === INVALID`.
  28553. *
  28554. * In order to have this status, the control must have failed
  28555. * at least one of its validation checks.
  28556. * @return {?}
  28557. */
  28558. function () { return this.status === INVALID; },
  28559. enumerable: true,
  28560. configurable: true
  28561. });
  28562. Object.defineProperty(AbstractControl.prototype, "pending", {
  28563. /**
  28564. * A control is `pending` when its `status === PENDING`.
  28565. *
  28566. * In order to have this status, the control must be in the
  28567. * middle of conducting a validation check.
  28568. */
  28569. get: /**
  28570. * A control is `pending` when its `status === PENDING`.
  28571. *
  28572. * In order to have this status, the control must be in the
  28573. * middle of conducting a validation check.
  28574. * @return {?}
  28575. */
  28576. function () { return this.status == PENDING; },
  28577. enumerable: true,
  28578. configurable: true
  28579. });
  28580. Object.defineProperty(AbstractControl.prototype, "disabled", {
  28581. /**
  28582. * A control is `disabled` when its `status === DISABLED`.
  28583. *
  28584. * Disabled controls are exempt from validation checks and
  28585. * are not included in the aggregate value of their ancestor
  28586. * controls.
  28587. */
  28588. get: /**
  28589. * A control is `disabled` when its `status === DISABLED`.
  28590. *
  28591. * Disabled controls are exempt from validation checks and
  28592. * are not included in the aggregate value of their ancestor
  28593. * controls.
  28594. * @return {?}
  28595. */
  28596. function () { return this.status === DISABLED; },
  28597. enumerable: true,
  28598. configurable: true
  28599. });
  28600. Object.defineProperty(AbstractControl.prototype, "enabled", {
  28601. /**
  28602. * A control is `enabled` as long as its `status !== DISABLED`.
  28603. *
  28604. * In other words, it has a status of `VALID`, `INVALID`, or
  28605. * `PENDING`.
  28606. */
  28607. get: /**
  28608. * A control is `enabled` as long as its `status !== DISABLED`.
  28609. *
  28610. * In other words, it has a status of `VALID`, `INVALID`, or
  28611. * `PENDING`.
  28612. * @return {?}
  28613. */
  28614. function () { return this.status !== DISABLED; },
  28615. enumerable: true,
  28616. configurable: true
  28617. });
  28618. Object.defineProperty(AbstractControl.prototype, "dirty", {
  28619. /**
  28620. * A control is `dirty` if the user has changed the value
  28621. * in the UI.
  28622. *
  28623. * Note that programmatic changes to a control's value will
  28624. * *not* mark it dirty.
  28625. */
  28626. get: /**
  28627. * A control is `dirty` if the user has changed the value
  28628. * in the UI.
  28629. *
  28630. * Note that programmatic changes to a control's value will
  28631. * *not* mark it dirty.
  28632. * @return {?}
  28633. */
  28634. function () { return !this.pristine; },
  28635. enumerable: true,
  28636. configurable: true
  28637. });
  28638. Object.defineProperty(AbstractControl.prototype, "untouched", {
  28639. /**
  28640. * A control is `untouched` if the user has not yet triggered
  28641. * a `blur` event on it.
  28642. */
  28643. get: /**
  28644. * A control is `untouched` if the user has not yet triggered
  28645. * a `blur` event on it.
  28646. * @return {?}
  28647. */
  28648. function () { return !this.touched; },
  28649. enumerable: true,
  28650. configurable: true
  28651. });
  28652. Object.defineProperty(AbstractControl.prototype, "updateOn", {
  28653. /**
  28654. * Returns the update strategy of the `AbstractControl` (i.e.
  28655. * the event on which the control will update itself).
  28656. * Possible values: `'change'` (default) | `'blur'` | `'submit'`
  28657. */
  28658. get: /**
  28659. * Returns the update strategy of the `AbstractControl` (i.e.
  28660. * the event on which the control will update itself).
  28661. * Possible values: `'change'` (default) | `'blur'` | `'submit'`
  28662. * @return {?}
  28663. */
  28664. function () {
  28665. return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');
  28666. },
  28667. enumerable: true,
  28668. configurable: true
  28669. });
  28670. /**
  28671. * Sets the synchronous validators that are active on this control. Calling
  28672. * this will overwrite any existing sync validators.
  28673. */
  28674. /**
  28675. * Sets the synchronous validators that are active on this control. Calling
  28676. * this will overwrite any existing sync validators.
  28677. * @param {?} newValidator
  28678. * @return {?}
  28679. */
  28680. AbstractControl.prototype.setValidators = /**
  28681. * Sets the synchronous validators that are active on this control. Calling
  28682. * this will overwrite any existing sync validators.
  28683. * @param {?} newValidator
  28684. * @return {?}
  28685. */
  28686. function (newValidator) {
  28687. this.validator = coerceToValidator(newValidator);
  28688. };
  28689. /**
  28690. * Sets the async validators that are active on this control. Calling this
  28691. * will overwrite any existing async validators.
  28692. */
  28693. /**
  28694. * Sets the async validators that are active on this control. Calling this
  28695. * will overwrite any existing async validators.
  28696. * @param {?} newValidator
  28697. * @return {?}
  28698. */
  28699. AbstractControl.prototype.setAsyncValidators = /**
  28700. * Sets the async validators that are active on this control. Calling this
  28701. * will overwrite any existing async validators.
  28702. * @param {?} newValidator
  28703. * @return {?}
  28704. */
  28705. function (newValidator) {
  28706. this.asyncValidator = coerceToAsyncValidator(newValidator);
  28707. };
  28708. /**
  28709. * Empties out the sync validator list.
  28710. */
  28711. /**
  28712. * Empties out the sync validator list.
  28713. * @return {?}
  28714. */
  28715. AbstractControl.prototype.clearValidators = /**
  28716. * Empties out the sync validator list.
  28717. * @return {?}
  28718. */
  28719. function () { this.validator = null; };
  28720. /**
  28721. * Empties out the async validator list.
  28722. */
  28723. /**
  28724. * Empties out the async validator list.
  28725. * @return {?}
  28726. */
  28727. AbstractControl.prototype.clearAsyncValidators = /**
  28728. * Empties out the async validator list.
  28729. * @return {?}
  28730. */
  28731. function () { this.asyncValidator = null; };
  28732. /**
  28733. * Marks the control as `touched`.
  28734. *
  28735. * This will also mark all direct ancestors as `touched` to maintain
  28736. * the model.
  28737. */
  28738. /**
  28739. * Marks the control as `touched`.
  28740. *
  28741. * This will also mark all direct ancestors as `touched` to maintain
  28742. * the model.
  28743. * @param {?=} opts
  28744. * @return {?}
  28745. */
  28746. AbstractControl.prototype.markAsTouched = /**
  28747. * Marks the control as `touched`.
  28748. *
  28749. * This will also mark all direct ancestors as `touched` to maintain
  28750. * the model.
  28751. * @param {?=} opts
  28752. * @return {?}
  28753. */
  28754. function (opts) {
  28755. if (opts === void 0) { opts = {}; }
  28756. (/** @type {?} */ (this)).touched = true;
  28757. if (this._parent && !opts.onlySelf) {
  28758. this._parent.markAsTouched(opts);
  28759. }
  28760. };
  28761. /**
  28762. * Marks the control as `untouched`.
  28763. *
  28764. * If the control has any children, it will also mark all children as `untouched`
  28765. * to maintain the model, and re-calculate the `touched` status of all parent
  28766. * controls.
  28767. */
  28768. /**
  28769. * Marks the control as `untouched`.
  28770. *
  28771. * If the control has any children, it will also mark all children as `untouched`
  28772. * to maintain the model, and re-calculate the `touched` status of all parent
  28773. * controls.
  28774. * @param {?=} opts
  28775. * @return {?}
  28776. */
  28777. AbstractControl.prototype.markAsUntouched = /**
  28778. * Marks the control as `untouched`.
  28779. *
  28780. * If the control has any children, it will also mark all children as `untouched`
  28781. * to maintain the model, and re-calculate the `touched` status of all parent
  28782. * controls.
  28783. * @param {?=} opts
  28784. * @return {?}
  28785. */
  28786. function (opts) {
  28787. if (opts === void 0) { opts = {}; }
  28788. (/** @type {?} */ (this)).touched = false;
  28789. this._pendingTouched = false;
  28790. this._forEachChild(function (control) { control.markAsUntouched({ onlySelf: true }); });
  28791. if (this._parent && !opts.onlySelf) {
  28792. this._parent._updateTouched(opts);
  28793. }
  28794. };
  28795. /**
  28796. * Marks the control as `dirty`.
  28797. *
  28798. * This will also mark all direct ancestors as `dirty` to maintain
  28799. * the model.
  28800. */
  28801. /**
  28802. * Marks the control as `dirty`.
  28803. *
  28804. * This will also mark all direct ancestors as `dirty` to maintain
  28805. * the model.
  28806. * @param {?=} opts
  28807. * @return {?}
  28808. */
  28809. AbstractControl.prototype.markAsDirty = /**
  28810. * Marks the control as `dirty`.
  28811. *
  28812. * This will also mark all direct ancestors as `dirty` to maintain
  28813. * the model.
  28814. * @param {?=} opts
  28815. * @return {?}
  28816. */
  28817. function (opts) {
  28818. if (opts === void 0) { opts = {}; }
  28819. (/** @type {?} */ (this)).pristine = false;
  28820. if (this._parent && !opts.onlySelf) {
  28821. this._parent.markAsDirty(opts);
  28822. }
  28823. };
  28824. /**
  28825. * Marks the control as `pristine`.
  28826. *
  28827. * If the control has any children, it will also mark all children as `pristine`
  28828. * to maintain the model, and re-calculate the `pristine` status of all parent
  28829. * controls.
  28830. */
  28831. /**
  28832. * Marks the control as `pristine`.
  28833. *
  28834. * If the control has any children, it will also mark all children as `pristine`
  28835. * to maintain the model, and re-calculate the `pristine` status of all parent
  28836. * controls.
  28837. * @param {?=} opts
  28838. * @return {?}
  28839. */
  28840. AbstractControl.prototype.markAsPristine = /**
  28841. * Marks the control as `pristine`.
  28842. *
  28843. * If the control has any children, it will also mark all children as `pristine`
  28844. * to maintain the model, and re-calculate the `pristine` status of all parent
  28845. * controls.
  28846. * @param {?=} opts
  28847. * @return {?}
  28848. */
  28849. function (opts) {
  28850. if (opts === void 0) { opts = {}; }
  28851. (/** @type {?} */ (this)).pristine = true;
  28852. this._pendingDirty = false;
  28853. this._forEachChild(function (control) { control.markAsPristine({ onlySelf: true }); });
  28854. if (this._parent && !opts.onlySelf) {
  28855. this._parent._updatePristine(opts);
  28856. }
  28857. };
  28858. /**
  28859. * Marks the control as `pending`.
  28860. */
  28861. /**
  28862. * Marks the control as `pending`.
  28863. * @param {?=} opts
  28864. * @return {?}
  28865. */
  28866. AbstractControl.prototype.markAsPending = /**
  28867. * Marks the control as `pending`.
  28868. * @param {?=} opts
  28869. * @return {?}
  28870. */
  28871. function (opts) {
  28872. if (opts === void 0) { opts = {}; }
  28873. (/** @type {?} */ (this)).status = PENDING;
  28874. if (this._parent && !opts.onlySelf) {
  28875. this._parent.markAsPending(opts);
  28876. }
  28877. };
  28878. /**
  28879. * Disables the control. This means the control will be exempt from validation checks and
  28880. * excluded from the aggregate value of any parent. Its status is `DISABLED`.
  28881. *
  28882. * If the control has children, all children will be disabled to maintain the model.
  28883. */
  28884. /**
  28885. * Disables the control. This means the control will be exempt from validation checks and
  28886. * excluded from the aggregate value of any parent. Its status is `DISABLED`.
  28887. *
  28888. * If the control has children, all children will be disabled to maintain the model.
  28889. * @param {?=} opts
  28890. * @return {?}
  28891. */
  28892. AbstractControl.prototype.disable = /**
  28893. * Disables the control. This means the control will be exempt from validation checks and
  28894. * excluded from the aggregate value of any parent. Its status is `DISABLED`.
  28895. *
  28896. * If the control has children, all children will be disabled to maintain the model.
  28897. * @param {?=} opts
  28898. * @return {?}
  28899. */
  28900. function (opts) {
  28901. if (opts === void 0) { opts = {}; }
  28902. (/** @type {?} */ (this)).status = DISABLED;
  28903. (/** @type {?} */ (this)).errors = null;
  28904. this._forEachChild(function (control) { control.disable(Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, opts, { onlySelf: true })); });
  28905. this._updateValue();
  28906. if (opts.emitEvent !== false) {
  28907. (/** @type {?} */ (this.valueChanges)).emit(this.value);
  28908. (/** @type {?} */ (this.statusChanges)).emit(this.status);
  28909. }
  28910. this._updateAncestors(opts);
  28911. this._onDisabledChange.forEach(function (changeFn) { return changeFn(true); });
  28912. };
  28913. /**
  28914. * Enables the control. This means the control will be included in validation checks and
  28915. * the aggregate value of its parent. Its status is re-calculated based on its value and
  28916. * its validators.
  28917. *
  28918. * If the control has children, all children will be enabled.
  28919. */
  28920. /**
  28921. * Enables the control. This means the control will be included in validation checks and
  28922. * the aggregate value of its parent. Its status is re-calculated based on its value and
  28923. * its validators.
  28924. *
  28925. * If the control has children, all children will be enabled.
  28926. * @param {?=} opts
  28927. * @return {?}
  28928. */
  28929. AbstractControl.prototype.enable = /**
  28930. * Enables the control. This means the control will be included in validation checks and
  28931. * the aggregate value of its parent. Its status is re-calculated based on its value and
  28932. * its validators.
  28933. *
  28934. * If the control has children, all children will be enabled.
  28935. * @param {?=} opts
  28936. * @return {?}
  28937. */
  28938. function (opts) {
  28939. if (opts === void 0) { opts = {}; }
  28940. (/** @type {?} */ (this)).status = VALID;
  28941. this._forEachChild(function (control) { control.enable(Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, opts, { onlySelf: true })); });
  28942. this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
  28943. this._updateAncestors(opts);
  28944. this._onDisabledChange.forEach(function (changeFn) { return changeFn(false); });
  28945. };
  28946. /**
  28947. * @param {?} opts
  28948. * @return {?}
  28949. */
  28950. AbstractControl.prototype._updateAncestors = /**
  28951. * @param {?} opts
  28952. * @return {?}
  28953. */
  28954. function (opts) {
  28955. if (this._parent && !opts.onlySelf) {
  28956. this._parent.updateValueAndValidity(opts);
  28957. this._parent._updatePristine();
  28958. this._parent._updateTouched();
  28959. }
  28960. };
  28961. /**
  28962. * @param {?} parent
  28963. * @return {?}
  28964. */
  28965. AbstractControl.prototype.setParent = /**
  28966. * @param {?} parent
  28967. * @return {?}
  28968. */
  28969. function (parent) { this._parent = parent; };
  28970. /**
  28971. * Re-calculates the value and validation status of the control.
  28972. *
  28973. * By default, it will also update the value and validity of its ancestors.
  28974. */
  28975. /**
  28976. * Re-calculates the value and validation status of the control.
  28977. *
  28978. * By default, it will also update the value and validity of its ancestors.
  28979. * @param {?=} opts
  28980. * @return {?}
  28981. */
  28982. AbstractControl.prototype.updateValueAndValidity = /**
  28983. * Re-calculates the value and validation status of the control.
  28984. *
  28985. * By default, it will also update the value and validity of its ancestors.
  28986. * @param {?=} opts
  28987. * @return {?}
  28988. */
  28989. function (opts) {
  28990. if (opts === void 0) { opts = {}; }
  28991. this._setInitialStatus();
  28992. this._updateValue();
  28993. if (this.enabled) {
  28994. this._cancelExistingSubscription();
  28995. (/** @type {?} */ (this)).errors = this._runValidator();
  28996. (/** @type {?} */ (this)).status = this._calculateStatus();
  28997. if (this.status === VALID || this.status === PENDING) {
  28998. this._runAsyncValidator(opts.emitEvent);
  28999. }
  29000. }
  29001. if (opts.emitEvent !== false) {
  29002. (/** @type {?} */ (this.valueChanges)).emit(this.value);
  29003. (/** @type {?} */ (this.statusChanges)).emit(this.status);
  29004. }
  29005. if (this._parent && !opts.onlySelf) {
  29006. this._parent.updateValueAndValidity(opts);
  29007. }
  29008. };
  29009. /** @internal */
  29010. /**
  29011. * \@internal
  29012. * @param {?=} opts
  29013. * @return {?}
  29014. */
  29015. AbstractControl.prototype._updateTreeValidity = /**
  29016. * \@internal
  29017. * @param {?=} opts
  29018. * @return {?}
  29019. */
  29020. function (opts) {
  29021. if (opts === void 0) { opts = { emitEvent: true }; }
  29022. this._forEachChild(function (ctrl) { return ctrl._updateTreeValidity(opts); });
  29023. this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });
  29024. };
  29025. /**
  29026. * @return {?}
  29027. */
  29028. AbstractControl.prototype._setInitialStatus = /**
  29029. * @return {?}
  29030. */
  29031. function () {
  29032. (/** @type {?} */ (this)).status = this._allControlsDisabled() ? DISABLED : VALID;
  29033. };
  29034. /**
  29035. * @return {?}
  29036. */
  29037. AbstractControl.prototype._runValidator = /**
  29038. * @return {?}
  29039. */
  29040. function () {
  29041. return this.validator ? this.validator(this) : null;
  29042. };
  29043. /**
  29044. * @param {?=} emitEvent
  29045. * @return {?}
  29046. */
  29047. AbstractControl.prototype._runAsyncValidator = /**
  29048. * @param {?=} emitEvent
  29049. * @return {?}
  29050. */
  29051. function (emitEvent) {
  29052. var _this = this;
  29053. if (this.asyncValidator) {
  29054. (/** @type {?} */ (this)).status = PENDING;
  29055. var /** @type {?} */ obs = toObservable(this.asyncValidator(this));
  29056. this._asyncValidationSubscription =
  29057. obs.subscribe(function (errors) { return _this.setErrors(errors, { emitEvent: emitEvent }); });
  29058. }
  29059. };
  29060. /**
  29061. * @return {?}
  29062. */
  29063. AbstractControl.prototype._cancelExistingSubscription = /**
  29064. * @return {?}
  29065. */
  29066. function () {
  29067. if (this._asyncValidationSubscription) {
  29068. this._asyncValidationSubscription.unsubscribe();
  29069. }
  29070. };
  29071. /**
  29072. * Sets errors on a form control.
  29073. *
  29074. * This is used when validations are run manually by the user, rather than automatically.
  29075. *
  29076. * Calling `setErrors` will also update the validity of the parent control.
  29077. *
  29078. * ### Example
  29079. *
  29080. * ```
  29081. * const login = new FormControl("someLogin");
  29082. * login.setErrors({
  29083. * "notUnique": true
  29084. * });
  29085. *
  29086. * expect(login.valid).toEqual(false);
  29087. * expect(login.errors).toEqual({"notUnique": true});
  29088. *
  29089. * login.setValue("someOtherLogin");
  29090. *
  29091. * expect(login.valid).toEqual(true);
  29092. * ```
  29093. */
  29094. /**
  29095. * Sets errors on a form control.
  29096. *
  29097. * This is used when validations are run manually by the user, rather than automatically.
  29098. *
  29099. * Calling `setErrors` will also update the validity of the parent control.
  29100. *
  29101. * ### Example
  29102. *
  29103. * ```
  29104. * const login = new FormControl("someLogin");
  29105. * login.setErrors({
  29106. * "notUnique": true
  29107. * });
  29108. *
  29109. * expect(login.valid).toEqual(false);
  29110. * expect(login.errors).toEqual({"notUnique": true});
  29111. *
  29112. * login.setValue("someOtherLogin");
  29113. *
  29114. * expect(login.valid).toEqual(true);
  29115. * ```
  29116. * @param {?} errors
  29117. * @param {?=} opts
  29118. * @return {?}
  29119. */
  29120. AbstractControl.prototype.setErrors = /**
  29121. * Sets errors on a form control.
  29122. *
  29123. * This is used when validations are run manually by the user, rather than automatically.
  29124. *
  29125. * Calling `setErrors` will also update the validity of the parent control.
  29126. *
  29127. * ### Example
  29128. *
  29129. * ```
  29130. * const login = new FormControl("someLogin");
  29131. * login.setErrors({
  29132. * "notUnique": true
  29133. * });
  29134. *
  29135. * expect(login.valid).toEqual(false);
  29136. * expect(login.errors).toEqual({"notUnique": true});
  29137. *
  29138. * login.setValue("someOtherLogin");
  29139. *
  29140. * expect(login.valid).toEqual(true);
  29141. * ```
  29142. * @param {?} errors
  29143. * @param {?=} opts
  29144. * @return {?}
  29145. */
  29146. function (errors, opts) {
  29147. if (opts === void 0) { opts = {}; }
  29148. (/** @type {?} */ (this)).errors = errors;
  29149. this._updateControlsErrors(opts.emitEvent !== false);
  29150. };
  29151. /**
  29152. * Retrieves a child control given the control's name or path.
  29153. *
  29154. * Paths can be passed in as an array or a string delimited by a dot.
  29155. *
  29156. * To get a control nested within a `person` sub-group:
  29157. *
  29158. * * `this.form.get('person.name');`
  29159. *
  29160. * -OR-
  29161. *
  29162. * * `this.form.get(['person', 'name']);`
  29163. */
  29164. /**
  29165. * Retrieves a child control given the control's name or path.
  29166. *
  29167. * Paths can be passed in as an array or a string delimited by a dot.
  29168. *
  29169. * To get a control nested within a `person` sub-group:
  29170. *
  29171. * * `this.form.get('person.name');`
  29172. *
  29173. * -OR-
  29174. *
  29175. * * `this.form.get(['person', 'name']);`
  29176. * @param {?} path
  29177. * @return {?}
  29178. */
  29179. AbstractControl.prototype.get = /**
  29180. * Retrieves a child control given the control's name or path.
  29181. *
  29182. * Paths can be passed in as an array or a string delimited by a dot.
  29183. *
  29184. * To get a control nested within a `person` sub-group:
  29185. *
  29186. * * `this.form.get('person.name');`
  29187. *
  29188. * -OR-
  29189. *
  29190. * * `this.form.get(['person', 'name']);`
  29191. * @param {?} path
  29192. * @return {?}
  29193. */
  29194. function (path) { return _find(this, path, '.'); };
  29195. /**
  29196. * Returns error data if the control with the given path has the error specified. Otherwise
  29197. * returns null or undefined.
  29198. *
  29199. * If no path is given, it checks for the error on the present control.
  29200. */
  29201. /**
  29202. * Returns error data if the control with the given path has the error specified. Otherwise
  29203. * returns null or undefined.
  29204. *
  29205. * If no path is given, it checks for the error on the present control.
  29206. * @param {?} errorCode
  29207. * @param {?=} path
  29208. * @return {?}
  29209. */
  29210. AbstractControl.prototype.getError = /**
  29211. * Returns error data if the control with the given path has the error specified. Otherwise
  29212. * returns null or undefined.
  29213. *
  29214. * If no path is given, it checks for the error on the present control.
  29215. * @param {?} errorCode
  29216. * @param {?=} path
  29217. * @return {?}
  29218. */
  29219. function (errorCode, path) {
  29220. var /** @type {?} */ control = path ? this.get(path) : this;
  29221. return control && control.errors ? control.errors[errorCode] : null;
  29222. };
  29223. /**
  29224. * Returns true if the control with the given path has the error specified. Otherwise
  29225. * returns false.
  29226. *
  29227. * If no path is given, it checks for the error on the present control.
  29228. */
  29229. /**
  29230. * Returns true if the control with the given path has the error specified. Otherwise
  29231. * returns false.
  29232. *
  29233. * If no path is given, it checks for the error on the present control.
  29234. * @param {?} errorCode
  29235. * @param {?=} path
  29236. * @return {?}
  29237. */
  29238. AbstractControl.prototype.hasError = /**
  29239. * Returns true if the control with the given path has the error specified. Otherwise
  29240. * returns false.
  29241. *
  29242. * If no path is given, it checks for the error on the present control.
  29243. * @param {?} errorCode
  29244. * @param {?=} path
  29245. * @return {?}
  29246. */
  29247. function (errorCode, path) { return !!this.getError(errorCode, path); };
  29248. Object.defineProperty(AbstractControl.prototype, "root", {
  29249. /**
  29250. * Retrieves the top-level ancestor of this control.
  29251. */
  29252. get: /**
  29253. * Retrieves the top-level ancestor of this control.
  29254. * @return {?}
  29255. */
  29256. function () {
  29257. var /** @type {?} */ x = this;
  29258. while (x._parent) {
  29259. x = x._parent;
  29260. }
  29261. return x;
  29262. },
  29263. enumerable: true,
  29264. configurable: true
  29265. });
  29266. /** @internal */
  29267. /**
  29268. * \@internal
  29269. * @param {?} emitEvent
  29270. * @return {?}
  29271. */
  29272. AbstractControl.prototype._updateControlsErrors = /**
  29273. * \@internal
  29274. * @param {?} emitEvent
  29275. * @return {?}
  29276. */
  29277. function (emitEvent) {
  29278. (/** @type {?} */ (this)).status = this._calculateStatus();
  29279. if (emitEvent) {
  29280. (/** @type {?} */ (this.statusChanges)).emit(this.status);
  29281. }
  29282. if (this._parent) {
  29283. this._parent._updateControlsErrors(emitEvent);
  29284. }
  29285. };
  29286. /** @internal */
  29287. /**
  29288. * \@internal
  29289. * @return {?}
  29290. */
  29291. AbstractControl.prototype._initObservables = /**
  29292. * \@internal
  29293. * @return {?}
  29294. */
  29295. function () {
  29296. (/** @type {?} */ (this)).valueChanges = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  29297. (/** @type {?} */ (this)).statusChanges = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  29298. };
  29299. /**
  29300. * @return {?}
  29301. */
  29302. AbstractControl.prototype._calculateStatus = /**
  29303. * @return {?}
  29304. */
  29305. function () {
  29306. if (this._allControlsDisabled())
  29307. return DISABLED;
  29308. if (this.errors)
  29309. return INVALID;
  29310. if (this._anyControlsHaveStatus(PENDING))
  29311. return PENDING;
  29312. if (this._anyControlsHaveStatus(INVALID))
  29313. return INVALID;
  29314. return VALID;
  29315. };
  29316. /** @internal */
  29317. /**
  29318. * \@internal
  29319. * @param {?} status
  29320. * @return {?}
  29321. */
  29322. AbstractControl.prototype._anyControlsHaveStatus = /**
  29323. * \@internal
  29324. * @param {?} status
  29325. * @return {?}
  29326. */
  29327. function (status) {
  29328. return this._anyControls(function (control) { return control.status === status; });
  29329. };
  29330. /** @internal */
  29331. /**
  29332. * \@internal
  29333. * @return {?}
  29334. */
  29335. AbstractControl.prototype._anyControlsDirty = /**
  29336. * \@internal
  29337. * @return {?}
  29338. */
  29339. function () {
  29340. return this._anyControls(function (control) { return control.dirty; });
  29341. };
  29342. /** @internal */
  29343. /**
  29344. * \@internal
  29345. * @return {?}
  29346. */
  29347. AbstractControl.prototype._anyControlsTouched = /**
  29348. * \@internal
  29349. * @return {?}
  29350. */
  29351. function () {
  29352. return this._anyControls(function (control) { return control.touched; });
  29353. };
  29354. /** @internal */
  29355. /**
  29356. * \@internal
  29357. * @param {?=} opts
  29358. * @return {?}
  29359. */
  29360. AbstractControl.prototype._updatePristine = /**
  29361. * \@internal
  29362. * @param {?=} opts
  29363. * @return {?}
  29364. */
  29365. function (opts) {
  29366. if (opts === void 0) { opts = {}; }
  29367. (/** @type {?} */ (this)).pristine = !this._anyControlsDirty();
  29368. if (this._parent && !opts.onlySelf) {
  29369. this._parent._updatePristine(opts);
  29370. }
  29371. };
  29372. /** @internal */
  29373. /**
  29374. * \@internal
  29375. * @param {?=} opts
  29376. * @return {?}
  29377. */
  29378. AbstractControl.prototype._updateTouched = /**
  29379. * \@internal
  29380. * @param {?=} opts
  29381. * @return {?}
  29382. */
  29383. function (opts) {
  29384. if (opts === void 0) { opts = {}; }
  29385. (/** @type {?} */ (this)).touched = this._anyControlsTouched();
  29386. if (this._parent && !opts.onlySelf) {
  29387. this._parent._updateTouched(opts);
  29388. }
  29389. };
  29390. /** @internal */
  29391. /**
  29392. * \@internal
  29393. * @param {?} formState
  29394. * @return {?}
  29395. */
  29396. AbstractControl.prototype._isBoxedValue = /**
  29397. * \@internal
  29398. * @param {?} formState
  29399. * @return {?}
  29400. */
  29401. function (formState) {
  29402. return typeof formState === 'object' && formState !== null &&
  29403. Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;
  29404. };
  29405. /** @internal */
  29406. /**
  29407. * \@internal
  29408. * @param {?} fn
  29409. * @return {?}
  29410. */
  29411. AbstractControl.prototype._registerOnCollectionChange = /**
  29412. * \@internal
  29413. * @param {?} fn
  29414. * @return {?}
  29415. */
  29416. function (fn) { this._onCollectionChange = fn; };
  29417. /** @internal */
  29418. /**
  29419. * \@internal
  29420. * @param {?=} opts
  29421. * @return {?}
  29422. */
  29423. AbstractControl.prototype._setUpdateStrategy = /**
  29424. * \@internal
  29425. * @param {?=} opts
  29426. * @return {?}
  29427. */
  29428. function (opts) {
  29429. if (isOptionsObj(opts) && (/** @type {?} */ (opts)).updateOn != null) {
  29430. this._updateOn = /** @type {?} */ (((/** @type {?} */ (opts)).updateOn));
  29431. }
  29432. };
  29433. return AbstractControl;
  29434. }());
  29435. /**
  29436. * \@whatItDoes Tracks the value and validation status of an individual form control.
  29437. *
  29438. * It is one of the three fundamental building blocks of Angular forms, along with
  29439. * {\@link FormGroup} and {\@link FormArray}.
  29440. *
  29441. * \@howToUse
  29442. *
  29443. * When instantiating a {\@link FormControl}, you can pass in an initial value as the
  29444. * first argument. Example:
  29445. *
  29446. * ```ts
  29447. * const ctrl = new FormControl('some value');
  29448. * console.log(ctrl.value); // 'some value'
  29449. * ```
  29450. *
  29451. * You can also initialize the control with a form state object on instantiation,
  29452. * which includes both the value and whether or not the control is disabled.
  29453. * You can't use the value key without the disabled key; both are required
  29454. * to use this way of initialization.
  29455. *
  29456. * ```ts
  29457. * const ctrl = new FormControl({value: 'n/a', disabled: true});
  29458. * console.log(ctrl.value); // 'n/a'
  29459. * console.log(ctrl.status); // 'DISABLED'
  29460. * ```
  29461. *
  29462. * The second {\@link FormControl} argument can accept one of three things:
  29463. * * a sync validator function
  29464. * * an array of sync validator functions
  29465. * * an options object containing validator and/or async validator functions
  29466. *
  29467. * Example of a single sync validator function:
  29468. *
  29469. * ```ts
  29470. * const ctrl = new FormControl('', Validators.required);
  29471. * console.log(ctrl.value); // ''
  29472. * console.log(ctrl.status); // 'INVALID'
  29473. * ```
  29474. *
  29475. * Example using options object:
  29476. *
  29477. * ```ts
  29478. * const ctrl = new FormControl('', {
  29479. * validators: Validators.required,
  29480. * asyncValidators: myAsyncValidator
  29481. * });
  29482. * ```
  29483. *
  29484. * The options object can also be used to define when the control should update.
  29485. * By default, the value and validity of a control updates whenever the value
  29486. * changes. You can configure it to update on the blur event instead by setting
  29487. * the `updateOn` option to `'blur'`.
  29488. *
  29489. * ```ts
  29490. * const c = new FormControl('', { updateOn: 'blur' });
  29491. * ```
  29492. *
  29493. * You can also set `updateOn` to `'submit'`, which will delay value and validity
  29494. * updates until the parent form of the control fires a submit event.
  29495. *
  29496. * See its superclass, {\@link AbstractControl}, for more properties and methods.
  29497. *
  29498. * * **npm package**: `\@angular/forms`
  29499. *
  29500. * \@stable
  29501. */
  29502. var FormControl = /** @class */ (function (_super) {
  29503. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormControl, _super);
  29504. function FormControl(formState, validatorOrOpts, asyncValidator) {
  29505. if (formState === void 0) { formState = null; }
  29506. var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;
  29507. /**
  29508. * \@internal
  29509. */
  29510. _this._onChange = [];
  29511. _this._applyFormState(formState);
  29512. _this._setUpdateStrategy(validatorOrOpts);
  29513. _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });
  29514. _this._initObservables();
  29515. return _this;
  29516. }
  29517. /**
  29518. * Set the value of the form control to `value`.
  29519. *
  29520. * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`
  29521. * and not its parent component. This defaults to false.
  29522. *
  29523. * If `emitEvent` is `true`, this
  29524. * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults
  29525. * to true (as it falls through to `updateValueAndValidity`).
  29526. *
  29527. * If `emitModelToViewChange` is `true`, the view will be notified about the new value
  29528. * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not
  29529. * specified.
  29530. *
  29531. * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the
  29532. * model. This is the default behavior if `emitViewToModelChange` is not specified.
  29533. */
  29534. /**
  29535. * Set the value of the form control to `value`.
  29536. *
  29537. * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`
  29538. * and not its parent component. This defaults to false.
  29539. *
  29540. * If `emitEvent` is `true`, this
  29541. * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults
  29542. * to true (as it falls through to `updateValueAndValidity`).
  29543. *
  29544. * If `emitModelToViewChange` is `true`, the view will be notified about the new value
  29545. * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not
  29546. * specified.
  29547. *
  29548. * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the
  29549. * model. This is the default behavior if `emitViewToModelChange` is not specified.
  29550. * @param {?} value
  29551. * @param {?=} options
  29552. * @return {?}
  29553. */
  29554. FormControl.prototype.setValue = /**
  29555. * Set the value of the form control to `value`.
  29556. *
  29557. * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`
  29558. * and not its parent component. This defaults to false.
  29559. *
  29560. * If `emitEvent` is `true`, this
  29561. * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults
  29562. * to true (as it falls through to `updateValueAndValidity`).
  29563. *
  29564. * If `emitModelToViewChange` is `true`, the view will be notified about the new value
  29565. * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not
  29566. * specified.
  29567. *
  29568. * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the
  29569. * model. This is the default behavior if `emitViewToModelChange` is not specified.
  29570. * @param {?} value
  29571. * @param {?=} options
  29572. * @return {?}
  29573. */
  29574. function (value, options) {
  29575. var _this = this;
  29576. if (options === void 0) { options = {}; }
  29577. (/** @type {?} */ (this)).value = this._pendingValue = value;
  29578. if (this._onChange.length && options.emitModelToViewChange !== false) {
  29579. this._onChange.forEach(function (changeFn) { return changeFn(_this.value, options.emitViewToModelChange !== false); });
  29580. }
  29581. this.updateValueAndValidity(options);
  29582. };
  29583. /**
  29584. * Patches the value of a control.
  29585. *
  29586. * This function is functionally the same as {@link FormControl#setValue setValue} at this level.
  29587. * It exists for symmetry with {@link FormGroup#patchValue patchValue} on `FormGroups` and
  29588. * `FormArrays`, where it does behave differently.
  29589. */
  29590. /**
  29591. * Patches the value of a control.
  29592. *
  29593. * This function is functionally the same as {\@link FormControl#setValue setValue} at this level.
  29594. * It exists for symmetry with {\@link FormGroup#patchValue patchValue} on `FormGroups` and
  29595. * `FormArrays`, where it does behave differently.
  29596. * @param {?} value
  29597. * @param {?=} options
  29598. * @return {?}
  29599. */
  29600. FormControl.prototype.patchValue = /**
  29601. * Patches the value of a control.
  29602. *
  29603. * This function is functionally the same as {\@link FormControl#setValue setValue} at this level.
  29604. * It exists for symmetry with {\@link FormGroup#patchValue patchValue} on `FormGroups` and
  29605. * `FormArrays`, where it does behave differently.
  29606. * @param {?} value
  29607. * @param {?=} options
  29608. * @return {?}
  29609. */
  29610. function (value, options) {
  29611. if (options === void 0) { options = {}; }
  29612. this.setValue(value, options);
  29613. };
  29614. /**
  29615. * Resets the form control. This means by default:
  29616. *
  29617. * * it is marked as `pristine`
  29618. * * it is marked as `untouched`
  29619. * * value is set to null
  29620. *
  29621. * You can also reset to a specific form state by passing through a standalone
  29622. * value or a form state object that contains both a value and a disabled state
  29623. * (these are the only two properties that cannot be calculated).
  29624. *
  29625. * Ex:
  29626. *
  29627. * ```ts
  29628. * this.control.reset('Nancy');
  29629. *
  29630. * console.log(this.control.value); // 'Nancy'
  29631. * ```
  29632. *
  29633. * OR
  29634. *
  29635. * ```
  29636. * this.control.reset({value: 'Nancy', disabled: true});
  29637. *
  29638. * console.log(this.control.value); // 'Nancy'
  29639. * console.log(this.control.status); // 'DISABLED'
  29640. * ```
  29641. */
  29642. /**
  29643. * Resets the form control. This means by default:
  29644. *
  29645. * * it is marked as `pristine`
  29646. * * it is marked as `untouched`
  29647. * * value is set to null
  29648. *
  29649. * You can also reset to a specific form state by passing through a standalone
  29650. * value or a form state object that contains both a value and a disabled state
  29651. * (these are the only two properties that cannot be calculated).
  29652. *
  29653. * Ex:
  29654. *
  29655. * ```ts
  29656. * this.control.reset('Nancy');
  29657. *
  29658. * console.log(this.control.value); // 'Nancy'
  29659. * ```
  29660. *
  29661. * OR
  29662. *
  29663. * ```
  29664. * this.control.reset({value: 'Nancy', disabled: true});
  29665. *
  29666. * console.log(this.control.value); // 'Nancy'
  29667. * console.log(this.control.status); // 'DISABLED'
  29668. * ```
  29669. * @param {?=} formState
  29670. * @param {?=} options
  29671. * @return {?}
  29672. */
  29673. FormControl.prototype.reset = /**
  29674. * Resets the form control. This means by default:
  29675. *
  29676. * * it is marked as `pristine`
  29677. * * it is marked as `untouched`
  29678. * * value is set to null
  29679. *
  29680. * You can also reset to a specific form state by passing through a standalone
  29681. * value or a form state object that contains both a value and a disabled state
  29682. * (these are the only two properties that cannot be calculated).
  29683. *
  29684. * Ex:
  29685. *
  29686. * ```ts
  29687. * this.control.reset('Nancy');
  29688. *
  29689. * console.log(this.control.value); // 'Nancy'
  29690. * ```
  29691. *
  29692. * OR
  29693. *
  29694. * ```
  29695. * this.control.reset({value: 'Nancy', disabled: true});
  29696. *
  29697. * console.log(this.control.value); // 'Nancy'
  29698. * console.log(this.control.status); // 'DISABLED'
  29699. * ```
  29700. * @param {?=} formState
  29701. * @param {?=} options
  29702. * @return {?}
  29703. */
  29704. function (formState, options) {
  29705. if (formState === void 0) { formState = null; }
  29706. if (options === void 0) { options = {}; }
  29707. this._applyFormState(formState);
  29708. this.markAsPristine(options);
  29709. this.markAsUntouched(options);
  29710. this.setValue(this.value, options);
  29711. this._pendingChange = false;
  29712. };
  29713. /**
  29714. * @internal
  29715. */
  29716. /**
  29717. * \@internal
  29718. * @return {?}
  29719. */
  29720. FormControl.prototype._updateValue = /**
  29721. * \@internal
  29722. * @return {?}
  29723. */
  29724. function () { };
  29725. /**
  29726. * @internal
  29727. */
  29728. /**
  29729. * \@internal
  29730. * @param {?} condition
  29731. * @return {?}
  29732. */
  29733. FormControl.prototype._anyControls = /**
  29734. * \@internal
  29735. * @param {?} condition
  29736. * @return {?}
  29737. */
  29738. function (condition) { return false; };
  29739. /**
  29740. * @internal
  29741. */
  29742. /**
  29743. * \@internal
  29744. * @return {?}
  29745. */
  29746. FormControl.prototype._allControlsDisabled = /**
  29747. * \@internal
  29748. * @return {?}
  29749. */
  29750. function () { return this.disabled; };
  29751. /**
  29752. * Register a listener for change events.
  29753. */
  29754. /**
  29755. * Register a listener for change events.
  29756. * @param {?} fn
  29757. * @return {?}
  29758. */
  29759. FormControl.prototype.registerOnChange = /**
  29760. * Register a listener for change events.
  29761. * @param {?} fn
  29762. * @return {?}
  29763. */
  29764. function (fn) { this._onChange.push(fn); };
  29765. /**
  29766. * @internal
  29767. */
  29768. /**
  29769. * \@internal
  29770. * @return {?}
  29771. */
  29772. FormControl.prototype._clearChangeFns = /**
  29773. * \@internal
  29774. * @return {?}
  29775. */
  29776. function () {
  29777. this._onChange = [];
  29778. this._onDisabledChange = [];
  29779. this._onCollectionChange = function () { };
  29780. };
  29781. /**
  29782. * Register a listener for disabled events.
  29783. */
  29784. /**
  29785. * Register a listener for disabled events.
  29786. * @param {?} fn
  29787. * @return {?}
  29788. */
  29789. FormControl.prototype.registerOnDisabledChange = /**
  29790. * Register a listener for disabled events.
  29791. * @param {?} fn
  29792. * @return {?}
  29793. */
  29794. function (fn) {
  29795. this._onDisabledChange.push(fn);
  29796. };
  29797. /**
  29798. * @internal
  29799. */
  29800. /**
  29801. * \@internal
  29802. * @param {?} cb
  29803. * @return {?}
  29804. */
  29805. FormControl.prototype._forEachChild = /**
  29806. * \@internal
  29807. * @param {?} cb
  29808. * @return {?}
  29809. */
  29810. function (cb) { };
  29811. /** @internal */
  29812. /**
  29813. * \@internal
  29814. * @return {?}
  29815. */
  29816. FormControl.prototype._syncPendingControls = /**
  29817. * \@internal
  29818. * @return {?}
  29819. */
  29820. function () {
  29821. if (this.updateOn === 'submit') {
  29822. if (this._pendingDirty)
  29823. this.markAsDirty();
  29824. if (this._pendingTouched)
  29825. this.markAsTouched();
  29826. if (this._pendingChange) {
  29827. this.setValue(this._pendingValue, { onlySelf: true, emitModelToViewChange: false });
  29828. return true;
  29829. }
  29830. }
  29831. return false;
  29832. };
  29833. /**
  29834. * @param {?} formState
  29835. * @return {?}
  29836. */
  29837. FormControl.prototype._applyFormState = /**
  29838. * @param {?} formState
  29839. * @return {?}
  29840. */
  29841. function (formState) {
  29842. if (this._isBoxedValue(formState)) {
  29843. (/** @type {?} */ (this)).value = this._pendingValue = formState.value;
  29844. formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :
  29845. this.enable({ onlySelf: true, emitEvent: false });
  29846. }
  29847. else {
  29848. (/** @type {?} */ (this)).value = this._pendingValue = formState;
  29849. }
  29850. };
  29851. return FormControl;
  29852. }(AbstractControl));
  29853. /**
  29854. * \@whatItDoes Tracks the value and validity state of a group of {\@link FormControl}
  29855. * instances.
  29856. *
  29857. * A `FormGroup` aggregates the values of each child {\@link FormControl} into one object,
  29858. * with each control name as the key. It calculates its status by reducing the statuses
  29859. * of its children. For example, if one of the controls in a group is invalid, the entire
  29860. * group becomes invalid.
  29861. *
  29862. * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,
  29863. * along with {\@link FormControl} and {\@link FormArray}.
  29864. *
  29865. * \@howToUse
  29866. *
  29867. * When instantiating a {\@link FormGroup}, pass in a collection of child controls as the first
  29868. * argument. The key for each child will be the name under which it is registered.
  29869. *
  29870. * ### Example
  29871. *
  29872. * ```
  29873. * const form = new FormGroup({
  29874. * first: new FormControl('Nancy', Validators.minLength(2)),
  29875. * last: new FormControl('Drew'),
  29876. * });
  29877. *
  29878. * console.log(form.value); // {first: 'Nancy', last; 'Drew'}
  29879. * console.log(form.status); // 'VALID'
  29880. * ```
  29881. *
  29882. * You can also include group-level validators as the second arg, or group-level async
  29883. * validators as the third arg. These come in handy when you want to perform validation
  29884. * that considers the value of more than one child control.
  29885. *
  29886. * ### Example
  29887. *
  29888. * ```
  29889. * const form = new FormGroup({
  29890. * password: new FormControl('', Validators.minLength(2)),
  29891. * passwordConfirm: new FormControl('', Validators.minLength(2)),
  29892. * }, passwordMatchValidator);
  29893. *
  29894. *
  29895. * function passwordMatchValidator(g: FormGroup) {
  29896. * return g.get('password').value === g.get('passwordConfirm').value
  29897. * ? null : {'mismatch': true};
  29898. * }
  29899. * ```
  29900. *
  29901. * Like {\@link FormControl} instances, you can alternatively choose to pass in
  29902. * validators and async validators as part of an options object.
  29903. *
  29904. * ```
  29905. * const form = new FormGroup({
  29906. * password: new FormControl('')
  29907. * passwordConfirm: new FormControl('')
  29908. * }, {validators: passwordMatchValidator, asyncValidators: otherValidator});
  29909. * ```
  29910. *
  29911. * The options object can also be used to set a default value for each child
  29912. * control's `updateOn` property. If you set `updateOn` to `'blur'` at the
  29913. * group level, all child controls will default to 'blur', unless the child
  29914. * has explicitly specified a different `updateOn` value.
  29915. *
  29916. * ```ts
  29917. * const c = new FormGroup({
  29918. * one: new FormControl()
  29919. * }, {updateOn: 'blur'});
  29920. * ```
  29921. *
  29922. * * **npm package**: `\@angular/forms`
  29923. *
  29924. * \@stable
  29925. */
  29926. var FormGroup = /** @class */ (function (_super) {
  29927. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormGroup, _super);
  29928. function FormGroup(controls, validatorOrOpts, asyncValidator) {
  29929. var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;
  29930. _this.controls = controls;
  29931. _this._initObservables();
  29932. _this._setUpdateStrategy(validatorOrOpts);
  29933. _this._setUpControls();
  29934. _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });
  29935. return _this;
  29936. }
  29937. /**
  29938. * Registers a control with the group's list of controls.
  29939. *
  29940. * This method does not update the value or validity of the control, so for most cases you'll want
  29941. * to use {@link FormGroup#addControl addControl} instead.
  29942. */
  29943. /**
  29944. * Registers a control with the group's list of controls.
  29945. *
  29946. * This method does not update the value or validity of the control, so for most cases you'll want
  29947. * to use {\@link FormGroup#addControl addControl} instead.
  29948. * @param {?} name
  29949. * @param {?} control
  29950. * @return {?}
  29951. */
  29952. FormGroup.prototype.registerControl = /**
  29953. * Registers a control with the group's list of controls.
  29954. *
  29955. * This method does not update the value or validity of the control, so for most cases you'll want
  29956. * to use {\@link FormGroup#addControl addControl} instead.
  29957. * @param {?} name
  29958. * @param {?} control
  29959. * @return {?}
  29960. */
  29961. function (name, control) {
  29962. if (this.controls[name])
  29963. return this.controls[name];
  29964. this.controls[name] = control;
  29965. control.setParent(this);
  29966. control._registerOnCollectionChange(this._onCollectionChange);
  29967. return control;
  29968. };
  29969. /**
  29970. * Add a control to this group.
  29971. */
  29972. /**
  29973. * Add a control to this group.
  29974. * @param {?} name
  29975. * @param {?} control
  29976. * @return {?}
  29977. */
  29978. FormGroup.prototype.addControl = /**
  29979. * Add a control to this group.
  29980. * @param {?} name
  29981. * @param {?} control
  29982. * @return {?}
  29983. */
  29984. function (name, control) {
  29985. this.registerControl(name, control);
  29986. this.updateValueAndValidity();
  29987. this._onCollectionChange();
  29988. };
  29989. /**
  29990. * Remove a control from this group.
  29991. */
  29992. /**
  29993. * Remove a control from this group.
  29994. * @param {?} name
  29995. * @return {?}
  29996. */
  29997. FormGroup.prototype.removeControl = /**
  29998. * Remove a control from this group.
  29999. * @param {?} name
  30000. * @return {?}
  30001. */
  30002. function (name) {
  30003. if (this.controls[name])
  30004. this.controls[name]._registerOnCollectionChange(function () { });
  30005. delete (this.controls[name]);
  30006. this.updateValueAndValidity();
  30007. this._onCollectionChange();
  30008. };
  30009. /**
  30010. * Replace an existing control.
  30011. */
  30012. /**
  30013. * Replace an existing control.
  30014. * @param {?} name
  30015. * @param {?} control
  30016. * @return {?}
  30017. */
  30018. FormGroup.prototype.setControl = /**
  30019. * Replace an existing control.
  30020. * @param {?} name
  30021. * @param {?} control
  30022. * @return {?}
  30023. */
  30024. function (name, control) {
  30025. if (this.controls[name])
  30026. this.controls[name]._registerOnCollectionChange(function () { });
  30027. delete (this.controls[name]);
  30028. if (control)
  30029. this.registerControl(name, control);
  30030. this.updateValueAndValidity();
  30031. this._onCollectionChange();
  30032. };
  30033. /**
  30034. * Check whether there is an enabled control with the given name in the group.
  30035. *
  30036. * It will return false for disabled controls. If you'd like to check for existence in the group
  30037. * only, use {@link AbstractControl#get get} instead.
  30038. */
  30039. /**
  30040. * Check whether there is an enabled control with the given name in the group.
  30041. *
  30042. * It will return false for disabled controls. If you'd like to check for existence in the group
  30043. * only, use {\@link AbstractControl#get get} instead.
  30044. * @param {?} controlName
  30045. * @return {?}
  30046. */
  30047. FormGroup.prototype.contains = /**
  30048. * Check whether there is an enabled control with the given name in the group.
  30049. *
  30050. * It will return false for disabled controls. If you'd like to check for existence in the group
  30051. * only, use {\@link AbstractControl#get get} instead.
  30052. * @param {?} controlName
  30053. * @return {?}
  30054. */
  30055. function (controlName) {
  30056. return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;
  30057. };
  30058. /**
  30059. * Sets the value of the {@link FormGroup}. It accepts an object that matches
  30060. * the structure of the group, with control names as keys.
  30061. *
  30062. * This method performs strict checks, so it will throw an error if you try
  30063. * to set the value of a control that doesn't exist or if you exclude the
  30064. * value of a control.
  30065. *
  30066. * ### Example
  30067. *
  30068. * ```
  30069. * const form = new FormGroup({
  30070. * first: new FormControl(),
  30071. * last: new FormControl()
  30072. * });
  30073. * console.log(form.value); // {first: null, last: null}
  30074. *
  30075. * form.setValue({first: 'Nancy', last: 'Drew'});
  30076. * console.log(form.value); // {first: 'Nancy', last: 'Drew'}
  30077. *
  30078. * ```
  30079. */
  30080. /**
  30081. * Sets the value of the {\@link FormGroup}. It accepts an object that matches
  30082. * the structure of the group, with control names as keys.
  30083. *
  30084. * This method performs strict checks, so it will throw an error if you try
  30085. * to set the value of a control that doesn't exist or if you exclude the
  30086. * value of a control.
  30087. *
  30088. * ### Example
  30089. *
  30090. * ```
  30091. * const form = new FormGroup({
  30092. * first: new FormControl(),
  30093. * last: new FormControl()
  30094. * });
  30095. * console.log(form.value); // {first: null, last: null}
  30096. *
  30097. * form.setValue({first: 'Nancy', last: 'Drew'});
  30098. * console.log(form.value); // {first: 'Nancy', last: 'Drew'}
  30099. *
  30100. * ```
  30101. * @param {?} value
  30102. * @param {?=} options
  30103. * @return {?}
  30104. */
  30105. FormGroup.prototype.setValue = /**
  30106. * Sets the value of the {\@link FormGroup}. It accepts an object that matches
  30107. * the structure of the group, with control names as keys.
  30108. *
  30109. * This method performs strict checks, so it will throw an error if you try
  30110. * to set the value of a control that doesn't exist or if you exclude the
  30111. * value of a control.
  30112. *
  30113. * ### Example
  30114. *
  30115. * ```
  30116. * const form = new FormGroup({
  30117. * first: new FormControl(),
  30118. * last: new FormControl()
  30119. * });
  30120. * console.log(form.value); // {first: null, last: null}
  30121. *
  30122. * form.setValue({first: 'Nancy', last: 'Drew'});
  30123. * console.log(form.value); // {first: 'Nancy', last: 'Drew'}
  30124. *
  30125. * ```
  30126. * @param {?} value
  30127. * @param {?=} options
  30128. * @return {?}
  30129. */
  30130. function (value, options) {
  30131. var _this = this;
  30132. if (options === void 0) { options = {}; }
  30133. this._checkAllValuesPresent(value);
  30134. Object.keys(value).forEach(function (name) {
  30135. _this._throwIfControlMissing(name);
  30136. _this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });
  30137. });
  30138. this.updateValueAndValidity(options);
  30139. };
  30140. /**
  30141. * Patches the value of the {@link FormGroup}. It accepts an object with control
  30142. * names as keys, and will do its best to match the values to the correct controls
  30143. * in the group.
  30144. *
  30145. * It accepts both super-sets and sub-sets of the group without throwing an error.
  30146. *
  30147. * ### Example
  30148. *
  30149. * ```
  30150. * const form = new FormGroup({
  30151. * first: new FormControl(),
  30152. * last: new FormControl()
  30153. * });
  30154. * console.log(form.value); // {first: null, last: null}
  30155. *
  30156. * form.patchValue({first: 'Nancy'});
  30157. * console.log(form.value); // {first: 'Nancy', last: null}
  30158. *
  30159. * ```
  30160. */
  30161. /**
  30162. * Patches the value of the {\@link FormGroup}. It accepts an object with control
  30163. * names as keys, and will do its best to match the values to the correct controls
  30164. * in the group.
  30165. *
  30166. * It accepts both super-sets and sub-sets of the group without throwing an error.
  30167. *
  30168. * ### Example
  30169. *
  30170. * ```
  30171. * const form = new FormGroup({
  30172. * first: new FormControl(),
  30173. * last: new FormControl()
  30174. * });
  30175. * console.log(form.value); // {first: null, last: null}
  30176. *
  30177. * form.patchValue({first: 'Nancy'});
  30178. * console.log(form.value); // {first: 'Nancy', last: null}
  30179. *
  30180. * ```
  30181. * @param {?} value
  30182. * @param {?=} options
  30183. * @return {?}
  30184. */
  30185. FormGroup.prototype.patchValue = /**
  30186. * Patches the value of the {\@link FormGroup}. It accepts an object with control
  30187. * names as keys, and will do its best to match the values to the correct controls
  30188. * in the group.
  30189. *
  30190. * It accepts both super-sets and sub-sets of the group without throwing an error.
  30191. *
  30192. * ### Example
  30193. *
  30194. * ```
  30195. * const form = new FormGroup({
  30196. * first: new FormControl(),
  30197. * last: new FormControl()
  30198. * });
  30199. * console.log(form.value); // {first: null, last: null}
  30200. *
  30201. * form.patchValue({first: 'Nancy'});
  30202. * console.log(form.value); // {first: 'Nancy', last: null}
  30203. *
  30204. * ```
  30205. * @param {?} value
  30206. * @param {?=} options
  30207. * @return {?}
  30208. */
  30209. function (value, options) {
  30210. var _this = this;
  30211. if (options === void 0) { options = {}; }
  30212. Object.keys(value).forEach(function (name) {
  30213. if (_this.controls[name]) {
  30214. _this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });
  30215. }
  30216. });
  30217. this.updateValueAndValidity(options);
  30218. };
  30219. /**
  30220. * Resets the {@link FormGroup}. This means by default:
  30221. *
  30222. * * The group and all descendants are marked `pristine`
  30223. * * The group and all descendants are marked `untouched`
  30224. * * The value of all descendants will be null or null maps
  30225. *
  30226. * You can also reset to a specific form state by passing in a map of states
  30227. * that matches the structure of your form, with control names as keys. The state
  30228. * can be a standalone value or a form state object with both a value and a disabled
  30229. * status.
  30230. *
  30231. * ### Example
  30232. *
  30233. * ```ts
  30234. * this.form.reset({first: 'name', last: 'last name'});
  30235. *
  30236. * console.log(this.form.value); // {first: 'name', last: 'last name'}
  30237. * ```
  30238. *
  30239. * - OR -
  30240. *
  30241. * ```
  30242. * this.form.reset({
  30243. * first: {value: 'name', disabled: true},
  30244. * last: 'last'
  30245. * });
  30246. *
  30247. * console.log(this.form.value); // {first: 'name', last: 'last name'}
  30248. * console.log(this.form.get('first').status); // 'DISABLED'
  30249. * ```
  30250. */
  30251. /**
  30252. * Resets the {\@link FormGroup}. This means by default:
  30253. *
  30254. * * The group and all descendants are marked `pristine`
  30255. * * The group and all descendants are marked `untouched`
  30256. * * The value of all descendants will be null or null maps
  30257. *
  30258. * You can also reset to a specific form state by passing in a map of states
  30259. * that matches the structure of your form, with control names as keys. The state
  30260. * can be a standalone value or a form state object with both a value and a disabled
  30261. * status.
  30262. *
  30263. * ### Example
  30264. *
  30265. * ```ts
  30266. * this.form.reset({first: 'name', last: 'last name'});
  30267. *
  30268. * console.log(this.form.value); // {first: 'name', last: 'last name'}
  30269. * ```
  30270. *
  30271. * - OR -
  30272. *
  30273. * ```
  30274. * this.form.reset({
  30275. * first: {value: 'name', disabled: true},
  30276. * last: 'last'
  30277. * });
  30278. *
  30279. * console.log(this.form.value); // {first: 'name', last: 'last name'}
  30280. * console.log(this.form.get('first').status); // 'DISABLED'
  30281. * ```
  30282. * @param {?=} value
  30283. * @param {?=} options
  30284. * @return {?}
  30285. */
  30286. FormGroup.prototype.reset = /**
  30287. * Resets the {\@link FormGroup}. This means by default:
  30288. *
  30289. * * The group and all descendants are marked `pristine`
  30290. * * The group and all descendants are marked `untouched`
  30291. * * The value of all descendants will be null or null maps
  30292. *
  30293. * You can also reset to a specific form state by passing in a map of states
  30294. * that matches the structure of your form, with control names as keys. The state
  30295. * can be a standalone value or a form state object with both a value and a disabled
  30296. * status.
  30297. *
  30298. * ### Example
  30299. *
  30300. * ```ts
  30301. * this.form.reset({first: 'name', last: 'last name'});
  30302. *
  30303. * console.log(this.form.value); // {first: 'name', last: 'last name'}
  30304. * ```
  30305. *
  30306. * - OR -
  30307. *
  30308. * ```
  30309. * this.form.reset({
  30310. * first: {value: 'name', disabled: true},
  30311. * last: 'last'
  30312. * });
  30313. *
  30314. * console.log(this.form.value); // {first: 'name', last: 'last name'}
  30315. * console.log(this.form.get('first').status); // 'DISABLED'
  30316. * ```
  30317. * @param {?=} value
  30318. * @param {?=} options
  30319. * @return {?}
  30320. */
  30321. function (value, options) {
  30322. if (value === void 0) { value = {}; }
  30323. if (options === void 0) { options = {}; }
  30324. this._forEachChild(function (control, name) {
  30325. control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });
  30326. });
  30327. this.updateValueAndValidity(options);
  30328. this._updatePristine(options);
  30329. this._updateTouched(options);
  30330. };
  30331. /**
  30332. * The aggregate value of the {@link FormGroup}, including any disabled controls.
  30333. *
  30334. * If you'd like to include all values regardless of disabled status, use this method.
  30335. * Otherwise, the `value` property is the best way to get the value of the group.
  30336. */
  30337. /**
  30338. * The aggregate value of the {\@link FormGroup}, including any disabled controls.
  30339. *
  30340. * If you'd like to include all values regardless of disabled status, use this method.
  30341. * Otherwise, the `value` property is the best way to get the value of the group.
  30342. * @return {?}
  30343. */
  30344. FormGroup.prototype.getRawValue = /**
  30345. * The aggregate value of the {\@link FormGroup}, including any disabled controls.
  30346. *
  30347. * If you'd like to include all values regardless of disabled status, use this method.
  30348. * Otherwise, the `value` property is the best way to get the value of the group.
  30349. * @return {?}
  30350. */
  30351. function () {
  30352. return this._reduceChildren({}, function (acc, control, name) {
  30353. acc[name] = control instanceof FormControl ? control.value : (/** @type {?} */ (control)).getRawValue();
  30354. return acc;
  30355. });
  30356. };
  30357. /** @internal */
  30358. /**
  30359. * \@internal
  30360. * @return {?}
  30361. */
  30362. FormGroup.prototype._syncPendingControls = /**
  30363. * \@internal
  30364. * @return {?}
  30365. */
  30366. function () {
  30367. var /** @type {?} */ subtreeUpdated = this._reduceChildren(false, function (updated, child) {
  30368. return child._syncPendingControls() ? true : updated;
  30369. });
  30370. if (subtreeUpdated)
  30371. this.updateValueAndValidity({ onlySelf: true });
  30372. return subtreeUpdated;
  30373. };
  30374. /** @internal */
  30375. /**
  30376. * \@internal
  30377. * @param {?} name
  30378. * @return {?}
  30379. */
  30380. FormGroup.prototype._throwIfControlMissing = /**
  30381. * \@internal
  30382. * @param {?} name
  30383. * @return {?}
  30384. */
  30385. function (name) {
  30386. if (!Object.keys(this.controls).length) {
  30387. throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");
  30388. }
  30389. if (!this.controls[name]) {
  30390. throw new Error("Cannot find form control with name: " + name + ".");
  30391. }
  30392. };
  30393. /** @internal */
  30394. /**
  30395. * \@internal
  30396. * @param {?} cb
  30397. * @return {?}
  30398. */
  30399. FormGroup.prototype._forEachChild = /**
  30400. * \@internal
  30401. * @param {?} cb
  30402. * @return {?}
  30403. */
  30404. function (cb) {
  30405. var _this = this;
  30406. Object.keys(this.controls).forEach(function (k) { return cb(_this.controls[k], k); });
  30407. };
  30408. /** @internal */
  30409. /**
  30410. * \@internal
  30411. * @return {?}
  30412. */
  30413. FormGroup.prototype._setUpControls = /**
  30414. * \@internal
  30415. * @return {?}
  30416. */
  30417. function () {
  30418. var _this = this;
  30419. this._forEachChild(function (control) {
  30420. control.setParent(_this);
  30421. control._registerOnCollectionChange(_this._onCollectionChange);
  30422. });
  30423. };
  30424. /** @internal */
  30425. /**
  30426. * \@internal
  30427. * @return {?}
  30428. */
  30429. FormGroup.prototype._updateValue = /**
  30430. * \@internal
  30431. * @return {?}
  30432. */
  30433. function () { (/** @type {?} */ (this)).value = this._reduceValue(); };
  30434. /** @internal */
  30435. /**
  30436. * \@internal
  30437. * @param {?} condition
  30438. * @return {?}
  30439. */
  30440. FormGroup.prototype._anyControls = /**
  30441. * \@internal
  30442. * @param {?} condition
  30443. * @return {?}
  30444. */
  30445. function (condition) {
  30446. var _this = this;
  30447. var /** @type {?} */ res = false;
  30448. this._forEachChild(function (control, name) {
  30449. res = res || (_this.contains(name) && condition(control));
  30450. });
  30451. return res;
  30452. };
  30453. /** @internal */
  30454. /**
  30455. * \@internal
  30456. * @return {?}
  30457. */
  30458. FormGroup.prototype._reduceValue = /**
  30459. * \@internal
  30460. * @return {?}
  30461. */
  30462. function () {
  30463. var _this = this;
  30464. return this._reduceChildren({}, function (acc, control, name) {
  30465. if (control.enabled || _this.disabled) {
  30466. acc[name] = control.value;
  30467. }
  30468. return acc;
  30469. });
  30470. };
  30471. /** @internal */
  30472. /**
  30473. * \@internal
  30474. * @param {?} initValue
  30475. * @param {?} fn
  30476. * @return {?}
  30477. */
  30478. FormGroup.prototype._reduceChildren = /**
  30479. * \@internal
  30480. * @param {?} initValue
  30481. * @param {?} fn
  30482. * @return {?}
  30483. */
  30484. function (initValue, fn) {
  30485. var /** @type {?} */ res = initValue;
  30486. this._forEachChild(function (control, name) { res = fn(res, control, name); });
  30487. return res;
  30488. };
  30489. /** @internal */
  30490. /**
  30491. * \@internal
  30492. * @return {?}
  30493. */
  30494. FormGroup.prototype._allControlsDisabled = /**
  30495. * \@internal
  30496. * @return {?}
  30497. */
  30498. function () {
  30499. for (var _i = 0, _a = Object.keys(this.controls); _i < _a.length; _i++) {
  30500. var controlName = _a[_i];
  30501. if (this.controls[controlName].enabled) {
  30502. return false;
  30503. }
  30504. }
  30505. return Object.keys(this.controls).length > 0 || this.disabled;
  30506. };
  30507. /** @internal */
  30508. /**
  30509. * \@internal
  30510. * @param {?} value
  30511. * @return {?}
  30512. */
  30513. FormGroup.prototype._checkAllValuesPresent = /**
  30514. * \@internal
  30515. * @param {?} value
  30516. * @return {?}
  30517. */
  30518. function (value) {
  30519. this._forEachChild(function (control, name) {
  30520. if (value[name] === undefined) {
  30521. throw new Error("Must supply a value for form control with name: '" + name + "'.");
  30522. }
  30523. });
  30524. };
  30525. return FormGroup;
  30526. }(AbstractControl));
  30527. /**
  30528. * \@whatItDoes Tracks the value and validity state of an array of {\@link FormControl},
  30529. * {\@link FormGroup} or {\@link FormArray} instances.
  30530. *
  30531. * A `FormArray` aggregates the values of each child {\@link FormControl} into an array.
  30532. * It calculates its status by reducing the statuses of its children. For example, if one of
  30533. * the controls in a `FormArray` is invalid, the entire array becomes invalid.
  30534. *
  30535. * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,
  30536. * along with {\@link FormControl} and {\@link FormGroup}.
  30537. *
  30538. * \@howToUse
  30539. *
  30540. * When instantiating a {\@link FormArray}, pass in an array of child controls as the first
  30541. * argument.
  30542. *
  30543. * ### Example
  30544. *
  30545. * ```
  30546. * const arr = new FormArray([
  30547. * new FormControl('Nancy', Validators.minLength(2)),
  30548. * new FormControl('Drew'),
  30549. * ]);
  30550. *
  30551. * console.log(arr.value); // ['Nancy', 'Drew']
  30552. * console.log(arr.status); // 'VALID'
  30553. * ```
  30554. *
  30555. * You can also include array-level validators and async validators. These come in handy
  30556. * when you want to perform validation that considers the value of more than one child
  30557. * control.
  30558. *
  30559. * The two types of validators can be passed in separately as the second and third arg
  30560. * respectively, or together as part of an options object.
  30561. *
  30562. * ```
  30563. * const arr = new FormArray([
  30564. * new FormControl('Nancy'),
  30565. * new FormControl('Drew')
  30566. * ], {validators: myValidator, asyncValidators: myAsyncValidator});
  30567. * ```
  30568. *
  30569. * The options object can also be used to set a default value for each child
  30570. * control's `updateOn` property. If you set `updateOn` to `'blur'` at the
  30571. * array level, all child controls will default to 'blur', unless the child
  30572. * has explicitly specified a different `updateOn` value.
  30573. *
  30574. * ```ts
  30575. * const c = new FormArray([
  30576. * new FormControl()
  30577. * ], {updateOn: 'blur'});
  30578. * ```
  30579. *
  30580. * ### Adding or removing controls
  30581. *
  30582. * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods
  30583. * in `FormArray` itself. These methods ensure the controls are properly tracked in the
  30584. * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate
  30585. * the `FormArray` directly, as that will result in strange and unexpected behavior such
  30586. * as broken change detection.
  30587. *
  30588. * * **npm package**: `\@angular/forms`
  30589. *
  30590. * \@stable
  30591. */
  30592. var FormArray = /** @class */ (function (_super) {
  30593. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormArray, _super);
  30594. function FormArray(controls, validatorOrOpts, asyncValidator) {
  30595. var _this = _super.call(this, coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts)) || this;
  30596. _this.controls = controls;
  30597. _this._initObservables();
  30598. _this._setUpdateStrategy(validatorOrOpts);
  30599. _this._setUpControls();
  30600. _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });
  30601. return _this;
  30602. }
  30603. /**
  30604. * Get the {@link AbstractControl} at the given `index` in the array.
  30605. */
  30606. /**
  30607. * Get the {\@link AbstractControl} at the given `index` in the array.
  30608. * @param {?} index
  30609. * @return {?}
  30610. */
  30611. FormArray.prototype.at = /**
  30612. * Get the {\@link AbstractControl} at the given `index` in the array.
  30613. * @param {?} index
  30614. * @return {?}
  30615. */
  30616. function (index) { return this.controls[index]; };
  30617. /**
  30618. * Insert a new {@link AbstractControl} at the end of the array.
  30619. */
  30620. /**
  30621. * Insert a new {\@link AbstractControl} at the end of the array.
  30622. * @param {?} control
  30623. * @return {?}
  30624. */
  30625. FormArray.prototype.push = /**
  30626. * Insert a new {\@link AbstractControl} at the end of the array.
  30627. * @param {?} control
  30628. * @return {?}
  30629. */
  30630. function (control) {
  30631. this.controls.push(control);
  30632. this._registerControl(control);
  30633. this.updateValueAndValidity();
  30634. this._onCollectionChange();
  30635. };
  30636. /** Insert a new {@link AbstractControl} at the given `index` in the array. */
  30637. /**
  30638. * Insert a new {\@link AbstractControl} at the given `index` in the array.
  30639. * @param {?} index
  30640. * @param {?} control
  30641. * @return {?}
  30642. */
  30643. FormArray.prototype.insert = /**
  30644. * Insert a new {\@link AbstractControl} at the given `index` in the array.
  30645. * @param {?} index
  30646. * @param {?} control
  30647. * @return {?}
  30648. */
  30649. function (index, control) {
  30650. this.controls.splice(index, 0, control);
  30651. this._registerControl(control);
  30652. this.updateValueAndValidity();
  30653. };
  30654. /** Remove the control at the given `index` in the array. */
  30655. /**
  30656. * Remove the control at the given `index` in the array.
  30657. * @param {?} index
  30658. * @return {?}
  30659. */
  30660. FormArray.prototype.removeAt = /**
  30661. * Remove the control at the given `index` in the array.
  30662. * @param {?} index
  30663. * @return {?}
  30664. */
  30665. function (index) {
  30666. if (this.controls[index])
  30667. this.controls[index]._registerOnCollectionChange(function () { });
  30668. this.controls.splice(index, 1);
  30669. this.updateValueAndValidity();
  30670. };
  30671. /**
  30672. * Replace an existing control.
  30673. */
  30674. /**
  30675. * Replace an existing control.
  30676. * @param {?} index
  30677. * @param {?} control
  30678. * @return {?}
  30679. */
  30680. FormArray.prototype.setControl = /**
  30681. * Replace an existing control.
  30682. * @param {?} index
  30683. * @param {?} control
  30684. * @return {?}
  30685. */
  30686. function (index, control) {
  30687. if (this.controls[index])
  30688. this.controls[index]._registerOnCollectionChange(function () { });
  30689. this.controls.splice(index, 1);
  30690. if (control) {
  30691. this.controls.splice(index, 0, control);
  30692. this._registerControl(control);
  30693. }
  30694. this.updateValueAndValidity();
  30695. this._onCollectionChange();
  30696. };
  30697. Object.defineProperty(FormArray.prototype, "length", {
  30698. /**
  30699. * Length of the control array.
  30700. */
  30701. get: /**
  30702. * Length of the control array.
  30703. * @return {?}
  30704. */
  30705. function () { return this.controls.length; },
  30706. enumerable: true,
  30707. configurable: true
  30708. });
  30709. /**
  30710. * Sets the value of the {@link FormArray}. It accepts an array that matches
  30711. * the structure of the control.
  30712. *
  30713. * This method performs strict checks, so it will throw an error if you try
  30714. * to set the value of a control that doesn't exist or if you exclude the
  30715. * value of a control.
  30716. *
  30717. * ### Example
  30718. *
  30719. * ```
  30720. * const arr = new FormArray([
  30721. * new FormControl(),
  30722. * new FormControl()
  30723. * ]);
  30724. * console.log(arr.value); // [null, null]
  30725. *
  30726. * arr.setValue(['Nancy', 'Drew']);
  30727. * console.log(arr.value); // ['Nancy', 'Drew']
  30728. * ```
  30729. */
  30730. /**
  30731. * Sets the value of the {\@link FormArray}. It accepts an array that matches
  30732. * the structure of the control.
  30733. *
  30734. * This method performs strict checks, so it will throw an error if you try
  30735. * to set the value of a control that doesn't exist or if you exclude the
  30736. * value of a control.
  30737. *
  30738. * ### Example
  30739. *
  30740. * ```
  30741. * const arr = new FormArray([
  30742. * new FormControl(),
  30743. * new FormControl()
  30744. * ]);
  30745. * console.log(arr.value); // [null, null]
  30746. *
  30747. * arr.setValue(['Nancy', 'Drew']);
  30748. * console.log(arr.value); // ['Nancy', 'Drew']
  30749. * ```
  30750. * @param {?} value
  30751. * @param {?=} options
  30752. * @return {?}
  30753. */
  30754. FormArray.prototype.setValue = /**
  30755. * Sets the value of the {\@link FormArray}. It accepts an array that matches
  30756. * the structure of the control.
  30757. *
  30758. * This method performs strict checks, so it will throw an error if you try
  30759. * to set the value of a control that doesn't exist or if you exclude the
  30760. * value of a control.
  30761. *
  30762. * ### Example
  30763. *
  30764. * ```
  30765. * const arr = new FormArray([
  30766. * new FormControl(),
  30767. * new FormControl()
  30768. * ]);
  30769. * console.log(arr.value); // [null, null]
  30770. *
  30771. * arr.setValue(['Nancy', 'Drew']);
  30772. * console.log(arr.value); // ['Nancy', 'Drew']
  30773. * ```
  30774. * @param {?} value
  30775. * @param {?=} options
  30776. * @return {?}
  30777. */
  30778. function (value, options) {
  30779. var _this = this;
  30780. if (options === void 0) { options = {}; }
  30781. this._checkAllValuesPresent(value);
  30782. value.forEach(function (newValue, index) {
  30783. _this._throwIfControlMissing(index);
  30784. _this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });
  30785. });
  30786. this.updateValueAndValidity(options);
  30787. };
  30788. /**
  30789. * Patches the value of the {@link FormArray}. It accepts an array that matches the
  30790. * structure of the control, and will do its best to match the values to the correct
  30791. * controls in the group.
  30792. *
  30793. * It accepts both super-sets and sub-sets of the array without throwing an error.
  30794. *
  30795. * ### Example
  30796. *
  30797. * ```
  30798. * const arr = new FormArray([
  30799. * new FormControl(),
  30800. * new FormControl()
  30801. * ]);
  30802. * console.log(arr.value); // [null, null]
  30803. *
  30804. * arr.patchValue(['Nancy']);
  30805. * console.log(arr.value); // ['Nancy', null]
  30806. * ```
  30807. */
  30808. /**
  30809. * Patches the value of the {\@link FormArray}. It accepts an array that matches the
  30810. * structure of the control, and will do its best to match the values to the correct
  30811. * controls in the group.
  30812. *
  30813. * It accepts both super-sets and sub-sets of the array without throwing an error.
  30814. *
  30815. * ### Example
  30816. *
  30817. * ```
  30818. * const arr = new FormArray([
  30819. * new FormControl(),
  30820. * new FormControl()
  30821. * ]);
  30822. * console.log(arr.value); // [null, null]
  30823. *
  30824. * arr.patchValue(['Nancy']);
  30825. * console.log(arr.value); // ['Nancy', null]
  30826. * ```
  30827. * @param {?} value
  30828. * @param {?=} options
  30829. * @return {?}
  30830. */
  30831. FormArray.prototype.patchValue = /**
  30832. * Patches the value of the {\@link FormArray}. It accepts an array that matches the
  30833. * structure of the control, and will do its best to match the values to the correct
  30834. * controls in the group.
  30835. *
  30836. * It accepts both super-sets and sub-sets of the array without throwing an error.
  30837. *
  30838. * ### Example
  30839. *
  30840. * ```
  30841. * const arr = new FormArray([
  30842. * new FormControl(),
  30843. * new FormControl()
  30844. * ]);
  30845. * console.log(arr.value); // [null, null]
  30846. *
  30847. * arr.patchValue(['Nancy']);
  30848. * console.log(arr.value); // ['Nancy', null]
  30849. * ```
  30850. * @param {?} value
  30851. * @param {?=} options
  30852. * @return {?}
  30853. */
  30854. function (value, options) {
  30855. var _this = this;
  30856. if (options === void 0) { options = {}; }
  30857. value.forEach(function (newValue, index) {
  30858. if (_this.at(index)) {
  30859. _this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });
  30860. }
  30861. });
  30862. this.updateValueAndValidity(options);
  30863. };
  30864. /**
  30865. * Resets the {@link FormArray}. This means by default:
  30866. *
  30867. * * The array and all descendants are marked `pristine`
  30868. * * The array and all descendants are marked `untouched`
  30869. * * The value of all descendants will be null or null maps
  30870. *
  30871. * You can also reset to a specific form state by passing in an array of states
  30872. * that matches the structure of the control. The state can be a standalone value
  30873. * or a form state object with both a value and a disabled status.
  30874. *
  30875. * ### Example
  30876. *
  30877. * ```ts
  30878. * this.arr.reset(['name', 'last name']);
  30879. *
  30880. * console.log(this.arr.value); // ['name', 'last name']
  30881. * ```
  30882. *
  30883. * - OR -
  30884. *
  30885. * ```
  30886. * this.arr.reset([
  30887. * {value: 'name', disabled: true},
  30888. * 'last'
  30889. * ]);
  30890. *
  30891. * console.log(this.arr.value); // ['name', 'last name']
  30892. * console.log(this.arr.get(0).status); // 'DISABLED'
  30893. * ```
  30894. */
  30895. /**
  30896. * Resets the {\@link FormArray}. This means by default:
  30897. *
  30898. * * The array and all descendants are marked `pristine`
  30899. * * The array and all descendants are marked `untouched`
  30900. * * The value of all descendants will be null or null maps
  30901. *
  30902. * You can also reset to a specific form state by passing in an array of states
  30903. * that matches the structure of the control. The state can be a standalone value
  30904. * or a form state object with both a value and a disabled status.
  30905. *
  30906. * ### Example
  30907. *
  30908. * ```ts
  30909. * this.arr.reset(['name', 'last name']);
  30910. *
  30911. * console.log(this.arr.value); // ['name', 'last name']
  30912. * ```
  30913. *
  30914. * - OR -
  30915. *
  30916. * ```
  30917. * this.arr.reset([
  30918. * {value: 'name', disabled: true},
  30919. * 'last'
  30920. * ]);
  30921. *
  30922. * console.log(this.arr.value); // ['name', 'last name']
  30923. * console.log(this.arr.get(0).status); // 'DISABLED'
  30924. * ```
  30925. * @param {?=} value
  30926. * @param {?=} options
  30927. * @return {?}
  30928. */
  30929. FormArray.prototype.reset = /**
  30930. * Resets the {\@link FormArray}. This means by default:
  30931. *
  30932. * * The array and all descendants are marked `pristine`
  30933. * * The array and all descendants are marked `untouched`
  30934. * * The value of all descendants will be null or null maps
  30935. *
  30936. * You can also reset to a specific form state by passing in an array of states
  30937. * that matches the structure of the control. The state can be a standalone value
  30938. * or a form state object with both a value and a disabled status.
  30939. *
  30940. * ### Example
  30941. *
  30942. * ```ts
  30943. * this.arr.reset(['name', 'last name']);
  30944. *
  30945. * console.log(this.arr.value); // ['name', 'last name']
  30946. * ```
  30947. *
  30948. * - OR -
  30949. *
  30950. * ```
  30951. * this.arr.reset([
  30952. * {value: 'name', disabled: true},
  30953. * 'last'
  30954. * ]);
  30955. *
  30956. * console.log(this.arr.value); // ['name', 'last name']
  30957. * console.log(this.arr.get(0).status); // 'DISABLED'
  30958. * ```
  30959. * @param {?=} value
  30960. * @param {?=} options
  30961. * @return {?}
  30962. */
  30963. function (value, options) {
  30964. if (value === void 0) { value = []; }
  30965. if (options === void 0) { options = {}; }
  30966. this._forEachChild(function (control, index) {
  30967. control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });
  30968. });
  30969. this.updateValueAndValidity(options);
  30970. this._updatePristine(options);
  30971. this._updateTouched(options);
  30972. };
  30973. /**
  30974. * The aggregate value of the array, including any disabled controls.
  30975. *
  30976. * If you'd like to include all values regardless of disabled status, use this method.
  30977. * Otherwise, the `value` property is the best way to get the value of the array.
  30978. */
  30979. /**
  30980. * The aggregate value of the array, including any disabled controls.
  30981. *
  30982. * If you'd like to include all values regardless of disabled status, use this method.
  30983. * Otherwise, the `value` property is the best way to get the value of the array.
  30984. * @return {?}
  30985. */
  30986. FormArray.prototype.getRawValue = /**
  30987. * The aggregate value of the array, including any disabled controls.
  30988. *
  30989. * If you'd like to include all values regardless of disabled status, use this method.
  30990. * Otherwise, the `value` property is the best way to get the value of the array.
  30991. * @return {?}
  30992. */
  30993. function () {
  30994. return this.controls.map(function (control) {
  30995. return control instanceof FormControl ? control.value : (/** @type {?} */ (control)).getRawValue();
  30996. });
  30997. };
  30998. /** @internal */
  30999. /**
  31000. * \@internal
  31001. * @return {?}
  31002. */
  31003. FormArray.prototype._syncPendingControls = /**
  31004. * \@internal
  31005. * @return {?}
  31006. */
  31007. function () {
  31008. var /** @type {?} */ subtreeUpdated = this.controls.reduce(function (updated, child) {
  31009. return child._syncPendingControls() ? true : updated;
  31010. }, false);
  31011. if (subtreeUpdated)
  31012. this.updateValueAndValidity({ onlySelf: true });
  31013. return subtreeUpdated;
  31014. };
  31015. /** @internal */
  31016. /**
  31017. * \@internal
  31018. * @param {?} index
  31019. * @return {?}
  31020. */
  31021. FormArray.prototype._throwIfControlMissing = /**
  31022. * \@internal
  31023. * @param {?} index
  31024. * @return {?}
  31025. */
  31026. function (index) {
  31027. if (!this.controls.length) {
  31028. throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");
  31029. }
  31030. if (!this.at(index)) {
  31031. throw new Error("Cannot find form control at index " + index);
  31032. }
  31033. };
  31034. /** @internal */
  31035. /**
  31036. * \@internal
  31037. * @param {?} cb
  31038. * @return {?}
  31039. */
  31040. FormArray.prototype._forEachChild = /**
  31041. * \@internal
  31042. * @param {?} cb
  31043. * @return {?}
  31044. */
  31045. function (cb) {
  31046. this.controls.forEach(function (control, index) { cb(control, index); });
  31047. };
  31048. /** @internal */
  31049. /**
  31050. * \@internal
  31051. * @return {?}
  31052. */
  31053. FormArray.prototype._updateValue = /**
  31054. * \@internal
  31055. * @return {?}
  31056. */
  31057. function () {
  31058. var _this = this;
  31059. (/** @type {?} */ (this)).value =
  31060. this.controls.filter(function (control) { return control.enabled || _this.disabled; })
  31061. .map(function (control) { return control.value; });
  31062. };
  31063. /** @internal */
  31064. /**
  31065. * \@internal
  31066. * @param {?} condition
  31067. * @return {?}
  31068. */
  31069. FormArray.prototype._anyControls = /**
  31070. * \@internal
  31071. * @param {?} condition
  31072. * @return {?}
  31073. */
  31074. function (condition) {
  31075. return this.controls.some(function (control) { return control.enabled && condition(control); });
  31076. };
  31077. /** @internal */
  31078. /**
  31079. * \@internal
  31080. * @return {?}
  31081. */
  31082. FormArray.prototype._setUpControls = /**
  31083. * \@internal
  31084. * @return {?}
  31085. */
  31086. function () {
  31087. var _this = this;
  31088. this._forEachChild(function (control) { return _this._registerControl(control); });
  31089. };
  31090. /** @internal */
  31091. /**
  31092. * \@internal
  31093. * @param {?} value
  31094. * @return {?}
  31095. */
  31096. FormArray.prototype._checkAllValuesPresent = /**
  31097. * \@internal
  31098. * @param {?} value
  31099. * @return {?}
  31100. */
  31101. function (value) {
  31102. this._forEachChild(function (control, i) {
  31103. if (value[i] === undefined) {
  31104. throw new Error("Must supply a value for form control at index: " + i + ".");
  31105. }
  31106. });
  31107. };
  31108. /** @internal */
  31109. /**
  31110. * \@internal
  31111. * @return {?}
  31112. */
  31113. FormArray.prototype._allControlsDisabled = /**
  31114. * \@internal
  31115. * @return {?}
  31116. */
  31117. function () {
  31118. for (var _i = 0, _a = this.controls; _i < _a.length; _i++) {
  31119. var control = _a[_i];
  31120. if (control.enabled)
  31121. return false;
  31122. }
  31123. return this.controls.length > 0 || this.disabled;
  31124. };
  31125. /**
  31126. * @param {?} control
  31127. * @return {?}
  31128. */
  31129. FormArray.prototype._registerControl = /**
  31130. * @param {?} control
  31131. * @return {?}
  31132. */
  31133. function (control) {
  31134. control.setParent(this);
  31135. control._registerOnCollectionChange(this._onCollectionChange);
  31136. };
  31137. return FormArray;
  31138. }(AbstractControl));
  31139. /**
  31140. * @fileoverview added by tsickle
  31141. * @suppress {checkTypes} checked by tsc
  31142. */
  31143. /**
  31144. * @license
  31145. * Copyright Google Inc. All Rights Reserved.
  31146. *
  31147. * Use of this source code is governed by an MIT-style license that can be
  31148. * found in the LICENSE file at https://angular.io/license
  31149. */
  31150. var formDirectiveProvider = {
  31151. provide: ControlContainer,
  31152. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return NgForm; })
  31153. };
  31154. var resolvedPromise = Promise.resolve(null);
  31155. /**
  31156. * \@whatItDoes Creates a top-level {\@link FormGroup} instance and binds it to a form
  31157. * to track aggregate form value and validation status.
  31158. *
  31159. * \@howToUse
  31160. *
  31161. * As soon as you import the `FormsModule`, this directive becomes active by default on
  31162. * all `<form>` tags. You don't need to add a special selector.
  31163. *
  31164. * You can export the directive into a local template variable using `ngForm` as the key
  31165. * (ex: `#myForm="ngForm"`). This is optional, but useful. Many properties from the underlying
  31166. * {\@link FormGroup} instance are duplicated on the directive itself, so a reference to it
  31167. * will give you access to the aggregate value and validity status of the form, as well as
  31168. * user interaction properties like `dirty` and `touched`.
  31169. *
  31170. * To register child controls with the form, you'll want to use {\@link NgModel} with a
  31171. * `name` attribute. You can also use {\@link NgModelGroup} if you'd like to create
  31172. * sub-groups within the form.
  31173. *
  31174. * You can listen to the directive's `ngSubmit` event to be notified when the user has
  31175. * triggered a form submission. The `ngSubmit` event will be emitted with the original form
  31176. * submission event.
  31177. *
  31178. * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.
  31179. * If you want to import the `FormsModule` but skip its usage in some forms,
  31180. * for example, to use native HTML5 validation, you can add `ngNoForm` and the `<form>`
  31181. * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is
  31182. * unnecessary because the `<form>` tags are inert. In that case, you would
  31183. * refrain from using the `formGroup` directive.
  31184. *
  31185. * {\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}
  31186. *
  31187. * * **npm package**: `\@angular/forms`
  31188. *
  31189. * * **NgModule**: `FormsModule`
  31190. *
  31191. * \@stable
  31192. */
  31193. var NgForm = /** @class */ (function (_super) {
  31194. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgForm, _super);
  31195. function NgForm(validators, asyncValidators) {
  31196. var _this = _super.call(this) || this;
  31197. _this.submitted = false;
  31198. _this._directives = [];
  31199. _this.ngSubmit = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  31200. _this.form =
  31201. new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));
  31202. return _this;
  31203. }
  31204. /**
  31205. * @return {?}
  31206. */
  31207. NgForm.prototype.ngAfterViewInit = /**
  31208. * @return {?}
  31209. */
  31210. function () { this._setUpdateStrategy(); };
  31211. Object.defineProperty(NgForm.prototype, "formDirective", {
  31212. get: /**
  31213. * @return {?}
  31214. */
  31215. function () { return this; },
  31216. enumerable: true,
  31217. configurable: true
  31218. });
  31219. Object.defineProperty(NgForm.prototype, "control", {
  31220. get: /**
  31221. * @return {?}
  31222. */
  31223. function () { return this.form; },
  31224. enumerable: true,
  31225. configurable: true
  31226. });
  31227. Object.defineProperty(NgForm.prototype, "path", {
  31228. get: /**
  31229. * @return {?}
  31230. */
  31231. function () { return []; },
  31232. enumerable: true,
  31233. configurable: true
  31234. });
  31235. Object.defineProperty(NgForm.prototype, "controls", {
  31236. get: /**
  31237. * @return {?}
  31238. */
  31239. function () { return this.form.controls; },
  31240. enumerable: true,
  31241. configurable: true
  31242. });
  31243. /**
  31244. * @param {?} dir
  31245. * @return {?}
  31246. */
  31247. NgForm.prototype.addControl = /**
  31248. * @param {?} dir
  31249. * @return {?}
  31250. */
  31251. function (dir) {
  31252. var _this = this;
  31253. resolvedPromise.then(function () {
  31254. var /** @type {?} */ container = _this._findContainer(dir.path);
  31255. (/** @type {?} */ (dir)).control = /** @type {?} */ (container.registerControl(dir.name, dir.control));
  31256. setUpControl(dir.control, dir);
  31257. dir.control.updateValueAndValidity({ emitEvent: false });
  31258. _this._directives.push(dir);
  31259. });
  31260. };
  31261. /**
  31262. * @param {?} dir
  31263. * @return {?}
  31264. */
  31265. NgForm.prototype.getControl = /**
  31266. * @param {?} dir
  31267. * @return {?}
  31268. */
  31269. function (dir) { return /** @type {?} */ (this.form.get(dir.path)); };
  31270. /**
  31271. * @param {?} dir
  31272. * @return {?}
  31273. */
  31274. NgForm.prototype.removeControl = /**
  31275. * @param {?} dir
  31276. * @return {?}
  31277. */
  31278. function (dir) {
  31279. var _this = this;
  31280. resolvedPromise.then(function () {
  31281. var /** @type {?} */ container = _this._findContainer(dir.path);
  31282. if (container) {
  31283. container.removeControl(dir.name);
  31284. }
  31285. removeDir(_this._directives, dir);
  31286. });
  31287. };
  31288. /**
  31289. * @param {?} dir
  31290. * @return {?}
  31291. */
  31292. NgForm.prototype.addFormGroup = /**
  31293. * @param {?} dir
  31294. * @return {?}
  31295. */
  31296. function (dir) {
  31297. var _this = this;
  31298. resolvedPromise.then(function () {
  31299. var /** @type {?} */ container = _this._findContainer(dir.path);
  31300. var /** @type {?} */ group = new FormGroup({});
  31301. setUpFormContainer(group, dir);
  31302. container.registerControl(dir.name, group);
  31303. group.updateValueAndValidity({ emitEvent: false });
  31304. });
  31305. };
  31306. /**
  31307. * @param {?} dir
  31308. * @return {?}
  31309. */
  31310. NgForm.prototype.removeFormGroup = /**
  31311. * @param {?} dir
  31312. * @return {?}
  31313. */
  31314. function (dir) {
  31315. var _this = this;
  31316. resolvedPromise.then(function () {
  31317. var /** @type {?} */ container = _this._findContainer(dir.path);
  31318. if (container) {
  31319. container.removeControl(dir.name);
  31320. }
  31321. });
  31322. };
  31323. /**
  31324. * @param {?} dir
  31325. * @return {?}
  31326. */
  31327. NgForm.prototype.getFormGroup = /**
  31328. * @param {?} dir
  31329. * @return {?}
  31330. */
  31331. function (dir) { return /** @type {?} */ (this.form.get(dir.path)); };
  31332. /**
  31333. * @param {?} dir
  31334. * @param {?} value
  31335. * @return {?}
  31336. */
  31337. NgForm.prototype.updateModel = /**
  31338. * @param {?} dir
  31339. * @param {?} value
  31340. * @return {?}
  31341. */
  31342. function (dir, value) {
  31343. var _this = this;
  31344. resolvedPromise.then(function () {
  31345. var /** @type {?} */ ctrl = /** @type {?} */ (_this.form.get(/** @type {?} */ ((dir.path))));
  31346. ctrl.setValue(value);
  31347. });
  31348. };
  31349. /**
  31350. * @param {?} value
  31351. * @return {?}
  31352. */
  31353. NgForm.prototype.setValue = /**
  31354. * @param {?} value
  31355. * @return {?}
  31356. */
  31357. function (value) { this.control.setValue(value); };
  31358. /**
  31359. * @param {?} $event
  31360. * @return {?}
  31361. */
  31362. NgForm.prototype.onSubmit = /**
  31363. * @param {?} $event
  31364. * @return {?}
  31365. */
  31366. function ($event) {
  31367. (/** @type {?} */ (this)).submitted = true;
  31368. syncPendingControls(this.form, this._directives);
  31369. this.ngSubmit.emit($event);
  31370. return false;
  31371. };
  31372. /**
  31373. * @return {?}
  31374. */
  31375. NgForm.prototype.onReset = /**
  31376. * @return {?}
  31377. */
  31378. function () { this.resetForm(); };
  31379. /**
  31380. * @param {?=} value
  31381. * @return {?}
  31382. */
  31383. NgForm.prototype.resetForm = /**
  31384. * @param {?=} value
  31385. * @return {?}
  31386. */
  31387. function (value) {
  31388. if (value === void 0) { value = undefined; }
  31389. this.form.reset(value);
  31390. (/** @type {?} */ (this)).submitted = false;
  31391. };
  31392. /**
  31393. * @return {?}
  31394. */
  31395. NgForm.prototype._setUpdateStrategy = /**
  31396. * @return {?}
  31397. */
  31398. function () {
  31399. if (this.options && this.options.updateOn != null) {
  31400. this.form._updateOn = this.options.updateOn;
  31401. }
  31402. };
  31403. /** @internal */
  31404. /**
  31405. * \@internal
  31406. * @param {?} path
  31407. * @return {?}
  31408. */
  31409. NgForm.prototype._findContainer = /**
  31410. * \@internal
  31411. * @param {?} path
  31412. * @return {?}
  31413. */
  31414. function (path) {
  31415. path.pop();
  31416. return path.length ? /** @type {?} */ (this.form.get(path)) : this.form;
  31417. };
  31418. NgForm.decorators = [
  31419. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  31420. selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]',
  31421. providers: [formDirectiveProvider],
  31422. host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },
  31423. outputs: ['ngSubmit'],
  31424. exportAs: 'ngForm'
  31425. },] },
  31426. ];
  31427. /** @nocollapse */
  31428. NgForm.ctorParameters = function () { return [
  31429. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  31430. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  31431. ]; };
  31432. NgForm.propDecorators = {
  31433. "options": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngFormOptions',] },],
  31434. };
  31435. return NgForm;
  31436. }(ControlContainer));
  31437. /**
  31438. * @fileoverview added by tsickle
  31439. * @suppress {checkTypes} checked by tsc
  31440. */
  31441. /**
  31442. * @license
  31443. * Copyright Google Inc. All Rights Reserved.
  31444. *
  31445. * Use of this source code is governed by an MIT-style license that can be
  31446. * found in the LICENSE file at https://angular.io/license
  31447. */
  31448. var FormErrorExamples = {
  31449. formControlName: "\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });",
  31450. formGroupName: "\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });",
  31451. formArrayName: "\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });",
  31452. ngModelGroup: "\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>",
  31453. ngModelWithFormGroup: "\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n "
  31454. };
  31455. /**
  31456. * @fileoverview added by tsickle
  31457. * @suppress {checkTypes} checked by tsc
  31458. */
  31459. /**
  31460. * @license
  31461. * Copyright Google Inc. All Rights Reserved.
  31462. *
  31463. * Use of this source code is governed by an MIT-style license that can be
  31464. * found in the LICENSE file at https://angular.io/license
  31465. */
  31466. var TemplateDrivenErrors = /** @class */ (function () {
  31467. function TemplateDrivenErrors() {
  31468. }
  31469. /**
  31470. * @return {?}
  31471. */
  31472. TemplateDrivenErrors.modelParentException = /**
  31473. * @return {?}
  31474. */
  31475. function () {
  31476. throw new Error("\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n " + FormErrorExamples.formControlName + "\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n " + FormErrorExamples.ngModelWithFormGroup);
  31477. };
  31478. /**
  31479. * @return {?}
  31480. */
  31481. TemplateDrivenErrors.formGroupNameException = /**
  31482. * @return {?}
  31483. */
  31484. function () {
  31485. throw new Error("\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n " + FormErrorExamples.formGroupName + "\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n " + FormErrorExamples.ngModelGroup);
  31486. };
  31487. /**
  31488. * @return {?}
  31489. */
  31490. TemplateDrivenErrors.missingNameException = /**
  31491. * @return {?}
  31492. */
  31493. function () {
  31494. throw new Error("If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">");
  31495. };
  31496. /**
  31497. * @return {?}
  31498. */
  31499. TemplateDrivenErrors.modelGroupParentException = /**
  31500. * @return {?}
  31501. */
  31502. function () {
  31503. throw new Error("\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n " + FormErrorExamples.formGroupName + "\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n " + FormErrorExamples.ngModelGroup);
  31504. };
  31505. return TemplateDrivenErrors;
  31506. }());
  31507. /**
  31508. * @fileoverview added by tsickle
  31509. * @suppress {checkTypes} checked by tsc
  31510. */
  31511. /**
  31512. * @license
  31513. * Copyright Google Inc. All Rights Reserved.
  31514. *
  31515. * Use of this source code is governed by an MIT-style license that can be
  31516. * found in the LICENSE file at https://angular.io/license
  31517. */
  31518. var modelGroupProvider = {
  31519. provide: ControlContainer,
  31520. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return NgModelGroup; })
  31521. };
  31522. /**
  31523. * \@whatItDoes Creates and binds a {\@link FormGroup} instance to a DOM element.
  31524. *
  31525. * \@howToUse
  31526. *
  31527. * This directive can only be used as a child of {\@link NgForm} (or in other words,
  31528. * within `<form>` tags).
  31529. *
  31530. * Use this directive if you'd like to create a sub-group within a form. This can
  31531. * come in handy if you want to validate a sub-group of your form separately from
  31532. * the rest of your form, or if some values in your domain model make more sense to
  31533. * consume together in a nested object.
  31534. *
  31535. * Pass in the name you'd like this sub-group to have and it will become the key
  31536. * for the sub-group in the form's full value. You can also export the directive into
  31537. * a local template variable using `ngModelGroup` (ex: `#myGroup="ngModelGroup"`).
  31538. *
  31539. * {\@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}
  31540. *
  31541. * * **npm package**: `\@angular/forms`
  31542. *
  31543. * * **NgModule**: `FormsModule`
  31544. *
  31545. * \@stable
  31546. */
  31547. var NgModelGroup = /** @class */ (function (_super) {
  31548. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgModelGroup, _super);
  31549. function NgModelGroup(parent, validators, asyncValidators) {
  31550. var _this = _super.call(this) || this;
  31551. _this._parent = parent;
  31552. _this._validators = validators;
  31553. _this._asyncValidators = asyncValidators;
  31554. return _this;
  31555. }
  31556. /** @internal */
  31557. /**
  31558. * \@internal
  31559. * @return {?}
  31560. */
  31561. NgModelGroup.prototype._checkParentType = /**
  31562. * \@internal
  31563. * @return {?}
  31564. */
  31565. function () {
  31566. if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {
  31567. TemplateDrivenErrors.modelGroupParentException();
  31568. }
  31569. };
  31570. NgModelGroup.decorators = [
  31571. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' },] },
  31572. ];
  31573. /** @nocollapse */
  31574. NgModelGroup.ctorParameters = function () { return [
  31575. { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_2" /* SkipSelf */] },] },
  31576. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  31577. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  31578. ]; };
  31579. NgModelGroup.propDecorators = {
  31580. "name": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngModelGroup',] },],
  31581. };
  31582. return NgModelGroup;
  31583. }(AbstractFormGroupDirective));
  31584. /**
  31585. * @fileoverview added by tsickle
  31586. * @suppress {checkTypes} checked by tsc
  31587. */
  31588. /**
  31589. * @license
  31590. * Copyright Google Inc. All Rights Reserved.
  31591. *
  31592. * Use of this source code is governed by an MIT-style license that can be
  31593. * found in the LICENSE file at https://angular.io/license
  31594. */
  31595. var formControlBinding = {
  31596. provide: NgControl,
  31597. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return NgModel; })
  31598. };
  31599. /**
  31600. * `ngModel` forces an additional change detection run when its inputs change:
  31601. * E.g.:
  31602. * ```
  31603. * <div>{{myModel.valid}}</div>
  31604. * <input [(ngModel)]="myValue" #myModel="ngModel">
  31605. * ```
  31606. * I.e. `ngModel` can export itself on the element and then be used in the template.
  31607. * Normally, this would result in expressions before the `input` that use the exported directive
  31608. * to have and old value as they have been
  31609. * dirty checked before. As this is a very common case for `ngModel`, we added this second change
  31610. * detection run.
  31611. *
  31612. * Notes:
  31613. * - this is just one extra run no matter how many `ngModel` have been changed.
  31614. * - this is a general problem when using `exportAs` for directives!
  31615. */
  31616. var resolvedPromise$1 = Promise.resolve(null);
  31617. /**
  31618. * \@whatItDoes Creates a {\@link FormControl} instance from a domain model and binds it
  31619. * to a form control element.
  31620. *
  31621. * The {\@link FormControl} instance will track the value, user interaction, and
  31622. * validation status of the control and keep the view synced with the model. If used
  31623. * within a parent form, the directive will also register itself with the form as a child
  31624. * control.
  31625. *
  31626. * \@howToUse
  31627. *
  31628. * This directive can be used by itself or as part of a larger form. All you need is the
  31629. * `ngModel` selector to activate it.
  31630. *
  31631. * It accepts a domain model as an optional {\@link Input}. If you have a one-way binding
  31632. * to `ngModel` with `[]` syntax, changing the value of the domain model in the component
  31633. * class will set the value in the view. If you have a two-way binding with `[()]` syntax
  31634. * (also known as 'banana-box syntax'), the value in the UI will always be synced back to
  31635. * the domain model in your class as well.
  31636. *
  31637. * If you wish to inspect the properties of the associated {\@link FormControl} (like
  31638. * validity state), you can also export the directive into a local template variable using
  31639. * `ngModel` as the key (ex: `#myVar="ngModel"`). You can then access the control using the
  31640. * directive's `control` property, but most properties you'll need (like `valid` and `dirty`)
  31641. * will fall through to the control anyway, so you can access them directly. You can see a
  31642. * full list of properties directly available in {\@link AbstractControlDirective}.
  31643. *
  31644. * The following is an example of a simple standalone control using `ngModel`:
  31645. *
  31646. * {\@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}
  31647. *
  31648. * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute
  31649. * so that the control can be registered with the parent form under that name.
  31650. *
  31651. * It's worth noting that in the context of a parent form, you often can skip one-way or
  31652. * two-way binding because the parent form will sync the value for you. You can access
  31653. * its properties by exporting it into a local template variable using `ngForm` (ex:
  31654. * `#f="ngForm"`). Then you can pass it where it needs to go on submit.
  31655. *
  31656. * If you do need to populate initial values into your form, using a one-way binding for
  31657. * `ngModel` tends to be sufficient as long as you use the exported form's value rather
  31658. * than the domain model's value on submit.
  31659. *
  31660. * Take a look at an example of using `ngModel` within a form:
  31661. *
  31662. * {\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}
  31663. *
  31664. * To see `ngModel` examples with different form control types, see:
  31665. *
  31666. * * Radio buttons: {\@link RadioControlValueAccessor}
  31667. * * Selects: {\@link SelectControlValueAccessor}
  31668. *
  31669. * **npm package**: `\@angular/forms`
  31670. *
  31671. * **NgModule**: `FormsModule`
  31672. *
  31673. * \@stable
  31674. */
  31675. var NgModel = /** @class */ (function (_super) {
  31676. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NgModel, _super);
  31677. function NgModel(parent, validators, asyncValidators, valueAccessors) {
  31678. var _this = _super.call(this) || this;
  31679. _this.control = new FormControl();
  31680. /**
  31681. * \@internal
  31682. */
  31683. _this._registered = false;
  31684. _this.update = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  31685. _this._parent = parent;
  31686. _this._rawValidators = validators || [];
  31687. _this._rawAsyncValidators = asyncValidators || [];
  31688. _this.valueAccessor = selectValueAccessor(_this, valueAccessors);
  31689. return _this;
  31690. }
  31691. /**
  31692. * @param {?} changes
  31693. * @return {?}
  31694. */
  31695. NgModel.prototype.ngOnChanges = /**
  31696. * @param {?} changes
  31697. * @return {?}
  31698. */
  31699. function (changes) {
  31700. this._checkForErrors();
  31701. if (!this._registered)
  31702. this._setUpControl();
  31703. if ('isDisabled' in changes) {
  31704. this._updateDisabled(changes);
  31705. }
  31706. if (isPropertyUpdated(changes, this.viewModel)) {
  31707. this._updateValue(this.model);
  31708. this.viewModel = this.model;
  31709. }
  31710. };
  31711. /**
  31712. * @return {?}
  31713. */
  31714. NgModel.prototype.ngOnDestroy = /**
  31715. * @return {?}
  31716. */
  31717. function () { this.formDirective && this.formDirective.removeControl(this); };
  31718. Object.defineProperty(NgModel.prototype, "path", {
  31719. get: /**
  31720. * @return {?}
  31721. */
  31722. function () {
  31723. return this._parent ? controlPath(this.name, this._parent) : [this.name];
  31724. },
  31725. enumerable: true,
  31726. configurable: true
  31727. });
  31728. Object.defineProperty(NgModel.prototype, "formDirective", {
  31729. get: /**
  31730. * @return {?}
  31731. */
  31732. function () { return this._parent ? this._parent.formDirective : null; },
  31733. enumerable: true,
  31734. configurable: true
  31735. });
  31736. Object.defineProperty(NgModel.prototype, "validator", {
  31737. get: /**
  31738. * @return {?}
  31739. */
  31740. function () { return composeValidators(this._rawValidators); },
  31741. enumerable: true,
  31742. configurable: true
  31743. });
  31744. Object.defineProperty(NgModel.prototype, "asyncValidator", {
  31745. get: /**
  31746. * @return {?}
  31747. */
  31748. function () {
  31749. return composeAsyncValidators(this._rawAsyncValidators);
  31750. },
  31751. enumerable: true,
  31752. configurable: true
  31753. });
  31754. /**
  31755. * @param {?} newValue
  31756. * @return {?}
  31757. */
  31758. NgModel.prototype.viewToModelUpdate = /**
  31759. * @param {?} newValue
  31760. * @return {?}
  31761. */
  31762. function (newValue) {
  31763. this.viewModel = newValue;
  31764. this.update.emit(newValue);
  31765. };
  31766. /**
  31767. * @return {?}
  31768. */
  31769. NgModel.prototype._setUpControl = /**
  31770. * @return {?}
  31771. */
  31772. function () {
  31773. this._setUpdateStrategy();
  31774. this._isStandalone() ? this._setUpStandalone() :
  31775. this.formDirective.addControl(this);
  31776. this._registered = true;
  31777. };
  31778. /**
  31779. * @return {?}
  31780. */
  31781. NgModel.prototype._setUpdateStrategy = /**
  31782. * @return {?}
  31783. */
  31784. function () {
  31785. if (this.options && this.options.updateOn != null) {
  31786. this.control._updateOn = this.options.updateOn;
  31787. }
  31788. };
  31789. /**
  31790. * @return {?}
  31791. */
  31792. NgModel.prototype._isStandalone = /**
  31793. * @return {?}
  31794. */
  31795. function () {
  31796. return !this._parent || !!(this.options && this.options.standalone);
  31797. };
  31798. /**
  31799. * @return {?}
  31800. */
  31801. NgModel.prototype._setUpStandalone = /**
  31802. * @return {?}
  31803. */
  31804. function () {
  31805. setUpControl(this.control, this);
  31806. this.control.updateValueAndValidity({ emitEvent: false });
  31807. };
  31808. /**
  31809. * @return {?}
  31810. */
  31811. NgModel.prototype._checkForErrors = /**
  31812. * @return {?}
  31813. */
  31814. function () {
  31815. if (!this._isStandalone()) {
  31816. this._checkParentType();
  31817. }
  31818. this._checkName();
  31819. };
  31820. /**
  31821. * @return {?}
  31822. */
  31823. NgModel.prototype._checkParentType = /**
  31824. * @return {?}
  31825. */
  31826. function () {
  31827. if (!(this._parent instanceof NgModelGroup) &&
  31828. this._parent instanceof AbstractFormGroupDirective) {
  31829. TemplateDrivenErrors.formGroupNameException();
  31830. }
  31831. else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {
  31832. TemplateDrivenErrors.modelParentException();
  31833. }
  31834. };
  31835. /**
  31836. * @return {?}
  31837. */
  31838. NgModel.prototype._checkName = /**
  31839. * @return {?}
  31840. */
  31841. function () {
  31842. if (this.options && this.options.name)
  31843. this.name = this.options.name;
  31844. if (!this._isStandalone() && !this.name) {
  31845. TemplateDrivenErrors.missingNameException();
  31846. }
  31847. };
  31848. /**
  31849. * @param {?} value
  31850. * @return {?}
  31851. */
  31852. NgModel.prototype._updateValue = /**
  31853. * @param {?} value
  31854. * @return {?}
  31855. */
  31856. function (value) {
  31857. var _this = this;
  31858. resolvedPromise$1.then(function () { _this.control.setValue(value, { emitViewToModelChange: false }); });
  31859. };
  31860. /**
  31861. * @param {?} changes
  31862. * @return {?}
  31863. */
  31864. NgModel.prototype._updateDisabled = /**
  31865. * @param {?} changes
  31866. * @return {?}
  31867. */
  31868. function (changes) {
  31869. var _this = this;
  31870. var /** @type {?} */ disabledValue = changes['isDisabled'].currentValue;
  31871. var /** @type {?} */ isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');
  31872. resolvedPromise$1.then(function () {
  31873. if (isDisabled && !_this.control.disabled) {
  31874. _this.control.disable();
  31875. }
  31876. else if (!isDisabled && _this.control.disabled) {
  31877. _this.control.enable();
  31878. }
  31879. });
  31880. };
  31881. NgModel.decorators = [
  31882. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  31883. selector: '[ngModel]:not([formControlName]):not([formControl])',
  31884. providers: [formControlBinding],
  31885. exportAs: 'ngModel'
  31886. },] },
  31887. ];
  31888. /** @nocollapse */
  31889. NgModel.ctorParameters = function () { return [
  31890. { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] },] },
  31891. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  31892. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  31893. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALUE_ACCESSOR,] },] },
  31894. ]; };
  31895. NgModel.propDecorators = {
  31896. "name": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  31897. "isDisabled": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['disabled',] },],
  31898. "model": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngModel',] },],
  31899. "options": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngModelOptions',] },],
  31900. "update": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["O" /* Output */], args: ['ngModelChange',] },],
  31901. };
  31902. return NgModel;
  31903. }(NgControl));
  31904. /**
  31905. * @fileoverview added by tsickle
  31906. * @suppress {checkTypes} checked by tsc
  31907. */
  31908. /**
  31909. * @license
  31910. * Copyright Google Inc. All Rights Reserved.
  31911. *
  31912. * Use of this source code is governed by an MIT-style license that can be
  31913. * found in the LICENSE file at https://angular.io/license
  31914. */
  31915. var ReactiveErrors = /** @class */ (function () {
  31916. function ReactiveErrors() {
  31917. }
  31918. /**
  31919. * @return {?}
  31920. */
  31921. ReactiveErrors.controlParentException = /**
  31922. * @return {?}
  31923. */
  31924. function () {
  31925. throw new Error("formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n " + FormErrorExamples.formControlName);
  31926. };
  31927. /**
  31928. * @return {?}
  31929. */
  31930. ReactiveErrors.ngModelGroupException = /**
  31931. * @return {?}
  31932. */
  31933. function () {
  31934. throw new Error("formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n " + FormErrorExamples.formGroupName + "\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n " + FormErrorExamples.ngModelGroup);
  31935. };
  31936. /**
  31937. * @return {?}
  31938. */
  31939. ReactiveErrors.missingFormException = /**
  31940. * @return {?}
  31941. */
  31942. function () {
  31943. throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n " + FormErrorExamples.formControlName);
  31944. };
  31945. /**
  31946. * @return {?}
  31947. */
  31948. ReactiveErrors.groupParentException = /**
  31949. * @return {?}
  31950. */
  31951. function () {
  31952. throw new Error("formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n " + FormErrorExamples.formGroupName);
  31953. };
  31954. /**
  31955. * @return {?}
  31956. */
  31957. ReactiveErrors.arrayParentException = /**
  31958. * @return {?}
  31959. */
  31960. function () {
  31961. throw new Error("formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n " + FormErrorExamples.formArrayName);
  31962. };
  31963. /**
  31964. * @return {?}
  31965. */
  31966. ReactiveErrors.disabledAttrWarning = /**
  31967. * @return {?}
  31968. */
  31969. function () {
  31970. console.warn("\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n ");
  31971. };
  31972. return ReactiveErrors;
  31973. }());
  31974. /**
  31975. * @fileoverview added by tsickle
  31976. * @suppress {checkTypes} checked by tsc
  31977. */
  31978. /**
  31979. * @license
  31980. * Copyright Google Inc. All Rights Reserved.
  31981. *
  31982. * Use of this source code is governed by an MIT-style license that can be
  31983. * found in the LICENSE file at https://angular.io/license
  31984. */
  31985. var formControlBinding$1 = {
  31986. provide: NgControl,
  31987. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return FormControlDirective; })
  31988. };
  31989. /**
  31990. * \@whatItDoes Syncs a standalone {\@link FormControl} instance to a form control element.
  31991. *
  31992. * In other words, this directive ensures that any values written to the {\@link FormControl}
  31993. * instance programmatically will be written to the DOM element (model -> view). Conversely,
  31994. * any values written to the DOM element through user input will be reflected in the
  31995. * {\@link FormControl} instance (view -> model).
  31996. *
  31997. * \@howToUse
  31998. *
  31999. * Use this directive if you'd like to create and manage a {\@link FormControl} instance directly.
  32000. * Simply create a {\@link FormControl}, save it to your component class, and pass it into the
  32001. * {\@link FormControlDirective}.
  32002. *
  32003. * This directive is designed to be used as a standalone control. Unlike {\@link FormControlName},
  32004. * it does not require that your {\@link FormControl} instance be part of any parent
  32005. * {\@link FormGroup}, and it won't be registered to any {\@link FormGroupDirective} that
  32006. * exists above it.
  32007. *
  32008. * **Get the value**: the `value` property is always synced and available on the
  32009. * {\@link FormControl} instance. See a full list of available properties in
  32010. * {\@link AbstractControl}.
  32011. *
  32012. * **Set the value**: You can pass in an initial value when instantiating the {\@link FormControl},
  32013. * or you can set it programmatically later using {\@link AbstractControl#setValue setValue} or
  32014. * {\@link AbstractControl#patchValue patchValue}.
  32015. *
  32016. * **Listen to value**: If you want to listen to changes in the value of the control, you can
  32017. * subscribe to the {\@link AbstractControl#valueChanges valueChanges} event. You can also listen to
  32018. * {\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is
  32019. * re-calculated.
  32020. *
  32021. * ### Example
  32022. *
  32023. * {\@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}
  32024. *
  32025. * * **npm package**: `\@angular/forms`
  32026. *
  32027. * * **NgModule**: `ReactiveFormsModule`
  32028. *
  32029. * \@stable
  32030. */
  32031. var FormControlDirective = /** @class */ (function (_super) {
  32032. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormControlDirective, _super);
  32033. function FormControlDirective(validators, asyncValidators, valueAccessors) {
  32034. var _this = _super.call(this) || this;
  32035. _this.update = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  32036. _this._rawValidators = validators || [];
  32037. _this._rawAsyncValidators = asyncValidators || [];
  32038. _this.valueAccessor = selectValueAccessor(_this, valueAccessors);
  32039. return _this;
  32040. }
  32041. Object.defineProperty(FormControlDirective.prototype, "isDisabled", {
  32042. set: /**
  32043. * @param {?} isDisabled
  32044. * @return {?}
  32045. */
  32046. function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },
  32047. enumerable: true,
  32048. configurable: true
  32049. });
  32050. /**
  32051. * @param {?} changes
  32052. * @return {?}
  32053. */
  32054. FormControlDirective.prototype.ngOnChanges = /**
  32055. * @param {?} changes
  32056. * @return {?}
  32057. */
  32058. function (changes) {
  32059. if (this._isControlChanged(changes)) {
  32060. setUpControl(this.form, this);
  32061. if (this.control.disabled && /** @type {?} */ ((this.valueAccessor)).setDisabledState) {
  32062. /** @type {?} */ ((/** @type {?} */ ((this.valueAccessor)).setDisabledState))(true);
  32063. }
  32064. this.form.updateValueAndValidity({ emitEvent: false });
  32065. }
  32066. if (isPropertyUpdated(changes, this.viewModel)) {
  32067. this.form.setValue(this.model);
  32068. this.viewModel = this.model;
  32069. }
  32070. };
  32071. Object.defineProperty(FormControlDirective.prototype, "path", {
  32072. get: /**
  32073. * @return {?}
  32074. */
  32075. function () { return []; },
  32076. enumerable: true,
  32077. configurable: true
  32078. });
  32079. Object.defineProperty(FormControlDirective.prototype, "validator", {
  32080. get: /**
  32081. * @return {?}
  32082. */
  32083. function () { return composeValidators(this._rawValidators); },
  32084. enumerable: true,
  32085. configurable: true
  32086. });
  32087. Object.defineProperty(FormControlDirective.prototype, "asyncValidator", {
  32088. get: /**
  32089. * @return {?}
  32090. */
  32091. function () {
  32092. return composeAsyncValidators(this._rawAsyncValidators);
  32093. },
  32094. enumerable: true,
  32095. configurable: true
  32096. });
  32097. Object.defineProperty(FormControlDirective.prototype, "control", {
  32098. get: /**
  32099. * @return {?}
  32100. */
  32101. function () { return this.form; },
  32102. enumerable: true,
  32103. configurable: true
  32104. });
  32105. /**
  32106. * @param {?} newValue
  32107. * @return {?}
  32108. */
  32109. FormControlDirective.prototype.viewToModelUpdate = /**
  32110. * @param {?} newValue
  32111. * @return {?}
  32112. */
  32113. function (newValue) {
  32114. this.viewModel = newValue;
  32115. this.update.emit(newValue);
  32116. };
  32117. /**
  32118. * @param {?} changes
  32119. * @return {?}
  32120. */
  32121. FormControlDirective.prototype._isControlChanged = /**
  32122. * @param {?} changes
  32123. * @return {?}
  32124. */
  32125. function (changes) {
  32126. return changes.hasOwnProperty('form');
  32127. };
  32128. FormControlDirective.decorators = [
  32129. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' },] },
  32130. ];
  32131. /** @nocollapse */
  32132. FormControlDirective.ctorParameters = function () { return [
  32133. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  32134. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  32135. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALUE_ACCESSOR,] },] },
  32136. ]; };
  32137. FormControlDirective.propDecorators = {
  32138. "form": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['formControl',] },],
  32139. "model": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngModel',] },],
  32140. "update": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["O" /* Output */], args: ['ngModelChange',] },],
  32141. "isDisabled": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['disabled',] },],
  32142. };
  32143. return FormControlDirective;
  32144. }(NgControl));
  32145. /**
  32146. * @fileoverview added by tsickle
  32147. * @suppress {checkTypes} checked by tsc
  32148. */
  32149. /**
  32150. * @license
  32151. * Copyright Google Inc. All Rights Reserved.
  32152. *
  32153. * Use of this source code is governed by an MIT-style license that can be
  32154. * found in the LICENSE file at https://angular.io/license
  32155. */
  32156. var formDirectiveProvider$1 = {
  32157. provide: ControlContainer,
  32158. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return FormGroupDirective; })
  32159. };
  32160. /**
  32161. * \@whatItDoes Binds an existing {\@link FormGroup} to a DOM element.
  32162. *
  32163. * \@howToUse
  32164. *
  32165. * This directive accepts an existing {\@link FormGroup} instance. It will then use this
  32166. * {\@link FormGroup} instance to match any child {\@link FormControl}, {\@link FormGroup},
  32167. * and {\@link FormArray} instances to child {\@link FormControlName}, {\@link FormGroupName},
  32168. * and {\@link FormArrayName} directives.
  32169. *
  32170. * **Set value**: You can set the form's initial value when instantiating the
  32171. * {\@link FormGroup}, or you can set it programmatically later using the {\@link FormGroup}'s
  32172. * {\@link AbstractControl#setValue setValue} or {\@link AbstractControl#patchValue patchValue}
  32173. * methods.
  32174. *
  32175. * **Listen to value**: If you want to listen to changes in the value of the form, you can subscribe
  32176. * to the {\@link FormGroup}'s {\@link AbstractControl#valueChanges valueChanges} event. You can also
  32177. * listen to its {\@link AbstractControl#statusChanges statusChanges} event to be notified when the
  32178. * validation status is re-calculated.
  32179. *
  32180. * Furthermore, you can listen to the directive's `ngSubmit` event to be notified when the user has
  32181. * triggered a form submission. The `ngSubmit` event will be emitted with the original form
  32182. * submission event.
  32183. *
  32184. * ### Example
  32185. *
  32186. * In this example, we create form controls for first name and last name.
  32187. *
  32188. * {\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}
  32189. *
  32190. * **npm package**: `\@angular/forms`
  32191. *
  32192. * **NgModule**: {\@link ReactiveFormsModule}
  32193. *
  32194. * \@stable
  32195. */
  32196. var FormGroupDirective = /** @class */ (function (_super) {
  32197. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormGroupDirective, _super);
  32198. function FormGroupDirective(_validators, _asyncValidators) {
  32199. var _this = _super.call(this) || this;
  32200. _this._validators = _validators;
  32201. _this._asyncValidators = _asyncValidators;
  32202. _this.submitted = false;
  32203. _this.directives = [];
  32204. _this.form = /** @type {?} */ ((null));
  32205. _this.ngSubmit = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  32206. return _this;
  32207. }
  32208. /**
  32209. * @param {?} changes
  32210. * @return {?}
  32211. */
  32212. FormGroupDirective.prototype.ngOnChanges = /**
  32213. * @param {?} changes
  32214. * @return {?}
  32215. */
  32216. function (changes) {
  32217. this._checkFormPresent();
  32218. if (changes.hasOwnProperty('form')) {
  32219. this._updateValidators();
  32220. this._updateDomValue();
  32221. this._updateRegistrations();
  32222. }
  32223. };
  32224. Object.defineProperty(FormGroupDirective.prototype, "formDirective", {
  32225. get: /**
  32226. * @return {?}
  32227. */
  32228. function () { return this; },
  32229. enumerable: true,
  32230. configurable: true
  32231. });
  32232. Object.defineProperty(FormGroupDirective.prototype, "control", {
  32233. get: /**
  32234. * @return {?}
  32235. */
  32236. function () { return this.form; },
  32237. enumerable: true,
  32238. configurable: true
  32239. });
  32240. Object.defineProperty(FormGroupDirective.prototype, "path", {
  32241. get: /**
  32242. * @return {?}
  32243. */
  32244. function () { return []; },
  32245. enumerable: true,
  32246. configurable: true
  32247. });
  32248. /**
  32249. * @param {?} dir
  32250. * @return {?}
  32251. */
  32252. FormGroupDirective.prototype.addControl = /**
  32253. * @param {?} dir
  32254. * @return {?}
  32255. */
  32256. function (dir) {
  32257. var /** @type {?} */ ctrl = this.form.get(dir.path);
  32258. setUpControl(ctrl, dir);
  32259. ctrl.updateValueAndValidity({ emitEvent: false });
  32260. this.directives.push(dir);
  32261. return ctrl;
  32262. };
  32263. /**
  32264. * @param {?} dir
  32265. * @return {?}
  32266. */
  32267. FormGroupDirective.prototype.getControl = /**
  32268. * @param {?} dir
  32269. * @return {?}
  32270. */
  32271. function (dir) { return /** @type {?} */ (this.form.get(dir.path)); };
  32272. /**
  32273. * @param {?} dir
  32274. * @return {?}
  32275. */
  32276. FormGroupDirective.prototype.removeControl = /**
  32277. * @param {?} dir
  32278. * @return {?}
  32279. */
  32280. function (dir) { removeDir(this.directives, dir); };
  32281. /**
  32282. * @param {?} dir
  32283. * @return {?}
  32284. */
  32285. FormGroupDirective.prototype.addFormGroup = /**
  32286. * @param {?} dir
  32287. * @return {?}
  32288. */
  32289. function (dir) {
  32290. var /** @type {?} */ ctrl = this.form.get(dir.path);
  32291. setUpFormContainer(ctrl, dir);
  32292. ctrl.updateValueAndValidity({ emitEvent: false });
  32293. };
  32294. /**
  32295. * @param {?} dir
  32296. * @return {?}
  32297. */
  32298. FormGroupDirective.prototype.removeFormGroup = /**
  32299. * @param {?} dir
  32300. * @return {?}
  32301. */
  32302. function (dir) { };
  32303. /**
  32304. * @param {?} dir
  32305. * @return {?}
  32306. */
  32307. FormGroupDirective.prototype.getFormGroup = /**
  32308. * @param {?} dir
  32309. * @return {?}
  32310. */
  32311. function (dir) { return /** @type {?} */ (this.form.get(dir.path)); };
  32312. /**
  32313. * @param {?} dir
  32314. * @return {?}
  32315. */
  32316. FormGroupDirective.prototype.addFormArray = /**
  32317. * @param {?} dir
  32318. * @return {?}
  32319. */
  32320. function (dir) {
  32321. var /** @type {?} */ ctrl = this.form.get(dir.path);
  32322. setUpFormContainer(ctrl, dir);
  32323. ctrl.updateValueAndValidity({ emitEvent: false });
  32324. };
  32325. /**
  32326. * @param {?} dir
  32327. * @return {?}
  32328. */
  32329. FormGroupDirective.prototype.removeFormArray = /**
  32330. * @param {?} dir
  32331. * @return {?}
  32332. */
  32333. function (dir) { };
  32334. /**
  32335. * @param {?} dir
  32336. * @return {?}
  32337. */
  32338. FormGroupDirective.prototype.getFormArray = /**
  32339. * @param {?} dir
  32340. * @return {?}
  32341. */
  32342. function (dir) { return /** @type {?} */ (this.form.get(dir.path)); };
  32343. /**
  32344. * @param {?} dir
  32345. * @param {?} value
  32346. * @return {?}
  32347. */
  32348. FormGroupDirective.prototype.updateModel = /**
  32349. * @param {?} dir
  32350. * @param {?} value
  32351. * @return {?}
  32352. */
  32353. function (dir, value) {
  32354. var /** @type {?} */ ctrl = /** @type {?} */ (this.form.get(dir.path));
  32355. ctrl.setValue(value);
  32356. };
  32357. /**
  32358. * @param {?} $event
  32359. * @return {?}
  32360. */
  32361. FormGroupDirective.prototype.onSubmit = /**
  32362. * @param {?} $event
  32363. * @return {?}
  32364. */
  32365. function ($event) {
  32366. (/** @type {?} */ (this)).submitted = true;
  32367. syncPendingControls(this.form, this.directives);
  32368. this.ngSubmit.emit($event);
  32369. return false;
  32370. };
  32371. /**
  32372. * @return {?}
  32373. */
  32374. FormGroupDirective.prototype.onReset = /**
  32375. * @return {?}
  32376. */
  32377. function () { this.resetForm(); };
  32378. /**
  32379. * @param {?=} value
  32380. * @return {?}
  32381. */
  32382. FormGroupDirective.prototype.resetForm = /**
  32383. * @param {?=} value
  32384. * @return {?}
  32385. */
  32386. function (value) {
  32387. if (value === void 0) { value = undefined; }
  32388. this.form.reset(value);
  32389. (/** @type {?} */ (this)).submitted = false;
  32390. };
  32391. /** @internal */
  32392. /**
  32393. * \@internal
  32394. * @return {?}
  32395. */
  32396. FormGroupDirective.prototype._updateDomValue = /**
  32397. * \@internal
  32398. * @return {?}
  32399. */
  32400. function () {
  32401. var _this = this;
  32402. this.directives.forEach(function (dir) {
  32403. var /** @type {?} */ newCtrl = _this.form.get(dir.path);
  32404. if (dir.control !== newCtrl) {
  32405. cleanUpControl(dir.control, dir);
  32406. if (newCtrl)
  32407. setUpControl(newCtrl, dir);
  32408. (/** @type {?} */ (dir)).control = newCtrl;
  32409. }
  32410. });
  32411. this.form._updateTreeValidity({ emitEvent: false });
  32412. };
  32413. /**
  32414. * @return {?}
  32415. */
  32416. FormGroupDirective.prototype._updateRegistrations = /**
  32417. * @return {?}
  32418. */
  32419. function () {
  32420. var _this = this;
  32421. this.form._registerOnCollectionChange(function () { return _this._updateDomValue(); });
  32422. if (this._oldForm)
  32423. this._oldForm._registerOnCollectionChange(function () { });
  32424. this._oldForm = this.form;
  32425. };
  32426. /**
  32427. * @return {?}
  32428. */
  32429. FormGroupDirective.prototype._updateValidators = /**
  32430. * @return {?}
  32431. */
  32432. function () {
  32433. var /** @type {?} */ sync = composeValidators(this._validators);
  32434. this.form.validator = Validators.compose([/** @type {?} */ ((this.form.validator)), /** @type {?} */ ((sync))]);
  32435. var /** @type {?} */ async = composeAsyncValidators(this._asyncValidators);
  32436. this.form.asyncValidator = Validators.composeAsync([/** @type {?} */ ((this.form.asyncValidator)), /** @type {?} */ ((async))]);
  32437. };
  32438. /**
  32439. * @return {?}
  32440. */
  32441. FormGroupDirective.prototype._checkFormPresent = /**
  32442. * @return {?}
  32443. */
  32444. function () {
  32445. if (!this.form) {
  32446. ReactiveErrors.missingFormException();
  32447. }
  32448. };
  32449. FormGroupDirective.decorators = [
  32450. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  32451. selector: '[formGroup]',
  32452. providers: [formDirectiveProvider$1],
  32453. host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },
  32454. exportAs: 'ngForm'
  32455. },] },
  32456. ];
  32457. /** @nocollapse */
  32458. FormGroupDirective.ctorParameters = function () { return [
  32459. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  32460. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  32461. ]; };
  32462. FormGroupDirective.propDecorators = {
  32463. "form": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['formGroup',] },],
  32464. "ngSubmit": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["O" /* Output */] },],
  32465. };
  32466. return FormGroupDirective;
  32467. }(ControlContainer));
  32468. /**
  32469. * @fileoverview added by tsickle
  32470. * @suppress {checkTypes} checked by tsc
  32471. */
  32472. /**
  32473. * @license
  32474. * Copyright Google Inc. All Rights Reserved.
  32475. *
  32476. * Use of this source code is governed by an MIT-style license that can be
  32477. * found in the LICENSE file at https://angular.io/license
  32478. */
  32479. var formGroupNameProvider = {
  32480. provide: ControlContainer,
  32481. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return FormGroupName; })
  32482. };
  32483. /**
  32484. * \@whatItDoes Syncs a nested {\@link FormGroup} to a DOM element.
  32485. *
  32486. * \@howToUse
  32487. *
  32488. * This directive can only be used with a parent {\@link FormGroupDirective} (selector:
  32489. * `[formGroup]`).
  32490. *
  32491. * It accepts the string name of the nested {\@link FormGroup} you want to link, and
  32492. * will look for a {\@link FormGroup} registered with that name in the parent
  32493. * {\@link FormGroup} instance you passed into {\@link FormGroupDirective}.
  32494. *
  32495. * Nested form groups can come in handy when you want to validate a sub-group of a
  32496. * form separately from the rest or when you'd like to group the values of certain
  32497. * controls into their own nested object.
  32498. *
  32499. * **Access the group**: You can access the associated {\@link FormGroup} using the
  32500. * {\@link AbstractControl#get get} method. Ex: `this.form.get('name')`.
  32501. *
  32502. * You can also access individual controls within the group using dot syntax.
  32503. * Ex: `this.form.get('name.first')`
  32504. *
  32505. * **Get the value**: the `value` property is always synced and available on the
  32506. * {\@link FormGroup}. See a full list of available properties in {\@link AbstractControl}.
  32507. *
  32508. * **Set the value**: You can set an initial value for each child control when instantiating
  32509. * the {\@link FormGroup}, or you can set it programmatically later using
  32510. * {\@link AbstractControl#setValue setValue} or {\@link AbstractControl#patchValue patchValue}.
  32511. *
  32512. * **Listen to value**: If you want to listen to changes in the value of the group, you can
  32513. * subscribe to the {\@link AbstractControl#valueChanges valueChanges} event. You can also listen to
  32514. * {\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is
  32515. * re-calculated.
  32516. *
  32517. * ### Example
  32518. *
  32519. * {\@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}
  32520. *
  32521. * * **npm package**: `\@angular/forms`
  32522. *
  32523. * * **NgModule**: `ReactiveFormsModule`
  32524. *
  32525. * \@stable
  32526. */
  32527. var FormGroupName = /** @class */ (function (_super) {
  32528. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormGroupName, _super);
  32529. function FormGroupName(parent, validators, asyncValidators) {
  32530. var _this = _super.call(this) || this;
  32531. _this._parent = parent;
  32532. _this._validators = validators;
  32533. _this._asyncValidators = asyncValidators;
  32534. return _this;
  32535. }
  32536. /** @internal */
  32537. /**
  32538. * \@internal
  32539. * @return {?}
  32540. */
  32541. FormGroupName.prototype._checkParentType = /**
  32542. * \@internal
  32543. * @return {?}
  32544. */
  32545. function () {
  32546. if (_hasInvalidParent(this._parent)) {
  32547. ReactiveErrors.groupParentException();
  32548. }
  32549. };
  32550. FormGroupName.decorators = [
  32551. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] },] },
  32552. ];
  32553. /** @nocollapse */
  32554. FormGroupName.ctorParameters = function () { return [
  32555. { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_2" /* SkipSelf */] },] },
  32556. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  32557. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  32558. ]; };
  32559. FormGroupName.propDecorators = {
  32560. "name": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['formGroupName',] },],
  32561. };
  32562. return FormGroupName;
  32563. }(AbstractFormGroupDirective));
  32564. var formArrayNameProvider = {
  32565. provide: ControlContainer,
  32566. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return FormArrayName; })
  32567. };
  32568. /**
  32569. * \@whatItDoes Syncs a nested {\@link FormArray} to a DOM element.
  32570. *
  32571. * \@howToUse
  32572. *
  32573. * This directive is designed to be used with a parent {\@link FormGroupDirective} (selector:
  32574. * `[formGroup]`).
  32575. *
  32576. * It accepts the string name of the nested {\@link FormArray} you want to link, and
  32577. * will look for a {\@link FormArray} registered with that name in the parent
  32578. * {\@link FormGroup} instance you passed into {\@link FormGroupDirective}.
  32579. *
  32580. * Nested form arrays can come in handy when you have a group of form controls but
  32581. * you're not sure how many there will be. Form arrays allow you to create new
  32582. * form controls dynamically.
  32583. *
  32584. * **Access the array**: You can access the associated {\@link FormArray} using the
  32585. * {\@link AbstractControl#get get} method on the parent {\@link FormGroup}.
  32586. * Ex: `this.form.get('cities')`.
  32587. *
  32588. * **Get the value**: the `value` property is always synced and available on the
  32589. * {\@link FormArray}. See a full list of available properties in {\@link AbstractControl}.
  32590. *
  32591. * **Set the value**: You can set an initial value for each child control when instantiating
  32592. * the {\@link FormArray}, or you can set the value programmatically later using the
  32593. * {\@link FormArray}'s {\@link AbstractControl#setValue setValue} or
  32594. * {\@link AbstractControl#patchValue patchValue} methods.
  32595. *
  32596. * **Listen to value**: If you want to listen to changes in the value of the array, you can
  32597. * subscribe to the {\@link FormArray}'s {\@link AbstractControl#valueChanges valueChanges} event.
  32598. * You can also listen to its {\@link AbstractControl#statusChanges statusChanges} event to be
  32599. * notified when the validation status is re-calculated.
  32600. *
  32601. * **Add new controls**: You can add new controls to the {\@link FormArray} dynamically by calling
  32602. * its {\@link FormArray#push push} method.
  32603. * Ex: `this.form.get('cities').push(new FormControl());`
  32604. *
  32605. * ### Example
  32606. *
  32607. * {\@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}
  32608. *
  32609. * * **npm package**: `\@angular/forms`
  32610. *
  32611. * * **NgModule**: `ReactiveFormsModule`
  32612. *
  32613. * \@stable
  32614. */
  32615. var FormArrayName = /** @class */ (function (_super) {
  32616. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormArrayName, _super);
  32617. function FormArrayName(parent, validators, asyncValidators) {
  32618. var _this = _super.call(this) || this;
  32619. _this._parent = parent;
  32620. _this._validators = validators;
  32621. _this._asyncValidators = asyncValidators;
  32622. return _this;
  32623. }
  32624. /**
  32625. * @return {?}
  32626. */
  32627. FormArrayName.prototype.ngOnInit = /**
  32628. * @return {?}
  32629. */
  32630. function () {
  32631. this._checkParentType(); /** @type {?} */
  32632. ((this.formDirective)).addFormArray(this);
  32633. };
  32634. /**
  32635. * @return {?}
  32636. */
  32637. FormArrayName.prototype.ngOnDestroy = /**
  32638. * @return {?}
  32639. */
  32640. function () {
  32641. if (this.formDirective) {
  32642. this.formDirective.removeFormArray(this);
  32643. }
  32644. };
  32645. Object.defineProperty(FormArrayName.prototype, "control", {
  32646. get: /**
  32647. * @return {?}
  32648. */
  32649. function () { return /** @type {?} */ ((this.formDirective)).getFormArray(this); },
  32650. enumerable: true,
  32651. configurable: true
  32652. });
  32653. Object.defineProperty(FormArrayName.prototype, "formDirective", {
  32654. get: /**
  32655. * @return {?}
  32656. */
  32657. function () {
  32658. return this._parent ? /** @type {?} */ (this._parent.formDirective) : null;
  32659. },
  32660. enumerable: true,
  32661. configurable: true
  32662. });
  32663. Object.defineProperty(FormArrayName.prototype, "path", {
  32664. get: /**
  32665. * @return {?}
  32666. */
  32667. function () { return controlPath(this.name, this._parent); },
  32668. enumerable: true,
  32669. configurable: true
  32670. });
  32671. Object.defineProperty(FormArrayName.prototype, "validator", {
  32672. get: /**
  32673. * @return {?}
  32674. */
  32675. function () { return composeValidators(this._validators); },
  32676. enumerable: true,
  32677. configurable: true
  32678. });
  32679. Object.defineProperty(FormArrayName.prototype, "asyncValidator", {
  32680. get: /**
  32681. * @return {?}
  32682. */
  32683. function () {
  32684. return composeAsyncValidators(this._asyncValidators);
  32685. },
  32686. enumerable: true,
  32687. configurable: true
  32688. });
  32689. /**
  32690. * @return {?}
  32691. */
  32692. FormArrayName.prototype._checkParentType = /**
  32693. * @return {?}
  32694. */
  32695. function () {
  32696. if (_hasInvalidParent(this._parent)) {
  32697. ReactiveErrors.arrayParentException();
  32698. }
  32699. };
  32700. FormArrayName.decorators = [
  32701. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] },] },
  32702. ];
  32703. /** @nocollapse */
  32704. FormArrayName.ctorParameters = function () { return [
  32705. { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_2" /* SkipSelf */] },] },
  32706. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  32707. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  32708. ]; };
  32709. FormArrayName.propDecorators = {
  32710. "name": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['formArrayName',] },],
  32711. };
  32712. return FormArrayName;
  32713. }(ControlContainer));
  32714. /**
  32715. * @param {?} parent
  32716. * @return {?}
  32717. */
  32718. function _hasInvalidParent(parent) {
  32719. return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&
  32720. !(parent instanceof FormArrayName);
  32721. }
  32722. /**
  32723. * @fileoverview added by tsickle
  32724. * @suppress {checkTypes} checked by tsc
  32725. */
  32726. /**
  32727. * @license
  32728. * Copyright Google Inc. All Rights Reserved.
  32729. *
  32730. * Use of this source code is governed by an MIT-style license that can be
  32731. * found in the LICENSE file at https://angular.io/license
  32732. */
  32733. var controlNameBinding = {
  32734. provide: NgControl,
  32735. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return FormControlName; })
  32736. };
  32737. /**
  32738. * \@whatItDoes Syncs a {\@link FormControl} in an existing {\@link FormGroup} to a form control
  32739. * element by name.
  32740. *
  32741. * In other words, this directive ensures that any values written to the {\@link FormControl}
  32742. * instance programmatically will be written to the DOM element (model -> view). Conversely,
  32743. * any values written to the DOM element through user input will be reflected in the
  32744. * {\@link FormControl} instance (view -> model).
  32745. *
  32746. * \@howToUse
  32747. *
  32748. * This directive is designed to be used with a parent {\@link FormGroupDirective} (selector:
  32749. * `[formGroup]`).
  32750. *
  32751. * It accepts the string name of the {\@link FormControl} instance you want to
  32752. * link, and will look for a {\@link FormControl} registered with that name in the
  32753. * closest {\@link FormGroup} or {\@link FormArray} above it.
  32754. *
  32755. * **Access the control**: You can access the {\@link FormControl} associated with
  32756. * this directive by using the {\@link AbstractControl#get get} method.
  32757. * Ex: `this.form.get('first');`
  32758. *
  32759. * **Get value**: the `value` property is always synced and available on the {\@link FormControl}.
  32760. * See a full list of available properties in {\@link AbstractControl}.
  32761. *
  32762. * **Set value**: You can set an initial value for the control when instantiating the
  32763. * {\@link FormControl}, or you can set it programmatically later using
  32764. * {\@link AbstractControl#setValue setValue} or {\@link AbstractControl#patchValue patchValue}.
  32765. *
  32766. * **Listen to value**: If you want to listen to changes in the value of the control, you can
  32767. * subscribe to the {\@link AbstractControl#valueChanges valueChanges} event. You can also listen to
  32768. * {\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is
  32769. * re-calculated.
  32770. *
  32771. * ### Example
  32772. *
  32773. * In this example, we create form controls for first name and last name.
  32774. *
  32775. * {\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}
  32776. *
  32777. * To see `formControlName` examples with different form control types, see:
  32778. *
  32779. * * Radio buttons: {\@link RadioControlValueAccessor}
  32780. * * Selects: {\@link SelectControlValueAccessor}
  32781. *
  32782. * **npm package**: `\@angular/forms`
  32783. *
  32784. * **NgModule**: {\@link ReactiveFormsModule}
  32785. *
  32786. * \@stable
  32787. */
  32788. var FormControlName = /** @class */ (function (_super) {
  32789. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FormControlName, _super);
  32790. function FormControlName(parent, validators, asyncValidators, valueAccessors) {
  32791. var _this = _super.call(this) || this;
  32792. _this._added = false;
  32793. _this.update = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["v" /* EventEmitter */]();
  32794. _this._parent = parent;
  32795. _this._rawValidators = validators || [];
  32796. _this._rawAsyncValidators = asyncValidators || [];
  32797. _this.valueAccessor = selectValueAccessor(_this, valueAccessors);
  32798. return _this;
  32799. }
  32800. Object.defineProperty(FormControlName.prototype, "isDisabled", {
  32801. set: /**
  32802. * @param {?} isDisabled
  32803. * @return {?}
  32804. */
  32805. function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },
  32806. enumerable: true,
  32807. configurable: true
  32808. });
  32809. /**
  32810. * @param {?} changes
  32811. * @return {?}
  32812. */
  32813. FormControlName.prototype.ngOnChanges = /**
  32814. * @param {?} changes
  32815. * @return {?}
  32816. */
  32817. function (changes) {
  32818. if (!this._added)
  32819. this._setUpControl();
  32820. if (isPropertyUpdated(changes, this.viewModel)) {
  32821. this.viewModel = this.model;
  32822. this.formDirective.updateModel(this, this.model);
  32823. }
  32824. };
  32825. /**
  32826. * @return {?}
  32827. */
  32828. FormControlName.prototype.ngOnDestroy = /**
  32829. * @return {?}
  32830. */
  32831. function () {
  32832. if (this.formDirective) {
  32833. this.formDirective.removeControl(this);
  32834. }
  32835. };
  32836. /**
  32837. * @param {?} newValue
  32838. * @return {?}
  32839. */
  32840. FormControlName.prototype.viewToModelUpdate = /**
  32841. * @param {?} newValue
  32842. * @return {?}
  32843. */
  32844. function (newValue) {
  32845. this.viewModel = newValue;
  32846. this.update.emit(newValue);
  32847. };
  32848. Object.defineProperty(FormControlName.prototype, "path", {
  32849. get: /**
  32850. * @return {?}
  32851. */
  32852. function () { return controlPath(this.name, /** @type {?} */ ((this._parent))); },
  32853. enumerable: true,
  32854. configurable: true
  32855. });
  32856. Object.defineProperty(FormControlName.prototype, "formDirective", {
  32857. get: /**
  32858. * @return {?}
  32859. */
  32860. function () { return this._parent ? this._parent.formDirective : null; },
  32861. enumerable: true,
  32862. configurable: true
  32863. });
  32864. Object.defineProperty(FormControlName.prototype, "validator", {
  32865. get: /**
  32866. * @return {?}
  32867. */
  32868. function () { return composeValidators(this._rawValidators); },
  32869. enumerable: true,
  32870. configurable: true
  32871. });
  32872. Object.defineProperty(FormControlName.prototype, "asyncValidator", {
  32873. get: /**
  32874. * @return {?}
  32875. */
  32876. function () {
  32877. return /** @type {?} */ ((composeAsyncValidators(this._rawAsyncValidators)));
  32878. },
  32879. enumerable: true,
  32880. configurable: true
  32881. });
  32882. /**
  32883. * @return {?}
  32884. */
  32885. FormControlName.prototype._checkParentType = /**
  32886. * @return {?}
  32887. */
  32888. function () {
  32889. if (!(this._parent instanceof FormGroupName) &&
  32890. this._parent instanceof AbstractFormGroupDirective) {
  32891. ReactiveErrors.ngModelGroupException();
  32892. }
  32893. else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&
  32894. !(this._parent instanceof FormArrayName)) {
  32895. ReactiveErrors.controlParentException();
  32896. }
  32897. };
  32898. /**
  32899. * @return {?}
  32900. */
  32901. FormControlName.prototype._setUpControl = /**
  32902. * @return {?}
  32903. */
  32904. function () {
  32905. this._checkParentType();
  32906. (/** @type {?} */ (this)).control = this.formDirective.addControl(this);
  32907. if (this.control.disabled && /** @type {?} */ ((this.valueAccessor)).setDisabledState) {
  32908. /** @type {?} */ ((/** @type {?} */ ((this.valueAccessor)).setDisabledState))(true);
  32909. }
  32910. this._added = true;
  32911. };
  32912. FormControlName.decorators = [
  32913. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{ selector: '[formControlName]', providers: [controlNameBinding] },] },
  32914. ];
  32915. /** @nocollapse */
  32916. FormControlName.ctorParameters = function () { return [
  32917. { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["w" /* Host */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_2" /* SkipSelf */] },] },
  32918. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALIDATORS,] },] },
  32919. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_ASYNC_VALIDATORS,] },] },
  32920. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_1" /* Self */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [NG_VALUE_ACCESSOR,] },] },
  32921. ]; };
  32922. FormControlName.propDecorators = {
  32923. "name": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['formControlName',] },],
  32924. "model": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['ngModel',] },],
  32925. "update": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["O" /* Output */], args: ['ngModelChange',] },],
  32926. "isDisabled": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */], args: ['disabled',] },],
  32927. };
  32928. return FormControlName;
  32929. }(NgControl));
  32930. /**
  32931. * @fileoverview added by tsickle
  32932. * @suppress {checkTypes} checked by tsc
  32933. */
  32934. /**
  32935. * @license
  32936. * Copyright Google Inc. All Rights Reserved.
  32937. *
  32938. * Use of this source code is governed by an MIT-style license that can be
  32939. * found in the LICENSE file at https://angular.io/license
  32940. */
  32941. /**
  32942. * An interface that can be implemented by classes that can act as validators.
  32943. *
  32944. * ## Usage
  32945. *
  32946. * ```typescript
  32947. * \@Directive({
  32948. * selector: '[custom-validator]',
  32949. * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]
  32950. * })
  32951. * class CustomValidatorDirective implements Validator {
  32952. * validate(c: Control): {[key: string]: any} {
  32953. * return {"custom": true};
  32954. * }
  32955. * }
  32956. * ```
  32957. *
  32958. * \@stable
  32959. * @record
  32960. */
  32961. /**
  32962. * \@experimental
  32963. * @record
  32964. */
  32965. var REQUIRED_VALIDATOR = {
  32966. provide: NG_VALIDATORS,
  32967. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return RequiredValidator; }),
  32968. multi: true
  32969. };
  32970. var CHECKBOX_REQUIRED_VALIDATOR = {
  32971. provide: NG_VALIDATORS,
  32972. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return CheckboxRequiredValidator; }),
  32973. multi: true
  32974. };
  32975. /**
  32976. * A Directive that adds the `required` validator to any controls marked with the
  32977. * `required` attribute, via the {\@link NG_VALIDATORS} binding.
  32978. *
  32979. * ### Example
  32980. *
  32981. * ```
  32982. * <input name="fullName" ngModel required>
  32983. * ```
  32984. *
  32985. * \@stable
  32986. */
  32987. var RequiredValidator = /** @class */ (function () {
  32988. function RequiredValidator() {
  32989. }
  32990. Object.defineProperty(RequiredValidator.prototype, "required", {
  32991. get: /**
  32992. * @return {?}
  32993. */
  32994. function () { return this._required; },
  32995. set: /**
  32996. * @param {?} value
  32997. * @return {?}
  32998. */
  32999. function (value) {
  33000. this._required = value != null && value !== false && "" + value !== 'false';
  33001. if (this._onChange)
  33002. this._onChange();
  33003. },
  33004. enumerable: true,
  33005. configurable: true
  33006. });
  33007. /**
  33008. * @param {?} c
  33009. * @return {?}
  33010. */
  33011. RequiredValidator.prototype.validate = /**
  33012. * @param {?} c
  33013. * @return {?}
  33014. */
  33015. function (c) {
  33016. return this.required ? Validators.required(c) : null;
  33017. };
  33018. /**
  33019. * @param {?} fn
  33020. * @return {?}
  33021. */
  33022. RequiredValidator.prototype.registerOnValidatorChange = /**
  33023. * @param {?} fn
  33024. * @return {?}
  33025. */
  33026. function (fn) { this._onChange = fn; };
  33027. RequiredValidator.decorators = [
  33028. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33029. selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',
  33030. providers: [REQUIRED_VALIDATOR],
  33031. host: { '[attr.required]': 'required ? "" : null' }
  33032. },] },
  33033. ];
  33034. /** @nocollapse */
  33035. RequiredValidator.ctorParameters = function () { return []; };
  33036. RequiredValidator.propDecorators = {
  33037. "required": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  33038. };
  33039. return RequiredValidator;
  33040. }());
  33041. /**
  33042. * A Directive that adds the `required` validator to checkbox controls marked with the
  33043. * `required` attribute, via the {\@link NG_VALIDATORS} binding.
  33044. *
  33045. * ### Example
  33046. *
  33047. * ```
  33048. * <input type="checkbox" name="active" ngModel required>
  33049. * ```
  33050. *
  33051. * \@experimental
  33052. */
  33053. var CheckboxRequiredValidator = /** @class */ (function (_super) {
  33054. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(CheckboxRequiredValidator, _super);
  33055. function CheckboxRequiredValidator() {
  33056. return _super !== null && _super.apply(this, arguments) || this;
  33057. }
  33058. /**
  33059. * @param {?} c
  33060. * @return {?}
  33061. */
  33062. CheckboxRequiredValidator.prototype.validate = /**
  33063. * @param {?} c
  33064. * @return {?}
  33065. */
  33066. function (c) {
  33067. return this.required ? Validators.requiredTrue(c) : null;
  33068. };
  33069. CheckboxRequiredValidator.decorators = [
  33070. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33071. selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',
  33072. providers: [CHECKBOX_REQUIRED_VALIDATOR],
  33073. host: { '[attr.required]': 'required ? "" : null' }
  33074. },] },
  33075. ];
  33076. /** @nocollapse */
  33077. CheckboxRequiredValidator.ctorParameters = function () { return []; };
  33078. return CheckboxRequiredValidator;
  33079. }(RequiredValidator));
  33080. /**
  33081. * Provider which adds {\@link EmailValidator} to {\@link NG_VALIDATORS}.
  33082. */
  33083. var EMAIL_VALIDATOR = {
  33084. provide: NG_VALIDATORS,
  33085. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return EmailValidator; }),
  33086. multi: true
  33087. };
  33088. /**
  33089. * A Directive that adds the `email` validator to controls marked with the
  33090. * `email` attribute, via the {\@link NG_VALIDATORS} binding.
  33091. *
  33092. * ### Example
  33093. *
  33094. * ```
  33095. * <input type="email" name="email" ngModel email>
  33096. * <input type="email" name="email" ngModel email="true">
  33097. * <input type="email" name="email" ngModel [email]="true">
  33098. * ```
  33099. *
  33100. * \@experimental
  33101. */
  33102. var EmailValidator = /** @class */ (function () {
  33103. function EmailValidator() {
  33104. }
  33105. Object.defineProperty(EmailValidator.prototype, "email", {
  33106. set: /**
  33107. * @param {?} value
  33108. * @return {?}
  33109. */
  33110. function (value) {
  33111. this._enabled = value === '' || value === true || value === 'true';
  33112. if (this._onChange)
  33113. this._onChange();
  33114. },
  33115. enumerable: true,
  33116. configurable: true
  33117. });
  33118. /**
  33119. * @param {?} c
  33120. * @return {?}
  33121. */
  33122. EmailValidator.prototype.validate = /**
  33123. * @param {?} c
  33124. * @return {?}
  33125. */
  33126. function (c) {
  33127. return this._enabled ? Validators.email(c) : null;
  33128. };
  33129. /**
  33130. * @param {?} fn
  33131. * @return {?}
  33132. */
  33133. EmailValidator.prototype.registerOnValidatorChange = /**
  33134. * @param {?} fn
  33135. * @return {?}
  33136. */
  33137. function (fn) { this._onChange = fn; };
  33138. EmailValidator.decorators = [
  33139. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33140. selector: '[email][formControlName],[email][formControl],[email][ngModel]',
  33141. providers: [EMAIL_VALIDATOR]
  33142. },] },
  33143. ];
  33144. /** @nocollapse */
  33145. EmailValidator.ctorParameters = function () { return []; };
  33146. EmailValidator.propDecorators = {
  33147. "email": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  33148. };
  33149. return EmailValidator;
  33150. }());
  33151. /**
  33152. * \@stable
  33153. * @record
  33154. */
  33155. /**
  33156. * \@stable
  33157. * @record
  33158. */
  33159. /**
  33160. * Provider which adds {\@link MinLengthValidator} to {\@link NG_VALIDATORS}.
  33161. *
  33162. * ## Example:
  33163. *
  33164. * {\@example common/forms/ts/validators/validators.ts region='min'}
  33165. */
  33166. var MIN_LENGTH_VALIDATOR = {
  33167. provide: NG_VALIDATORS,
  33168. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return MinLengthValidator; }),
  33169. multi: true
  33170. };
  33171. /**
  33172. * A directive which installs the {\@link MinLengthValidator} for any `formControlName`,
  33173. * `formControl`, or control with `ngModel` that also has a `minlength` attribute.
  33174. *
  33175. * \@stable
  33176. */
  33177. var MinLengthValidator = /** @class */ (function () {
  33178. function MinLengthValidator() {
  33179. }
  33180. /**
  33181. * @param {?} changes
  33182. * @return {?}
  33183. */
  33184. MinLengthValidator.prototype.ngOnChanges = /**
  33185. * @param {?} changes
  33186. * @return {?}
  33187. */
  33188. function (changes) {
  33189. if ('minlength' in changes) {
  33190. this._createValidator();
  33191. if (this._onChange)
  33192. this._onChange();
  33193. }
  33194. };
  33195. /**
  33196. * @param {?} c
  33197. * @return {?}
  33198. */
  33199. MinLengthValidator.prototype.validate = /**
  33200. * @param {?} c
  33201. * @return {?}
  33202. */
  33203. function (c) {
  33204. return this.minlength == null ? null : this._validator(c);
  33205. };
  33206. /**
  33207. * @param {?} fn
  33208. * @return {?}
  33209. */
  33210. MinLengthValidator.prototype.registerOnValidatorChange = /**
  33211. * @param {?} fn
  33212. * @return {?}
  33213. */
  33214. function (fn) { this._onChange = fn; };
  33215. /**
  33216. * @return {?}
  33217. */
  33218. MinLengthValidator.prototype._createValidator = /**
  33219. * @return {?}
  33220. */
  33221. function () {
  33222. this._validator = Validators.minLength(parseInt(this.minlength, 10));
  33223. };
  33224. MinLengthValidator.decorators = [
  33225. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33226. selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',
  33227. providers: [MIN_LENGTH_VALIDATOR],
  33228. host: { '[attr.minlength]': 'minlength ? minlength : null' }
  33229. },] },
  33230. ];
  33231. /** @nocollapse */
  33232. MinLengthValidator.ctorParameters = function () { return []; };
  33233. MinLengthValidator.propDecorators = {
  33234. "minlength": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  33235. };
  33236. return MinLengthValidator;
  33237. }());
  33238. /**
  33239. * Provider which adds {\@link MaxLengthValidator} to {\@link NG_VALIDATORS}.
  33240. *
  33241. * ## Example:
  33242. *
  33243. * {\@example common/forms/ts/validators/validators.ts region='max'}
  33244. */
  33245. var MAX_LENGTH_VALIDATOR = {
  33246. provide: NG_VALIDATORS,
  33247. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return MaxLengthValidator; }),
  33248. multi: true
  33249. };
  33250. /**
  33251. * A directive which installs the {\@link MaxLengthValidator} for any `formControlName,
  33252. * `formControl`,
  33253. * or control with `ngModel` that also has a `maxlength` attribute.
  33254. *
  33255. * \@stable
  33256. */
  33257. var MaxLengthValidator = /** @class */ (function () {
  33258. function MaxLengthValidator() {
  33259. }
  33260. /**
  33261. * @param {?} changes
  33262. * @return {?}
  33263. */
  33264. MaxLengthValidator.prototype.ngOnChanges = /**
  33265. * @param {?} changes
  33266. * @return {?}
  33267. */
  33268. function (changes) {
  33269. if ('maxlength' in changes) {
  33270. this._createValidator();
  33271. if (this._onChange)
  33272. this._onChange();
  33273. }
  33274. };
  33275. /**
  33276. * @param {?} c
  33277. * @return {?}
  33278. */
  33279. MaxLengthValidator.prototype.validate = /**
  33280. * @param {?} c
  33281. * @return {?}
  33282. */
  33283. function (c) {
  33284. return this.maxlength != null ? this._validator(c) : null;
  33285. };
  33286. /**
  33287. * @param {?} fn
  33288. * @return {?}
  33289. */
  33290. MaxLengthValidator.prototype.registerOnValidatorChange = /**
  33291. * @param {?} fn
  33292. * @return {?}
  33293. */
  33294. function (fn) { this._onChange = fn; };
  33295. /**
  33296. * @return {?}
  33297. */
  33298. MaxLengthValidator.prototype._createValidator = /**
  33299. * @return {?}
  33300. */
  33301. function () {
  33302. this._validator = Validators.maxLength(parseInt(this.maxlength, 10));
  33303. };
  33304. MaxLengthValidator.decorators = [
  33305. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33306. selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',
  33307. providers: [MAX_LENGTH_VALIDATOR],
  33308. host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }
  33309. },] },
  33310. ];
  33311. /** @nocollapse */
  33312. MaxLengthValidator.ctorParameters = function () { return []; };
  33313. MaxLengthValidator.propDecorators = {
  33314. "maxlength": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  33315. };
  33316. return MaxLengthValidator;
  33317. }());
  33318. var PATTERN_VALIDATOR = {
  33319. provide: NG_VALIDATORS,
  33320. useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_14" /* forwardRef */])(function () { return PatternValidator; }),
  33321. multi: true
  33322. };
  33323. /**
  33324. * A Directive that adds the `pattern` validator to any controls marked with the
  33325. * `pattern` attribute, via the {\@link NG_VALIDATORS} binding. Uses attribute value
  33326. * as the regex to validate Control value against. Follows pattern attribute
  33327. * semantics; i.e. regex must match entire Control value.
  33328. *
  33329. * ### Example
  33330. *
  33331. * ```
  33332. * <input [name]="fullName" pattern="[a-zA-Z ]*" ngModel>
  33333. * ```
  33334. * \@stable
  33335. */
  33336. var PatternValidator = /** @class */ (function () {
  33337. function PatternValidator() {
  33338. }
  33339. /**
  33340. * @param {?} changes
  33341. * @return {?}
  33342. */
  33343. PatternValidator.prototype.ngOnChanges = /**
  33344. * @param {?} changes
  33345. * @return {?}
  33346. */
  33347. function (changes) {
  33348. if ('pattern' in changes) {
  33349. this._createValidator();
  33350. if (this._onChange)
  33351. this._onChange();
  33352. }
  33353. };
  33354. /**
  33355. * @param {?} c
  33356. * @return {?}
  33357. */
  33358. PatternValidator.prototype.validate = /**
  33359. * @param {?} c
  33360. * @return {?}
  33361. */
  33362. function (c) { return this._validator(c); };
  33363. /**
  33364. * @param {?} fn
  33365. * @return {?}
  33366. */
  33367. PatternValidator.prototype.registerOnValidatorChange = /**
  33368. * @param {?} fn
  33369. * @return {?}
  33370. */
  33371. function (fn) { this._onChange = fn; };
  33372. /**
  33373. * @return {?}
  33374. */
  33375. PatternValidator.prototype._createValidator = /**
  33376. * @return {?}
  33377. */
  33378. function () { this._validator = Validators.pattern(this.pattern); };
  33379. PatternValidator.decorators = [
  33380. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33381. selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',
  33382. providers: [PATTERN_VALIDATOR],
  33383. host: { '[attr.pattern]': 'pattern ? pattern : null' }
  33384. },] },
  33385. ];
  33386. /** @nocollapse */
  33387. PatternValidator.ctorParameters = function () { return []; };
  33388. PatternValidator.propDecorators = {
  33389. "pattern": [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["D" /* Input */] },],
  33390. };
  33391. return PatternValidator;
  33392. }());
  33393. /**
  33394. * @fileoverview added by tsickle
  33395. * @suppress {checkTypes} checked by tsc
  33396. */
  33397. /**
  33398. * @license
  33399. * Copyright Google Inc. All Rights Reserved.
  33400. *
  33401. * Use of this source code is governed by an MIT-style license that can be
  33402. * found in the LICENSE file at https://angular.io/license
  33403. */
  33404. /**
  33405. * \@whatItDoes Creates an {\@link AbstractControl} from a user-specified configuration.
  33406. *
  33407. * It is essentially syntactic sugar that shortens the `new FormGroup()`,
  33408. * `new FormControl()`, and `new FormArray()` boilerplate that can build up in larger
  33409. * forms.
  33410. *
  33411. * \@howToUse
  33412. *
  33413. * To use, inject `FormBuilder` into your component class. You can then call its methods
  33414. * directly.
  33415. *
  33416. * {\@example forms/ts/formBuilder/form_builder_example.ts region='Component'}
  33417. *
  33418. * * **npm package**: `\@angular/forms`
  33419. *
  33420. * * **NgModule**: {\@link ReactiveFormsModule}
  33421. *
  33422. * \@stable
  33423. */
  33424. var FormBuilder = /** @class */ (function () {
  33425. function FormBuilder() {
  33426. }
  33427. /**
  33428. * Construct a new {@link FormGroup} with the given map of configuration.
  33429. * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.
  33430. *
  33431. * See the {@link FormGroup} constructor for more details.
  33432. */
  33433. /**
  33434. * Construct a new {\@link FormGroup} with the given map of configuration.
  33435. * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.
  33436. *
  33437. * See the {\@link FormGroup} constructor for more details.
  33438. * @param {?} controlsConfig
  33439. * @param {?=} extra
  33440. * @return {?}
  33441. */
  33442. FormBuilder.prototype.group = /**
  33443. * Construct a new {\@link FormGroup} with the given map of configuration.
  33444. * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.
  33445. *
  33446. * See the {\@link FormGroup} constructor for more details.
  33447. * @param {?} controlsConfig
  33448. * @param {?=} extra
  33449. * @return {?}
  33450. */
  33451. function (controlsConfig, extra) {
  33452. if (extra === void 0) { extra = null; }
  33453. var /** @type {?} */ controls = this._reduceControls(controlsConfig);
  33454. var /** @type {?} */ validator = extra != null ? extra['validator'] : null;
  33455. var /** @type {?} */ asyncValidator = extra != null ? extra['asyncValidator'] : null;
  33456. return new FormGroup(controls, validator, asyncValidator);
  33457. };
  33458. /**
  33459. * Construct a new {@link FormControl} with the given `formState`,`validator`, and
  33460. * `asyncValidator`.
  33461. *
  33462. * `formState` can either be a standalone value for the form control or an object
  33463. * that contains both a value and a disabled status.
  33464. *
  33465. */
  33466. /**
  33467. * Construct a new {\@link FormControl} with the given `formState`,`validator`, and
  33468. * `asyncValidator`.
  33469. *
  33470. * `formState` can either be a standalone value for the form control or an object
  33471. * that contains both a value and a disabled status.
  33472. *
  33473. * @param {?} formState
  33474. * @param {?=} validator
  33475. * @param {?=} asyncValidator
  33476. * @return {?}
  33477. */
  33478. FormBuilder.prototype.control = /**
  33479. * Construct a new {\@link FormControl} with the given `formState`,`validator`, and
  33480. * `asyncValidator`.
  33481. *
  33482. * `formState` can either be a standalone value for the form control or an object
  33483. * that contains both a value and a disabled status.
  33484. *
  33485. * @param {?} formState
  33486. * @param {?=} validator
  33487. * @param {?=} asyncValidator
  33488. * @return {?}
  33489. */
  33490. function (formState, validator, asyncValidator) {
  33491. return new FormControl(formState, validator, asyncValidator);
  33492. };
  33493. /**
  33494. * Construct a {@link FormArray} from the given `controlsConfig` array of
  33495. * configuration, with the given optional `validator` and `asyncValidator`.
  33496. */
  33497. /**
  33498. * Construct a {\@link FormArray} from the given `controlsConfig` array of
  33499. * configuration, with the given optional `validator` and `asyncValidator`.
  33500. * @param {?} controlsConfig
  33501. * @param {?=} validator
  33502. * @param {?=} asyncValidator
  33503. * @return {?}
  33504. */
  33505. FormBuilder.prototype.array = /**
  33506. * Construct a {\@link FormArray} from the given `controlsConfig` array of
  33507. * configuration, with the given optional `validator` and `asyncValidator`.
  33508. * @param {?} controlsConfig
  33509. * @param {?=} validator
  33510. * @param {?=} asyncValidator
  33511. * @return {?}
  33512. */
  33513. function (controlsConfig, validator, asyncValidator) {
  33514. var _this = this;
  33515. var /** @type {?} */ controls = controlsConfig.map(function (c) { return _this._createControl(c); });
  33516. return new FormArray(controls, validator, asyncValidator);
  33517. };
  33518. /** @internal */
  33519. /**
  33520. * \@internal
  33521. * @param {?} controlsConfig
  33522. * @return {?}
  33523. */
  33524. FormBuilder.prototype._reduceControls = /**
  33525. * \@internal
  33526. * @param {?} controlsConfig
  33527. * @return {?}
  33528. */
  33529. function (controlsConfig) {
  33530. var _this = this;
  33531. var /** @type {?} */ controls = {};
  33532. Object.keys(controlsConfig).forEach(function (controlName) {
  33533. controls[controlName] = _this._createControl(controlsConfig[controlName]);
  33534. });
  33535. return controls;
  33536. };
  33537. /** @internal */
  33538. /**
  33539. * \@internal
  33540. * @param {?} controlConfig
  33541. * @return {?}
  33542. */
  33543. FormBuilder.prototype._createControl = /**
  33544. * \@internal
  33545. * @param {?} controlConfig
  33546. * @return {?}
  33547. */
  33548. function (controlConfig) {
  33549. if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||
  33550. controlConfig instanceof FormArray) {
  33551. return controlConfig;
  33552. }
  33553. else if (Array.isArray(controlConfig)) {
  33554. var /** @type {?} */ value = controlConfig[0];
  33555. var /** @type {?} */ validator = controlConfig.length > 1 ? controlConfig[1] : null;
  33556. var /** @type {?} */ asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;
  33557. return this.control(value, validator, asyncValidator);
  33558. }
  33559. else {
  33560. return this.control(controlConfig);
  33561. }
  33562. };
  33563. FormBuilder.decorators = [
  33564. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  33565. ];
  33566. /** @nocollapse */
  33567. FormBuilder.ctorParameters = function () { return []; };
  33568. return FormBuilder;
  33569. }());
  33570. /**
  33571. * @fileoverview added by tsickle
  33572. * @suppress {checkTypes} checked by tsc
  33573. */
  33574. /**
  33575. * @license
  33576. * Copyright Google Inc. All Rights Reserved.
  33577. *
  33578. * Use of this source code is governed by an MIT-style license that can be
  33579. * found in the LICENSE file at https://angular.io/license
  33580. */
  33581. /**
  33582. * \@stable
  33583. */
  33584. var VERSION = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["_7" /* Version */]('5.2.11');
  33585. /**
  33586. * @fileoverview added by tsickle
  33587. * @suppress {checkTypes} checked by tsc
  33588. */
  33589. /**
  33590. * @license
  33591. * Copyright Google Inc. All Rights Reserved.
  33592. *
  33593. * Use of this source code is governed by an MIT-style license that can be
  33594. * found in the LICENSE file at https://angular.io/license
  33595. */
  33596. /**
  33597. * \@whatItDoes Adds `novalidate` attribute to all forms by default.
  33598. *
  33599. * `novalidate` is used to disable browser's native form validation.
  33600. *
  33601. * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:
  33602. *
  33603. * ```
  33604. * <form ngNativeValidate></form>
  33605. * ```
  33606. *
  33607. * \@experimental
  33608. */
  33609. var NgNoValidate = /** @class */ (function () {
  33610. function NgNoValidate() {
  33611. }
  33612. NgNoValidate.decorators = [
  33613. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["s" /* Directive */], args: [{
  33614. selector: 'form:not([ngNoForm]):not([ngNativeValidate])',
  33615. host: { 'novalidate': '' },
  33616. },] },
  33617. ];
  33618. /** @nocollapse */
  33619. NgNoValidate.ctorParameters = function () { return []; };
  33620. return NgNoValidate;
  33621. }());
  33622. /**
  33623. * @fileoverview added by tsickle
  33624. * @suppress {checkTypes} checked by tsc
  33625. */
  33626. /**
  33627. * @license
  33628. * Copyright Google Inc. All Rights Reserved.
  33629. *
  33630. * Use of this source code is governed by an MIT-style license that can be
  33631. * found in the LICENSE file at https://angular.io/license
  33632. */
  33633. var SHARED_FORM_DIRECTIVES = [
  33634. NgNoValidate,
  33635. NgSelectOption,
  33636. NgSelectMultipleOption,
  33637. DefaultValueAccessor,
  33638. NumberValueAccessor,
  33639. RangeValueAccessor,
  33640. CheckboxControlValueAccessor,
  33641. SelectControlValueAccessor,
  33642. SelectMultipleControlValueAccessor,
  33643. RadioControlValueAccessor,
  33644. NgControlStatus,
  33645. NgControlStatusGroup,
  33646. RequiredValidator,
  33647. MinLengthValidator,
  33648. MaxLengthValidator,
  33649. PatternValidator,
  33650. CheckboxRequiredValidator,
  33651. EmailValidator,
  33652. ];
  33653. var TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];
  33654. var REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];
  33655. /**
  33656. * Internal module used for sharing directives between FormsModule and ReactiveFormsModule
  33657. */
  33658. var InternalFormsSharedModule = /** @class */ (function () {
  33659. function InternalFormsSharedModule() {
  33660. }
  33661. InternalFormsSharedModule.decorators = [
  33662. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["I" /* NgModule */], args: [{
  33663. declarations: SHARED_FORM_DIRECTIVES,
  33664. exports: SHARED_FORM_DIRECTIVES,
  33665. },] },
  33666. ];
  33667. /** @nocollapse */
  33668. InternalFormsSharedModule.ctorParameters = function () { return []; };
  33669. return InternalFormsSharedModule;
  33670. }());
  33671. /**
  33672. * @fileoverview added by tsickle
  33673. * @suppress {checkTypes} checked by tsc
  33674. */
  33675. /**
  33676. * @license
  33677. * Copyright Google Inc. All Rights Reserved.
  33678. *
  33679. * Use of this source code is governed by an MIT-style license that can be
  33680. * found in the LICENSE file at https://angular.io/license
  33681. */
  33682. /**
  33683. * The ng module for forms.
  33684. * \@stable
  33685. */
  33686. var FormsModule = /** @class */ (function () {
  33687. function FormsModule() {
  33688. }
  33689. FormsModule.decorators = [
  33690. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["I" /* NgModule */], args: [{
  33691. declarations: TEMPLATE_DRIVEN_DIRECTIVES,
  33692. providers: [RadioControlRegistry],
  33693. exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]
  33694. },] },
  33695. ];
  33696. /** @nocollapse */
  33697. FormsModule.ctorParameters = function () { return []; };
  33698. return FormsModule;
  33699. }());
  33700. /**
  33701. * The ng module for reactive forms.
  33702. * \@stable
  33703. */
  33704. var ReactiveFormsModule = /** @class */ (function () {
  33705. function ReactiveFormsModule() {
  33706. }
  33707. ReactiveFormsModule.decorators = [
  33708. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["I" /* NgModule */], args: [{
  33709. declarations: [REACTIVE_DRIVEN_DIRECTIVES],
  33710. providers: [FormBuilder, RadioControlRegistry],
  33711. exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]
  33712. },] },
  33713. ];
  33714. /** @nocollapse */
  33715. ReactiveFormsModule.ctorParameters = function () { return []; };
  33716. return ReactiveFormsModule;
  33717. }());
  33718. /**
  33719. * @fileoverview added by tsickle
  33720. * @suppress {checkTypes} checked by tsc
  33721. */
  33722. /**
  33723. * @license
  33724. * Copyright Google Inc. All Rights Reserved.
  33725. *
  33726. * Use of this source code is governed by an MIT-style license that can be
  33727. * found in the LICENSE file at https://angular.io/license
  33728. */
  33729. /**
  33730. * @fileoverview added by tsickle
  33731. * @suppress {checkTypes} checked by tsc
  33732. */
  33733. /**
  33734. * @license
  33735. * Copyright Google Inc. All Rights Reserved.
  33736. *
  33737. * Use of this source code is governed by an MIT-style license that can be
  33738. * found in the LICENSE file at https://angular.io/license
  33739. */
  33740. /**
  33741. * @module
  33742. * @description
  33743. * Entry point for all public APIs of this package.
  33744. */
  33745. // This file only reexports content of the `src` folder. Keep it that way.
  33746. /**
  33747. * @fileoverview added by tsickle
  33748. * @suppress {checkTypes} checked by tsc
  33749. */
  33750. /**
  33751. * Generated bundle index. Do not edit.
  33752. */
  33753. //# sourceMappingURL=forms.js.map
  33754. /***/ }),
  33755. /* 26 */
  33756. /***/ (function(module, exports, __webpack_require__) {
  33757. "use strict";
  33758. exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
  33759. //# sourceMappingURL=isArray.js.map
  33760. /***/ }),
  33761. /* 27 */
  33762. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  33763. "use strict";
  33764. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Form; });
  33765. /* unused harmony export IonicTapInput */
  33766. /* unused harmony export IonicFormInput */
  33767. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  33768. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util__ = __webpack_require__(3);
  33769. /**
  33770. * @hidden
  33771. */
  33772. var Form = (function () {
  33773. function Form() {
  33774. this._focused = null;
  33775. this._ids = -1;
  33776. this._inputs = [];
  33777. }
  33778. Form.prototype.register = function (input) {
  33779. this._inputs.push(input);
  33780. };
  33781. Form.prototype.deregister = function (input) {
  33782. Object(__WEBPACK_IMPORTED_MODULE_1__util__["q" /* removeArrayItem */])(this._inputs, input);
  33783. this.unsetAsFocused(input);
  33784. };
  33785. Form.prototype.setAsFocused = function (input) {
  33786. this._focused = input;
  33787. };
  33788. Form.prototype.unsetAsFocused = function (input) {
  33789. if (input === this._focused) {
  33790. this._focused = null;
  33791. }
  33792. };
  33793. /**
  33794. * Focuses the next input element, if it exists.
  33795. */
  33796. Form.prototype.tabFocus = function (currentInput) {
  33797. var inputs = this._inputs;
  33798. var index = inputs.indexOf(currentInput) + 1;
  33799. if (index > 0 && index < inputs.length) {
  33800. var nextInput = inputs[index];
  33801. if (nextInput !== this._focused) {
  33802. (void 0) /* console.debug */;
  33803. return nextInput.initFocus();
  33804. }
  33805. }
  33806. index = inputs.indexOf(this._focused);
  33807. if (index > 0) {
  33808. var previousInput = inputs[index - 1];
  33809. if (previousInput) {
  33810. (void 0) /* console.debug */;
  33811. previousInput.initFocus();
  33812. }
  33813. }
  33814. };
  33815. Form.prototype.nextId = function () {
  33816. return ++this._ids;
  33817. };
  33818. Form.decorators = [
  33819. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  33820. ];
  33821. /** @nocollapse */
  33822. Form.ctorParameters = function () { return []; };
  33823. return Form;
  33824. }());
  33825. /**
  33826. * @hidden
  33827. */
  33828. var IonicTapInput = (function () {
  33829. function IonicTapInput() {
  33830. }
  33831. return IonicTapInput;
  33832. }());
  33833. /**
  33834. * @hidden
  33835. */
  33836. var IonicFormInput = (function () {
  33837. function IonicFormInput() {
  33838. }
  33839. return IonicFormInput;
  33840. }());
  33841. //# sourceMappingURL=form.js.map
  33842. /***/ }),
  33843. /* 28 */
  33844. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  33845. "use strict";
  33846. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Item; });
  33847. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  33848. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__button_button__ = __webpack_require__(48);
  33849. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  33850. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_form__ = __webpack_require__(27);
  33851. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__icon_icon__ = __webpack_require__(98);
  33852. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ion__ = __webpack_require__(8);
  33853. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__label_label__ = __webpack_require__(99);
  33854. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__item_reorder__ = __webpack_require__(100);
  33855. var __extends = (this && this.__extends) || (function () {
  33856. var extendStatics = Object.setPrototypeOf ||
  33857. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  33858. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  33859. return function (d, b) {
  33860. extendStatics(d, b);
  33861. function __() { this.constructor = d; }
  33862. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  33863. };
  33864. })();
  33865. /**
  33866. * @name Item
  33867. * @description
  33868. * An item can contain text, images, and anything else. Generally it is placed in a list with other
  33869. * items. It can easily be swiped, deleted, reordered, edited, and more. An item is only required to
  33870. * be in a [List](../../list/List) if manipulating the item via gestures is required. It requires an
  33871. * [ItemSliding](../ItemSliding) wrapper element in order to be swiped.
  33872. *
  33873. *
  33874. * ## Common Usage
  33875. * There are a few elements that are considered items, but not all of them are styled to look the same.
  33876. * The basic item can be written as an `<ion-item>` element or it can be added to any element by adding
  33877. * `ion-item` as an attribute. List headers and item dividers, although styled differently, are also items
  33878. * and can be written as `<ion-list-header>` and `<ion-item-divider>`, respectively.
  33879. *
  33880. * ### As an Element
  33881. * A basic item should be written as a `<ion-item>` element when it is not clickable.
  33882. *
  33883. * ```html
  33884. * <ion-item>
  33885. * Item
  33886. * </ion-item>
  33887. * ```
  33888. *
  33889. * A list header should be written as `<ion-list-header>`.
  33890. *
  33891. * ```html
  33892. * <ion-list-header>
  33893. * List Header
  33894. * </ion-list-header>
  33895. * ```
  33896. *
  33897. * An item divider should be written as `<ion-item-divider>`.
  33898. *
  33899. * ```html
  33900. * <ion-item-divider>
  33901. * Item Divider
  33902. * </ion-item-divider>
  33903. * ```
  33904. *
  33905. * ### As an Attribute
  33906. * The attribute `ion-item` should be added to a `<button>` when the item can be clicked or tapped. It
  33907. * should be added to an `<a>` element when the item needs to contain a `href`. It can be added as an
  33908. * attribute to any element to take on the item styling.
  33909. *
  33910. * ```html
  33911. * <button ion-item (click)="buttonClick()">
  33912. * Button Item
  33913. * </button>
  33914. *
  33915. * <a ion-item href="https://www.ionicframework.com">
  33916. * Anchor Item
  33917. * </a>
  33918. * ```
  33919. *
  33920. * Note: do not add `ion-item` as an attribute to an `<ion-list-header>` or `<ion-item-divider>` element
  33921. * as they are already items and their styling will be changed to look like a basic item.
  33922. *
  33923. * ## Detail Arrows
  33924. * By default, `<button>` and `<a>` elements with the `ion-item` attribute will display a right arrow icon
  33925. * on `ios` mode. To hide the right arrow icon on either of these elements, add the `detail-none` attribute
  33926. * to the item. To show the right arrow icon on an element that doesn't display it naturally, add the
  33927. * `detail-push` attribute to the item.
  33928. *
  33929. * ```html
  33930. * <ion-item detail-push>
  33931. * Item with Detail Arrow
  33932. * </ion-item>
  33933. *
  33934. * <button ion-item (click)="buttonClick()">
  33935. * Button Item with Detail Arrow
  33936. * </button>
  33937. *
  33938. * <a ion-item detail-none href="https://www.ionicframework.com">
  33939. * Anchor Item with no Detail Arrow
  33940. * </a>
  33941. * ```
  33942. *
  33943. * This feature is not enabled by default for `md` and `wp` modes, but it can be enabled by setting the
  33944. * Sass variables `$item-md-detail-push-show` and `$item-wp-detail-push-show`, respectively, to `true`.
  33945. * It can also be disabled for ios by setting `$item-ios-detail-push-show` to `false`. See the
  33946. * [theming documentation](http://ionicframework.com/docs/theming/overriding-ionic-variables/) for
  33947. * more information on overriding Sass variables.
  33948. *
  33949. *
  33950. * ## Item Placement
  33951. * Items rely heavily on content projection to position content. The item grabs content based on the
  33952. * element or attribute and positions it that way. This logic makes it possible to write a complex
  33953. * item with simple, understandable markup without having to worry about styling and positioning
  33954. * the elements.
  33955. *
  33956. * The below chart details the attributes item looks for and where it will place the element with
  33957. * that attribute inside of the item:
  33958. *
  33959. * | Attribute | Description |
  33960. * |----------------|----------------------------------------------------------------------------------------------------- |
  33961. * | `item-start` | Placed to the left of all other elements, outside of the inner item. |
  33962. * | `item-end` | Placed to the right of all other elements, inside of the inner item, outside of the input wrapper. |
  33963. * | `item-content` | Placed to the right of any `ion-label`, inside of the input wrapper. |
  33964. *
  33965. * ### Checkboxes, Radios and Toggles
  33966. * [Checkboxes](../../checkbox/Checkbox) are positioned in the same place as the `item-start` attribute.
  33967. * [Radios](../../radio/RadioButton) and [Toggles](../../toggle/Toggle) are positioned in the same place
  33968. * as the `item-end` attribute. All of these components can be positioned differently by adding the
  33969. * `item-start` or `item-end` attribute.
  33970. *
  33971. * ### Content and Inputs
  33972. * A [Label](../../label/Label) is placed inside of the item to the left of all content and inputs. The
  33973. * following components are all placed in the same position as the `item-content` attribute: [Select](../../select/Select),
  33974. * [Input](../../input/Input), [TextArea](../../input/TextArea), [DateTime](../../datetime/DateTime), and
  33975. * [Range](../../range/Range).
  33976. *
  33977. * Any element directly placed inside of an `<ion-item>` that does not have one of the previously mentioned
  33978. * attributes and isn't one of the above elements will be placed inside of a [Label](../../label/Label).
  33979. *
  33980. * ### Text Alignment
  33981. * By default, Items will align text to the left and add an ellipsis when the text is wider than the item.
  33982. * See the [Utility Attributes Documentation](../../../../theming/css-utilities/) for attributes that can
  33983. * be added to `ion-item` to transform the text.
  33984. *
  33985. * @usage
  33986. *
  33987. * ```html
  33988. * <ion-list>
  33989. *
  33990. * <ion-list-header>
  33991. * Header
  33992. * </ion-list-header>
  33993. *
  33994. * <ion-item>
  33995. * Item
  33996. * </ion-item>
  33997. *
  33998. * <ion-item detail-push>
  33999. * Item with Detail Arrow
  34000. * </ion-item>
  34001. *
  34002. * <button ion-item (click)="buttonClick()">
  34003. * Button Item
  34004. * </button>
  34005. *
  34006. * <ion-item-divider>
  34007. * Item Divider
  34008. * </ion-item-divider>
  34009. *
  34010. * <button ion-item detail-none (click)="buttonClick()">
  34011. * Button Item with no Detail Arrow
  34012. * </button>
  34013. *
  34014. * <a ion-item href="https://www.ionicframework.com">
  34015. * Anchor Item
  34016. * </a>
  34017. *
  34018. * <ion-item no-lines>
  34019. * Item with no border
  34020. * </ion-item>
  34021. *
  34022. * <ion-item text-wrap>
  34023. * Multiline text that should wrap when it is too long
  34024. * to fit on one line in the item.
  34025. * </ion-item>
  34026. *
  34027. * </ion-list>
  34028. * ```
  34029. *
  34030. *
  34031. * @advanced
  34032. *
  34033. * ```html
  34034. * <ion-list>
  34035. *
  34036. * <!-- List header with buttons on each side -->
  34037. * <ion-list-header>
  34038. * <button ion-button item-start (click)="buttonClick()">Button</button>
  34039. * List Header
  34040. * <button ion-button outline item-end (click)="buttonClick()">Outline</button>
  34041. * </ion-list-header>
  34042. *
  34043. * <!-- Loops through and creates multiple items -->
  34044. * <ion-item *ngFor="let item of items">
  34045. * Item {% raw %}{{item}}{% endraw %}
  34046. * </ion-item>
  34047. *
  34048. * <!-- Button item with an icon on the left -->
  34049. * <button ion-item>
  34050. * <ion-icon name="star" item-start></ion-icon>
  34051. * Button Item
  34052. * </button>
  34053. *
  34054. * <!-- Item with a label and content -->
  34055. * <ion-item>
  34056. * <ion-label>
  34057. * Item Label
  34058. * </ion-label>
  34059. * <div item-content>
  34060. * Item Content next to the label
  34061. * </div>
  34062. * </ion-item>
  34063. *
  34064. * <!-- Item with left and right buttons -->
  34065. * <ion-item>
  34066. * <button ion-button item-start (click)="buttonClick()">Button</button>
  34067. * Item
  34068. * <button ion-button outline item-end (click)="buttonClick()">Outline</button>
  34069. * </ion-item>
  34070. *
  34071. * <!-- Item divider with a right button -->
  34072. * <ion-item-divider>
  34073. * Item Divider
  34074. * <button ion-button item-end>Button</button>
  34075. * </ion-item-divider>
  34076. *
  34077. * <!-- Disabled button item with left and right buttons -->
  34078. * <button ion-item disabled>
  34079. * <button ion-button item-start (click)="buttonClick()">
  34080. * <ion-icon name="home"></ion-icon>
  34081. * Left Icon
  34082. * </button>
  34083. * Disabled Button Item
  34084. * <button ion-button outline item-end (click)="buttonClick()">
  34085. * <ion-icon name="star"></ion-icon>
  34086. * Left Icon
  34087. * </button>
  34088. * </button>
  34089. *
  34090. * <!-- Item with an avatar on the left and button on the right -->
  34091. * <ion-item>
  34092. * <ion-avatar item-start>
  34093. * <img src="img/my-avatar.png">
  34094. * </ion-avatar>
  34095. * Avatar Item
  34096. * <button ion-button outline item-end>View</button>
  34097. * </ion-item>
  34098. *
  34099. * <!-- Item with a thumbnail on the right -->
  34100. * <ion-item>
  34101. * <h2>Item</h2>
  34102. * <p>Item Paragraph</p>
  34103. * <ion-thumbnail item-end>
  34104. * <img src="img/my-thumbnail.png">
  34105. * </ion-thumbnail>
  34106. * </ion-item>
  34107. *
  34108. * <!-- Sliding item -->
  34109. * <ion-item-sliding>
  34110. * <ion-item>
  34111. * Item
  34112. * </ion-item>
  34113. * <ion-item-options>
  34114. * <button ion-button color="primary" (click)="archive()">Archive</button>
  34115. * </ion-item-options>
  34116. * </ion-item-sliding>
  34117. *
  34118. * </ion-list>
  34119. * ```
  34120. *
  34121. *
  34122. * @demo /docs/demos/src/item/
  34123. * @see {@link /docs/components#lists List Component Docs}
  34124. * @see {@link ../../list/List List API Docs}
  34125. * @see {@link ../ItemSliding ItemSliding API Docs}
  34126. */
  34127. var Item = (function (_super) {
  34128. __extends(Item, _super);
  34129. function Item(form, config, elementRef, renderer, reorder) {
  34130. var _this = _super.call(this, config, elementRef, renderer, 'item') || this;
  34131. _this._ids = -1;
  34132. _this._inputs = [];
  34133. _this._viewLabel = true;
  34134. _this._name = 'item';
  34135. /**
  34136. * @hidden
  34137. */
  34138. _this.labelId = null;
  34139. _this._setName(elementRef);
  34140. _this._hasReorder = !!reorder;
  34141. _this.id = form.nextId().toString();
  34142. _this.labelId = 'lbl-' + _this.id;
  34143. // auto add "tappable" attribute to ion-item components that have a click listener
  34144. if (!renderer.orgListen) {
  34145. renderer.orgListen = renderer.listen;
  34146. renderer.listen = function (renderElement, name, callback) {
  34147. if (name === 'click' && renderElement.setAttribute) {
  34148. renderElement.setAttribute('tappable', '');
  34149. }
  34150. return renderer.orgListen(renderElement, name, callback);
  34151. };
  34152. }
  34153. return _this;
  34154. }
  34155. /**
  34156. * @hidden
  34157. */
  34158. Item.prototype.registerInput = function (type) {
  34159. this._inputs.push(type);
  34160. return this.id + '-' + (++this._ids);
  34161. };
  34162. /**
  34163. * @hidden
  34164. */
  34165. Item.prototype.ngAfterContentInit = function () {
  34166. if (this._viewLabel && this._inputs.length) {
  34167. var labelText = this.getLabelText().trim();
  34168. this._viewLabel = (labelText.length > 0);
  34169. }
  34170. if (this._inputs.length > 1) {
  34171. this.setElementClass('item-multiple-inputs', true);
  34172. }
  34173. };
  34174. /**
  34175. * @hidden
  34176. */
  34177. Item.prototype._updateColor = function (newColor, componentName) {
  34178. componentName = componentName || 'item'; // item-radio
  34179. this._setColor(newColor, componentName);
  34180. };
  34181. /**
  34182. * @hidden
  34183. */
  34184. Item.prototype._setName = function (elementRef) {
  34185. var nodeName = elementRef.nativeElement.nodeName.replace('ION-', '');
  34186. if (nodeName === 'LIST-HEADER' || nodeName === 'ITEM-DIVIDER') {
  34187. this._name = nodeName;
  34188. }
  34189. };
  34190. /**
  34191. * @hidden
  34192. */
  34193. Item.prototype.getLabelText = function () {
  34194. return this._label ? this._label.text : '';
  34195. };
  34196. Object.defineProperty(Item.prototype, "contentLabel", {
  34197. /**
  34198. * @hidden
  34199. */
  34200. set: function (label) {
  34201. if (label) {
  34202. this._label = label;
  34203. label.id = this.labelId;
  34204. if (label.type) {
  34205. this.setElementClass('item-label-' + label.type, true);
  34206. }
  34207. this._viewLabel = false;
  34208. }
  34209. },
  34210. enumerable: true,
  34211. configurable: true
  34212. });
  34213. Object.defineProperty(Item.prototype, "viewLabel", {
  34214. /**
  34215. * @hidden
  34216. */
  34217. set: function (label) {
  34218. if (!this._label) {
  34219. this._label = label;
  34220. }
  34221. },
  34222. enumerable: true,
  34223. configurable: true
  34224. });
  34225. Object.defineProperty(Item.prototype, "_buttons", {
  34226. /**
  34227. * @hidden
  34228. */
  34229. set: function (buttons) {
  34230. buttons.forEach(function (button) {
  34231. if (!button._size) {
  34232. button.setElementClass('item-button', true);
  34233. }
  34234. });
  34235. },
  34236. enumerable: true,
  34237. configurable: true
  34238. });
  34239. Object.defineProperty(Item.prototype, "_icons", {
  34240. /**
  34241. * @hidden
  34242. */
  34243. set: function (icons) {
  34244. icons.forEach(function (icon) {
  34245. icon.setElementClass('item-icon', true);
  34246. });
  34247. },
  34248. enumerable: true,
  34249. configurable: true
  34250. });
  34251. Item.decorators = [
  34252. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  34253. selector: 'ion-list-header,ion-item,[ion-item],ion-item-divider',
  34254. template: '<ng-content select="[item-start],[item-left],ion-checkbox:not([item-end]):not([item-right])"></ng-content>' +
  34255. '<div class="item-inner">' +
  34256. '<div class="input-wrapper">' +
  34257. '<ng-content select="ion-label"></ng-content>' +
  34258. '<ion-label *ngIf="_viewLabel">' +
  34259. '<ng-content></ng-content>' +
  34260. '</ion-label>' +
  34261. '<ng-content select="ion-select,ion-input,ion-textarea,ion-datetime,ion-range,[item-content]"></ng-content>' +
  34262. '</div>' +
  34263. '<ng-content select="[item-end],[item-right],ion-radio,ion-toggle"></ng-content>' +
  34264. '<ion-reorder *ngIf="_hasReorder"></ion-reorder>' +
  34265. '</div>' +
  34266. '<div class="button-effect"></div>',
  34267. host: {
  34268. 'class': 'item'
  34269. },
  34270. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  34271. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  34272. },] },
  34273. ];
  34274. /** @nocollapse */
  34275. Item.ctorParameters = function () { return [
  34276. { type: __WEBPACK_IMPORTED_MODULE_3__util_form__["a" /* Form */], },
  34277. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  34278. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  34279. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  34280. { type: __WEBPACK_IMPORTED_MODULE_7__item_reorder__["a" /* ItemReorder */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  34281. ]; };
  34282. Item.propDecorators = {
  34283. 'contentLabel': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_6__label_label__["a" /* Label */],] },],
  34284. 'viewLabel': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: [__WEBPACK_IMPORTED_MODULE_6__label_label__["a" /* Label */],] },],
  34285. '_buttons': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_1__button_button__["a" /* Button */],] },],
  34286. '_icons': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_4__icon_icon__["a" /* Icon */],] },],
  34287. };
  34288. return Item;
  34289. }(__WEBPACK_IMPORTED_MODULE_5__ion__["a" /* Ion */]));
  34290. //# sourceMappingURL=item.js.map
  34291. /***/ }),
  34292. /* 29 */
  34293. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  34294. "use strict";
  34295. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_app_app_root__ = __webpack_require__(91);
  34296. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__components_app_app_root__["b"]; });
  34297. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_app_menu_controller__ = __webpack_require__(41);
  34298. /* unused harmony reexport MenuController */
  34299. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_action_sheet_action_sheet__ = __webpack_require__(93);
  34300. /* unused harmony reexport ActionSheet */
  34301. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_action_sheet_action_sheet_controller__ = __webpack_require__(168);
  34302. /* unused harmony reexport ActionSheetController */
  34303. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_action_sheet_action_sheet_component__ = __webpack_require__(94);
  34304. /* unused harmony reexport ActionSheetCmp */
  34305. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_alert_alert__ = __webpack_require__(95);
  34306. /* unused harmony reexport Alert */
  34307. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__components_alert_alert_controller__ = __webpack_require__(169);
  34308. /* unused harmony reexport AlertController */
  34309. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__components_alert_alert_component__ = __webpack_require__(96);
  34310. /* unused harmony reexport AlertCmp */
  34311. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__components_app_app__ = __webpack_require__(11);
  34312. /* unused harmony reexport App */
  34313. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__components_avatar_avatar__ = __webpack_require__(170);
  34314. /* unused harmony reexport Avatar */
  34315. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_backdrop_backdrop__ = __webpack_require__(97);
  34316. /* unused harmony reexport Backdrop */
  34317. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_badge_badge__ = __webpack_require__(171);
  34318. /* unused harmony reexport Badge */
  34319. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__components_button_button__ = __webpack_require__(48);
  34320. /* unused harmony reexport Button */
  34321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__components_card_card__ = __webpack_require__(172);
  34322. /* unused harmony reexport Card */
  34323. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__components_card_card_content__ = __webpack_require__(173);
  34324. /* unused harmony reexport CardContent */
  34325. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__components_card_card_header__ = __webpack_require__(174);
  34326. /* unused harmony reexport CardHeader */
  34327. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__components_card_card_title__ = __webpack_require__(175);
  34328. /* unused harmony reexport CardTitle */
  34329. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__components_checkbox_checkbox__ = __webpack_require__(176);
  34330. /* unused harmony reexport Checkbox */
  34331. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__components_chip_chip__ = __webpack_require__(184);
  34332. /* unused harmony reexport Chip */
  34333. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__components_content_content__ = __webpack_require__(31);
  34334. /* unused harmony reexport Content */
  34335. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__components_datetime_datetime__ = __webpack_require__(185);
  34336. /* unused harmony reexport DateTime */
  34337. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__components_fab_fab__ = __webpack_require__(72);
  34338. /* unused harmony reexport FabButton */
  34339. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__components_fab_fab_container__ = __webpack_require__(187);
  34340. /* unused harmony reexport FabContainer */
  34341. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__components_fab_fab_list__ = __webpack_require__(104);
  34342. /* unused harmony reexport FabList */
  34343. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__components_grid_col__ = __webpack_require__(188);
  34344. /* unused harmony reexport Col */
  34345. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__components_grid_grid__ = __webpack_require__(189);
  34346. /* unused harmony reexport Grid */
  34347. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__components_grid_row__ = __webpack_require__(190);
  34348. /* unused harmony reexport Row */
  34349. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__components_ion__ = __webpack_require__(8);
  34350. /* unused harmony reexport Ion */
  34351. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__components_icon_icon__ = __webpack_require__(98);
  34352. /* unused harmony reexport Icon */
  34353. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__components_img_img__ = __webpack_require__(191);
  34354. /* unused harmony reexport Img */
  34355. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__components_infinite_scroll_infinite_scroll__ = __webpack_require__(105);
  34356. /* unused harmony reexport InfiniteScroll */
  34357. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__components_infinite_scroll_infinite_scroll_content__ = __webpack_require__(192);
  34358. /* unused harmony reexport InfiniteScrollContent */
  34359. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__components_input_input__ = __webpack_require__(193);
  34360. /* unused harmony reexport TextInput */
  34361. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__components_item_item__ = __webpack_require__(28);
  34362. /* unused harmony reexport Item */
  34363. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__components_item_item_content__ = __webpack_require__(195);
  34364. /* unused harmony reexport ItemContent */
  34365. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__components_item_item_divider__ = __webpack_require__(196);
  34366. /* unused harmony reexport ItemDivider */
  34367. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__components_item_item_group__ = __webpack_require__(197);
  34368. /* unused harmony reexport ItemGroup */
  34369. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__components_item_item_options__ = __webpack_require__(107);
  34370. /* unused harmony reexport ItemOptions */
  34371. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__components_item_item_reorder__ = __webpack_require__(100);
  34372. /* unused harmony reexport ItemReorder */
  34373. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__components_item_item_sliding__ = __webpack_require__(198);
  34374. /* unused harmony reexport ItemSliding */
  34375. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__components_item_reorder__ = __webpack_require__(199);
  34376. /* unused harmony reexport Reorder */
  34377. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__components_label_label__ = __webpack_require__(99);
  34378. /* unused harmony reexport Label */
  34379. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__components_list_list__ = __webpack_require__(108);
  34380. /* unused harmony reexport List */
  34381. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__components_list_list_header__ = __webpack_require__(109);
  34382. /* unused harmony reexport ListHeader */
  34383. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__components_loading_loading__ = __webpack_require__(200);
  34384. /* unused harmony reexport Loading */
  34385. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__components_loading_loading_controller__ = __webpack_require__(201);
  34386. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_45__components_loading_loading_controller__["a"]; });
  34387. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__components_loading_loading_component__ = __webpack_require__(110);
  34388. /* unused harmony reexport LoadingCmp */
  34389. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__components_menu_menu__ = __webpack_require__(202);
  34390. /* unused harmony reexport Menu */
  34391. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__components_menu_menu_close__ = __webpack_require__(203);
  34392. /* unused harmony reexport MenuClose */
  34393. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__components_menu_menu_toggle__ = __webpack_require__(204);
  34394. /* unused harmony reexport MenuToggle */
  34395. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__components_menu_menu_types__ = __webpack_require__(373);
  34396. /* unused harmony reexport MenuType */
  34397. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__components_modal_modal__ = __webpack_require__(206);
  34398. /* unused harmony reexport Modal */
  34399. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__components_modal_modal_component__ = __webpack_require__(112);
  34400. /* unused harmony reexport ModalCmp */
  34401. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__components_modal_modal_controller__ = __webpack_require__(306);
  34402. /* unused harmony reexport ModalController */
  34403. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__components_nav_nav__ = __webpack_require__(111);
  34404. /* unused harmony reexport Nav */
  34405. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__components_nav_nav_pop__ = __webpack_require__(127);
  34406. /* unused harmony reexport NavPop */
  34407. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_56__components_nav_nav_pop_anchor__ = __webpack_require__(307);
  34408. /* unused harmony reexport NavPopAnchor */
  34409. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_57__components_nav_nav_push__ = __webpack_require__(128);
  34410. /* unused harmony reexport NavPush */
  34411. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_58__components_nav_nav_push_anchor__ = __webpack_require__(308);
  34412. /* unused harmony reexport NavPushAnchor */
  34413. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_59__components_note_note__ = __webpack_require__(309);
  34414. /* unused harmony reexport Note */
  34415. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_60__components_option_option__ = __webpack_require__(129);
  34416. /* unused harmony reexport Option */
  34417. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_61__components_picker_picker__ = __webpack_require__(186);
  34418. /* unused harmony reexport Picker */
  34419. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_62__components_picker_picker_component__ = __webpack_require__(102);
  34420. /* unused harmony reexport PickerCmp */
  34421. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_63__components_picker_picker_column__ = __webpack_require__(103);
  34422. /* unused harmony reexport PickerColumnCmp */
  34423. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_64__components_picker_picker_controller__ = __webpack_require__(101);
  34424. /* unused harmony reexport PickerController */
  34425. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_65__components_popover_popover__ = __webpack_require__(130);
  34426. /* unused harmony reexport Popover */
  34427. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_66__components_popover_popover_component__ = __webpack_require__(131);
  34428. /* unused harmony reexport PopoverCmp */
  34429. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_67__components_popover_popover_controller__ = __webpack_require__(310);
  34430. /* unused harmony reexport PopoverController */
  34431. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_68__components_radio_radio_button__ = __webpack_require__(311);
  34432. /* unused harmony reexport RadioButton */
  34433. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_69__components_radio_radio_group__ = __webpack_require__(132);
  34434. /* unused harmony reexport RadioGroup */
  34435. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_70__components_range_range__ = __webpack_require__(312);
  34436. /* unused harmony reexport Range */
  34437. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_71__components_range_range_knob__ = __webpack_require__(313);
  34438. /* unused harmony reexport RangeKnob */
  34439. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_72__components_refresher_refresher__ = __webpack_require__(133);
  34440. /* unused harmony reexport Refresher */
  34441. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_73__components_refresher_refresher_content__ = __webpack_require__(314);
  34442. /* unused harmony reexport RefresherContent */
  34443. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_74__components_scroll_scroll__ = __webpack_require__(315);
  34444. /* unused harmony reexport Scroll */
  34445. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_75__components_searchbar_searchbar__ = __webpack_require__(316);
  34446. /* unused harmony reexport Searchbar */
  34447. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_76__components_segment_segment__ = __webpack_require__(317);
  34448. /* unused harmony reexport Segment */
  34449. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_77__components_segment_segment_button__ = __webpack_require__(134);
  34450. /* unused harmony reexport SegmentButton */
  34451. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_78__components_select_select__ = __webpack_require__(318);
  34452. /* unused harmony reexport Select */
  34453. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_79__components_select_select_popover_component__ = __webpack_require__(135);
  34454. /* unused harmony reexport SelectPopover */
  34455. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_80__components_show_hide_when_show_when__ = __webpack_require__(319);
  34456. /* unused harmony reexport ShowWhen */
  34457. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_81__components_show_hide_when_display_when__ = __webpack_require__(136);
  34458. /* unused harmony reexport DisplayWhen */
  34459. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_82__components_show_hide_when_hide_when__ = __webpack_require__(320);
  34460. /* unused harmony reexport HideWhen */
  34461. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_83__components_slides_slide__ = __webpack_require__(321);
  34462. /* unused harmony reexport Slide */
  34463. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_84__components_slides_slides__ = __webpack_require__(137);
  34464. /* unused harmony reexport Slides */
  34465. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_85__components_spinner_spinner__ = __webpack_require__(325);
  34466. /* unused harmony reexport Spinner */
  34467. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_86__components_split_pane_split_pane__ = __webpack_require__(52);
  34468. /* unused harmony reexport SplitPane */
  34469. /* unused harmony reexport RootNode */
  34470. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_87__components_tabs_tab__ = __webpack_require__(326);
  34471. /* unused harmony reexport Tab */
  34472. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_88__components_tabs_tab_button__ = __webpack_require__(327);
  34473. /* unused harmony reexport TabButton */
  34474. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_89__components_tabs_tab_highlight__ = __webpack_require__(143);
  34475. /* unused harmony reexport TabHighlight */
  34476. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_90__components_tabs_tabs__ = __webpack_require__(142);
  34477. /* unused harmony reexport Tabs */
  34478. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_91__components_toast_toast__ = __webpack_require__(328);
  34479. /* unused harmony reexport Toast */
  34480. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_92__components_toast_toast_component__ = __webpack_require__(144);
  34481. /* unused harmony reexport ToastCmp */
  34482. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_93__components_toast_toast_controller__ = __webpack_require__(329);
  34483. /* unused harmony reexport ToastController */
  34484. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_94__components_toggle_toggle__ = __webpack_require__(330);
  34485. /* unused harmony reexport Toggle */
  34486. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_95__components_toolbar_toolbar_footer__ = __webpack_require__(331);
  34487. /* unused harmony reexport Footer */
  34488. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_96__components_toolbar_toolbar_header__ = __webpack_require__(332);
  34489. /* unused harmony reexport Header */
  34490. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_97__components_toolbar_toolbar__ = __webpack_require__(84);
  34491. /* unused harmony reexport Toolbar */
  34492. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_98__components_toolbar_toolbar_item__ = __webpack_require__(333);
  34493. /* unused harmony reexport ToolbarItem */
  34494. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_99__components_toolbar_toolbar_title__ = __webpack_require__(334);
  34495. /* unused harmony reexport ToolbarTitle */
  34496. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_100__components_toolbar_navbar__ = __webpack_require__(53);
  34497. /* unused harmony reexport Navbar */
  34498. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_101__components_thumbnail_thumbnail__ = __webpack_require__(335);
  34499. /* unused harmony reexport Thumbnail */
  34500. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_102__components_typography_typography__ = __webpack_require__(336);
  34501. /* unused harmony reexport Typography */
  34502. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_103__components_virtual_scroll_virtual_footer__ = __webpack_require__(145);
  34503. /* unused harmony reexport VirtualFooter */
  34504. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_104__components_virtual_scroll_virtual_header__ = __webpack_require__(146);
  34505. /* unused harmony reexport VirtualHeader */
  34506. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_105__components_virtual_scroll_virtual_item__ = __webpack_require__(147);
  34507. /* unused harmony reexport VirtualItem */
  34508. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_106__components_virtual_scroll_virtual_scroll__ = __webpack_require__(337);
  34509. /* unused harmony reexport VirtualScroll */
  34510. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_107__config_config__ = __webpack_require__(2);
  34511. /* unused harmony reexport Config */
  34512. /* unused harmony reexport setupConfig */
  34513. /* unused harmony reexport ConfigToken */
  34514. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_108__platform_dom_controller__ = __webpack_require__(15);
  34515. /* unused harmony reexport DomController */
  34516. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_109__platform_platform__ = __webpack_require__(7);
  34517. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_109__platform_platform__["a"]; });
  34518. /* unused harmony reexport setupPlatform */
  34519. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_110__tap_click_haptic__ = __webpack_require__(51);
  34520. /* unused harmony reexport Haptic */
  34521. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_111__navigation_deep_linker__ = __webpack_require__(24);
  34522. /* unused harmony reexport DeepLinker */
  34523. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_112__navigation_ionic_page__ = __webpack_require__(668);
  34524. /* unused harmony reexport IonicPage */
  34525. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_113__navigation_nav_controller__ = __webpack_require__(35);
  34526. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_113__navigation_nav_controller__["a"]; });
  34527. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_114__navigation_nav_controller_base__ = __webpack_require__(69);
  34528. /* unused harmony reexport NavControllerBase */
  34529. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_115__navigation_nav_params__ = __webpack_require__(23);
  34530. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_115__navigation_nav_params__["a"]; });
  34531. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_116__navigation_nav_util__ = __webpack_require__(34);
  34532. /* unused harmony reexport DeepLinkMetadata */
  34533. /* unused harmony reexport DeepLinkMetadataFactory */
  34534. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_117__tap_click_tap_click__ = __webpack_require__(338);
  34535. /* unused harmony reexport TapClick */
  34536. /* unused harmony reexport setupTapClick */
  34537. /* unused harmony reexport isActivatable */
  34538. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_118__navigation_url_serializer__ = __webpack_require__(68);
  34539. /* unused harmony reexport UrlSerializer */
  34540. /* unused harmony reexport DeepLinkConfigToken */
  34541. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_119__navigation_view_controller__ = __webpack_require__(9);
  34542. /* unused harmony reexport ViewController */
  34543. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_120__gestures_pan_gesture__ = __webpack_require__(70);
  34544. /* unused harmony reexport PanGesture */
  34545. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_121__gestures_gesture__ = __webpack_require__(670);
  34546. /* unused harmony reexport Gesture */
  34547. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_122__gestures_slide_edge_gesture__ = __webpack_require__(92);
  34548. /* unused harmony reexport SlideEdgeGesture */
  34549. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_123__gestures_slide_gesture__ = __webpack_require__(166);
  34550. /* unused harmony reexport SlideGesture */
  34551. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_124__gestures_gesture_controller__ = __webpack_require__(13);
  34552. /* unused harmony reexport BLOCK_ALL */
  34553. /* unused harmony reexport GESTURE_GO_BACK_SWIPE */
  34554. /* unused harmony reexport GESTURE_MENU_SWIPE */
  34555. /* unused harmony reexport GESTURE_ITEM_SWIPE */
  34556. /* unused harmony reexport GESTURE_REFRESHER */
  34557. /* unused harmony reexport GESTURE_TOGGLE */
  34558. /* unused harmony reexport GestureController */
  34559. /* unused harmony reexport GestureDelegate */
  34560. /* unused harmony reexport BlockerDelegate */
  34561. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_125__util_events__ = __webpack_require__(341);
  34562. /* unused harmony reexport Events */
  34563. /* unused harmony reexport setupEvents */
  34564. /* unused harmony reexport setupProvideEvents */
  34565. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_126__util_ionic_error_handler__ = __webpack_require__(672);
  34566. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_126__util_ionic_error_handler__["a"]; });
  34567. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_127__platform_keyboard__ = __webpack_require__(50);
  34568. /* unused harmony reexport Keyboard */
  34569. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_128__util_form__ = __webpack_require__(27);
  34570. /* unused harmony reexport Form */
  34571. /* unused harmony reexport IonicFormInput */
  34572. /* unused harmony reexport IonicTapInput */
  34573. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_129__util_util__ = __webpack_require__(3);
  34574. /* unused harmony reexport reorderArray */
  34575. /* unused harmony reexport normalizeURL */
  34576. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_130__animations_animation__ = __webpack_require__(20);
  34577. /* unused harmony reexport Animation */
  34578. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_131__transitions_page_transition__ = __webpack_require__(43);
  34579. /* unused harmony reexport PageTransition */
  34580. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_132__transitions_transition__ = __webpack_require__(42);
  34581. /* unused harmony reexport Transition */
  34582. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_133__platform_platform_registry__ = __webpack_require__(342);
  34583. /* unused harmony reexport PlatformConfigToken */
  34584. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_134__config_mode_registry__ = __webpack_require__(343);
  34585. /* unused harmony reexport registerModeConfigs */
  34586. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_135__gestures_gesture_config__ = __webpack_require__(344);
  34587. /* unused harmony reexport IonicGestureConfig */
  34588. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_136__module__ = __webpack_require__(673);
  34589. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_136__module__["a"]; });
  34590. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_136__module__["b"]; });
  34591. /* unused harmony reexport provideLocationStrategy */
  34592. /**
  34593. * Global Providers
  34594. */
  34595. /**
  34596. * Export Utils
  34597. */
  34598. //# sourceMappingURL=index.js.map
  34599. /***/ }),
  34600. /* 30 */
  34601. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  34602. "use strict";
  34603. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return KEY_LEFT; });
  34604. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return KEY_UP; });
  34605. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return KEY_RIGHT; });
  34606. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return KEY_DOWN; });
  34607. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return KEY_ENTER; });
  34608. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return KEY_ESCAPE; });
  34609. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return KEY_SPACE; });
  34610. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return KEY_TAB; });
  34611. var KEY_LEFT = 37;
  34612. var KEY_UP = 38;
  34613. var KEY_RIGHT = 39;
  34614. var KEY_DOWN = 40;
  34615. var KEY_ENTER = 13;
  34616. var KEY_ESCAPE = 27;
  34617. var KEY_SPACE = 32;
  34618. var KEY_TAB = 9;
  34619. //# sourceMappingURL=key.js.map
  34620. /***/ }),
  34621. /* 31 */
  34622. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  34623. "use strict";
  34624. /* unused harmony export EventEmitterProxy */
  34625. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Content; });
  34626. /* unused harmony export updateImgs */
  34627. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  34628. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  34629. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  34630. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_dom_controller__ = __webpack_require__(15);
  34631. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__ion__ = __webpack_require__(8);
  34632. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__navigation_nav_util__ = __webpack_require__(34);
  34633. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_util__ = __webpack_require__(3);
  34634. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__platform_keyboard__ = __webpack_require__(50);
  34635. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__navigation_nav_controller__ = __webpack_require__(35);
  34636. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__platform_platform__ = __webpack_require__(7);
  34637. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__util_scroll_view__ = __webpack_require__(182);
  34638. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__navigation_view_controller__ = __webpack_require__(9);
  34639. var __extends = (this && this.__extends) || (function () {
  34640. var extendStatics = Object.setPrototypeOf ||
  34641. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  34642. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  34643. return function (d, b) {
  34644. extendStatics(d, b);
  34645. function __() { this.constructor = d; }
  34646. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  34647. };
  34648. })();
  34649. var EventEmitterProxy = (function (_super) {
  34650. __extends(EventEmitterProxy, _super);
  34651. function EventEmitterProxy() {
  34652. return _super !== null && _super.apply(this, arguments) || this;
  34653. }
  34654. EventEmitterProxy.prototype.subscribe = function (generatorOrNext, error, complete) {
  34655. this.onSubscribe();
  34656. return _super.prototype.subscribe.call(this, generatorOrNext, error, complete);
  34657. };
  34658. return EventEmitterProxy;
  34659. }(__WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]));
  34660. /**
  34661. * @name Content
  34662. * @description
  34663. * The Content component provides an easy to use content area with
  34664. * some useful methods to control the scrollable area. There should
  34665. * only be one content in a single view component. If additional scrollable
  34666. * elements are needed, use [ionScroll](../../scroll/Scroll).
  34667. *
  34668. *
  34669. * The content area can also implement pull-to-refresh with the
  34670. * [Refresher](../../refresher/Refresher) component.
  34671. *
  34672. * @usage
  34673. * ```html
  34674. * <ion-content>
  34675. * Add your content here!
  34676. * </ion-content>
  34677. * ```
  34678. *
  34679. * To get a reference to the content component from a Page's logic,
  34680. * you can use Angular's `@ViewChild` annotation:
  34681. *
  34682. * ```ts
  34683. * import { Component, ViewChild } from '@angular/core';
  34684. * import { Content } from 'ionic-angular';
  34685. *
  34686. * @Component({...})
  34687. * export class MyPage{
  34688. * @ViewChild(Content) content: Content;
  34689. *
  34690. * scrollToTop() {
  34691. * this.content.scrollToTop();
  34692. * }
  34693. * }
  34694. * ```
  34695. *
  34696. * @advanced
  34697. *
  34698. * ### Scroll Events
  34699. *
  34700. * Scroll events happen outside of Angular's Zones. This is for performance reasons. So
  34701. * if you're trying to bind a value to any scroll event, it will need to be wrapped in
  34702. * a `zone.run()`
  34703. *
  34704. * ```ts
  34705. * import { Component, NgZone } from '@angular/core';
  34706. * @Component({
  34707. * template: `
  34708. * <ion-header>
  34709. * <ion-navbar>
  34710. * <ion-title>{{scrollAmount}}</ion-title>
  34711. * </ion-navbar>
  34712. * </ion-header>
  34713. * <ion-content (ionScroll)="scrollHandler($event)">
  34714. * <p> Some realllllllly long content </p>
  34715. * </ion-content>
  34716. * `})
  34717. * class E2EPage {
  34718. * public scrollAmount = 0;
  34719. * constructor( public zone: NgZone){}
  34720. * scrollHandler(event) {
  34721. * console.log(`ScrollEvent: ${event}`)
  34722. * this.zone.run(()=>{
  34723. * // since scrollAmount is data-binded,
  34724. * // the update needs to happen in zone
  34725. * this.scrollAmount++
  34726. * })
  34727. * }
  34728. * }
  34729. * ```
  34730. *
  34731. * This goes for any scroll event, not just `ionScroll`.
  34732. *
  34733. * ### Resizing the content
  34734. *
  34735. * If the height of `ion-header`, `ion-footer` or `ion-tabbar`
  34736. * changes dynamically, `content.resize()` has to be called in order to update the
  34737. * layout of `Content`.
  34738. *
  34739. *
  34740. * ```ts
  34741. * @Component({
  34742. * template: `
  34743. * <ion-header>
  34744. * <ion-navbar>
  34745. * <ion-title>Main Navbar</ion-title>
  34746. * </ion-navbar>
  34747. * <ion-toolbar *ngIf="showToolbar">
  34748. * <ion-title>Dynamic Toolbar</ion-title>
  34749. * </ion-toolbar>
  34750. * </ion-header>
  34751. * <ion-content>
  34752. * <button ion-button (click)="toggleToolbar()">Toggle Toolbar</button>
  34753. * </ion-content>
  34754. * `})
  34755. *
  34756. * class E2EPage {
  34757. * @ViewChild(Content) content: Content;
  34758. * showToolbar: boolean = false;
  34759. *
  34760. * toggleToolbar() {
  34761. * this.showToolbar = !this.showToolbar;
  34762. * this.content.resize();
  34763. * }
  34764. * }
  34765. * ```
  34766. *
  34767. *
  34768. * Scroll to a specific position
  34769. *
  34770. * ```ts
  34771. * import { Component, ViewChild } from '@angular/core';
  34772. * import { Content } from 'ionic-angular';
  34773. *
  34774. * @Component({
  34775. * template: `<ion-content>
  34776. * <button ion-button (click)="scrollTo()">Down 500px</button>
  34777. * </ion-content>`
  34778. * )}
  34779. * export class MyPage{
  34780. * @ViewChild(Content) content: Content;
  34781. *
  34782. * scrollTo() {
  34783. * // set the scrollLeft to 0px, and scrollTop to 500px
  34784. * // the scroll duration should take 200ms
  34785. * this.content.scrollTo(0, 500, 200);
  34786. * }
  34787. * }
  34788. * ```
  34789. *
  34790. */
  34791. var Content = (function (_super) {
  34792. __extends(Content, _super);
  34793. function Content(config, _plt, _dom, elementRef, renderer, _app, _keyboard, _zone, viewCtrl, navCtrl) {
  34794. var _this = _super.call(this, config, elementRef, renderer, 'content') || this;
  34795. _this._plt = _plt;
  34796. _this._dom = _dom;
  34797. _this._app = _app;
  34798. _this._keyboard = _keyboard;
  34799. _this._zone = _zone;
  34800. /** @internal */
  34801. _this._scrollPadding = 0;
  34802. /** @internal */
  34803. _this._inputPolling = false;
  34804. /** @internal */
  34805. _this._hasRefresher = false;
  34806. /** @internal */
  34807. _this._imgs = [];
  34808. /** @internal */
  34809. _this._scrollDownOnLoad = false;
  34810. /**
  34811. * @output {ScrollEvent} Emitted when the scrolling first starts.
  34812. */
  34813. _this.ionScrollStart = new EventEmitterProxy();
  34814. /**
  34815. * @output {ScrollEvent} Emitted on every scroll event.
  34816. */
  34817. _this.ionScroll = new EventEmitterProxy();
  34818. /**
  34819. * @output {ScrollEvent} Emitted when scrolling ends.
  34820. */
  34821. _this.ionScrollEnd = new EventEmitterProxy();
  34822. var enableScrollListener = function () { return _this._scroll.enableEvents(); };
  34823. _this.ionScroll.onSubscribe = enableScrollListener;
  34824. _this.ionScrollStart.onSubscribe = enableScrollListener;
  34825. _this.ionScrollEnd.onSubscribe = enableScrollListener;
  34826. _this.statusbarPadding = config.getBoolean('statusbarPadding', false);
  34827. _this._imgReqBfr = config.getNumber('imgRequestBuffer', 1400);
  34828. _this._imgRndBfr = config.getNumber('imgRenderBuffer', 400);
  34829. _this._imgVelMax = config.getNumber('imgVelocityMax', 3);
  34830. _this._scroll = new __WEBPACK_IMPORTED_MODULE_10__util_scroll_view__["a" /* ScrollView */](_app, _plt, _dom);
  34831. while (navCtrl) {
  34832. if (Object(__WEBPACK_IMPORTED_MODULE_5__navigation_nav_util__["m" /* isTabs */])(navCtrl)) {
  34833. _this._tabs = navCtrl;
  34834. break;
  34835. }
  34836. navCtrl = navCtrl.parent;
  34837. }
  34838. if (viewCtrl) {
  34839. _this._viewCtrl = viewCtrl;
  34840. // content has a view controller
  34841. viewCtrl._setIONContent(_this);
  34842. viewCtrl._setIONContentRef(elementRef);
  34843. _this._viewCtrlReadSub = viewCtrl.readReady.subscribe(function () {
  34844. _this._viewCtrlReadSub.unsubscribe();
  34845. _this._readDimensions();
  34846. });
  34847. _this._viewCtrlWriteSub = viewCtrl.writeReady.subscribe(function () {
  34848. _this._viewCtrlWriteSub.unsubscribe();
  34849. _this._writeDimensions();
  34850. });
  34851. }
  34852. else {
  34853. // content does not have a view controller
  34854. _dom.read(_this._readDimensions.bind(_this));
  34855. _dom.write(_this._writeDimensions.bind(_this));
  34856. }
  34857. return _this;
  34858. }
  34859. Object.defineProperty(Content.prototype, "contentHeight", {
  34860. /**
  34861. * Content height of the viewable area. This does not include content
  34862. * which is outside the overflow area, or content area which is under
  34863. * headers and footers. Read-only.
  34864. *
  34865. * @return {number}
  34866. */
  34867. get: function () {
  34868. return this._scroll.ev.contentHeight;
  34869. },
  34870. enumerable: true,
  34871. configurable: true
  34872. });
  34873. Object.defineProperty(Content.prototype, "contentWidth", {
  34874. /**
  34875. * Content width including content which is not visible on the screen
  34876. * due to overflow. Read-only.
  34877. *
  34878. * @return {number}
  34879. */
  34880. get: function () {
  34881. return this._scroll.ev.contentWidth;
  34882. },
  34883. enumerable: true,
  34884. configurable: true
  34885. });
  34886. Object.defineProperty(Content.prototype, "scrollHeight", {
  34887. /**
  34888. * Content height including content which is not visible on the screen
  34889. * due to overflow. Read-only.
  34890. *
  34891. * @return {number}
  34892. */
  34893. get: function () {
  34894. return this._scroll.ev.scrollHeight;
  34895. },
  34896. enumerable: true,
  34897. configurable: true
  34898. });
  34899. Object.defineProperty(Content.prototype, "scrollWidth", {
  34900. /**
  34901. * Content width including content which is not visible due to
  34902. * overflow. Read-only.
  34903. *
  34904. * @return {number}
  34905. */
  34906. get: function () {
  34907. return this._scroll.ev.scrollWidth;
  34908. },
  34909. enumerable: true,
  34910. configurable: true
  34911. });
  34912. Object.defineProperty(Content.prototype, "scrollTop", {
  34913. /**
  34914. * The distance of the content's top to its topmost visible content.
  34915. *
  34916. * @return {number}
  34917. */
  34918. get: function () {
  34919. return this._scroll.ev.scrollTop;
  34920. },
  34921. /**
  34922. * @param {number} top
  34923. */
  34924. set: function (top) {
  34925. this._scroll.setTop(top);
  34926. },
  34927. enumerable: true,
  34928. configurable: true
  34929. });
  34930. Object.defineProperty(Content.prototype, "scrollLeft", {
  34931. /**
  34932. * The distance of the content's left to its leftmost visible content.
  34933. *
  34934. * @return {number}
  34935. */
  34936. get: function () {
  34937. return this._scroll.ev.scrollLeft;
  34938. },
  34939. /**
  34940. * @param {number} top
  34941. */
  34942. set: function (top) {
  34943. this._scroll.setLeft(top);
  34944. },
  34945. enumerable: true,
  34946. configurable: true
  34947. });
  34948. Object.defineProperty(Content.prototype, "isScrolling", {
  34949. /**
  34950. * If the content is actively scrolling or not.
  34951. *
  34952. * @return {boolean}
  34953. */
  34954. get: function () {
  34955. return this._scroll.isScrolling;
  34956. },
  34957. enumerable: true,
  34958. configurable: true
  34959. });
  34960. Object.defineProperty(Content.prototype, "directionY", {
  34961. /**
  34962. * The current, or last known, vertical scroll direction. Possible
  34963. * string values include `down` and `up`.
  34964. *
  34965. * @return {string}
  34966. */
  34967. get: function () {
  34968. return this._scroll.ev.directionY;
  34969. },
  34970. enumerable: true,
  34971. configurable: true
  34972. });
  34973. Object.defineProperty(Content.prototype, "directionX", {
  34974. /**
  34975. * The current, or last known, horizontal scroll direction. Possible
  34976. * string values include `right` and `left`.
  34977. *
  34978. * @return {string}
  34979. */
  34980. get: function () {
  34981. return this._scroll.ev.directionX;
  34982. },
  34983. enumerable: true,
  34984. configurable: true
  34985. });
  34986. /**
  34987. * @hidden
  34988. */
  34989. Content.prototype.ngAfterViewInit = function () {
  34990. var _this = this;
  34991. (void 0) /* assert */;
  34992. (void 0) /* assert */;
  34993. var scroll = this._scroll;
  34994. scroll.ev.fixedElement = this.getFixedElement();
  34995. scroll.ev.scrollElement = this.getScrollElement();
  34996. // subscribe to the scroll start
  34997. scroll.onScrollStart = function (ev) {
  34998. _this.ionScrollStart.emit(ev);
  34999. };
  35000. // subscribe to every scroll move
  35001. scroll.onScroll = function (ev) {
  35002. // emit to all of our other friends things be scrolling
  35003. _this.ionScroll.emit(ev);
  35004. _this.imgsUpdate();
  35005. };
  35006. // subscribe to the scroll end
  35007. scroll.onScrollEnd = function (ev) {
  35008. _this.ionScrollEnd.emit(ev);
  35009. _this.imgsUpdate();
  35010. };
  35011. };
  35012. /**
  35013. * @hidden
  35014. */
  35015. Content.prototype.enableJsScroll = function () {
  35016. this._scroll.enableJsScroll(this._cTop, this._cBottom);
  35017. };
  35018. /**
  35019. * @hidden
  35020. */
  35021. Content.prototype.ngOnDestroy = function () {
  35022. this._scLsn && this._scLsn();
  35023. this._viewCtrlReadSub && this._viewCtrlReadSub.unsubscribe();
  35024. this._viewCtrlWriteSub && this._viewCtrlWriteSub.unsubscribe();
  35025. this._viewCtrlReadSub = this._viewCtrlWriteSub = null;
  35026. this._scroll && this._scroll.destroy();
  35027. this._footerEle = this._scLsn = this._scroll = null;
  35028. };
  35029. /**
  35030. * @hidden
  35031. */
  35032. Content.prototype.getScrollElement = function () {
  35033. return this._scrollContent.nativeElement;
  35034. };
  35035. /**
  35036. * @private
  35037. */
  35038. Content.prototype.getFixedElement = function () {
  35039. return this._fixedContent.nativeElement;
  35040. };
  35041. /**
  35042. * @hidden
  35043. */
  35044. Content.prototype.onScrollElementTransitionEnd = function (callback) {
  35045. this._plt.transitionEnd(this.getScrollElement(), callback);
  35046. };
  35047. /**
  35048. * Scroll to the specified position.
  35049. *
  35050. * @param {number} x The x-value to scroll to.
  35051. * @param {number} y The y-value to scroll to.
  35052. * @param {number} [duration] Duration of the scroll animation in milliseconds. Defaults to `300`.
  35053. * @returns {Promise} Returns a promise which is resolved when the scroll has completed.
  35054. */
  35055. Content.prototype.scrollTo = function (x, y, duration, done) {
  35056. if (duration === void 0) { duration = 300; }
  35057. (void 0) /* console.debug */;
  35058. return this._scroll.scrollTo(x, y, duration, done);
  35059. };
  35060. /**
  35061. * Scroll to the top of the content component.
  35062. *
  35063. * @param {number} [duration] Duration of the scroll animation in milliseconds. Defaults to `300`.
  35064. * @returns {Promise} Returns a promise which is resolved when the scroll has completed.
  35065. */
  35066. Content.prototype.scrollToTop = function (duration) {
  35067. if (duration === void 0) { duration = 300; }
  35068. (void 0) /* console.debug */;
  35069. return this._scroll.scrollToTop(duration);
  35070. };
  35071. /**
  35072. * Scroll to the bottom of the content component.
  35073. *
  35074. * @param {number} [duration] Duration of the scroll animation in milliseconds. Defaults to `300`.
  35075. * @returns {Promise} Returns a promise which is resolved when the scroll has completed.
  35076. */
  35077. Content.prototype.scrollToBottom = function (duration) {
  35078. if (duration === void 0) { duration = 300; }
  35079. (void 0) /* console.debug */;
  35080. return this._scroll.scrollToBottom(duration);
  35081. };
  35082. Object.defineProperty(Content.prototype, "fullscreen", {
  35083. /**
  35084. * @input {boolean} If true, the content will scroll behind the headers
  35085. * and footers. This effect can easily be seen by setting the toolbar
  35086. * to transparent.
  35087. */
  35088. get: function () {
  35089. return this._fullscreen;
  35090. },
  35091. set: function (val) {
  35092. this._fullscreen = Object(__WEBPACK_IMPORTED_MODULE_6__util_util__["o" /* isTrueProperty */])(val);
  35093. },
  35094. enumerable: true,
  35095. configurable: true
  35096. });
  35097. Object.defineProperty(Content.prototype, "scrollDownOnLoad", {
  35098. /**
  35099. * @input {boolean} If true, the content will scroll down on load.
  35100. */
  35101. get: function () {
  35102. return this._scrollDownOnLoad;
  35103. },
  35104. set: function (val) {
  35105. this._scrollDownOnLoad = Object(__WEBPACK_IMPORTED_MODULE_6__util_util__["o" /* isTrueProperty */])(val);
  35106. },
  35107. enumerable: true,
  35108. configurable: true
  35109. });
  35110. /**
  35111. * @private
  35112. */
  35113. Content.prototype.addImg = function (img) {
  35114. this._imgs.push(img);
  35115. };
  35116. /**
  35117. * @hidden
  35118. */
  35119. Content.prototype.removeImg = function (img) {
  35120. Object(__WEBPACK_IMPORTED_MODULE_6__util_util__["q" /* removeArrayItem */])(this._imgs, img);
  35121. };
  35122. /**
  35123. * @hidden
  35124. * DOM WRITE
  35125. */
  35126. Content.prototype.setScrollElementStyle = function (prop, val) {
  35127. var scrollEle = this.getScrollElement();
  35128. if (scrollEle) {
  35129. this._dom.write(function () {
  35130. scrollEle.style[prop] = val;
  35131. });
  35132. }
  35133. };
  35134. /**
  35135. * Returns the content and scroll elements' dimensions.
  35136. * @returns {object} dimensions The content and scroll elements' dimensions
  35137. * {number} dimensions.contentHeight content offsetHeight
  35138. * {number} dimensions.contentTop content offsetTop
  35139. * {number} dimensions.contentBottom content offsetTop+offsetHeight
  35140. * {number} dimensions.contentWidth content offsetWidth
  35141. * {number} dimensions.contentLeft content offsetLeft
  35142. * {number} dimensions.contentRight content offsetLeft + offsetWidth
  35143. * {number} dimensions.scrollHeight scroll scrollHeight
  35144. * {number} dimensions.scrollTop scroll scrollTop
  35145. * {number} dimensions.scrollBottom scroll scrollTop + scrollHeight
  35146. * {number} dimensions.scrollWidth scroll scrollWidth
  35147. * {number} dimensions.scrollLeft scroll scrollLeft
  35148. * {number} dimensions.scrollRight scroll scrollLeft + scrollWidth
  35149. */
  35150. Content.prototype.getContentDimensions = function () {
  35151. var scrollEle = this.getScrollElement();
  35152. var parentElement = scrollEle.parentElement;
  35153. return {
  35154. contentHeight: parentElement.offsetHeight - this._cTop - this._cBottom,
  35155. contentTop: this._cTop,
  35156. contentBottom: this._cBottom,
  35157. contentWidth: parentElement.offsetWidth,
  35158. contentLeft: parentElement.offsetLeft,
  35159. scrollHeight: scrollEle.scrollHeight,
  35160. scrollTop: scrollEle.scrollTop,
  35161. scrollWidth: scrollEle.scrollWidth,
  35162. scrollLeft: scrollEle.scrollLeft,
  35163. };
  35164. };
  35165. /**
  35166. * @hidden
  35167. * DOM WRITE
  35168. * Adds padding to the bottom of the scroll element when the keyboard is open
  35169. * so content below the keyboard can be scrolled into view.
  35170. */
  35171. Content.prototype.addScrollPadding = function (newPadding) {
  35172. (void 0) /* assert */;
  35173. if (newPadding === 0) {
  35174. this._inputPolling = false;
  35175. this._scrollPadding = -1;
  35176. }
  35177. if (newPadding > this._scrollPadding) {
  35178. (void 0) /* console.debug */;
  35179. this._scrollPadding = newPadding;
  35180. var scrollEle = this.getScrollElement();
  35181. if (scrollEle) {
  35182. this._dom.write(function () {
  35183. scrollEle.style.paddingBottom = (newPadding > 0) ? newPadding + 'px' : '';
  35184. });
  35185. }
  35186. }
  35187. };
  35188. /**
  35189. * @hidden
  35190. * DOM WRITE
  35191. */
  35192. Content.prototype.clearScrollPaddingFocusOut = function () {
  35193. var _this = this;
  35194. if (!this._inputPolling) {
  35195. (void 0) /* console.debug */;
  35196. this._inputPolling = true;
  35197. this._keyboard.onClose(function () {
  35198. (void 0) /* console.debug */;
  35199. _this.addScrollPadding(0);
  35200. }, 200, 3000);
  35201. }
  35202. };
  35203. /**
  35204. * Tell the content to recalculate its dimensions. This should be called
  35205. * after dynamically adding/removing headers, footers, or tabs.
  35206. */
  35207. Content.prototype.resize = function () {
  35208. this._dom.read(this._readDimensions.bind(this));
  35209. this._dom.write(this._writeDimensions.bind(this));
  35210. };
  35211. /**
  35212. * @hidden
  35213. * DOM READ
  35214. */
  35215. Content.prototype._readDimensions = function () {
  35216. var cachePaddingTop = this._pTop;
  35217. var cachePaddingRight = this._pRight;
  35218. var cachePaddingBottom = this._pBottom;
  35219. var cachePaddingLeft = this._pLeft;
  35220. var cacheHeaderHeight = this._hdrHeight;
  35221. var cacheFooterHeight = this._ftrHeight;
  35222. var cacheTabsPlacement = this._tabsPlacement;
  35223. var tabsTop = 0;
  35224. var scrollEvent;
  35225. this._pTop = 0;
  35226. this._pRight = 0;
  35227. this._pBottom = 0;
  35228. this._pLeft = 0;
  35229. this._hdrHeight = 0;
  35230. this._ftrHeight = 0;
  35231. this._tabsPlacement = null;
  35232. this._tTop = 0;
  35233. this._fTop = 0;
  35234. this._fBottom = 0;
  35235. // In certain cases this._scroll is undefined
  35236. // if that is the case then we should just return
  35237. if (!this._scroll) {
  35238. return;
  35239. }
  35240. scrollEvent = this._scroll.ev;
  35241. var ele = this.getNativeElement();
  35242. if (!ele) {
  35243. (void 0) /* assert */;
  35244. return;
  35245. }
  35246. var computedStyle;
  35247. var tagName;
  35248. var parentEle = ele.parentElement;
  35249. var children = parentEle.children;
  35250. for (var i = children.length - 1; i >= 0; i--) {
  35251. ele = children[i];
  35252. tagName = ele.tagName;
  35253. if (tagName === 'ION-CONTENT') {
  35254. scrollEvent.contentElement = ele;
  35255. if (this._fullscreen) {
  35256. // ******** DOM READ ****************
  35257. computedStyle = getComputedStyle(ele);
  35258. this._pTop = parsePxUnit(computedStyle.paddingTop);
  35259. this._pBottom = parsePxUnit(computedStyle.paddingBottom);
  35260. this._pRight = parsePxUnit(computedStyle.paddingRight);
  35261. this._pLeft = parsePxUnit(computedStyle.paddingLeft);
  35262. }
  35263. }
  35264. else if (tagName === 'ION-HEADER') {
  35265. scrollEvent.headerElement = ele;
  35266. // ******** DOM READ ****************
  35267. this._hdrHeight = ele.clientHeight;
  35268. }
  35269. else if (tagName === 'ION-FOOTER') {
  35270. scrollEvent.footerElement = ele;
  35271. // ******** DOM READ ****************
  35272. this._ftrHeight = ele.clientHeight;
  35273. this._footerEle = ele;
  35274. }
  35275. }
  35276. ele = parentEle;
  35277. var tabbarEle;
  35278. while (ele && ele.tagName !== 'ION-MODAL' && !ele.classList.contains('tab-subpage')) {
  35279. if (ele.tagName === 'ION-TABS') {
  35280. tabbarEle = ele.firstElementChild;
  35281. // ******** DOM READ ****************
  35282. this._tabbarHeight = tabbarEle.clientHeight;
  35283. if (this._tabsPlacement === null) {
  35284. // this is the first tabbar found, remember it's position
  35285. this._tabsPlacement = ele.getAttribute('tabsplacement');
  35286. }
  35287. }
  35288. ele = ele.parentElement;
  35289. }
  35290. // Tabs top
  35291. if (this._tabs && this._tabsPlacement === 'top') {
  35292. this._tTop = this._hdrHeight;
  35293. tabsTop = this._tabs._top;
  35294. }
  35295. // Toolbar height
  35296. this._cTop = this._hdrHeight;
  35297. this._cBottom = this._ftrHeight;
  35298. // Tabs height
  35299. if (this._tabsPlacement === 'top') {
  35300. this._cTop += this._tabbarHeight;
  35301. }
  35302. else if (this._tabsPlacement === 'bottom') {
  35303. this._cBottom += this._tabbarHeight;
  35304. }
  35305. // Refresher uses a border which should be hidden unless pulled
  35306. if (this._hasRefresher) {
  35307. this._cTop -= 1;
  35308. }
  35309. // Fixed content shouldn't include content padding
  35310. this._fTop = this._cTop;
  35311. this._fBottom = this._cBottom;
  35312. // Handle fullscreen viewport (padding vs margin)
  35313. if (this._fullscreen) {
  35314. this._cTop += this._pTop;
  35315. this._cBottom += this._pBottom;
  35316. }
  35317. // ******** DOM READ ****************
  35318. var contentDimensions = this.getContentDimensions();
  35319. scrollEvent.scrollHeight = contentDimensions.scrollHeight;
  35320. scrollEvent.scrollWidth = contentDimensions.scrollWidth;
  35321. scrollEvent.contentHeight = contentDimensions.contentHeight;
  35322. scrollEvent.contentWidth = contentDimensions.contentWidth;
  35323. scrollEvent.contentTop = contentDimensions.contentTop;
  35324. scrollEvent.contentBottom = contentDimensions.contentBottom;
  35325. this._dirty = (cachePaddingTop !== this._pTop ||
  35326. cachePaddingBottom !== this._pBottom ||
  35327. cachePaddingLeft !== this._pLeft ||
  35328. cachePaddingRight !== this._pRight ||
  35329. cacheHeaderHeight !== this._hdrHeight ||
  35330. cacheFooterHeight !== this._ftrHeight ||
  35331. cacheTabsPlacement !== this._tabsPlacement ||
  35332. tabsTop !== this._tTop ||
  35333. this._cTop !== this.contentTop ||
  35334. this._cBottom !== this.contentBottom);
  35335. this._scroll.init(this.getScrollElement(), this._cTop, this._cBottom);
  35336. // initial imgs refresh
  35337. this.imgsUpdate();
  35338. };
  35339. /**
  35340. * @hidden
  35341. * DOM WRITE
  35342. */
  35343. Content.prototype._writeDimensions = function () {
  35344. if (!this._dirty) {
  35345. (void 0) /* console.debug */;
  35346. return;
  35347. }
  35348. var scrollEle = this.getScrollElement();
  35349. if (!scrollEle) {
  35350. (void 0) /* assert */;
  35351. return;
  35352. }
  35353. var fixedEle = this.getFixedElement();
  35354. if (!fixedEle) {
  35355. (void 0) /* assert */;
  35356. return;
  35357. }
  35358. // Tabs height
  35359. if (this._tabsPlacement === 'bottom' && this._cBottom > 0 && this._footerEle) {
  35360. var footerPos = this._cBottom - this._ftrHeight;
  35361. (void 0) /* assert */;
  35362. // ******** DOM WRITE ****************
  35363. this._footerEle.style.bottom = cssFormat(footerPos);
  35364. }
  35365. // Handle fullscreen viewport (padding vs margin)
  35366. var topProperty = 'marginTop';
  35367. var bottomProperty = 'marginBottom';
  35368. var fixedTop = this._fTop;
  35369. var fixedBottom = this._fBottom;
  35370. if (this._fullscreen) {
  35371. (void 0) /* assert */;
  35372. (void 0) /* assert */;
  35373. // adjust the content with padding, allowing content to scroll under headers/footers
  35374. // however, on iOS you cannot control the margins of the scrollbar (last tested iOS9.2)
  35375. // only add inline padding styles if the computed padding value, which would
  35376. // have come from the app's css, is different than the new padding value
  35377. topProperty = 'paddingTop';
  35378. bottomProperty = 'paddingBottom';
  35379. }
  35380. // Only update top margin if value changed
  35381. if (this._cTop !== this.contentTop) {
  35382. (void 0) /* assert */;
  35383. (void 0) /* assert */;
  35384. // ******** DOM WRITE ****************
  35385. scrollEle.style[topProperty] = cssFormat(this._cTop);
  35386. // ******** DOM WRITE ****************
  35387. fixedEle.style.marginTop = cssFormat(fixedTop);
  35388. this.contentTop = this._cTop;
  35389. }
  35390. // Only update bottom margin if value changed
  35391. if (this._cBottom !== this.contentBottom) {
  35392. (void 0) /* assert */;
  35393. (void 0) /* assert */;
  35394. // ******** DOM WRITE ****************
  35395. scrollEle.style[bottomProperty] = cssFormat(this._cBottom);
  35396. // ******** DOM WRITE ****************
  35397. fixedEle.style.marginBottom = cssFormat(fixedBottom);
  35398. this.contentBottom = this._cBottom;
  35399. }
  35400. if (this._tabsPlacement !== null && this._tabs) {
  35401. // set the position of the tabbar
  35402. if (this._tabsPlacement === 'top') {
  35403. // ******** DOM WRITE ****************
  35404. this._tabs.setTabbarPosition(this._tTop, -1);
  35405. }
  35406. else {
  35407. (void 0) /* assert */;
  35408. // ******** DOM WRITE ****************
  35409. this._tabs.setTabbarPosition(-1, 0);
  35410. }
  35411. }
  35412. // Scroll the page all the way down after setting dimensions
  35413. if (this._scrollDownOnLoad) {
  35414. this.scrollToBottom(0);
  35415. this._scrollDownOnLoad = false;
  35416. }
  35417. };
  35418. /**
  35419. * @hidden
  35420. */
  35421. Content.prototype.imgsUpdate = function () {
  35422. if (this._scroll.initialized && this._imgs.length && this.isImgsUpdatable()) {
  35423. updateImgs(this._imgs, this.scrollTop, this.contentHeight, this.directionY, this._imgReqBfr, this._imgRndBfr);
  35424. }
  35425. };
  35426. /**
  35427. * @hidden
  35428. */
  35429. Content.prototype.isImgsUpdatable = function () {
  35430. // an image is only "updatable" if the content isn't scrolling too fast
  35431. // if scroll speed is above the maximum velocity, then let current
  35432. // requests finish, but do not start new requets or render anything
  35433. // if scroll speed is below the maximum velocity, then it's ok
  35434. // to start new requests and render images
  35435. return Math.abs(this._scroll.ev.velocityY) < this._imgVelMax;
  35436. };
  35437. Content.decorators = [
  35438. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  35439. selector: 'ion-content',
  35440. template: '<div class="fixed-content" #fixedContent>' +
  35441. '<ng-content select="[ion-fixed],ion-fab"></ng-content>' +
  35442. '</div>' +
  35443. '<div class="scroll-content" #scrollContent>' +
  35444. '<ng-content></ng-content>' +
  35445. '</div>' +
  35446. '<ng-content select="ion-refresher"></ng-content>',
  35447. host: {
  35448. '[class.statusbar-padding]': 'statusbarPadding',
  35449. '[class.has-refresher]': '_hasRefresher'
  35450. },
  35451. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  35452. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None
  35453. },] },
  35454. ];
  35455. /** @nocollapse */
  35456. Content.ctorParameters = function () { return [
  35457. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  35458. { type: __WEBPACK_IMPORTED_MODULE_9__platform_platform__["a" /* Platform */], },
  35459. { type: __WEBPACK_IMPORTED_MODULE_3__platform_dom_controller__["a" /* DomController */], },
  35460. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  35461. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  35462. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  35463. { type: __WEBPACK_IMPORTED_MODULE_7__platform_keyboard__["a" /* Keyboard */], },
  35464. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  35465. { type: __WEBPACK_IMPORTED_MODULE_11__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  35466. { type: __WEBPACK_IMPORTED_MODULE_8__navigation_nav_controller__["a" /* NavController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  35467. ]; };
  35468. Content.propDecorators = {
  35469. '_fixedContent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['fixedContent', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */] },] },],
  35470. '_scrollContent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['scrollContent', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */] },] },],
  35471. 'ionScrollStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  35472. 'ionScroll': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  35473. 'ionScrollEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  35474. 'fullscreen': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  35475. 'scrollDownOnLoad': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  35476. };
  35477. return Content;
  35478. }(__WEBPACK_IMPORTED_MODULE_4__ion__["a" /* Ion */]));
  35479. function updateImgs(imgs, viewableTop, contentHeight, scrollDirectionY, requestableBuffer, renderableBuffer) {
  35480. // ok, so it's time to see which images, if any, should be requested and rendered
  35481. // ultimately, if we're scrolling fast then don't bother requesting or rendering
  35482. // when scrolling is done, then it needs to do a check to see which images are
  35483. // important to request and render, and which image requests should be aborted.
  35484. // Additionally, images which are not near the viewable area should not be
  35485. // rendered at all in order to save browser resources.
  35486. var viewableBottom = (viewableTop + contentHeight);
  35487. var priority1 = [];
  35488. var priority2 = [];
  35489. var img;
  35490. // all images should be paused
  35491. for (var i = 0, ilen = imgs.length; i < ilen; i++) {
  35492. img = imgs[i];
  35493. if (scrollDirectionY === 'up') {
  35494. // scrolling up
  35495. if (img.top < viewableBottom && img.bottom > viewableTop - renderableBuffer) {
  35496. // scrolling up, img is within viewable area
  35497. // or about to be viewable area
  35498. img.canRequest = img.canRender = true;
  35499. priority1.push(img);
  35500. continue;
  35501. }
  35502. if (img.bottom <= viewableTop && img.bottom > viewableTop - requestableBuffer) {
  35503. // scrolling up, img is within requestable area
  35504. img.canRequest = true;
  35505. img.canRender = false;
  35506. priority2.push(img);
  35507. continue;
  35508. }
  35509. if (img.top >= viewableBottom && img.top < viewableBottom + renderableBuffer) {
  35510. // scrolling up, img below viewable area
  35511. // but it's still within renderable area
  35512. // don't allow a reset
  35513. img.canRequest = img.canRender = false;
  35514. continue;
  35515. }
  35516. }
  35517. else {
  35518. // scrolling down
  35519. if (img.bottom > viewableTop && img.top < viewableBottom + renderableBuffer) {
  35520. // scrolling down, img is within viewable area
  35521. // or about to be viewable area
  35522. img.canRequest = img.canRender = true;
  35523. priority1.push(img);
  35524. continue;
  35525. }
  35526. if (img.top >= viewableBottom && img.top < viewableBottom + requestableBuffer) {
  35527. // scrolling down, img is within requestable area
  35528. img.canRequest = true;
  35529. img.canRender = false;
  35530. priority2.push(img);
  35531. continue;
  35532. }
  35533. if (img.bottom <= viewableTop && img.bottom > viewableTop - renderableBuffer) {
  35534. // scrolling down, img above viewable area
  35535. // but it's still within renderable area
  35536. // don't allow a reset
  35537. img.canRequest = img.canRender = false;
  35538. continue;
  35539. }
  35540. }
  35541. img.canRequest = img.canRender = false;
  35542. img.reset();
  35543. }
  35544. // update all imgs which are viewable
  35545. priority1.sort(sortTopToBottom).forEach(function (i) { return i.update(); });
  35546. if (scrollDirectionY === 'up') {
  35547. // scrolling up
  35548. priority2.sort(sortTopToBottom).reverse().forEach(function (i) { return i.update(); });
  35549. }
  35550. else {
  35551. // scrolling down
  35552. priority2.sort(sortTopToBottom).forEach(function (i) { return i.update(); });
  35553. }
  35554. }
  35555. function sortTopToBottom(a, b) {
  35556. if (a.top < b.top) {
  35557. return -1;
  35558. }
  35559. if (a.top > b.top) {
  35560. return 1;
  35561. }
  35562. return 0;
  35563. }
  35564. function parsePxUnit(val) {
  35565. return (val.indexOf('px') > 0) ? parseInt(val, 10) : 0;
  35566. }
  35567. function cssFormat(val) {
  35568. return (val > 0 ? val + 'px' : '');
  35569. }
  35570. //# sourceMappingURL=content.js.map
  35571. /***/ }),
  35572. /* 32 */
  35573. /***/ (function(module, exports, __webpack_require__) {
  35574. "use strict";
  35575. var __extends = (this && this.__extends) || function (d, b) {
  35576. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  35577. function __() { this.constructor = d; }
  35578. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  35579. };
  35580. var Observable_1 = __webpack_require__(0);
  35581. var ScalarObservable_1 = __webpack_require__(89);
  35582. var EmptyObservable_1 = __webpack_require__(33);
  35583. var isScheduler_1 = __webpack_require__(22);
  35584. /**
  35585. * We need this JSDoc comment for affecting ESDoc.
  35586. * @extends {Ignored}
  35587. * @hide true
  35588. */
  35589. var ArrayObservable = (function (_super) {
  35590. __extends(ArrayObservable, _super);
  35591. function ArrayObservable(array, scheduler) {
  35592. _super.call(this);
  35593. this.array = array;
  35594. this.scheduler = scheduler;
  35595. if (!scheduler && array.length === 1) {
  35596. this._isScalar = true;
  35597. this.value = array[0];
  35598. }
  35599. }
  35600. ArrayObservable.create = function (array, scheduler) {
  35601. return new ArrayObservable(array, scheduler);
  35602. };
  35603. /**
  35604. * Creates an Observable that emits some values you specify as arguments,
  35605. * immediately one after the other, and then emits a complete notification.
  35606. *
  35607. * <span class="informal">Emits the arguments you provide, then completes.
  35608. * </span>
  35609. *
  35610. * <img src="./img/of.png" width="100%">
  35611. *
  35612. * This static operator is useful for creating a simple Observable that only
  35613. * emits the arguments given, and the complete notification thereafter. It can
  35614. * be used for composing with other Observables, such as with {@link concat}.
  35615. * By default, it uses a `null` IScheduler, which means the `next`
  35616. * notifications are sent synchronously, although with a different IScheduler
  35617. * it is possible to determine when those notifications will be delivered.
  35618. *
  35619. * @example <caption>Emit 10, 20, 30, then 'a', 'b', 'c', then start ticking every second.</caption>
  35620. * var numbers = Rx.Observable.of(10, 20, 30);
  35621. * var letters = Rx.Observable.of('a', 'b', 'c');
  35622. * var interval = Rx.Observable.interval(1000);
  35623. * var result = numbers.concat(letters).concat(interval);
  35624. * result.subscribe(x => console.log(x));
  35625. *
  35626. * @see {@link create}
  35627. * @see {@link empty}
  35628. * @see {@link never}
  35629. * @see {@link throw}
  35630. *
  35631. * @param {...T} values Arguments that represent `next` values to be emitted.
  35632. * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
  35633. * the emissions of the `next` notifications.
  35634. * @return {Observable<T>} An Observable that emits each given input value.
  35635. * @static true
  35636. * @name of
  35637. * @owner Observable
  35638. */
  35639. ArrayObservable.of = function () {
  35640. var array = [];
  35641. for (var _i = 0; _i < arguments.length; _i++) {
  35642. array[_i - 0] = arguments[_i];
  35643. }
  35644. var scheduler = array[array.length - 1];
  35645. if (isScheduler_1.isScheduler(scheduler)) {
  35646. array.pop();
  35647. }
  35648. else {
  35649. scheduler = null;
  35650. }
  35651. var len = array.length;
  35652. if (len > 1) {
  35653. return new ArrayObservable(array, scheduler);
  35654. }
  35655. else if (len === 1) {
  35656. return new ScalarObservable_1.ScalarObservable(array[0], scheduler);
  35657. }
  35658. else {
  35659. return new EmptyObservable_1.EmptyObservable(scheduler);
  35660. }
  35661. };
  35662. ArrayObservable.dispatch = function (state) {
  35663. var array = state.array, index = state.index, count = state.count, subscriber = state.subscriber;
  35664. if (index >= count) {
  35665. subscriber.complete();
  35666. return;
  35667. }
  35668. subscriber.next(array[index]);
  35669. if (subscriber.closed) {
  35670. return;
  35671. }
  35672. state.index = index + 1;
  35673. this.schedule(state);
  35674. };
  35675. /** @deprecated internal use only */ ArrayObservable.prototype._subscribe = function (subscriber) {
  35676. var index = 0;
  35677. var array = this.array;
  35678. var count = array.length;
  35679. var scheduler = this.scheduler;
  35680. if (scheduler) {
  35681. return scheduler.schedule(ArrayObservable.dispatch, 0, {
  35682. array: array, index: index, count: count, subscriber: subscriber
  35683. });
  35684. }
  35685. else {
  35686. for (var i = 0; i < count && !subscriber.closed; i++) {
  35687. subscriber.next(array[i]);
  35688. }
  35689. subscriber.complete();
  35690. }
  35691. };
  35692. return ArrayObservable;
  35693. }(Observable_1.Observable));
  35694. exports.ArrayObservable = ArrayObservable;
  35695. //# sourceMappingURL=ArrayObservable.js.map
  35696. /***/ }),
  35697. /* 33 */
  35698. /***/ (function(module, exports, __webpack_require__) {
  35699. "use strict";
  35700. var __extends = (this && this.__extends) || function (d, b) {
  35701. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  35702. function __() { this.constructor = d; }
  35703. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  35704. };
  35705. var Observable_1 = __webpack_require__(0);
  35706. /**
  35707. * We need this JSDoc comment for affecting ESDoc.
  35708. * @extends {Ignored}
  35709. * @hide true
  35710. */
  35711. var EmptyObservable = (function (_super) {
  35712. __extends(EmptyObservable, _super);
  35713. function EmptyObservable(scheduler) {
  35714. _super.call(this);
  35715. this.scheduler = scheduler;
  35716. }
  35717. /**
  35718. * Creates an Observable that emits no items to the Observer and immediately
  35719. * emits a complete notification.
  35720. *
  35721. * <span class="informal">Just emits 'complete', and nothing else.
  35722. * </span>
  35723. *
  35724. * <img src="./img/empty.png" width="100%">
  35725. *
  35726. * This static operator is useful for creating a simple Observable that only
  35727. * emits the complete notification. It can be used for composing with other
  35728. * Observables, such as in a {@link mergeMap}.
  35729. *
  35730. * @example <caption>Emit the number 7, then complete.</caption>
  35731. * var result = Rx.Observable.empty().startWith(7);
  35732. * result.subscribe(x => console.log(x));
  35733. *
  35734. * @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>
  35735. * var interval = Rx.Observable.interval(1000);
  35736. * var result = interval.mergeMap(x =>
  35737. * x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()
  35738. * );
  35739. * result.subscribe(x => console.log(x));
  35740. *
  35741. * // Results in the following to the console:
  35742. * // x is equal to the count on the interval eg(0,1,2,3,...)
  35743. * // x will occur every 1000ms
  35744. * // if x % 2 is equal to 1 print abc
  35745. * // if x % 2 is not equal to 1 nothing will be output
  35746. *
  35747. * @see {@link create}
  35748. * @see {@link never}
  35749. * @see {@link of}
  35750. * @see {@link throw}
  35751. *
  35752. * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
  35753. * the emission of the complete notification.
  35754. * @return {Observable} An "empty" Observable: emits only the complete
  35755. * notification.
  35756. * @static true
  35757. * @name empty
  35758. * @owner Observable
  35759. */
  35760. EmptyObservable.create = function (scheduler) {
  35761. return new EmptyObservable(scheduler);
  35762. };
  35763. EmptyObservable.dispatch = function (arg) {
  35764. var subscriber = arg.subscriber;
  35765. subscriber.complete();
  35766. };
  35767. /** @deprecated internal use only */ EmptyObservable.prototype._subscribe = function (subscriber) {
  35768. var scheduler = this.scheduler;
  35769. if (scheduler) {
  35770. return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber: subscriber });
  35771. }
  35772. else {
  35773. subscriber.complete();
  35774. }
  35775. };
  35776. return EmptyObservable;
  35777. }(Observable_1.Observable));
  35778. exports.EmptyObservable = EmptyObservable;
  35779. //# sourceMappingURL=EmptyObservable.js.map
  35780. /***/ }),
  35781. /* 34 */
  35782. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  35783. "use strict";
  35784. /* harmony export (immutable) */ __webpack_exports__["j"] = getComponent;
  35785. /* unused harmony export convertToView */
  35786. /* harmony export (immutable) */ __webpack_exports__["i"] = convertToViews;
  35787. /* harmony export (immutable) */ __webpack_exports__["n"] = setZIndex;
  35788. /* harmony export (immutable) */ __webpack_exports__["m"] = isTabs;
  35789. /* harmony export (immutable) */ __webpack_exports__["l"] = isTab;
  35790. /* harmony export (immutable) */ __webpack_exports__["k"] = isNav;
  35791. /* unused harmony export linkToSegment */
  35792. /* unused harmony export DeepLinkMetadata */
  35793. /* unused harmony export DeepLinkMetadataFactory */
  35794. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return STATE_NEW; });
  35795. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return STATE_INITIALIZED; });
  35796. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return STATE_ATTACHED; });
  35797. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return STATE_DESTROYED; });
  35798. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return INIT_ZINDEX; });
  35799. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DIRECTION_BACK; });
  35800. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return DIRECTION_FORWARD; });
  35801. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return DIRECTION_SWITCH; });
  35802. /* unused harmony export NAV */
  35803. /* unused harmony export TABS */
  35804. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  35805. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__view_controller__ = __webpack_require__(9);
  35806. function getComponent(linker, nameOrPageOrView, params) {
  35807. if (typeof nameOrPageOrView === 'function') {
  35808. return Promise.resolve(new __WEBPACK_IMPORTED_MODULE_1__view_controller__["a" /* ViewController */](nameOrPageOrView, params));
  35809. }
  35810. if (typeof nameOrPageOrView === 'string') {
  35811. return linker.getComponentFromName(nameOrPageOrView).then(function (component) {
  35812. var vc = new __WEBPACK_IMPORTED_MODULE_1__view_controller__["a" /* ViewController */](component, params);
  35813. vc.id = nameOrPageOrView;
  35814. return vc;
  35815. });
  35816. }
  35817. return Promise.resolve(null);
  35818. }
  35819. function convertToView(linker, nameOrPageOrView, params) {
  35820. if (nameOrPageOrView) {
  35821. if (Object(__WEBPACK_IMPORTED_MODULE_1__view_controller__["b" /* isViewController */])(nameOrPageOrView)) {
  35822. // is already a ViewController
  35823. return Promise.resolve(nameOrPageOrView);
  35824. }
  35825. return getComponent(linker, nameOrPageOrView, params);
  35826. }
  35827. return Promise.resolve(null);
  35828. }
  35829. function convertToViews(linker, pages) {
  35830. var views = [];
  35831. if (Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["e" /* isArray */])(pages)) {
  35832. for (var i = 0; i < pages.length; i++) {
  35833. var page = pages[i];
  35834. if (page) {
  35835. if (Object(__WEBPACK_IMPORTED_MODULE_1__view_controller__["b" /* isViewController */])(page)) {
  35836. views.push(page);
  35837. }
  35838. else if (page.page) {
  35839. views.push(convertToView(linker, page.page, page.params));
  35840. }
  35841. else {
  35842. views.push(convertToView(linker, page, null));
  35843. }
  35844. }
  35845. }
  35846. }
  35847. return Promise.all(views);
  35848. }
  35849. var portalZindex = 9999;
  35850. function setZIndex(nav, enteringView, leavingView, direction, renderer) {
  35851. if (enteringView) {
  35852. if (nav._isPortal) {
  35853. if (direction === DIRECTION_FORWARD) {
  35854. enteringView._setZIndex(nav._zIndexOffset + portalZindex, renderer);
  35855. }
  35856. portalZindex++;
  35857. return;
  35858. }
  35859. leavingView = leavingView || nav.getPrevious(enteringView);
  35860. if (leavingView && Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(leavingView._zIndex)) {
  35861. if (direction === DIRECTION_BACK) {
  35862. enteringView._setZIndex(leavingView._zIndex - 1, renderer);
  35863. }
  35864. else {
  35865. enteringView._setZIndex(leavingView._zIndex + 1, renderer);
  35866. }
  35867. }
  35868. else {
  35869. enteringView._setZIndex(INIT_ZINDEX + nav._zIndexOffset, renderer);
  35870. }
  35871. }
  35872. }
  35873. function isTabs(nav) {
  35874. // Tabs (ion-tabs)
  35875. return !!nav && !!nav.getSelected;
  35876. }
  35877. function isTab(nav) {
  35878. // Tab (ion-tab)
  35879. return !!nav && Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(nav._tabId);
  35880. }
  35881. function isNav(nav) {
  35882. // Nav (ion-nav), Tab (ion-tab), Portal (ion-portal)
  35883. return !!nav && !!nav.push && nav.getType() === 'nav';
  35884. }
  35885. function linkToSegment(navId, type, secondaryId, link) {
  35886. var segment = Object.assign({}, link);
  35887. segment.navId = navId;
  35888. segment.type = type;
  35889. segment.secondaryId = secondaryId;
  35890. return segment;
  35891. }
  35892. /**
  35893. * @hidden
  35894. */
  35895. var DeepLinkMetadata = (function () {
  35896. function DeepLinkMetadata() {
  35897. }
  35898. return DeepLinkMetadata;
  35899. }());
  35900. /**
  35901. * @hidden
  35902. */
  35903. var DeepLinkMetadataFactory;
  35904. var STATE_NEW = 1;
  35905. var STATE_INITIALIZED = 2;
  35906. var STATE_ATTACHED = 3;
  35907. var STATE_DESTROYED = 4;
  35908. var INIT_ZINDEX = 100;
  35909. var DIRECTION_BACK = 'back';
  35910. var DIRECTION_FORWARD = 'forward';
  35911. var DIRECTION_SWITCH = 'switch';
  35912. var NAV = 'nav';
  35913. var TABS = 'tabs';
  35914. //# sourceMappingURL=nav-util.js.map
  35915. /***/ }),
  35916. /* 35 */
  35917. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  35918. "use strict";
  35919. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavController; });
  35920. /**
  35921. * @name NavController
  35922. * @description
  35923. *
  35924. * NavController is the base class for navigation controller components like
  35925. * [`Nav`](../../components/nav/Nav/) and [`Tab`](../../components/tabs/Tab/). You use navigation controllers
  35926. * to navigate to [pages](#view-creation) in your app. At a basic level, a
  35927. * navigation controller is an array of pages representing a particular history
  35928. * (of a Tab for example). This array can be manipulated to navigate throughout
  35929. * an app by pushing and popping pages or inserting and removing them at
  35930. * arbitrary locations in history.
  35931. *
  35932. * The current page is the last one in the array, or the top of the stack if we
  35933. * think of it that way. [Pushing](#push) a new page onto the top of the
  35934. * navigation stack causes the new page to be animated in, while [popping](#pop)
  35935. * the current page will navigate to the previous page in the stack.
  35936. *
  35937. * Unless you are using a directive like [NavPush](../../components/nav/NavPush/), or need a
  35938. * specific NavController, most times you will inject and use a reference to the
  35939. * nearest NavController to manipulate the navigation stack.
  35940. *
  35941. * ## Basic usage
  35942. * The simplest way to navigate through an app is to create and initialize a new
  35943. * nav controller using the `<ion-nav>` component. `ion-nav` extends the `NavController`
  35944. * class.
  35945. *
  35946. * ```typescript
  35947. * import { Component } from `@angular/core`;
  35948. * import { StartPage } from './start-page';
  35949. *
  35950. * @Component(
  35951. * template: `<ion-nav [root]="rootPage"></ion-nav>`
  35952. * })
  35953. * class MyApp {
  35954. * // set the rootPage to the first page we want displayed
  35955. * public rootPage: any = StartPage;
  35956. *
  35957. * constructor(){
  35958. * }
  35959. * }
  35960. *
  35961. * ```
  35962. *
  35963. * ### Injecting NavController
  35964. * Injecting NavController will always get you an instance of the nearest
  35965. * NavController, regardless of whether it is a Tab or a Nav.
  35966. *
  35967. * Behind the scenes, when Ionic instantiates a new NavController, it creates an
  35968. * injector with NavController bound to that instance (usually either a Nav or
  35969. * Tab) and adds the injector to its own providers. For more information on
  35970. * providers and dependency injection, see [Dependency Injection](https://angular.io/docs/ts/latest/guide/dependency-injection.html).
  35971. *
  35972. * Instead, you can inject NavController and know that it is the correct
  35973. * navigation controller for most situations (for more advanced situations, see
  35974. * [Menu](../../menu/Menu/) and [Tab](../../tab/Tab/)).
  35975. *
  35976. * ```ts
  35977. * import { NavController } from 'ionic-angular';
  35978. *
  35979. * class MyComponent {
  35980. * constructor(public navCtrl: NavController) {
  35981. *
  35982. * }
  35983. * }
  35984. * ```
  35985. *
  35986. * ### Navigating from the Root component
  35987. * What if you want to control navigation from your root app component?
  35988. * You can't inject `NavController` because any components that are navigation
  35989. * controllers are _children_ of the root component so they aren't available
  35990. * to be injected.
  35991. *
  35992. * By adding a reference variable to the `ion-nav`, you can use `@ViewChild` to
  35993. * get an instance of the `Nav` component, which is a navigation controller
  35994. * (it extends `NavController`):
  35995. *
  35996. * ```typescript
  35997. *
  35998. * import { Component, ViewChild } from '@angular/core';
  35999. * import { NavController } from 'ionic-angular';
  36000. *
  36001. * @Component({
  36002. * template: '<ion-nav #myNav [root]="rootPage"></ion-nav>'
  36003. * })
  36004. * export class MyApp {
  36005. * @ViewChild('myNav') nav: NavController
  36006. * public rootPage: any = TabsPage;
  36007. *
  36008. * // Wait for the components in MyApp's template to be initialized
  36009. * // In this case, we are waiting for the Nav with reference variable of "#myNav"
  36010. * ngOnInit() {
  36011. * // Let's navigate from TabsPage to Page1
  36012. * this.nav.push(Page1);
  36013. * }
  36014. * }
  36015. * ```
  36016. *
  36017. * ### Navigating from an Overlay Component
  36018. * What if you wanted to navigate from an overlay component (popover, modal, alert, etc)?
  36019. * In this example, we've displayed a popover in our app. From the popover, we'll get a
  36020. * reference of the root `NavController` in our app, using the `getRootNav()` method.
  36021. *
  36022. *
  36023. * ```typescript
  36024. * import { Component } from '@angular/core';
  36025. * import { App, ViewController } from 'ionic-angular';
  36026. *
  36027. * @Component({
  36028. * template: `
  36029. * <ion-content>
  36030. * <h1>My PopoverPage</h1>
  36031. * <button ion-button (click)="pushPage()">Call pushPage</button>
  36032. * </ion-content>
  36033. * `
  36034. * })
  36035. * class PopoverPage {
  36036. * constructor(
  36037. * public viewCtrl: ViewController
  36038. * public appCtrl: App
  36039. * ) {}
  36040. *
  36041. * pushPage() {
  36042. * this.viewCtrl.dismiss();
  36043. * this.appCtrl.getRootNav().push(SecondPage);
  36044. * }
  36045. * }
  36046. *```
  36047. *
  36048. *
  36049. * ## View creation
  36050. * Views are created when they are added to the navigation stack. For methods
  36051. * like [push()](#push), the NavController takes any component class that is
  36052. * decorated with `@Component` as its first argument. The NavController then
  36053. * compiles that component, adds it to the app and animates it into view.
  36054. *
  36055. * By default, pages are cached and left in the DOM if they are navigated away
  36056. * from but still in the navigation stack (the exiting page on a `push()` for
  36057. * example). They are destroyed when removed from the navigation stack (on
  36058. * [pop()](#pop) or [setRoot()](#setRoot)).
  36059. *
  36060. * ## Pushing a View
  36061. * To push a new view onto the navigation stack, use the `push` method.
  36062. * If the page has an [`<ion-navbar>`](../../navbar/Navbar/),
  36063. * a back button will automatically be added to the pushed view.
  36064. *
  36065. * Data can also be passed to a view by passing an object to the `push` method.
  36066. * The pushed view can then receive the data by accessing it via the `NavParams`
  36067. * class.
  36068. *
  36069. * ```typescript
  36070. * import { Component } from '@angular/core';
  36071. * import { NavController } from 'ionic-angular';
  36072. * import { OtherPage } from './other-page';
  36073. * @Component({
  36074. * template: `
  36075. * <ion-header>
  36076. * <ion-navbar>
  36077. * <ion-title>Login</ion-title>
  36078. * </ion-navbar>
  36079. * </ion-header>
  36080. *
  36081. * <ion-content>
  36082. * <button ion-button (click)="pushPage()">
  36083. * Go to OtherPage
  36084. * </button>
  36085. * </ion-content>
  36086. * `
  36087. * })
  36088. * export class StartPage {
  36089. * constructor(public navCtrl: NavController) {
  36090. * }
  36091. *
  36092. * pushPage(){
  36093. * // push another page onto the navigation stack
  36094. * // causing the nav controller to transition to the new page
  36095. * // optional data can also be passed to the pushed page.
  36096. * this.navCtrl.push(OtherPage, {
  36097. * id: "123",
  36098. * name: "Carl"
  36099. * });
  36100. * }
  36101. * }
  36102. *
  36103. * import { NavParams } from 'ionic-angular';
  36104. *
  36105. * @Component({
  36106. * template: `
  36107. * <ion-header>
  36108. * <ion-navbar>
  36109. * <ion-title>Other Page</ion-title>
  36110. * </ion-navbar>
  36111. * </ion-header>
  36112. * <ion-content>I'm the other page!</ion-content>`
  36113. * })
  36114. * class OtherPage {
  36115. * constructor(private navParams: NavParams) {
  36116. * let id = navParams.get('id');
  36117. * let name = navParams.get('name');
  36118. * }
  36119. * }
  36120. * ```
  36121. *
  36122. * ## Removing a view
  36123. * To remove a view from the stack, use the `pop` method.
  36124. * Popping a view will transition to the previous view.
  36125. *
  36126. * ```ts
  36127. * import { Component } from '@angular/core';
  36128. * import { NavController } from 'ionic-angular';
  36129. *
  36130. * @Component({
  36131. * template: `
  36132. * <ion-header>
  36133. * <ion-navbar>
  36134. * <ion-title>Other Page</ion-title>
  36135. * </ion-navbar>
  36136. * </ion-header>
  36137. * <ion-content>I'm the other page!</ion-content>`
  36138. * })
  36139. * class OtherPage {
  36140. * constructor(public navCtrl: NavController ){
  36141. * }
  36142. *
  36143. * popView(){
  36144. * this.navCtrl.pop();
  36145. * }
  36146. * }
  36147. * ```
  36148. *
  36149. * ## Lifecycle events
  36150. * Lifecycle events are fired during various stages of navigation. They can be
  36151. * defined in any component type which is pushed/popped from a `NavController`.
  36152. *
  36153. * ```ts
  36154. * import { Component } from '@angular/core';
  36155. *
  36156. * @Component({
  36157. * template: 'Hello World'
  36158. * })
  36159. * class HelloWorld {
  36160. * ionViewDidLoad() {
  36161. * console.log("I'm alive!");
  36162. * }
  36163. * ionViewWillLeave() {
  36164. * console.log("Looks like I'm about to leave :(");
  36165. * }
  36166. * }
  36167. * ```
  36168. *
  36169. * | Page Event | Returns | Description |
  36170. * |---------------------|-----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  36171. * | `ionViewDidLoad` | void | Runs when the page has loaded. This event only happens once per page being created. If a page leaves but is cached, then this event will not fire again on a subsequent viewing. The `ionViewDidLoad` event is good place to put your setup code for the page. |
  36172. * | `ionViewWillEnter` | void | Runs when the page is about to enter and become the active page. |
  36173. * | `ionViewDidEnter` | void | Runs when the page has fully entered and is now the active page. This event will fire, whether it was the first load or a cached page. |
  36174. * | `ionViewWillLeave` | void | Runs when the page is about to leave and no longer be the active page. |
  36175. * | `ionViewDidLeave` | void | Runs when the page has finished leaving and is no longer the active page. |
  36176. * | `ionViewWillUnload` | void | Runs when the page is about to be destroyed and have its elements removed. |
  36177. * | `ionViewCanEnter` | boolean/Promise&lt;void&gt; | Runs before the view can enter. This can be used as a sort of "guard" in authenticated views where you need to check permissions before the view can enter |
  36178. * | `ionViewCanLeave` | boolean/Promise&lt;void&gt; | Runs before the view can leave. This can be used as a sort of "guard" in authenticated views where you need to check permissions before the view can leave |
  36179. *
  36180. *
  36181. * ## Nav Guards
  36182. *
  36183. * In some cases, a developer should be able to control views leaving and entering. To allow for this, NavController has the `ionViewCanEnter` and `ionViewCanLeave` methods.
  36184. * Similar to Angular route guards, but are more integrated with NavController. For example, if you wanted to prevent a user from leaving a view:
  36185. *
  36186. * ```ts
  36187. * export class MyClass{
  36188. * constructor(
  36189. * public navCtrl: NavController
  36190. * ){}
  36191. *
  36192. * pushPage(){
  36193. * this.navCtrl.push(DetailPage);
  36194. * }
  36195. *
  36196. * ionViewCanLeave(): boolean{
  36197. * // here we can either return true or false
  36198. * // depending on if we want to leave this view
  36199. * if(isValid(randomValue)){
  36200. * return true;
  36201. * } else {
  36202. * return false;
  36203. * }
  36204. * }
  36205. * }
  36206. * ```
  36207. *
  36208. * We need to make sure that our `navCtrl.push` has a catch in order to catch the and handle the error.
  36209. * If you need to prevent a view from entering, you can do the same thing
  36210. *
  36211. * ```ts
  36212. * export class MyClass{
  36213. * constructor(
  36214. * public navCtrl: NavController
  36215. * ){}
  36216. *
  36217. * pushPage(){
  36218. * this.navCtrl.push(DetailPage);
  36219. * }
  36220. *
  36221. * }
  36222. *
  36223. * export class DetailPage(){
  36224. * constructor(
  36225. * public navCtrl: NavController
  36226. * ){}
  36227. * ionViewCanEnter(): boolean{
  36228. * // here we can either return true or false
  36229. * // depending on if we want to enter this view
  36230. * if(isValid(randomValue)){
  36231. * return true;
  36232. * } else {
  36233. * return false;
  36234. * }
  36235. * }
  36236. * }
  36237. * ```
  36238. *
  36239. * Similar to `ionViewCanLeave` we still need a catch on the original `navCtrl.push` in order to handle it properly.
  36240. * When handling the back button in the `ion-navbar`, the catch is already taken care of for you by the framework.
  36241. *
  36242. * ## NavOptions
  36243. *
  36244. * Some methods on `NavController` allow for customizing the current transition.
  36245. * To do this, we can pass an object with the modified properites.
  36246. *
  36247. *
  36248. * | Property | Value | Description |
  36249. * |-----------|-----------|------------------------------------------------------------------------------------------------------------|
  36250. * | animate | `boolean` | Whether or not the transition should animate. |
  36251. * | animation | `string` | What kind of animation should be used. |
  36252. * | direction | `string` | The conceptual direction the user is navigating. For example, is the user navigating `forward`, or `back`? |
  36253. * | duration | `number` | The length in milliseconds the animation should take. |
  36254. * | easing | `string` | The easing for the animation. |
  36255. *
  36256. * The property 'animation' understands the following values: `md-transition`, `ios-transition` and `wp-transition`.
  36257. *
  36258. * @see {@link /docs/components#navigation Navigation Component Docs}
  36259. */
  36260. var NavController = (function () {
  36261. function NavController() {
  36262. }
  36263. return NavController;
  36264. }());
  36265. //# sourceMappingURL=nav-controller.js.map
  36266. /***/ }),
  36267. /* 36 */
  36268. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  36269. "use strict";
  36270. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return UIEventManager; });
  36271. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__pointer_events__ = __webpack_require__(167);
  36272. /**
  36273. * @hidden
  36274. */
  36275. var UIEventManager = (function () {
  36276. function UIEventManager(plt) {
  36277. this.plt = plt;
  36278. this.evts = [];
  36279. }
  36280. UIEventManager.prototype.pointerEvents = function (config) {
  36281. if (!config.element || !config.pointerDown) {
  36282. console.error('PointerEvents config is invalid');
  36283. return;
  36284. }
  36285. var eventListnerOpts = {
  36286. capture: config.capture,
  36287. passive: config.passive,
  36288. zone: config.zone
  36289. };
  36290. var pointerEvents = new __WEBPACK_IMPORTED_MODULE_0__pointer_events__["b" /* PointerEvents */](this.plt, config.element, config.pointerDown, config.pointerMove, config.pointerUp, eventListnerOpts);
  36291. var removeFunc = function () { return pointerEvents.destroy(); };
  36292. this.evts.push(removeFunc);
  36293. return pointerEvents;
  36294. };
  36295. UIEventManager.prototype.listen = function (ele, eventName, callback, opts) {
  36296. if (ele) {
  36297. var removeFunc = this.plt.registerListener(ele, eventName, callback, opts);
  36298. this.evts.push(removeFunc);
  36299. return removeFunc;
  36300. }
  36301. };
  36302. UIEventManager.prototype.unlistenAll = function () {
  36303. this.evts.forEach(function (unRegEvent) {
  36304. unRegEvent();
  36305. });
  36306. this.evts.length = 0;
  36307. };
  36308. UIEventManager.prototype.destroy = function () {
  36309. this.unlistenAll();
  36310. this.evts = null;
  36311. };
  36312. return UIEventManager;
  36313. }());
  36314. //# sourceMappingURL=ui-event-manager.js.map
  36315. /***/ }),
  36316. /* 37 */
  36317. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  36318. "use strict";
  36319. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return BaseInput; });
  36320. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  36321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util__ = __webpack_require__(3);
  36322. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_ion__ = __webpack_require__(8);
  36323. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__debouncer__ = __webpack_require__(181);
  36324. var __extends = (this && this.__extends) || (function () {
  36325. var extendStatics = Object.setPrototypeOf ||
  36326. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  36327. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  36328. return function (d, b) {
  36329. extendStatics(d, b);
  36330. function __() { this.constructor = d; }
  36331. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  36332. };
  36333. })();
  36334. var BaseInput = (function (_super) {
  36335. __extends(BaseInput, _super);
  36336. function BaseInput(config, elementRef, renderer, name, _defaultValue, _form, _item, _ngControl) {
  36337. var _this = _super.call(this, config, elementRef, renderer, name) || this;
  36338. _this._defaultValue = _defaultValue;
  36339. _this._form = _form;
  36340. _this._item = _item;
  36341. _this._ngControl = _ngControl;
  36342. _this._isFocus = false;
  36343. _this._disabled = false;
  36344. _this._debouncer = new __WEBPACK_IMPORTED_MODULE_3__debouncer__["a" /* TimeoutDebouncer */](0);
  36345. _this._init = false;
  36346. _this._initModel = false;
  36347. /**
  36348. * @output {Range} Emitted when the range selector drag starts.
  36349. */
  36350. _this.ionFocus = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  36351. /**
  36352. * @output {Range} Emitted when the range value changes.
  36353. */
  36354. _this.ionChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  36355. /**
  36356. * @output {Range} Emitted when the range selector drag ends.
  36357. */
  36358. _this.ionBlur = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  36359. _form && _form.register(_this);
  36360. _this._value = Object(__WEBPACK_IMPORTED_MODULE_1__util__["b" /* deepCopy */])(_this._defaultValue);
  36361. if (_item) {
  36362. (void 0) /* assert */;
  36363. _this.id = name + '-' + _item.registerInput(name);
  36364. _this._labelId = _item.labelId;
  36365. _this._item.setElementClass('item-' + name, true);
  36366. }
  36367. // If the user passed a ngControl we need to set the valueAccessor
  36368. if (_ngControl) {
  36369. _ngControl.valueAccessor = _this;
  36370. }
  36371. return _this;
  36372. }
  36373. Object.defineProperty(BaseInput.prototype, "disabled", {
  36374. /**
  36375. * @input {boolean} If true, the user cannot interact with this element.
  36376. */
  36377. get: function () {
  36378. return this._disabled;
  36379. },
  36380. set: function (val) {
  36381. this.setDisabledState(val);
  36382. },
  36383. enumerable: true,
  36384. configurable: true
  36385. });
  36386. Object.defineProperty(BaseInput.prototype, "value", {
  36387. get: function () {
  36388. return this._value;
  36389. },
  36390. set: function (val) {
  36391. if (this._writeValue(val)) {
  36392. this.onChange();
  36393. this._fireIonChange();
  36394. }
  36395. },
  36396. enumerable: true,
  36397. configurable: true
  36398. });
  36399. // 1. Updates the value
  36400. // 2. Calls _inputUpdated()
  36401. // 3. Dispatch onChange events
  36402. BaseInput.prototype.setValue = function (val) {
  36403. this.value = val;
  36404. };
  36405. /**
  36406. * @hidden
  36407. */
  36408. BaseInput.prototype.setDisabledState = function (isDisabled) {
  36409. this._disabled = isDisabled = Object(__WEBPACK_IMPORTED_MODULE_1__util__["o" /* isTrueProperty */])(isDisabled);
  36410. this._item && this._item.setElementClass("item-" + this._componentName + "-disabled", isDisabled);
  36411. };
  36412. /**
  36413. * @hidden
  36414. */
  36415. BaseInput.prototype.writeValue = function (val) {
  36416. if (this._writeValue(val)) {
  36417. if (this._initModel) {
  36418. this._fireIonChange();
  36419. }
  36420. else if (this._init) {
  36421. // ngModel fires the first time too late, we need to skip the first ngModel update
  36422. this._initModel = true;
  36423. }
  36424. }
  36425. };
  36426. /**
  36427. * @hidden
  36428. */
  36429. BaseInput.prototype._writeValue = function (val) {
  36430. (void 0) /* assert */;
  36431. if (Object(__WEBPACK_IMPORTED_MODULE_1__util__["p" /* isUndefined */])(val)) {
  36432. return false;
  36433. }
  36434. var normalized = (val === null)
  36435. ? Object(__WEBPACK_IMPORTED_MODULE_1__util__["b" /* deepCopy */])(this._defaultValue)
  36436. : this._inputNormalize(val);
  36437. var notUpdate = Object(__WEBPACK_IMPORTED_MODULE_1__util__["p" /* isUndefined */])(normalized) || !this._inputShouldChange(normalized);
  36438. if (notUpdate) {
  36439. return false;
  36440. }
  36441. (void 0) /* console.debug */;
  36442. this._value = normalized;
  36443. if (this._init) {
  36444. this._inputUpdated();
  36445. }
  36446. return true;
  36447. };
  36448. /**
  36449. * @hidden
  36450. */
  36451. BaseInput.prototype._fireIonChange = function () {
  36452. var _this = this;
  36453. if (this._init) {
  36454. this._debouncer.debounce(function () {
  36455. (void 0) /* assert */;
  36456. _this.ionChange.emit(_this._inputChangeEvent());
  36457. _this._initModel = true;
  36458. });
  36459. }
  36460. };
  36461. /**
  36462. * @hidden
  36463. */
  36464. BaseInput.prototype.registerOnChange = function (fn) {
  36465. this._onChanged = fn;
  36466. };
  36467. /**
  36468. * @hidden
  36469. */
  36470. BaseInput.prototype.registerOnTouched = function (fn) {
  36471. this._onTouched = fn;
  36472. };
  36473. /**
  36474. * @hidden
  36475. */
  36476. BaseInput.prototype._initialize = function () {
  36477. if (this._init) {
  36478. (void 0) /* assert */;
  36479. return;
  36480. }
  36481. this._init = true;
  36482. if (Object(__WEBPACK_IMPORTED_MODULE_1__util__["l" /* isPresent */])(this._value)) {
  36483. this._inputUpdated();
  36484. }
  36485. };
  36486. /**
  36487. * @hidden
  36488. */
  36489. BaseInput.prototype._fireFocus = function () {
  36490. if (this._isFocus) {
  36491. return;
  36492. }
  36493. (void 0) /* console.debug */;
  36494. this._form && this._form.setAsFocused(this);
  36495. this._setFocus(true);
  36496. this.ionFocus.emit(this);
  36497. };
  36498. /**
  36499. * @hidden
  36500. */
  36501. BaseInput.prototype._fireBlur = function () {
  36502. if (!this._isFocus) {
  36503. return;
  36504. }
  36505. (void 0) /* console.debug */;
  36506. this._form && this._form.unsetAsFocused(this);
  36507. this._setFocus(false);
  36508. this._fireTouched();
  36509. this.ionBlur.emit(this);
  36510. };
  36511. /**
  36512. * @hidden
  36513. */
  36514. BaseInput.prototype._fireTouched = function () {
  36515. this._onTouched && this._onTouched();
  36516. };
  36517. /**
  36518. * @hidden
  36519. */
  36520. BaseInput.prototype._setFocus = function (isFocused) {
  36521. (void 0) /* assert */;
  36522. (void 0) /* assert */;
  36523. (void 0) /* assert */;
  36524. this._isFocus = isFocused;
  36525. var item = this._item;
  36526. if (item) {
  36527. item.setElementClass('input-has-focus', isFocused);
  36528. item.setElementClass('item-input-has-focus', isFocused);
  36529. }
  36530. this._inputUpdated();
  36531. };
  36532. /**
  36533. * @hidden
  36534. */
  36535. BaseInput.prototype.onChange = function () {
  36536. this._onChanged && this._onChanged(this._inputNgModelEvent());
  36537. };
  36538. /**
  36539. * @hidden
  36540. */
  36541. BaseInput.prototype.isFocus = function () {
  36542. return this._isFocus;
  36543. };
  36544. /**
  36545. * @hidden
  36546. */
  36547. BaseInput.prototype.hasValue = function () {
  36548. var val = this._value;
  36549. if (!Object(__WEBPACK_IMPORTED_MODULE_1__util__["l" /* isPresent */])(val)) {
  36550. return false;
  36551. }
  36552. if (Object(__WEBPACK_IMPORTED_MODULE_1__util__["e" /* isArray */])(val) || Object(__WEBPACK_IMPORTED_MODULE_1__util__["n" /* isString */])(val)) {
  36553. return val.length > 0;
  36554. }
  36555. return true;
  36556. };
  36557. /**
  36558. * @hidden
  36559. */
  36560. BaseInput.prototype.focusNext = function () {
  36561. this._form && this._form.tabFocus(this);
  36562. };
  36563. /**
  36564. * @hidden
  36565. */
  36566. BaseInput.prototype.ngOnDestroy = function () {
  36567. (void 0) /* assert */;
  36568. var form = this._form;
  36569. form && form.deregister(this);
  36570. this._init = false;
  36571. };
  36572. /**
  36573. * @hidden
  36574. */
  36575. BaseInput.prototype.ngAfterContentInit = function () {
  36576. this._initialize();
  36577. };
  36578. /**
  36579. * @hidden
  36580. */
  36581. BaseInput.prototype.initFocus = function () {
  36582. var ele = this._elementRef.nativeElement.querySelector('button');
  36583. ele && ele.focus();
  36584. };
  36585. /**
  36586. * @hidden
  36587. */
  36588. BaseInput.prototype._inputNormalize = function (val) {
  36589. return val;
  36590. };
  36591. /**
  36592. * @hidden
  36593. */
  36594. BaseInput.prototype._inputShouldChange = function (val) {
  36595. return this._value !== val;
  36596. };
  36597. /**
  36598. * @hidden
  36599. */
  36600. BaseInput.prototype._inputChangeEvent = function () {
  36601. return this;
  36602. };
  36603. /**
  36604. * @hidden
  36605. */
  36606. BaseInput.prototype._inputNgModelEvent = function () {
  36607. return this._value;
  36608. };
  36609. /**
  36610. * @hidden
  36611. */
  36612. BaseInput.prototype._inputUpdated = function () {
  36613. (void 0) /* assert */;
  36614. var item = this._item;
  36615. if (item) {
  36616. setControlCss(item, this._ngControl);
  36617. // TODO remove all uses of input-has-value in v4
  36618. var hasValue = this.hasValue();
  36619. item.setElementClass('input-has-value', hasValue);
  36620. item.setElementClass('item-input-has-value', hasValue);
  36621. }
  36622. };
  36623. BaseInput.propDecorators = {
  36624. 'ionFocus': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  36625. 'ionChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  36626. 'ionBlur': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  36627. 'disabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  36628. };
  36629. return BaseInput;
  36630. }(__WEBPACK_IMPORTED_MODULE_2__components_ion__["a" /* Ion */]));
  36631. function setControlCss(element, control) {
  36632. if (!control) {
  36633. return;
  36634. }
  36635. element.setElementClass('ng-untouched', control.untouched);
  36636. element.setElementClass('ng-touched', control.touched);
  36637. element.setElementClass('ng-pristine', control.pristine);
  36638. element.setElementClass('ng-dirty', control.dirty);
  36639. element.setElementClass('ng-valid', control.valid);
  36640. element.setElementClass('ng-invalid', !control.valid);
  36641. }
  36642. //# sourceMappingURL=base-input.js.map
  36643. /***/ }),
  36644. /* 38 */
  36645. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  36646. "use strict";
  36647. /* harmony export (immutable) */ __webpack_exports__["b"] = __extends;
  36648. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __assign; });
  36649. /* unused harmony export __rest */
  36650. /* unused harmony export __decorate */
  36651. /* unused harmony export __param */
  36652. /* unused harmony export __metadata */
  36653. /* unused harmony export __awaiter */
  36654. /* unused harmony export __generator */
  36655. /* unused harmony export __exportStar */
  36656. /* unused harmony export __values */
  36657. /* unused harmony export __read */
  36658. /* unused harmony export __spread */
  36659. /* unused harmony export __await */
  36660. /* unused harmony export __asyncGenerator */
  36661. /* unused harmony export __asyncDelegator */
  36662. /* unused harmony export __asyncValues */
  36663. /* unused harmony export __makeTemplateObject */
  36664. /* unused harmony export __importStar */
  36665. /* unused harmony export __importDefault */
  36666. /*! *****************************************************************************
  36667. Copyright (c) Microsoft Corporation. All rights reserved.
  36668. Licensed under the Apache License, Version 2.0 (the "License"); you may not use
  36669. this file except in compliance with the License. You may obtain a copy of the
  36670. License at http://www.apache.org/licenses/LICENSE-2.0
  36671. THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  36672. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  36673. WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  36674. MERCHANTABLITY OR NON-INFRINGEMENT.
  36675. See the Apache Version 2.0 License for specific language governing permissions
  36676. and limitations under the License.
  36677. ***************************************************************************** */
  36678. /* global Reflect, Promise */
  36679. var extendStatics = function(d, b) {
  36680. extendStatics = Object.setPrototypeOf ||
  36681. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  36682. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  36683. return extendStatics(d, b);
  36684. };
  36685. function __extends(d, b) {
  36686. extendStatics(d, b);
  36687. function __() { this.constructor = d; }
  36688. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  36689. }
  36690. var __assign = function() {
  36691. __assign = Object.assign || function __assign(t) {
  36692. for (var s, i = 1, n = arguments.length; i < n; i++) {
  36693. s = arguments[i];
  36694. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
  36695. }
  36696. return t;
  36697. }
  36698. return __assign.apply(this, arguments);
  36699. }
  36700. function __rest(s, e) {
  36701. var t = {};
  36702. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
  36703. t[p] = s[p];
  36704. if (s != null && typeof Object.getOwnPropertySymbols === "function")
  36705. for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
  36706. t[p[i]] = s[p[i]];
  36707. return t;
  36708. }
  36709. function __decorate(decorators, target, key, desc) {
  36710. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  36711. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  36712. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  36713. return c > 3 && r && Object.defineProperty(target, key, r), r;
  36714. }
  36715. function __param(paramIndex, decorator) {
  36716. return function (target, key) { decorator(target, key, paramIndex); }
  36717. }
  36718. function __metadata(metadataKey, metadataValue) {
  36719. if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
  36720. }
  36721. function __awaiter(thisArg, _arguments, P, generator) {
  36722. return new (P || (P = Promise))(function (resolve, reject) {
  36723. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  36724. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  36725. function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
  36726. step((generator = generator.apply(thisArg, _arguments || [])).next());
  36727. });
  36728. }
  36729. function __generator(thisArg, body) {
  36730. var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
  36731. return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  36732. function verb(n) { return function (v) { return step([n, v]); }; }
  36733. function step(op) {
  36734. if (f) throw new TypeError("Generator is already executing.");
  36735. while (_) try {
  36736. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  36737. if (y = 0, t) op = [op[0] & 2, t.value];
  36738. switch (op[0]) {
  36739. case 0: case 1: t = op; break;
  36740. case 4: _.label++; return { value: op[1], done: false };
  36741. case 5: _.label++; y = op[1]; op = [0]; continue;
  36742. case 7: op = _.ops.pop(); _.trys.pop(); continue;
  36743. default:
  36744. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
  36745. if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
  36746. if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
  36747. if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
  36748. if (t[2]) _.ops.pop();
  36749. _.trys.pop(); continue;
  36750. }
  36751. op = body.call(thisArg, _);
  36752. } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
  36753. if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  36754. }
  36755. }
  36756. function __exportStar(m, exports) {
  36757. for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
  36758. }
  36759. function __values(o) {
  36760. var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
  36761. if (m) return m.call(o);
  36762. return {
  36763. next: function () {
  36764. if (o && i >= o.length) o = void 0;
  36765. return { value: o && o[i++], done: !o };
  36766. }
  36767. };
  36768. }
  36769. function __read(o, n) {
  36770. var m = typeof Symbol === "function" && o[Symbol.iterator];
  36771. if (!m) return o;
  36772. var i = m.call(o), r, ar = [], e;
  36773. try {
  36774. while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  36775. }
  36776. catch (error) { e = { error: error }; }
  36777. finally {
  36778. try {
  36779. if (r && !r.done && (m = i["return"])) m.call(i);
  36780. }
  36781. finally { if (e) throw e.error; }
  36782. }
  36783. return ar;
  36784. }
  36785. function __spread() {
  36786. for (var ar = [], i = 0; i < arguments.length; i++)
  36787. ar = ar.concat(__read(arguments[i]));
  36788. return ar;
  36789. }
  36790. function __await(v) {
  36791. return this instanceof __await ? (this.v = v, this) : new __await(v);
  36792. }
  36793. function __asyncGenerator(thisArg, _arguments, generator) {
  36794. if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  36795. var g = generator.apply(thisArg, _arguments || []), i, q = [];
  36796. return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
  36797. function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
  36798. function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  36799. function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  36800. function fulfill(value) { resume("next", value); }
  36801. function reject(value) { resume("throw", value); }
  36802. function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
  36803. }
  36804. function __asyncDelegator(o) {
  36805. var i, p;
  36806. return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  36807. function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
  36808. }
  36809. function __asyncValues(o) {
  36810. if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  36811. var m = o[Symbol.asyncIterator], i;
  36812. return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  36813. function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  36814. function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
  36815. }
  36816. function __makeTemplateObject(cooked, raw) {
  36817. if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  36818. return cooked;
  36819. };
  36820. function __importStar(mod) {
  36821. if (mod && mod.__esModule) return mod;
  36822. var result = {};
  36823. if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
  36824. result.default = mod;
  36825. return result;
  36826. }
  36827. function __importDefault(mod) {
  36828. return (mod && mod.__esModule) ? mod : { default: mod };
  36829. }
  36830. /***/ }),
  36831. /* 39 */
  36832. /***/ (function(module, exports, __webpack_require__) {
  36833. "use strict";
  36834. var ConnectableObservable_1 = __webpack_require__(162);
  36835. /* tslint:enable:max-line-length */
  36836. /**
  36837. * Returns an Observable that emits the results of invoking a specified selector on items
  36838. * emitted by a ConnectableObservable that shares a single subscription to the underlying stream.
  36839. *
  36840. * <img src="./img/multicast.png" width="100%">
  36841. *
  36842. * @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate subject through
  36843. * which the source sequence's elements will be multicast to the selector function
  36844. * or Subject to push source elements into.
  36845. * @param {Function} [selector] - Optional selector function that can use the multicasted source stream
  36846. * as many times as needed, without causing multiple subscriptions to the source stream.
  36847. * Subscribers to the given source will receive all notifications of the source from the
  36848. * time of the subscription forward.
  36849. * @return {Observable} An Observable that emits the results of invoking the selector
  36850. * on the items emitted by a `ConnectableObservable` that shares a single subscription to
  36851. * the underlying stream.
  36852. * @method multicast
  36853. * @owner Observable
  36854. */
  36855. function multicast(subjectOrSubjectFactory, selector) {
  36856. return function multicastOperatorFunction(source) {
  36857. var subjectFactory;
  36858. if (typeof subjectOrSubjectFactory === 'function') {
  36859. subjectFactory = subjectOrSubjectFactory;
  36860. }
  36861. else {
  36862. subjectFactory = function subjectFactory() {
  36863. return subjectOrSubjectFactory;
  36864. };
  36865. }
  36866. if (typeof selector === 'function') {
  36867. return source.lift(new MulticastOperator(subjectFactory, selector));
  36868. }
  36869. var connectable = Object.create(source, ConnectableObservable_1.connectableObservableDescriptor);
  36870. connectable.source = source;
  36871. connectable.subjectFactory = subjectFactory;
  36872. return connectable;
  36873. };
  36874. }
  36875. exports.multicast = multicast;
  36876. var MulticastOperator = (function () {
  36877. function MulticastOperator(subjectFactory, selector) {
  36878. this.subjectFactory = subjectFactory;
  36879. this.selector = selector;
  36880. }
  36881. MulticastOperator.prototype.call = function (subscriber, source) {
  36882. var selector = this.selector;
  36883. var subject = this.subjectFactory();
  36884. var subscription = selector(subject).subscribe(subscriber);
  36885. subscription.add(source.subscribe(subject));
  36886. return subscription;
  36887. };
  36888. return MulticastOperator;
  36889. }());
  36890. exports.MulticastOperator = MulticastOperator;
  36891. //# sourceMappingURL=multicast.js.map
  36892. /***/ }),
  36893. /* 40 */
  36894. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  36895. "use strict";
  36896. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return BrowserModule; });
  36897. /* unused harmony export platformBrowser */
  36898. /* unused harmony export Meta */
  36899. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Title; });
  36900. /* unused harmony export disableDebugTools */
  36901. /* unused harmony export enableDebugTools */
  36902. /* unused harmony export BrowserTransferStateModule */
  36903. /* unused harmony export TransferState */
  36904. /* unused harmony export makeStateKey */
  36905. /* unused harmony export By */
  36906. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return DOCUMENT$1; });
  36907. /* unused harmony export EVENT_MANAGER_PLUGINS */
  36908. /* unused harmony export EventManager */
  36909. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return HAMMER_GESTURE_CONFIG; });
  36910. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return HammerGestureConfig; });
  36911. /* unused harmony export DomSanitizer */
  36912. /* unused harmony export VERSION */
  36913. /* unused harmony export ɵBROWSER_SANITIZATION_PROVIDERS */
  36914. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return INTERNAL_BROWSER_PLATFORM_PROVIDERS; });
  36915. /* unused harmony export ɵinitDomAdapter */
  36916. /* unused harmony export ɵBrowserDomAdapter */
  36917. /* unused harmony export ɵBrowserPlatformLocation */
  36918. /* unused harmony export ɵTRANSITION_ID */
  36919. /* unused harmony export ɵBrowserGetTestability */
  36920. /* unused harmony export ɵescapeHtml */
  36921. /* unused harmony export ɵELEMENT_PROBE_PROVIDERS */
  36922. /* unused harmony export ɵDomAdapter */
  36923. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return getDOM; });
  36924. /* unused harmony export ɵsetRootDomAdapter */
  36925. /* unused harmony export ɵDomRendererFactory2 */
  36926. /* unused harmony export ɵNAMESPACE_URIS */
  36927. /* unused harmony export ɵflattenStyles */
  36928. /* unused harmony export ɵshimContentAttribute */
  36929. /* unused harmony export ɵshimHostAttribute */
  36930. /* unused harmony export ɵDomEventsPlugin */
  36931. /* unused harmony export ɵHammerGesturesPlugin */
  36932. /* unused harmony export ɵKeyEventsPlugin */
  36933. /* unused harmony export ɵDomSharedStylesHost */
  36934. /* unused harmony export ɵSharedStylesHost */
  36935. /* unused harmony export ɵb */
  36936. /* unused harmony export ɵa */
  36937. /* unused harmony export ɵi */
  36938. /* unused harmony export ɵg */
  36939. /* unused harmony export ɵf */
  36940. /* unused harmony export ɵc */
  36941. /* unused harmony export ɵh */
  36942. /* unused harmony export ɵd */
  36943. /* unused harmony export ɵe */
  36944. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_common__ = __webpack_require__(67);
  36945. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(1);
  36946. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_tslib__ = __webpack_require__(38);
  36947. /**
  36948. * @license Angular v5.2.11
  36949. * (c) 2010-2018 Google, Inc. https://angular.io/
  36950. * License: MIT
  36951. */
  36952. /**
  36953. * @fileoverview added by tsickle
  36954. * @suppress {checkTypes} checked by tsc
  36955. */
  36956. /**
  36957. * @license
  36958. * Copyright Google Inc. All Rights Reserved.
  36959. *
  36960. * Use of this source code is governed by an MIT-style license that can be
  36961. * found in the LICENSE file at https://angular.io/license
  36962. */
  36963. var _DOM = /** @type {?} */ ((null));
  36964. /**
  36965. * @return {?}
  36966. */
  36967. function getDOM() {
  36968. return _DOM;
  36969. }
  36970. /**
  36971. * @param {?} adapter
  36972. * @return {?}
  36973. */
  36974. /**
  36975. * @param {?} adapter
  36976. * @return {?}
  36977. */
  36978. function setRootDomAdapter(adapter) {
  36979. if (!_DOM) {
  36980. _DOM = adapter;
  36981. }
  36982. }
  36983. /**
  36984. * Provides DOM operations in an environment-agnostic way.
  36985. *
  36986. * \@security Tread carefully! Interacting with the DOM directly is dangerous and
  36987. * can introduce XSS risks.
  36988. * @abstract
  36989. */
  36990. var DomAdapter = /** @class */ (function () {
  36991. function DomAdapter() {
  36992. this.resourceLoaderType = /** @type {?} */ ((null));
  36993. }
  36994. Object.defineProperty(DomAdapter.prototype, "attrToPropMap", {
  36995. /**
  36996. * Maps attribute names to their corresponding property names for cases
  36997. * where attribute name doesn't match property name.
  36998. */
  36999. get: /**
  37000. * Maps attribute names to their corresponding property names for cases
  37001. * where attribute name doesn't match property name.
  37002. * @return {?}
  37003. */
  37004. function () { return this._attrToPropMap; },
  37005. set: /**
  37006. * @param {?} value
  37007. * @return {?}
  37008. */
  37009. function (value) { this._attrToPropMap = value; },
  37010. enumerable: true,
  37011. configurable: true
  37012. });
  37013. return DomAdapter;
  37014. }());
  37015. /**
  37016. * @fileoverview added by tsickle
  37017. * @suppress {checkTypes} checked by tsc
  37018. */
  37019. /**
  37020. * @license
  37021. * Copyright Google Inc. All Rights Reserved.
  37022. *
  37023. * Use of this source code is governed by an MIT-style license that can be
  37024. * found in the LICENSE file at https://angular.io/license
  37025. */
  37026. /**
  37027. * Provides DOM operations in any browser environment.
  37028. *
  37029. * \@security Tread carefully! Interacting with the DOM directly is dangerous and
  37030. * can introduce XSS risks.
  37031. * @abstract
  37032. */
  37033. var GenericBrowserDomAdapter = /** @class */ (function (_super) {
  37034. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(GenericBrowserDomAdapter, _super);
  37035. function GenericBrowserDomAdapter() {
  37036. var _this = _super.call(this) || this;
  37037. _this._animationPrefix = null;
  37038. _this._transitionEnd = null;
  37039. try {
  37040. var /** @type {?} */ element_1 = _this.createElement('div', document);
  37041. if (_this.getStyle(element_1, 'animationName') != null) {
  37042. _this._animationPrefix = '';
  37043. }
  37044. else {
  37045. var /** @type {?} */ domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];
  37046. for (var /** @type {?} */ i = 0; i < domPrefixes.length; i++) {
  37047. if (_this.getStyle(element_1, domPrefixes[i] + 'AnimationName') != null) {
  37048. _this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';
  37049. break;
  37050. }
  37051. }
  37052. }
  37053. var /** @type {?} */ transEndEventNames_1 = {
  37054. WebkitTransition: 'webkitTransitionEnd',
  37055. MozTransition: 'transitionend',
  37056. OTransition: 'oTransitionEnd otransitionend',
  37057. transition: 'transitionend'
  37058. };
  37059. Object.keys(transEndEventNames_1).forEach(function (key) {
  37060. if (_this.getStyle(element_1, key) != null) {
  37061. _this._transitionEnd = transEndEventNames_1[key];
  37062. }
  37063. });
  37064. }
  37065. catch (/** @type {?} */ e) {
  37066. _this._animationPrefix = null;
  37067. _this._transitionEnd = null;
  37068. }
  37069. return _this;
  37070. }
  37071. /**
  37072. * @param {?} el
  37073. * @return {?}
  37074. */
  37075. GenericBrowserDomAdapter.prototype.getDistributedNodes = /**
  37076. * @param {?} el
  37077. * @return {?}
  37078. */
  37079. function (el) { return (/** @type {?} */ (el)).getDistributedNodes(); };
  37080. /**
  37081. * @param {?} el
  37082. * @param {?} baseUrl
  37083. * @param {?} href
  37084. * @return {?}
  37085. */
  37086. GenericBrowserDomAdapter.prototype.resolveAndSetHref = /**
  37087. * @param {?} el
  37088. * @param {?} baseUrl
  37089. * @param {?} href
  37090. * @return {?}
  37091. */
  37092. function (el, baseUrl, href) {
  37093. el.href = href == null ? baseUrl : baseUrl + '/../' + href;
  37094. };
  37095. /**
  37096. * @return {?}
  37097. */
  37098. GenericBrowserDomAdapter.prototype.supportsDOMEvents = /**
  37099. * @return {?}
  37100. */
  37101. function () { return true; };
  37102. /**
  37103. * @return {?}
  37104. */
  37105. GenericBrowserDomAdapter.prototype.supportsNativeShadowDOM = /**
  37106. * @return {?}
  37107. */
  37108. function () {
  37109. return typeof (/** @type {?} */ (document.body)).createShadowRoot === 'function';
  37110. };
  37111. /**
  37112. * @return {?}
  37113. */
  37114. GenericBrowserDomAdapter.prototype.getAnimationPrefix = /**
  37115. * @return {?}
  37116. */
  37117. function () { return this._animationPrefix ? this._animationPrefix : ''; };
  37118. /**
  37119. * @return {?}
  37120. */
  37121. GenericBrowserDomAdapter.prototype.getTransitionEnd = /**
  37122. * @return {?}
  37123. */
  37124. function () { return this._transitionEnd ? this._transitionEnd : ''; };
  37125. /**
  37126. * @return {?}
  37127. */
  37128. GenericBrowserDomAdapter.prototype.supportsAnimation = /**
  37129. * @return {?}
  37130. */
  37131. function () {
  37132. return this._animationPrefix != null && this._transitionEnd != null;
  37133. };
  37134. return GenericBrowserDomAdapter;
  37135. }(DomAdapter));
  37136. /**
  37137. * @fileoverview added by tsickle
  37138. * @suppress {checkTypes} checked by tsc
  37139. */
  37140. /**
  37141. * @license
  37142. * Copyright Google Inc. All Rights Reserved.
  37143. *
  37144. * Use of this source code is governed by an MIT-style license that can be
  37145. * found in the LICENSE file at https://angular.io/license
  37146. */
  37147. var _attrToPropMap = {
  37148. 'class': 'className',
  37149. 'innerHtml': 'innerHTML',
  37150. 'readonly': 'readOnly',
  37151. 'tabindex': 'tabIndex',
  37152. };
  37153. var DOM_KEY_LOCATION_NUMPAD = 3;
  37154. // Map to convert some key or keyIdentifier values to what will be returned by getEventKey
  37155. var _keyMap = {
  37156. // The following values are here for cross-browser compatibility and to match the W3C standard
  37157. // cf http://www.w3.org/TR/DOM-Level-3-Events-key/
  37158. '\b': 'Backspace',
  37159. '\t': 'Tab',
  37160. '\x7F': 'Delete',
  37161. '\x1B': 'Escape',
  37162. 'Del': 'Delete',
  37163. 'Esc': 'Escape',
  37164. 'Left': 'ArrowLeft',
  37165. 'Right': 'ArrowRight',
  37166. 'Up': 'ArrowUp',
  37167. 'Down': 'ArrowDown',
  37168. 'Menu': 'ContextMenu',
  37169. 'Scroll': 'ScrollLock',
  37170. 'Win': 'OS'
  37171. };
  37172. // There is a bug in Chrome for numeric keypad keys:
  37173. // https://code.google.com/p/chromium/issues/detail?id=155654
  37174. // 1, 2, 3 ... are reported as A, B, C ...
  37175. var _chromeNumKeyPadMap = {
  37176. 'A': '1',
  37177. 'B': '2',
  37178. 'C': '3',
  37179. 'D': '4',
  37180. 'E': '5',
  37181. 'F': '6',
  37182. 'G': '7',
  37183. 'H': '8',
  37184. 'I': '9',
  37185. 'J': '*',
  37186. 'K': '+',
  37187. 'M': '-',
  37188. 'N': '.',
  37189. 'O': '/',
  37190. '\x60': '0',
  37191. '\x90': 'NumLock'
  37192. };
  37193. var nodeContains;
  37194. if (__WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['Node']) {
  37195. nodeContains = __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['Node'].prototype.contains || function (node) {
  37196. return !!(this.compareDocumentPosition(node) & 16);
  37197. };
  37198. }
  37199. /**
  37200. * A `DomAdapter` powered by full browser DOM APIs.
  37201. *
  37202. * \@security Tread carefully! Interacting with the DOM directly is dangerous and
  37203. * can introduce XSS risks.
  37204. */
  37205. var BrowserDomAdapter = /** @class */ (function (_super) {
  37206. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(BrowserDomAdapter, _super);
  37207. function BrowserDomAdapter() {
  37208. return _super !== null && _super.apply(this, arguments) || this;
  37209. }
  37210. /**
  37211. * @param {?} templateHtml
  37212. * @return {?}
  37213. */
  37214. BrowserDomAdapter.prototype.parse = /**
  37215. * @param {?} templateHtml
  37216. * @return {?}
  37217. */
  37218. function (templateHtml) { throw new Error('parse not implemented'); };
  37219. /**
  37220. * @return {?}
  37221. */
  37222. BrowserDomAdapter.makeCurrent = /**
  37223. * @return {?}
  37224. */
  37225. function () { setRootDomAdapter(new BrowserDomAdapter()); };
  37226. /**
  37227. * @param {?} element
  37228. * @param {?} name
  37229. * @return {?}
  37230. */
  37231. BrowserDomAdapter.prototype.hasProperty = /**
  37232. * @param {?} element
  37233. * @param {?} name
  37234. * @return {?}
  37235. */
  37236. function (element, name) { return name in element; };
  37237. /**
  37238. * @param {?} el
  37239. * @param {?} name
  37240. * @param {?} value
  37241. * @return {?}
  37242. */
  37243. BrowserDomAdapter.prototype.setProperty = /**
  37244. * @param {?} el
  37245. * @param {?} name
  37246. * @param {?} value
  37247. * @return {?}
  37248. */
  37249. function (el, name, value) { (/** @type {?} */ (el))[name] = value; };
  37250. /**
  37251. * @param {?} el
  37252. * @param {?} name
  37253. * @return {?}
  37254. */
  37255. BrowserDomAdapter.prototype.getProperty = /**
  37256. * @param {?} el
  37257. * @param {?} name
  37258. * @return {?}
  37259. */
  37260. function (el, name) { return (/** @type {?} */ (el))[name]; };
  37261. /**
  37262. * @param {?} el
  37263. * @param {?} methodName
  37264. * @param {?} args
  37265. * @return {?}
  37266. */
  37267. BrowserDomAdapter.prototype.invoke = /**
  37268. * @param {?} el
  37269. * @param {?} methodName
  37270. * @param {?} args
  37271. * @return {?}
  37272. */
  37273. function (el, methodName, args) {
  37274. (_a = (/** @type {?} */ (el)))[methodName].apply(_a, args);
  37275. var _a;
  37276. };
  37277. // TODO(tbosch): move this into a separate environment class once we have it
  37278. /**
  37279. * @param {?} error
  37280. * @return {?}
  37281. */
  37282. BrowserDomAdapter.prototype.logError = /**
  37283. * @param {?} error
  37284. * @return {?}
  37285. */
  37286. function (error) {
  37287. if (window.console) {
  37288. if (console.error) {
  37289. console.error(error);
  37290. }
  37291. else {
  37292. console.log(error);
  37293. }
  37294. }
  37295. };
  37296. /**
  37297. * @param {?} error
  37298. * @return {?}
  37299. */
  37300. BrowserDomAdapter.prototype.log = /**
  37301. * @param {?} error
  37302. * @return {?}
  37303. */
  37304. function (error) {
  37305. if (window.console) {
  37306. window.console.log && window.console.log(error);
  37307. }
  37308. };
  37309. /**
  37310. * @param {?} error
  37311. * @return {?}
  37312. */
  37313. BrowserDomAdapter.prototype.logGroup = /**
  37314. * @param {?} error
  37315. * @return {?}
  37316. */
  37317. function (error) {
  37318. if (window.console) {
  37319. window.console.group && window.console.group(error);
  37320. }
  37321. };
  37322. /**
  37323. * @return {?}
  37324. */
  37325. BrowserDomAdapter.prototype.logGroupEnd = /**
  37326. * @return {?}
  37327. */
  37328. function () {
  37329. if (window.console) {
  37330. window.console.groupEnd && window.console.groupEnd();
  37331. }
  37332. };
  37333. Object.defineProperty(BrowserDomAdapter.prototype, "attrToPropMap", {
  37334. get: /**
  37335. * @return {?}
  37336. */
  37337. function () { return _attrToPropMap; },
  37338. enumerable: true,
  37339. configurable: true
  37340. });
  37341. /**
  37342. * @param {?} nodeA
  37343. * @param {?} nodeB
  37344. * @return {?}
  37345. */
  37346. BrowserDomAdapter.prototype.contains = /**
  37347. * @param {?} nodeA
  37348. * @param {?} nodeB
  37349. * @return {?}
  37350. */
  37351. function (nodeA, nodeB) { return nodeContains.call(nodeA, nodeB); };
  37352. /**
  37353. * @param {?} el
  37354. * @param {?} selector
  37355. * @return {?}
  37356. */
  37357. BrowserDomAdapter.prototype.querySelector = /**
  37358. * @param {?} el
  37359. * @param {?} selector
  37360. * @return {?}
  37361. */
  37362. function (el, selector) { return el.querySelector(selector); };
  37363. /**
  37364. * @param {?} el
  37365. * @param {?} selector
  37366. * @return {?}
  37367. */
  37368. BrowserDomAdapter.prototype.querySelectorAll = /**
  37369. * @param {?} el
  37370. * @param {?} selector
  37371. * @return {?}
  37372. */
  37373. function (el, selector) { return el.querySelectorAll(selector); };
  37374. /**
  37375. * @param {?} el
  37376. * @param {?} evt
  37377. * @param {?} listener
  37378. * @return {?}
  37379. */
  37380. BrowserDomAdapter.prototype.on = /**
  37381. * @param {?} el
  37382. * @param {?} evt
  37383. * @param {?} listener
  37384. * @return {?}
  37385. */
  37386. function (el, evt, listener) { el.addEventListener(evt, listener, false); };
  37387. /**
  37388. * @param {?} el
  37389. * @param {?} evt
  37390. * @param {?} listener
  37391. * @return {?}
  37392. */
  37393. BrowserDomAdapter.prototype.onAndCancel = /**
  37394. * @param {?} el
  37395. * @param {?} evt
  37396. * @param {?} listener
  37397. * @return {?}
  37398. */
  37399. function (el, evt, listener) {
  37400. el.addEventListener(evt, listener, false);
  37401. // Needed to follow Dart's subscription semantic, until fix of
  37402. // https://code.google.com/p/dart/issues/detail?id=17406
  37403. return function () { el.removeEventListener(evt, listener, false); };
  37404. };
  37405. /**
  37406. * @param {?} el
  37407. * @param {?} evt
  37408. * @return {?}
  37409. */
  37410. BrowserDomAdapter.prototype.dispatchEvent = /**
  37411. * @param {?} el
  37412. * @param {?} evt
  37413. * @return {?}
  37414. */
  37415. function (el, evt) { el.dispatchEvent(evt); };
  37416. /**
  37417. * @param {?} eventType
  37418. * @return {?}
  37419. */
  37420. BrowserDomAdapter.prototype.createMouseEvent = /**
  37421. * @param {?} eventType
  37422. * @return {?}
  37423. */
  37424. function (eventType) {
  37425. var /** @type {?} */ evt = this.getDefaultDocument().createEvent('MouseEvent');
  37426. evt.initEvent(eventType, true, true);
  37427. return evt;
  37428. };
  37429. /**
  37430. * @param {?} eventType
  37431. * @return {?}
  37432. */
  37433. BrowserDomAdapter.prototype.createEvent = /**
  37434. * @param {?} eventType
  37435. * @return {?}
  37436. */
  37437. function (eventType) {
  37438. var /** @type {?} */ evt = this.getDefaultDocument().createEvent('Event');
  37439. evt.initEvent(eventType, true, true);
  37440. return evt;
  37441. };
  37442. /**
  37443. * @param {?} evt
  37444. * @return {?}
  37445. */
  37446. BrowserDomAdapter.prototype.preventDefault = /**
  37447. * @param {?} evt
  37448. * @return {?}
  37449. */
  37450. function (evt) {
  37451. evt.preventDefault();
  37452. evt.returnValue = false;
  37453. };
  37454. /**
  37455. * @param {?} evt
  37456. * @return {?}
  37457. */
  37458. BrowserDomAdapter.prototype.isPrevented = /**
  37459. * @param {?} evt
  37460. * @return {?}
  37461. */
  37462. function (evt) {
  37463. return evt.defaultPrevented || evt.returnValue != null && !evt.returnValue;
  37464. };
  37465. /**
  37466. * @param {?} el
  37467. * @return {?}
  37468. */
  37469. BrowserDomAdapter.prototype.getInnerHTML = /**
  37470. * @param {?} el
  37471. * @return {?}
  37472. */
  37473. function (el) { return el.innerHTML; };
  37474. /**
  37475. * @param {?} el
  37476. * @return {?}
  37477. */
  37478. BrowserDomAdapter.prototype.getTemplateContent = /**
  37479. * @param {?} el
  37480. * @return {?}
  37481. */
  37482. function (el) {
  37483. return 'content' in el && this.isTemplateElement(el) ? (/** @type {?} */ (el)).content : null;
  37484. };
  37485. /**
  37486. * @param {?} el
  37487. * @return {?}
  37488. */
  37489. BrowserDomAdapter.prototype.getOuterHTML = /**
  37490. * @param {?} el
  37491. * @return {?}
  37492. */
  37493. function (el) { return el.outerHTML; };
  37494. /**
  37495. * @param {?} node
  37496. * @return {?}
  37497. */
  37498. BrowserDomAdapter.prototype.nodeName = /**
  37499. * @param {?} node
  37500. * @return {?}
  37501. */
  37502. function (node) { return node.nodeName; };
  37503. /**
  37504. * @param {?} node
  37505. * @return {?}
  37506. */
  37507. BrowserDomAdapter.prototype.nodeValue = /**
  37508. * @param {?} node
  37509. * @return {?}
  37510. */
  37511. function (node) { return node.nodeValue; };
  37512. /**
  37513. * @param {?} node
  37514. * @return {?}
  37515. */
  37516. BrowserDomAdapter.prototype.type = /**
  37517. * @param {?} node
  37518. * @return {?}
  37519. */
  37520. function (node) { return node.type; };
  37521. /**
  37522. * @param {?} node
  37523. * @return {?}
  37524. */
  37525. BrowserDomAdapter.prototype.content = /**
  37526. * @param {?} node
  37527. * @return {?}
  37528. */
  37529. function (node) {
  37530. if (this.hasProperty(node, 'content')) {
  37531. return (/** @type {?} */ (node)).content;
  37532. }
  37533. else {
  37534. return node;
  37535. }
  37536. };
  37537. /**
  37538. * @param {?} el
  37539. * @return {?}
  37540. */
  37541. BrowserDomAdapter.prototype.firstChild = /**
  37542. * @param {?} el
  37543. * @return {?}
  37544. */
  37545. function (el) { return el.firstChild; };
  37546. /**
  37547. * @param {?} el
  37548. * @return {?}
  37549. */
  37550. BrowserDomAdapter.prototype.nextSibling = /**
  37551. * @param {?} el
  37552. * @return {?}
  37553. */
  37554. function (el) { return el.nextSibling; };
  37555. /**
  37556. * @param {?} el
  37557. * @return {?}
  37558. */
  37559. BrowserDomAdapter.prototype.parentElement = /**
  37560. * @param {?} el
  37561. * @return {?}
  37562. */
  37563. function (el) { return el.parentNode; };
  37564. /**
  37565. * @param {?} el
  37566. * @return {?}
  37567. */
  37568. BrowserDomAdapter.prototype.childNodes = /**
  37569. * @param {?} el
  37570. * @return {?}
  37571. */
  37572. function (el) { return el.childNodes; };
  37573. /**
  37574. * @param {?} el
  37575. * @return {?}
  37576. */
  37577. BrowserDomAdapter.prototype.childNodesAsList = /**
  37578. * @param {?} el
  37579. * @return {?}
  37580. */
  37581. function (el) {
  37582. var /** @type {?} */ childNodes = el.childNodes;
  37583. var /** @type {?} */ res = new Array(childNodes.length);
  37584. for (var /** @type {?} */ i = 0; i < childNodes.length; i++) {
  37585. res[i] = childNodes[i];
  37586. }
  37587. return res;
  37588. };
  37589. /**
  37590. * @param {?} el
  37591. * @return {?}
  37592. */
  37593. BrowserDomAdapter.prototype.clearNodes = /**
  37594. * @param {?} el
  37595. * @return {?}
  37596. */
  37597. function (el) {
  37598. while (el.firstChild) {
  37599. el.removeChild(el.firstChild);
  37600. }
  37601. };
  37602. /**
  37603. * @param {?} el
  37604. * @param {?} node
  37605. * @return {?}
  37606. */
  37607. BrowserDomAdapter.prototype.appendChild = /**
  37608. * @param {?} el
  37609. * @param {?} node
  37610. * @return {?}
  37611. */
  37612. function (el, node) { el.appendChild(node); };
  37613. /**
  37614. * @param {?} el
  37615. * @param {?} node
  37616. * @return {?}
  37617. */
  37618. BrowserDomAdapter.prototype.removeChild = /**
  37619. * @param {?} el
  37620. * @param {?} node
  37621. * @return {?}
  37622. */
  37623. function (el, node) { el.removeChild(node); };
  37624. /**
  37625. * @param {?} el
  37626. * @param {?} newChild
  37627. * @param {?} oldChild
  37628. * @return {?}
  37629. */
  37630. BrowserDomAdapter.prototype.replaceChild = /**
  37631. * @param {?} el
  37632. * @param {?} newChild
  37633. * @param {?} oldChild
  37634. * @return {?}
  37635. */
  37636. function (el, newChild, oldChild) { el.replaceChild(newChild, oldChild); };
  37637. /**
  37638. * @param {?} node
  37639. * @return {?}
  37640. */
  37641. BrowserDomAdapter.prototype.remove = /**
  37642. * @param {?} node
  37643. * @return {?}
  37644. */
  37645. function (node) {
  37646. if (node.parentNode) {
  37647. node.parentNode.removeChild(node);
  37648. }
  37649. return node;
  37650. };
  37651. /**
  37652. * @param {?} parent
  37653. * @param {?} ref
  37654. * @param {?} node
  37655. * @return {?}
  37656. */
  37657. BrowserDomAdapter.prototype.insertBefore = /**
  37658. * @param {?} parent
  37659. * @param {?} ref
  37660. * @param {?} node
  37661. * @return {?}
  37662. */
  37663. function (parent, ref, node) { parent.insertBefore(node, ref); };
  37664. /**
  37665. * @param {?} parent
  37666. * @param {?} ref
  37667. * @param {?} nodes
  37668. * @return {?}
  37669. */
  37670. BrowserDomAdapter.prototype.insertAllBefore = /**
  37671. * @param {?} parent
  37672. * @param {?} ref
  37673. * @param {?} nodes
  37674. * @return {?}
  37675. */
  37676. function (parent, ref, nodes) {
  37677. nodes.forEach(function (n) { return parent.insertBefore(n, ref); });
  37678. };
  37679. /**
  37680. * @param {?} parent
  37681. * @param {?} ref
  37682. * @param {?} node
  37683. * @return {?}
  37684. */
  37685. BrowserDomAdapter.prototype.insertAfter = /**
  37686. * @param {?} parent
  37687. * @param {?} ref
  37688. * @param {?} node
  37689. * @return {?}
  37690. */
  37691. function (parent, ref, node) { parent.insertBefore(node, ref.nextSibling); };
  37692. /**
  37693. * @param {?} el
  37694. * @param {?} value
  37695. * @return {?}
  37696. */
  37697. BrowserDomAdapter.prototype.setInnerHTML = /**
  37698. * @param {?} el
  37699. * @param {?} value
  37700. * @return {?}
  37701. */
  37702. function (el, value) { el.innerHTML = value; };
  37703. /**
  37704. * @param {?} el
  37705. * @return {?}
  37706. */
  37707. BrowserDomAdapter.prototype.getText = /**
  37708. * @param {?} el
  37709. * @return {?}
  37710. */
  37711. function (el) { return el.textContent; };
  37712. /**
  37713. * @param {?} el
  37714. * @param {?} value
  37715. * @return {?}
  37716. */
  37717. BrowserDomAdapter.prototype.setText = /**
  37718. * @param {?} el
  37719. * @param {?} value
  37720. * @return {?}
  37721. */
  37722. function (el, value) { el.textContent = value; };
  37723. /**
  37724. * @param {?} el
  37725. * @return {?}
  37726. */
  37727. BrowserDomAdapter.prototype.getValue = /**
  37728. * @param {?} el
  37729. * @return {?}
  37730. */
  37731. function (el) { return el.value; };
  37732. /**
  37733. * @param {?} el
  37734. * @param {?} value
  37735. * @return {?}
  37736. */
  37737. BrowserDomAdapter.prototype.setValue = /**
  37738. * @param {?} el
  37739. * @param {?} value
  37740. * @return {?}
  37741. */
  37742. function (el, value) { el.value = value; };
  37743. /**
  37744. * @param {?} el
  37745. * @return {?}
  37746. */
  37747. BrowserDomAdapter.prototype.getChecked = /**
  37748. * @param {?} el
  37749. * @return {?}
  37750. */
  37751. function (el) { return el.checked; };
  37752. /**
  37753. * @param {?} el
  37754. * @param {?} value
  37755. * @return {?}
  37756. */
  37757. BrowserDomAdapter.prototype.setChecked = /**
  37758. * @param {?} el
  37759. * @param {?} value
  37760. * @return {?}
  37761. */
  37762. function (el, value) { el.checked = value; };
  37763. /**
  37764. * @param {?} text
  37765. * @return {?}
  37766. */
  37767. BrowserDomAdapter.prototype.createComment = /**
  37768. * @param {?} text
  37769. * @return {?}
  37770. */
  37771. function (text) { return this.getDefaultDocument().createComment(text); };
  37772. /**
  37773. * @param {?} html
  37774. * @return {?}
  37775. */
  37776. BrowserDomAdapter.prototype.createTemplate = /**
  37777. * @param {?} html
  37778. * @return {?}
  37779. */
  37780. function (html) {
  37781. var /** @type {?} */ t = this.getDefaultDocument().createElement('template');
  37782. t.innerHTML = html;
  37783. return t;
  37784. };
  37785. /**
  37786. * @param {?} tagName
  37787. * @param {?=} doc
  37788. * @return {?}
  37789. */
  37790. BrowserDomAdapter.prototype.createElement = /**
  37791. * @param {?} tagName
  37792. * @param {?=} doc
  37793. * @return {?}
  37794. */
  37795. function (tagName, doc) {
  37796. doc = doc || this.getDefaultDocument();
  37797. return doc.createElement(tagName);
  37798. };
  37799. /**
  37800. * @param {?} ns
  37801. * @param {?} tagName
  37802. * @param {?=} doc
  37803. * @return {?}
  37804. */
  37805. BrowserDomAdapter.prototype.createElementNS = /**
  37806. * @param {?} ns
  37807. * @param {?} tagName
  37808. * @param {?=} doc
  37809. * @return {?}
  37810. */
  37811. function (ns, tagName, doc) {
  37812. doc = doc || this.getDefaultDocument();
  37813. return doc.createElementNS(ns, tagName);
  37814. };
  37815. /**
  37816. * @param {?} text
  37817. * @param {?=} doc
  37818. * @return {?}
  37819. */
  37820. BrowserDomAdapter.prototype.createTextNode = /**
  37821. * @param {?} text
  37822. * @param {?=} doc
  37823. * @return {?}
  37824. */
  37825. function (text, doc) {
  37826. doc = doc || this.getDefaultDocument();
  37827. return doc.createTextNode(text);
  37828. };
  37829. /**
  37830. * @param {?} attrName
  37831. * @param {?} attrValue
  37832. * @param {?=} doc
  37833. * @return {?}
  37834. */
  37835. BrowserDomAdapter.prototype.createScriptTag = /**
  37836. * @param {?} attrName
  37837. * @param {?} attrValue
  37838. * @param {?=} doc
  37839. * @return {?}
  37840. */
  37841. function (attrName, attrValue, doc) {
  37842. doc = doc || this.getDefaultDocument();
  37843. var /** @type {?} */ el = /** @type {?} */ (doc.createElement('SCRIPT'));
  37844. el.setAttribute(attrName, attrValue);
  37845. return el;
  37846. };
  37847. /**
  37848. * @param {?} css
  37849. * @param {?=} doc
  37850. * @return {?}
  37851. */
  37852. BrowserDomAdapter.prototype.createStyleElement = /**
  37853. * @param {?} css
  37854. * @param {?=} doc
  37855. * @return {?}
  37856. */
  37857. function (css, doc) {
  37858. doc = doc || this.getDefaultDocument();
  37859. var /** @type {?} */ style = /** @type {?} */ (doc.createElement('style'));
  37860. this.appendChild(style, this.createTextNode(css, doc));
  37861. return style;
  37862. };
  37863. /**
  37864. * @param {?} el
  37865. * @return {?}
  37866. */
  37867. BrowserDomAdapter.prototype.createShadowRoot = /**
  37868. * @param {?} el
  37869. * @return {?}
  37870. */
  37871. function (el) { return (/** @type {?} */ (el)).createShadowRoot(); };
  37872. /**
  37873. * @param {?} el
  37874. * @return {?}
  37875. */
  37876. BrowserDomAdapter.prototype.getShadowRoot = /**
  37877. * @param {?} el
  37878. * @return {?}
  37879. */
  37880. function (el) { return (/** @type {?} */ (el)).shadowRoot; };
  37881. /**
  37882. * @param {?} el
  37883. * @return {?}
  37884. */
  37885. BrowserDomAdapter.prototype.getHost = /**
  37886. * @param {?} el
  37887. * @return {?}
  37888. */
  37889. function (el) { return (/** @type {?} */ (el)).host; };
  37890. /**
  37891. * @param {?} node
  37892. * @return {?}
  37893. */
  37894. BrowserDomAdapter.prototype.clone = /**
  37895. * @param {?} node
  37896. * @return {?}
  37897. */
  37898. function (node) { return node.cloneNode(true); };
  37899. /**
  37900. * @param {?} element
  37901. * @param {?} name
  37902. * @return {?}
  37903. */
  37904. BrowserDomAdapter.prototype.getElementsByClassName = /**
  37905. * @param {?} element
  37906. * @param {?} name
  37907. * @return {?}
  37908. */
  37909. function (element, name) {
  37910. return element.getElementsByClassName(name);
  37911. };
  37912. /**
  37913. * @param {?} element
  37914. * @param {?} name
  37915. * @return {?}
  37916. */
  37917. BrowserDomAdapter.prototype.getElementsByTagName = /**
  37918. * @param {?} element
  37919. * @param {?} name
  37920. * @return {?}
  37921. */
  37922. function (element, name) {
  37923. return element.getElementsByTagName(name);
  37924. };
  37925. /**
  37926. * @param {?} element
  37927. * @return {?}
  37928. */
  37929. BrowserDomAdapter.prototype.classList = /**
  37930. * @param {?} element
  37931. * @return {?}
  37932. */
  37933. function (element) { return Array.prototype.slice.call(element.classList, 0); };
  37934. /**
  37935. * @param {?} element
  37936. * @param {?} className
  37937. * @return {?}
  37938. */
  37939. BrowserDomAdapter.prototype.addClass = /**
  37940. * @param {?} element
  37941. * @param {?} className
  37942. * @return {?}
  37943. */
  37944. function (element, className) { element.classList.add(className); };
  37945. /**
  37946. * @param {?} element
  37947. * @param {?} className
  37948. * @return {?}
  37949. */
  37950. BrowserDomAdapter.prototype.removeClass = /**
  37951. * @param {?} element
  37952. * @param {?} className
  37953. * @return {?}
  37954. */
  37955. function (element, className) { element.classList.remove(className); };
  37956. /**
  37957. * @param {?} element
  37958. * @param {?} className
  37959. * @return {?}
  37960. */
  37961. BrowserDomAdapter.prototype.hasClass = /**
  37962. * @param {?} element
  37963. * @param {?} className
  37964. * @return {?}
  37965. */
  37966. function (element, className) {
  37967. return element.classList.contains(className);
  37968. };
  37969. /**
  37970. * @param {?} element
  37971. * @param {?} styleName
  37972. * @param {?} styleValue
  37973. * @return {?}
  37974. */
  37975. BrowserDomAdapter.prototype.setStyle = /**
  37976. * @param {?} element
  37977. * @param {?} styleName
  37978. * @param {?} styleValue
  37979. * @return {?}
  37980. */
  37981. function (element, styleName, styleValue) {
  37982. element.style[styleName] = styleValue;
  37983. };
  37984. /**
  37985. * @param {?} element
  37986. * @param {?} stylename
  37987. * @return {?}
  37988. */
  37989. BrowserDomAdapter.prototype.removeStyle = /**
  37990. * @param {?} element
  37991. * @param {?} stylename
  37992. * @return {?}
  37993. */
  37994. function (element, stylename) {
  37995. // IE requires '' instead of null
  37996. // see https://github.com/angular/angular/issues/7916
  37997. element.style[stylename] = '';
  37998. };
  37999. /**
  38000. * @param {?} element
  38001. * @param {?} stylename
  38002. * @return {?}
  38003. */
  38004. BrowserDomAdapter.prototype.getStyle = /**
  38005. * @param {?} element
  38006. * @param {?} stylename
  38007. * @return {?}
  38008. */
  38009. function (element, stylename) { return element.style[stylename]; };
  38010. /**
  38011. * @param {?} element
  38012. * @param {?} styleName
  38013. * @param {?=} styleValue
  38014. * @return {?}
  38015. */
  38016. BrowserDomAdapter.prototype.hasStyle = /**
  38017. * @param {?} element
  38018. * @param {?} styleName
  38019. * @param {?=} styleValue
  38020. * @return {?}
  38021. */
  38022. function (element, styleName, styleValue) {
  38023. var /** @type {?} */ value = this.getStyle(element, styleName) || '';
  38024. return styleValue ? value == styleValue : value.length > 0;
  38025. };
  38026. /**
  38027. * @param {?} element
  38028. * @return {?}
  38029. */
  38030. BrowserDomAdapter.prototype.tagName = /**
  38031. * @param {?} element
  38032. * @return {?}
  38033. */
  38034. function (element) { return element.tagName; };
  38035. /**
  38036. * @param {?} element
  38037. * @return {?}
  38038. */
  38039. BrowserDomAdapter.prototype.attributeMap = /**
  38040. * @param {?} element
  38041. * @return {?}
  38042. */
  38043. function (element) {
  38044. var /** @type {?} */ res = new Map();
  38045. var /** @type {?} */ elAttrs = element.attributes;
  38046. for (var /** @type {?} */ i = 0; i < elAttrs.length; i++) {
  38047. var /** @type {?} */ attrib = elAttrs.item(i);
  38048. res.set(attrib.name, attrib.value);
  38049. }
  38050. return res;
  38051. };
  38052. /**
  38053. * @param {?} element
  38054. * @param {?} attribute
  38055. * @return {?}
  38056. */
  38057. BrowserDomAdapter.prototype.hasAttribute = /**
  38058. * @param {?} element
  38059. * @param {?} attribute
  38060. * @return {?}
  38061. */
  38062. function (element, attribute) {
  38063. return element.hasAttribute(attribute);
  38064. };
  38065. /**
  38066. * @param {?} element
  38067. * @param {?} ns
  38068. * @param {?} attribute
  38069. * @return {?}
  38070. */
  38071. BrowserDomAdapter.prototype.hasAttributeNS = /**
  38072. * @param {?} element
  38073. * @param {?} ns
  38074. * @param {?} attribute
  38075. * @return {?}
  38076. */
  38077. function (element, ns, attribute) {
  38078. return element.hasAttributeNS(ns, attribute);
  38079. };
  38080. /**
  38081. * @param {?} element
  38082. * @param {?} attribute
  38083. * @return {?}
  38084. */
  38085. BrowserDomAdapter.prototype.getAttribute = /**
  38086. * @param {?} element
  38087. * @param {?} attribute
  38088. * @return {?}
  38089. */
  38090. function (element, attribute) {
  38091. return element.getAttribute(attribute);
  38092. };
  38093. /**
  38094. * @param {?} element
  38095. * @param {?} ns
  38096. * @param {?} name
  38097. * @return {?}
  38098. */
  38099. BrowserDomAdapter.prototype.getAttributeNS = /**
  38100. * @param {?} element
  38101. * @param {?} ns
  38102. * @param {?} name
  38103. * @return {?}
  38104. */
  38105. function (element, ns, name) {
  38106. return element.getAttributeNS(ns, name);
  38107. };
  38108. /**
  38109. * @param {?} element
  38110. * @param {?} name
  38111. * @param {?} value
  38112. * @return {?}
  38113. */
  38114. BrowserDomAdapter.prototype.setAttribute = /**
  38115. * @param {?} element
  38116. * @param {?} name
  38117. * @param {?} value
  38118. * @return {?}
  38119. */
  38120. function (element, name, value) { element.setAttribute(name, value); };
  38121. /**
  38122. * @param {?} element
  38123. * @param {?} ns
  38124. * @param {?} name
  38125. * @param {?} value
  38126. * @return {?}
  38127. */
  38128. BrowserDomAdapter.prototype.setAttributeNS = /**
  38129. * @param {?} element
  38130. * @param {?} ns
  38131. * @param {?} name
  38132. * @param {?} value
  38133. * @return {?}
  38134. */
  38135. function (element, ns, name, value) {
  38136. element.setAttributeNS(ns, name, value);
  38137. };
  38138. /**
  38139. * @param {?} element
  38140. * @param {?} attribute
  38141. * @return {?}
  38142. */
  38143. BrowserDomAdapter.prototype.removeAttribute = /**
  38144. * @param {?} element
  38145. * @param {?} attribute
  38146. * @return {?}
  38147. */
  38148. function (element, attribute) { element.removeAttribute(attribute); };
  38149. /**
  38150. * @param {?} element
  38151. * @param {?} ns
  38152. * @param {?} name
  38153. * @return {?}
  38154. */
  38155. BrowserDomAdapter.prototype.removeAttributeNS = /**
  38156. * @param {?} element
  38157. * @param {?} ns
  38158. * @param {?} name
  38159. * @return {?}
  38160. */
  38161. function (element, ns, name) {
  38162. element.removeAttributeNS(ns, name);
  38163. };
  38164. /**
  38165. * @param {?} el
  38166. * @return {?}
  38167. */
  38168. BrowserDomAdapter.prototype.templateAwareRoot = /**
  38169. * @param {?} el
  38170. * @return {?}
  38171. */
  38172. function (el) { return this.isTemplateElement(el) ? this.content(el) : el; };
  38173. /**
  38174. * @return {?}
  38175. */
  38176. BrowserDomAdapter.prototype.createHtmlDocument = /**
  38177. * @return {?}
  38178. */
  38179. function () {
  38180. return document.implementation.createHTMLDocument('fakeTitle');
  38181. };
  38182. /**
  38183. * @return {?}
  38184. */
  38185. BrowserDomAdapter.prototype.getDefaultDocument = /**
  38186. * @return {?}
  38187. */
  38188. function () { return document; };
  38189. /**
  38190. * @param {?} el
  38191. * @return {?}
  38192. */
  38193. BrowserDomAdapter.prototype.getBoundingClientRect = /**
  38194. * @param {?} el
  38195. * @return {?}
  38196. */
  38197. function (el) {
  38198. try {
  38199. return el.getBoundingClientRect();
  38200. }
  38201. catch (/** @type {?} */ e) {
  38202. return { top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0 };
  38203. }
  38204. };
  38205. /**
  38206. * @param {?} doc
  38207. * @return {?}
  38208. */
  38209. BrowserDomAdapter.prototype.getTitle = /**
  38210. * @param {?} doc
  38211. * @return {?}
  38212. */
  38213. function (doc) { return doc.title; };
  38214. /**
  38215. * @param {?} doc
  38216. * @param {?} newTitle
  38217. * @return {?}
  38218. */
  38219. BrowserDomAdapter.prototype.setTitle = /**
  38220. * @param {?} doc
  38221. * @param {?} newTitle
  38222. * @return {?}
  38223. */
  38224. function (doc, newTitle) { doc.title = newTitle || ''; };
  38225. /**
  38226. * @param {?} n
  38227. * @param {?} selector
  38228. * @return {?}
  38229. */
  38230. BrowserDomAdapter.prototype.elementMatches = /**
  38231. * @param {?} n
  38232. * @param {?} selector
  38233. * @return {?}
  38234. */
  38235. function (n, selector) {
  38236. if (this.isElementNode(n)) {
  38237. return n.matches && n.matches(selector) ||
  38238. n.msMatchesSelector && n.msMatchesSelector(selector) ||
  38239. n.webkitMatchesSelector && n.webkitMatchesSelector(selector);
  38240. }
  38241. return false;
  38242. };
  38243. /**
  38244. * @param {?} el
  38245. * @return {?}
  38246. */
  38247. BrowserDomAdapter.prototype.isTemplateElement = /**
  38248. * @param {?} el
  38249. * @return {?}
  38250. */
  38251. function (el) {
  38252. return this.isElementNode(el) && el.nodeName === 'TEMPLATE';
  38253. };
  38254. /**
  38255. * @param {?} node
  38256. * @return {?}
  38257. */
  38258. BrowserDomAdapter.prototype.isTextNode = /**
  38259. * @param {?} node
  38260. * @return {?}
  38261. */
  38262. function (node) { return node.nodeType === Node.TEXT_NODE; };
  38263. /**
  38264. * @param {?} node
  38265. * @return {?}
  38266. */
  38267. BrowserDomAdapter.prototype.isCommentNode = /**
  38268. * @param {?} node
  38269. * @return {?}
  38270. */
  38271. function (node) { return node.nodeType === Node.COMMENT_NODE; };
  38272. /**
  38273. * @param {?} node
  38274. * @return {?}
  38275. */
  38276. BrowserDomAdapter.prototype.isElementNode = /**
  38277. * @param {?} node
  38278. * @return {?}
  38279. */
  38280. function (node) { return node.nodeType === Node.ELEMENT_NODE; };
  38281. /**
  38282. * @param {?} node
  38283. * @return {?}
  38284. */
  38285. BrowserDomAdapter.prototype.hasShadowRoot = /**
  38286. * @param {?} node
  38287. * @return {?}
  38288. */
  38289. function (node) {
  38290. return node.shadowRoot != null && node instanceof HTMLElement;
  38291. };
  38292. /**
  38293. * @param {?} node
  38294. * @return {?}
  38295. */
  38296. BrowserDomAdapter.prototype.isShadowRoot = /**
  38297. * @param {?} node
  38298. * @return {?}
  38299. */
  38300. function (node) { return node instanceof DocumentFragment; };
  38301. /**
  38302. * @param {?} node
  38303. * @return {?}
  38304. */
  38305. BrowserDomAdapter.prototype.importIntoDoc = /**
  38306. * @param {?} node
  38307. * @return {?}
  38308. */
  38309. function (node) { return document.importNode(this.templateAwareRoot(node), true); };
  38310. /**
  38311. * @param {?} node
  38312. * @return {?}
  38313. */
  38314. BrowserDomAdapter.prototype.adoptNode = /**
  38315. * @param {?} node
  38316. * @return {?}
  38317. */
  38318. function (node) { return document.adoptNode(node); };
  38319. /**
  38320. * @param {?} el
  38321. * @return {?}
  38322. */
  38323. BrowserDomAdapter.prototype.getHref = /**
  38324. * @param {?} el
  38325. * @return {?}
  38326. */
  38327. function (el) { return /** @type {?} */ ((el.getAttribute('href'))); };
  38328. /**
  38329. * @param {?} event
  38330. * @return {?}
  38331. */
  38332. BrowserDomAdapter.prototype.getEventKey = /**
  38333. * @param {?} event
  38334. * @return {?}
  38335. */
  38336. function (event) {
  38337. var /** @type {?} */ key = event.key;
  38338. if (key == null) {
  38339. key = event.keyIdentifier;
  38340. // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and
  38341. // Safari cf
  38342. // http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces
  38343. if (key == null) {
  38344. return 'Unidentified';
  38345. }
  38346. if (key.startsWith('U+')) {
  38347. key = String.fromCharCode(parseInt(key.substring(2), 16));
  38348. if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {
  38349. // There is a bug in Chrome for numeric keypad keys:
  38350. // https://code.google.com/p/chromium/issues/detail?id=155654
  38351. // 1, 2, 3 ... are reported as A, B, C ...
  38352. key = (/** @type {?} */ (_chromeNumKeyPadMap))[key];
  38353. }
  38354. }
  38355. }
  38356. return _keyMap[key] || key;
  38357. };
  38358. /**
  38359. * @param {?} doc
  38360. * @param {?} target
  38361. * @return {?}
  38362. */
  38363. BrowserDomAdapter.prototype.getGlobalEventTarget = /**
  38364. * @param {?} doc
  38365. * @param {?} target
  38366. * @return {?}
  38367. */
  38368. function (doc, target) {
  38369. if (target === 'window') {
  38370. return window;
  38371. }
  38372. if (target === 'document') {
  38373. return doc;
  38374. }
  38375. if (target === 'body') {
  38376. return doc.body;
  38377. }
  38378. return null;
  38379. };
  38380. /**
  38381. * @return {?}
  38382. */
  38383. BrowserDomAdapter.prototype.getHistory = /**
  38384. * @return {?}
  38385. */
  38386. function () { return window.history; };
  38387. /**
  38388. * @return {?}
  38389. */
  38390. BrowserDomAdapter.prototype.getLocation = /**
  38391. * @return {?}
  38392. */
  38393. function () { return window.location; };
  38394. /**
  38395. * @param {?} doc
  38396. * @return {?}
  38397. */
  38398. BrowserDomAdapter.prototype.getBaseHref = /**
  38399. * @param {?} doc
  38400. * @return {?}
  38401. */
  38402. function (doc) {
  38403. var /** @type {?} */ href = getBaseElementHref();
  38404. return href == null ? null : relativePath(href);
  38405. };
  38406. /**
  38407. * @return {?}
  38408. */
  38409. BrowserDomAdapter.prototype.resetBaseElement = /**
  38410. * @return {?}
  38411. */
  38412. function () { baseElement = null; };
  38413. /**
  38414. * @return {?}
  38415. */
  38416. BrowserDomAdapter.prototype.getUserAgent = /**
  38417. * @return {?}
  38418. */
  38419. function () { return window.navigator.userAgent; };
  38420. /**
  38421. * @param {?} element
  38422. * @param {?} name
  38423. * @param {?} value
  38424. * @return {?}
  38425. */
  38426. BrowserDomAdapter.prototype.setData = /**
  38427. * @param {?} element
  38428. * @param {?} name
  38429. * @param {?} value
  38430. * @return {?}
  38431. */
  38432. function (element, name, value) {
  38433. this.setAttribute(element, 'data-' + name, value);
  38434. };
  38435. /**
  38436. * @param {?} element
  38437. * @param {?} name
  38438. * @return {?}
  38439. */
  38440. BrowserDomAdapter.prototype.getData = /**
  38441. * @param {?} element
  38442. * @param {?} name
  38443. * @return {?}
  38444. */
  38445. function (element, name) {
  38446. return this.getAttribute(element, 'data-' + name);
  38447. };
  38448. /**
  38449. * @param {?} element
  38450. * @return {?}
  38451. */
  38452. BrowserDomAdapter.prototype.getComputedStyle = /**
  38453. * @param {?} element
  38454. * @return {?}
  38455. */
  38456. function (element) { return getComputedStyle(element); };
  38457. // TODO(tbosch): move this into a separate environment class once we have it
  38458. /**
  38459. * @return {?}
  38460. */
  38461. BrowserDomAdapter.prototype.supportsWebAnimation = /**
  38462. * @return {?}
  38463. */
  38464. function () {
  38465. return typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';
  38466. };
  38467. /**
  38468. * @return {?}
  38469. */
  38470. BrowserDomAdapter.prototype.performanceNow = /**
  38471. * @return {?}
  38472. */
  38473. function () {
  38474. // performance.now() is not available in all browsers, see
  38475. // http://caniuse.com/#search=performance.now
  38476. return window.performance && window.performance.now ? window.performance.now() :
  38477. new Date().getTime();
  38478. };
  38479. /**
  38480. * @return {?}
  38481. */
  38482. BrowserDomAdapter.prototype.supportsCookies = /**
  38483. * @return {?}
  38484. */
  38485. function () { return true; };
  38486. /**
  38487. * @param {?} name
  38488. * @return {?}
  38489. */
  38490. BrowserDomAdapter.prototype.getCookie = /**
  38491. * @param {?} name
  38492. * @return {?}
  38493. */
  38494. function (name) { return Object(__WEBPACK_IMPORTED_MODULE_0__angular_common__["j" /* ɵparseCookieValue */])(document.cookie, name); };
  38495. /**
  38496. * @param {?} name
  38497. * @param {?} value
  38498. * @return {?}
  38499. */
  38500. BrowserDomAdapter.prototype.setCookie = /**
  38501. * @param {?} name
  38502. * @param {?} value
  38503. * @return {?}
  38504. */
  38505. function (name, value) {
  38506. // document.cookie is magical, assigning into it assigns/overrides one cookie value, but does
  38507. // not clear other cookies.
  38508. document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);
  38509. };
  38510. return BrowserDomAdapter;
  38511. }(GenericBrowserDomAdapter));
  38512. var baseElement = null;
  38513. /**
  38514. * @return {?}
  38515. */
  38516. function getBaseElementHref() {
  38517. if (!baseElement) {
  38518. baseElement = /** @type {?} */ ((document.querySelector('base')));
  38519. if (!baseElement) {
  38520. return null;
  38521. }
  38522. }
  38523. return baseElement.getAttribute('href');
  38524. }
  38525. // based on urlUtils.js in AngularJS 1
  38526. var urlParsingNode;
  38527. /**
  38528. * @param {?} url
  38529. * @return {?}
  38530. */
  38531. function relativePath(url) {
  38532. if (!urlParsingNode) {
  38533. urlParsingNode = document.createElement('a');
  38534. }
  38535. urlParsingNode.setAttribute('href', url);
  38536. return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :
  38537. '/' + urlParsingNode.pathname;
  38538. }
  38539. /**
  38540. * @fileoverview added by tsickle
  38541. * @suppress {checkTypes} checked by tsc
  38542. */
  38543. /**
  38544. * @license
  38545. * Copyright Google Inc. All Rights Reserved.
  38546. *
  38547. * Use of this source code is governed by an MIT-style license that can be
  38548. * found in the LICENSE file at https://angular.io/license
  38549. */
  38550. /**
  38551. * A DI Token representing the main rendering context. In a browser this is the DOM Document.
  38552. *
  38553. * Note: Document might not be available in the Application Context when Application and Rendering
  38554. * Contexts are not the same (e.g. when running the application into a Web Worker).
  38555. *
  38556. * @deprecated import from `\@angular/common` instead.
  38557. */
  38558. var DOCUMENT$1 = __WEBPACK_IMPORTED_MODULE_0__angular_common__["c" /* DOCUMENT */];
  38559. /**
  38560. * @fileoverview added by tsickle
  38561. * @suppress {checkTypes} checked by tsc
  38562. */
  38563. /**
  38564. * @license
  38565. * Copyright Google Inc. All Rights Reserved.
  38566. *
  38567. * Use of this source code is governed by an MIT-style license that can be
  38568. * found in the LICENSE file at https://angular.io/license
  38569. */
  38570. /**
  38571. * @return {?}
  38572. */
  38573. function supportsState() {
  38574. return !!window.history.pushState;
  38575. }
  38576. /**
  38577. * @fileoverview added by tsickle
  38578. * @suppress {checkTypes} checked by tsc
  38579. */
  38580. /**
  38581. * @license
  38582. * Copyright Google Inc. All Rights Reserved.
  38583. *
  38584. * Use of this source code is governed by an MIT-style license that can be
  38585. * found in the LICENSE file at https://angular.io/license
  38586. */
  38587. /**
  38588. * `PlatformLocation` encapsulates all of the direct calls to platform APIs.
  38589. * This class should not be used directly by an application developer. Instead, use
  38590. * {\@link Location}.
  38591. */
  38592. var BrowserPlatformLocation = /** @class */ (function (_super) {
  38593. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(BrowserPlatformLocation, _super);
  38594. function BrowserPlatformLocation(_doc) {
  38595. var _this = _super.call(this) || this;
  38596. _this._doc = _doc;
  38597. _this._init();
  38598. return _this;
  38599. }
  38600. // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it
  38601. /** @internal */
  38602. /**
  38603. * \@internal
  38604. * @return {?}
  38605. */
  38606. BrowserPlatformLocation.prototype._init = /**
  38607. * \@internal
  38608. * @return {?}
  38609. */
  38610. function () {
  38611. (/** @type {?} */ (this)).location = getDOM().getLocation();
  38612. this._history = getDOM().getHistory();
  38613. };
  38614. /**
  38615. * @return {?}
  38616. */
  38617. BrowserPlatformLocation.prototype.getBaseHrefFromDOM = /**
  38618. * @return {?}
  38619. */
  38620. function () { return /** @type {?} */ ((getDOM().getBaseHref(this._doc))); };
  38621. /**
  38622. * @param {?} fn
  38623. * @return {?}
  38624. */
  38625. BrowserPlatformLocation.prototype.onPopState = /**
  38626. * @param {?} fn
  38627. * @return {?}
  38628. */
  38629. function (fn) {
  38630. getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);
  38631. };
  38632. /**
  38633. * @param {?} fn
  38634. * @return {?}
  38635. */
  38636. BrowserPlatformLocation.prototype.onHashChange = /**
  38637. * @param {?} fn
  38638. * @return {?}
  38639. */
  38640. function (fn) {
  38641. getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);
  38642. };
  38643. Object.defineProperty(BrowserPlatformLocation.prototype, "pathname", {
  38644. get: /**
  38645. * @return {?}
  38646. */
  38647. function () { return this.location.pathname; },
  38648. set: /**
  38649. * @param {?} newPath
  38650. * @return {?}
  38651. */
  38652. function (newPath) { this.location.pathname = newPath; },
  38653. enumerable: true,
  38654. configurable: true
  38655. });
  38656. Object.defineProperty(BrowserPlatformLocation.prototype, "search", {
  38657. get: /**
  38658. * @return {?}
  38659. */
  38660. function () { return this.location.search; },
  38661. enumerable: true,
  38662. configurable: true
  38663. });
  38664. Object.defineProperty(BrowserPlatformLocation.prototype, "hash", {
  38665. get: /**
  38666. * @return {?}
  38667. */
  38668. function () { return this.location.hash; },
  38669. enumerable: true,
  38670. configurable: true
  38671. });
  38672. /**
  38673. * @param {?} state
  38674. * @param {?} title
  38675. * @param {?} url
  38676. * @return {?}
  38677. */
  38678. BrowserPlatformLocation.prototype.pushState = /**
  38679. * @param {?} state
  38680. * @param {?} title
  38681. * @param {?} url
  38682. * @return {?}
  38683. */
  38684. function (state, title, url) {
  38685. if (supportsState()) {
  38686. this._history.pushState(state, title, url);
  38687. }
  38688. else {
  38689. this.location.hash = url;
  38690. }
  38691. };
  38692. /**
  38693. * @param {?} state
  38694. * @param {?} title
  38695. * @param {?} url
  38696. * @return {?}
  38697. */
  38698. BrowserPlatformLocation.prototype.replaceState = /**
  38699. * @param {?} state
  38700. * @param {?} title
  38701. * @param {?} url
  38702. * @return {?}
  38703. */
  38704. function (state, title, url) {
  38705. if (supportsState()) {
  38706. this._history.replaceState(state, title, url);
  38707. }
  38708. else {
  38709. this.location.hash = url;
  38710. }
  38711. };
  38712. /**
  38713. * @return {?}
  38714. */
  38715. BrowserPlatformLocation.prototype.forward = /**
  38716. * @return {?}
  38717. */
  38718. function () { this._history.forward(); };
  38719. /**
  38720. * @return {?}
  38721. */
  38722. BrowserPlatformLocation.prototype.back = /**
  38723. * @return {?}
  38724. */
  38725. function () { this._history.back(); };
  38726. BrowserPlatformLocation.decorators = [
  38727. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  38728. ];
  38729. /** @nocollapse */
  38730. BrowserPlatformLocation.ctorParameters = function () { return [
  38731. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  38732. ]; };
  38733. return BrowserPlatformLocation;
  38734. }(__WEBPACK_IMPORTED_MODULE_0__angular_common__["h" /* PlatformLocation */]));
  38735. /**
  38736. * @fileoverview added by tsickle
  38737. * @suppress {checkTypes} checked by tsc
  38738. */
  38739. /**
  38740. * @license
  38741. * Copyright Google Inc. All Rights Reserved.
  38742. *
  38743. * Use of this source code is governed by an MIT-style license that can be
  38744. * found in the LICENSE file at https://angular.io/license
  38745. */
  38746. /**
  38747. * A service that can be used to get and add meta tags.
  38748. *
  38749. * \@experimental
  38750. */
  38751. var Meta = /** @class */ (function () {
  38752. function Meta(_doc) {
  38753. this._doc = _doc;
  38754. this._dom = getDOM();
  38755. }
  38756. /**
  38757. * @param {?} tag
  38758. * @param {?=} forceCreation
  38759. * @return {?}
  38760. */
  38761. Meta.prototype.addTag = /**
  38762. * @param {?} tag
  38763. * @param {?=} forceCreation
  38764. * @return {?}
  38765. */
  38766. function (tag, forceCreation) {
  38767. if (forceCreation === void 0) { forceCreation = false; }
  38768. if (!tag)
  38769. return null;
  38770. return this._getOrCreateElement(tag, forceCreation);
  38771. };
  38772. /**
  38773. * @param {?} tags
  38774. * @param {?=} forceCreation
  38775. * @return {?}
  38776. */
  38777. Meta.prototype.addTags = /**
  38778. * @param {?} tags
  38779. * @param {?=} forceCreation
  38780. * @return {?}
  38781. */
  38782. function (tags, forceCreation) {
  38783. var _this = this;
  38784. if (forceCreation === void 0) { forceCreation = false; }
  38785. if (!tags)
  38786. return [];
  38787. return tags.reduce(function (result, tag) {
  38788. if (tag) {
  38789. result.push(_this._getOrCreateElement(tag, forceCreation));
  38790. }
  38791. return result;
  38792. }, []);
  38793. };
  38794. /**
  38795. * @param {?} attrSelector
  38796. * @return {?}
  38797. */
  38798. Meta.prototype.getTag = /**
  38799. * @param {?} attrSelector
  38800. * @return {?}
  38801. */
  38802. function (attrSelector) {
  38803. if (!attrSelector)
  38804. return null;
  38805. return this._dom.querySelector(this._doc, "meta[" + attrSelector + "]") || null;
  38806. };
  38807. /**
  38808. * @param {?} attrSelector
  38809. * @return {?}
  38810. */
  38811. Meta.prototype.getTags = /**
  38812. * @param {?} attrSelector
  38813. * @return {?}
  38814. */
  38815. function (attrSelector) {
  38816. if (!attrSelector)
  38817. return [];
  38818. var /** @type {?} */ list = this._dom.querySelectorAll(this._doc, "meta[" + attrSelector + "]");
  38819. return list ? [].slice.call(list) : [];
  38820. };
  38821. /**
  38822. * @param {?} tag
  38823. * @param {?=} selector
  38824. * @return {?}
  38825. */
  38826. Meta.prototype.updateTag = /**
  38827. * @param {?} tag
  38828. * @param {?=} selector
  38829. * @return {?}
  38830. */
  38831. function (tag, selector) {
  38832. if (!tag)
  38833. return null;
  38834. selector = selector || this._parseSelector(tag);
  38835. var /** @type {?} */ meta = /** @type {?} */ ((this.getTag(selector)));
  38836. if (meta) {
  38837. return this._setMetaElementAttributes(tag, meta);
  38838. }
  38839. return this._getOrCreateElement(tag, true);
  38840. };
  38841. /**
  38842. * @param {?} attrSelector
  38843. * @return {?}
  38844. */
  38845. Meta.prototype.removeTag = /**
  38846. * @param {?} attrSelector
  38847. * @return {?}
  38848. */
  38849. function (attrSelector) { this.removeTagElement(/** @type {?} */ ((this.getTag(attrSelector)))); };
  38850. /**
  38851. * @param {?} meta
  38852. * @return {?}
  38853. */
  38854. Meta.prototype.removeTagElement = /**
  38855. * @param {?} meta
  38856. * @return {?}
  38857. */
  38858. function (meta) {
  38859. if (meta) {
  38860. this._dom.remove(meta);
  38861. }
  38862. };
  38863. /**
  38864. * @param {?} meta
  38865. * @param {?=} forceCreation
  38866. * @return {?}
  38867. */
  38868. Meta.prototype._getOrCreateElement = /**
  38869. * @param {?} meta
  38870. * @param {?=} forceCreation
  38871. * @return {?}
  38872. */
  38873. function (meta, forceCreation) {
  38874. if (forceCreation === void 0) { forceCreation = false; }
  38875. if (!forceCreation) {
  38876. var /** @type {?} */ selector = this._parseSelector(meta);
  38877. var /** @type {?} */ elem = /** @type {?} */ ((this.getTag(selector)));
  38878. // It's allowed to have multiple elements with the same name so it's not enough to
  38879. // just check that element with the same name already present on the page. We also need to
  38880. // check if element has tag attributes
  38881. if (elem && this._containsAttributes(meta, elem))
  38882. return elem;
  38883. }
  38884. var /** @type {?} */ element = /** @type {?} */ (this._dom.createElement('meta'));
  38885. this._setMetaElementAttributes(meta, element);
  38886. var /** @type {?} */ head = this._dom.getElementsByTagName(this._doc, 'head')[0];
  38887. this._dom.appendChild(head, element);
  38888. return element;
  38889. };
  38890. /**
  38891. * @param {?} tag
  38892. * @param {?} el
  38893. * @return {?}
  38894. */
  38895. Meta.prototype._setMetaElementAttributes = /**
  38896. * @param {?} tag
  38897. * @param {?} el
  38898. * @return {?}
  38899. */
  38900. function (tag, el) {
  38901. var _this = this;
  38902. Object.keys(tag).forEach(function (prop) { return _this._dom.setAttribute(el, prop, tag[prop]); });
  38903. return el;
  38904. };
  38905. /**
  38906. * @param {?} tag
  38907. * @return {?}
  38908. */
  38909. Meta.prototype._parseSelector = /**
  38910. * @param {?} tag
  38911. * @return {?}
  38912. */
  38913. function (tag) {
  38914. var /** @type {?} */ attr = tag.name ? 'name' : 'property';
  38915. return attr + "=\"" + tag[attr] + "\"";
  38916. };
  38917. /**
  38918. * @param {?} tag
  38919. * @param {?} elem
  38920. * @return {?}
  38921. */
  38922. Meta.prototype._containsAttributes = /**
  38923. * @param {?} tag
  38924. * @param {?} elem
  38925. * @return {?}
  38926. */
  38927. function (tag, elem) {
  38928. var _this = this;
  38929. return Object.keys(tag).every(function (key) { return _this._dom.getAttribute(elem, key) === tag[key]; });
  38930. };
  38931. Meta.decorators = [
  38932. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  38933. ];
  38934. /** @nocollapse */
  38935. Meta.ctorParameters = function () { return [
  38936. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  38937. ]; };
  38938. return Meta;
  38939. }());
  38940. /**
  38941. * @fileoverview added by tsickle
  38942. * @suppress {checkTypes} checked by tsc
  38943. */
  38944. /**
  38945. * @license
  38946. * Copyright Google Inc. All Rights Reserved.
  38947. *
  38948. * Use of this source code is governed by an MIT-style license that can be
  38949. * found in the LICENSE file at https://angular.io/license
  38950. */
  38951. /**
  38952. * An id that identifies a particular application being bootstrapped, that should
  38953. * match across the client/server boundary.
  38954. */
  38955. var TRANSITION_ID = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('TRANSITION_ID');
  38956. /**
  38957. * @param {?} transitionId
  38958. * @param {?} document
  38959. * @param {?} injector
  38960. * @return {?}
  38961. */
  38962. function appInitializerFactory(transitionId, document, injector) {
  38963. return function () {
  38964. // Wait for all application initializers to be completed before removing the styles set by
  38965. // the server.
  38966. injector.get(__WEBPACK_IMPORTED_MODULE_1__angular_core__["d" /* ApplicationInitStatus */]).donePromise.then(function () {
  38967. var /** @type {?} */ dom = getDOM();
  38968. var /** @type {?} */ styles = Array.prototype.slice.apply(dom.querySelectorAll(document, "style[ng-transition]"));
  38969. styles.filter(function (el) { return dom.getAttribute(el, 'ng-transition') === transitionId; })
  38970. .forEach(function (el) { return dom.remove(el); });
  38971. });
  38972. };
  38973. }
  38974. var SERVER_TRANSITION_PROVIDERS = [
  38975. {
  38976. provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["c" /* APP_INITIALIZER */],
  38977. useFactory: appInitializerFactory,
  38978. deps: [TRANSITION_ID, DOCUMENT$1, __WEBPACK_IMPORTED_MODULE_1__angular_core__["C" /* Injector */]],
  38979. multi: true
  38980. },
  38981. ];
  38982. /**
  38983. * @fileoverview added by tsickle
  38984. * @suppress {checkTypes} checked by tsc
  38985. */
  38986. /**
  38987. * @license
  38988. * Copyright Google Inc. All Rights Reserved.
  38989. *
  38990. * Use of this source code is governed by an MIT-style license that can be
  38991. * found in the LICENSE file at https://angular.io/license
  38992. */
  38993. var BrowserGetTestability = /** @class */ (function () {
  38994. function BrowserGetTestability() {
  38995. }
  38996. /**
  38997. * @return {?}
  38998. */
  38999. BrowserGetTestability.init = /**
  39000. * @return {?}
  39001. */
  39002. function () { Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_18" /* setTestabilityGetter */])(new BrowserGetTestability()); };
  39003. /**
  39004. * @param {?} registry
  39005. * @return {?}
  39006. */
  39007. BrowserGetTestability.prototype.addToWindow = /**
  39008. * @param {?} registry
  39009. * @return {?}
  39010. */
  39011. function (registry) {
  39012. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['getAngularTestability'] = function (elem, findInAncestors) {
  39013. if (findInAncestors === void 0) { findInAncestors = true; }
  39014. var /** @type {?} */ testability = registry.findTestabilityInTree(elem, findInAncestors);
  39015. if (testability == null) {
  39016. throw new Error('Could not find testability for element.');
  39017. }
  39018. return testability;
  39019. };
  39020. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['getAllAngularTestabilities'] = function () { return registry.getAllTestabilities(); };
  39021. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['getAllAngularRootElements'] = function () { return registry.getAllRootElements(); };
  39022. var /** @type {?} */ whenAllStable = function (callback /** TODO #9100 */) {
  39023. var /** @type {?} */ testabilities = __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['getAllAngularTestabilities']();
  39024. var /** @type {?} */ count = testabilities.length;
  39025. var /** @type {?} */ didWork = false;
  39026. var /** @type {?} */ decrement = function (didWork_ /** TODO #9100 */) {
  39027. didWork = didWork || didWork_;
  39028. count--;
  39029. if (count == 0) {
  39030. callback(didWork);
  39031. }
  39032. };
  39033. testabilities.forEach(function (testability /** TODO #9100 */) {
  39034. testability.whenStable(decrement);
  39035. });
  39036. };
  39037. if (!__WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['frameworkStabilizers']) {
  39038. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['frameworkStabilizers'] = [];
  39039. }
  39040. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['frameworkStabilizers'].push(whenAllStable);
  39041. };
  39042. /**
  39043. * @param {?} registry
  39044. * @param {?} elem
  39045. * @param {?} findInAncestors
  39046. * @return {?}
  39047. */
  39048. BrowserGetTestability.prototype.findTestabilityInTree = /**
  39049. * @param {?} registry
  39050. * @param {?} elem
  39051. * @param {?} findInAncestors
  39052. * @return {?}
  39053. */
  39054. function (registry, elem, findInAncestors) {
  39055. if (elem == null) {
  39056. return null;
  39057. }
  39058. var /** @type {?} */ t = registry.getTestability(elem);
  39059. if (t != null) {
  39060. return t;
  39061. }
  39062. else if (!findInAncestors) {
  39063. return null;
  39064. }
  39065. if (getDOM().isShadowRoot(elem)) {
  39066. return this.findTestabilityInTree(registry, getDOM().getHost(elem), true);
  39067. }
  39068. return this.findTestabilityInTree(registry, getDOM().parentElement(elem), true);
  39069. };
  39070. return BrowserGetTestability;
  39071. }());
  39072. /**
  39073. * @fileoverview added by tsickle
  39074. * @suppress {checkTypes} checked by tsc
  39075. */
  39076. /**
  39077. * @license
  39078. * Copyright Google Inc. All Rights Reserved.
  39079. *
  39080. * Use of this source code is governed by an MIT-style license that can be
  39081. * found in the LICENSE file at https://angular.io/license
  39082. */
  39083. /**
  39084. * A service that can be used to get and set the title of a current HTML document.
  39085. *
  39086. * Since an Angular application can't be bootstrapped on the entire HTML document (`<html>` tag)
  39087. * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements
  39088. * (representing the `<title>` tag). Instead, this service can be used to set and get the current
  39089. * title value.
  39090. *
  39091. * \@experimental
  39092. */
  39093. var Title = /** @class */ (function () {
  39094. function Title(_doc) {
  39095. this._doc = _doc;
  39096. }
  39097. /**
  39098. * Get the title of the current HTML document.
  39099. */
  39100. /**
  39101. * Get the title of the current HTML document.
  39102. * @return {?}
  39103. */
  39104. Title.prototype.getTitle = /**
  39105. * Get the title of the current HTML document.
  39106. * @return {?}
  39107. */
  39108. function () { return getDOM().getTitle(this._doc); };
  39109. /**
  39110. * Set the title of the current HTML document.
  39111. * @param newTitle
  39112. */
  39113. /**
  39114. * Set the title of the current HTML document.
  39115. * @param {?} newTitle
  39116. * @return {?}
  39117. */
  39118. Title.prototype.setTitle = /**
  39119. * Set the title of the current HTML document.
  39120. * @param {?} newTitle
  39121. * @return {?}
  39122. */
  39123. function (newTitle) { getDOM().setTitle(this._doc, newTitle); };
  39124. Title.decorators = [
  39125. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  39126. ];
  39127. /** @nocollapse */
  39128. Title.ctorParameters = function () { return [
  39129. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  39130. ]; };
  39131. return Title;
  39132. }());
  39133. /**
  39134. * @fileoverview added by tsickle
  39135. * @suppress {checkTypes} checked by tsc
  39136. */
  39137. /**
  39138. * @license
  39139. * Copyright Google Inc. All Rights Reserved.
  39140. *
  39141. * Use of this source code is governed by an MIT-style license that can be
  39142. * found in the LICENSE file at https://angular.io/license
  39143. */
  39144. /**
  39145. * @param {?} input
  39146. * @return {?}
  39147. */
  39148. /**
  39149. * @param {?} input
  39150. * @return {?}
  39151. */
  39152. /**
  39153. * Exports the value under a given `name` in the global property `ng`. For example `ng.probe` if
  39154. * `name` is `'probe'`.
  39155. * @param {?} name Name under which it will be exported. Keep in mind this will be a property of the
  39156. * global `ng` object.
  39157. * @param {?} value The value to export.
  39158. * @return {?}
  39159. */
  39160. function exportNgVar(name, value) {
  39161. if (typeof COMPILED === 'undefined' || !COMPILED) {
  39162. // Note: we can't export `ng` when using closure enhanced optimization as:
  39163. // - closure declares globals itself for minified names, which sometimes clobber our `ng` global
  39164. // - we can't declare a closure extern as the namespace `ng` is already used within Google
  39165. // for typings for angularJS (via `goog.provide('ng....')`).
  39166. var /** @type {?} */ ng = __WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['ng'] = (/** @type {?} */ (__WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */]['ng'])) || {};
  39167. ng[name] = value;
  39168. }
  39169. }
  39170. /**
  39171. * @fileoverview added by tsickle
  39172. * @suppress {checkTypes} checked by tsc
  39173. */
  39174. /**
  39175. * @license
  39176. * Copyright Google Inc. All Rights Reserved.
  39177. *
  39178. * Use of this source code is governed by an MIT-style license that can be
  39179. * found in the LICENSE file at https://angular.io/license
  39180. */
  39181. var CORE_TOKENS = {
  39182. 'ApplicationRef': __WEBPACK_IMPORTED_MODULE_1__angular_core__["f" /* ApplicationRef */],
  39183. 'NgZone': __WEBPACK_IMPORTED_MODULE_1__angular_core__["M" /* NgZone */],
  39184. };
  39185. var INSPECT_GLOBAL_NAME = 'probe';
  39186. var CORE_TOKENS_GLOBAL_NAME = 'coreTokens';
  39187. /**
  39188. * Returns a {\@link DebugElement} for the given native DOM element, or
  39189. * null if the given native element does not have an Angular view associated
  39190. * with it.
  39191. * @param {?} element
  39192. * @return {?}
  39193. */
  39194. function inspectNativeElement(element) {
  39195. return Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_15" /* getDebugNode */])(element);
  39196. }
  39197. /**
  39198. * @param {?} coreTokens
  39199. * @return {?}
  39200. */
  39201. function _createNgProbe(coreTokens) {
  39202. exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElement);
  39203. exportNgVar(CORE_TOKENS_GLOBAL_NAME, Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["a" /* __assign */])({}, CORE_TOKENS, _ngProbeTokensToMap(coreTokens || [])));
  39204. return function () { return inspectNativeElement; };
  39205. }
  39206. /**
  39207. * @param {?} tokens
  39208. * @return {?}
  39209. */
  39210. function _ngProbeTokensToMap(tokens) {
  39211. return tokens.reduce(function (prev, t) { return (prev[t.name] = t.token, prev); }, {});
  39212. }
  39213. /**
  39214. * Providers which support debugging Angular applications (e.g. via `ng.probe`).
  39215. */
  39216. var ELEMENT_PROBE_PROVIDERS = [
  39217. {
  39218. provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["c" /* APP_INITIALIZER */],
  39219. useFactory: _createNgProbe,
  39220. deps: [
  39221. [__WEBPACK_IMPORTED_MODULE_1__angular_core__["L" /* NgProbeToken */], new __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */]()],
  39222. ],
  39223. multi: true,
  39224. },
  39225. ];
  39226. /**
  39227. * @fileoverview added by tsickle
  39228. * @suppress {checkTypes} checked by tsc
  39229. */
  39230. /**
  39231. * @license
  39232. * Copyright Google Inc. All Rights Reserved.
  39233. *
  39234. * Use of this source code is governed by an MIT-style license that can be
  39235. * found in the LICENSE file at https://angular.io/license
  39236. */
  39237. /**
  39238. * \@stable
  39239. */
  39240. var EVENT_MANAGER_PLUGINS = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('EventManagerPlugins');
  39241. /**
  39242. * \@stable
  39243. */
  39244. var EventManager = /** @class */ (function () {
  39245. function EventManager(plugins, _zone) {
  39246. var _this = this;
  39247. this._zone = _zone;
  39248. this._eventNameToPlugin = new Map();
  39249. plugins.forEach(function (p) { return p.manager = _this; });
  39250. this._plugins = plugins.slice().reverse();
  39251. }
  39252. /**
  39253. * @param {?} element
  39254. * @param {?} eventName
  39255. * @param {?} handler
  39256. * @return {?}
  39257. */
  39258. EventManager.prototype.addEventListener = /**
  39259. * @param {?} element
  39260. * @param {?} eventName
  39261. * @param {?} handler
  39262. * @return {?}
  39263. */
  39264. function (element, eventName, handler) {
  39265. var /** @type {?} */ plugin = this._findPluginFor(eventName);
  39266. return plugin.addEventListener(element, eventName, handler);
  39267. };
  39268. /**
  39269. * @param {?} target
  39270. * @param {?} eventName
  39271. * @param {?} handler
  39272. * @return {?}
  39273. */
  39274. EventManager.prototype.addGlobalEventListener = /**
  39275. * @param {?} target
  39276. * @param {?} eventName
  39277. * @param {?} handler
  39278. * @return {?}
  39279. */
  39280. function (target, eventName, handler) {
  39281. var /** @type {?} */ plugin = this._findPluginFor(eventName);
  39282. return plugin.addGlobalEventListener(target, eventName, handler);
  39283. };
  39284. /**
  39285. * @return {?}
  39286. */
  39287. EventManager.prototype.getZone = /**
  39288. * @return {?}
  39289. */
  39290. function () { return this._zone; };
  39291. /** @internal */
  39292. /**
  39293. * \@internal
  39294. * @param {?} eventName
  39295. * @return {?}
  39296. */
  39297. EventManager.prototype._findPluginFor = /**
  39298. * \@internal
  39299. * @param {?} eventName
  39300. * @return {?}
  39301. */
  39302. function (eventName) {
  39303. var /** @type {?} */ plugin = this._eventNameToPlugin.get(eventName);
  39304. if (plugin) {
  39305. return plugin;
  39306. }
  39307. var /** @type {?} */ plugins = this._plugins;
  39308. for (var /** @type {?} */ i = 0; i < plugins.length; i++) {
  39309. var /** @type {?} */ plugin_1 = plugins[i];
  39310. if (plugin_1.supports(eventName)) {
  39311. this._eventNameToPlugin.set(eventName, plugin_1);
  39312. return plugin_1;
  39313. }
  39314. }
  39315. throw new Error("No event manager plugin found for event " + eventName);
  39316. };
  39317. EventManager.decorators = [
  39318. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  39319. ];
  39320. /** @nocollapse */
  39321. EventManager.ctorParameters = function () { return [
  39322. { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [EVENT_MANAGER_PLUGINS,] },] },
  39323. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["M" /* NgZone */], },
  39324. ]; };
  39325. return EventManager;
  39326. }());
  39327. /**
  39328. * @abstract
  39329. */
  39330. var EventManagerPlugin = /** @class */ (function () {
  39331. function EventManagerPlugin(_doc) {
  39332. this._doc = _doc;
  39333. }
  39334. /**
  39335. * @param {?} element
  39336. * @param {?} eventName
  39337. * @param {?} handler
  39338. * @return {?}
  39339. */
  39340. EventManagerPlugin.prototype.addGlobalEventListener = /**
  39341. * @param {?} element
  39342. * @param {?} eventName
  39343. * @param {?} handler
  39344. * @return {?}
  39345. */
  39346. function (element, eventName, handler) {
  39347. var /** @type {?} */ target = getDOM().getGlobalEventTarget(this._doc, element);
  39348. if (!target) {
  39349. throw new Error("Unsupported event target " + target + " for event " + eventName);
  39350. }
  39351. return this.addEventListener(target, eventName, handler);
  39352. };
  39353. return EventManagerPlugin;
  39354. }());
  39355. /**
  39356. * @fileoverview added by tsickle
  39357. * @suppress {checkTypes} checked by tsc
  39358. */
  39359. /**
  39360. * @license
  39361. * Copyright Google Inc. All Rights Reserved.
  39362. *
  39363. * Use of this source code is governed by an MIT-style license that can be
  39364. * found in the LICENSE file at https://angular.io/license
  39365. */
  39366. var SharedStylesHost = /** @class */ (function () {
  39367. function SharedStylesHost() {
  39368. /**
  39369. * \@internal
  39370. */
  39371. this._stylesSet = new Set();
  39372. }
  39373. /**
  39374. * @param {?} styles
  39375. * @return {?}
  39376. */
  39377. SharedStylesHost.prototype.addStyles = /**
  39378. * @param {?} styles
  39379. * @return {?}
  39380. */
  39381. function (styles) {
  39382. var _this = this;
  39383. var /** @type {?} */ additions = new Set();
  39384. styles.forEach(function (style) {
  39385. if (!_this._stylesSet.has(style)) {
  39386. _this._stylesSet.add(style);
  39387. additions.add(style);
  39388. }
  39389. });
  39390. this.onStylesAdded(additions);
  39391. };
  39392. /**
  39393. * @param {?} additions
  39394. * @return {?}
  39395. */
  39396. SharedStylesHost.prototype.onStylesAdded = /**
  39397. * @param {?} additions
  39398. * @return {?}
  39399. */
  39400. function (additions) { };
  39401. /**
  39402. * @return {?}
  39403. */
  39404. SharedStylesHost.prototype.getAllStyles = /**
  39405. * @return {?}
  39406. */
  39407. function () { return Array.from(this._stylesSet); };
  39408. SharedStylesHost.decorators = [
  39409. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  39410. ];
  39411. /** @nocollapse */
  39412. SharedStylesHost.ctorParameters = function () { return []; };
  39413. return SharedStylesHost;
  39414. }());
  39415. var DomSharedStylesHost = /** @class */ (function (_super) {
  39416. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(DomSharedStylesHost, _super);
  39417. function DomSharedStylesHost(_doc) {
  39418. var _this = _super.call(this) || this;
  39419. _this._doc = _doc;
  39420. _this._hostNodes = new Set();
  39421. _this._styleNodes = new Set();
  39422. _this._hostNodes.add(_doc.head);
  39423. return _this;
  39424. }
  39425. /**
  39426. * @param {?} styles
  39427. * @param {?} host
  39428. * @return {?}
  39429. */
  39430. DomSharedStylesHost.prototype._addStylesToHost = /**
  39431. * @param {?} styles
  39432. * @param {?} host
  39433. * @return {?}
  39434. */
  39435. function (styles, host) {
  39436. var _this = this;
  39437. styles.forEach(function (style) {
  39438. var /** @type {?} */ styleEl = _this._doc.createElement('style');
  39439. styleEl.textContent = style;
  39440. _this._styleNodes.add(host.appendChild(styleEl));
  39441. });
  39442. };
  39443. /**
  39444. * @param {?} hostNode
  39445. * @return {?}
  39446. */
  39447. DomSharedStylesHost.prototype.addHost = /**
  39448. * @param {?} hostNode
  39449. * @return {?}
  39450. */
  39451. function (hostNode) {
  39452. this._addStylesToHost(this._stylesSet, hostNode);
  39453. this._hostNodes.add(hostNode);
  39454. };
  39455. /**
  39456. * @param {?} hostNode
  39457. * @return {?}
  39458. */
  39459. DomSharedStylesHost.prototype.removeHost = /**
  39460. * @param {?} hostNode
  39461. * @return {?}
  39462. */
  39463. function (hostNode) { this._hostNodes.delete(hostNode); };
  39464. /**
  39465. * @param {?} additions
  39466. * @return {?}
  39467. */
  39468. DomSharedStylesHost.prototype.onStylesAdded = /**
  39469. * @param {?} additions
  39470. * @return {?}
  39471. */
  39472. function (additions) {
  39473. var _this = this;
  39474. this._hostNodes.forEach(function (hostNode) { return _this._addStylesToHost(additions, hostNode); });
  39475. };
  39476. /**
  39477. * @return {?}
  39478. */
  39479. DomSharedStylesHost.prototype.ngOnDestroy = /**
  39480. * @return {?}
  39481. */
  39482. function () { this._styleNodes.forEach(function (styleNode) { return getDOM().remove(styleNode); }); };
  39483. DomSharedStylesHost.decorators = [
  39484. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  39485. ];
  39486. /** @nocollapse */
  39487. DomSharedStylesHost.ctorParameters = function () { return [
  39488. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  39489. ]; };
  39490. return DomSharedStylesHost;
  39491. }(SharedStylesHost));
  39492. /**
  39493. * @fileoverview added by tsickle
  39494. * @suppress {checkTypes} checked by tsc
  39495. */
  39496. /**
  39497. * @license
  39498. * Copyright Google Inc. All Rights Reserved.
  39499. *
  39500. * Use of this source code is governed by an MIT-style license that can be
  39501. * found in the LICENSE file at https://angular.io/license
  39502. */
  39503. var NAMESPACE_URIS = {
  39504. 'svg': 'http://www.w3.org/2000/svg',
  39505. 'xhtml': 'http://www.w3.org/1999/xhtml',
  39506. 'xlink': 'http://www.w3.org/1999/xlink',
  39507. 'xml': 'http://www.w3.org/XML/1998/namespace',
  39508. 'xmlns': 'http://www.w3.org/2000/xmlns/',
  39509. };
  39510. var COMPONENT_REGEX = /%COMP%/g;
  39511. var COMPONENT_VARIABLE = '%COMP%';
  39512. var HOST_ATTR = "_nghost-" + COMPONENT_VARIABLE;
  39513. var CONTENT_ATTR = "_ngcontent-" + COMPONENT_VARIABLE;
  39514. /**
  39515. * @param {?} componentShortId
  39516. * @return {?}
  39517. */
  39518. function shimContentAttribute(componentShortId) {
  39519. return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);
  39520. }
  39521. /**
  39522. * @param {?} componentShortId
  39523. * @return {?}
  39524. */
  39525. function shimHostAttribute(componentShortId) {
  39526. return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);
  39527. }
  39528. /**
  39529. * @param {?} compId
  39530. * @param {?} styles
  39531. * @param {?} target
  39532. * @return {?}
  39533. */
  39534. function flattenStyles(compId, styles, target) {
  39535. for (var /** @type {?} */ i = 0; i < styles.length; i++) {
  39536. var /** @type {?} */ style = styles[i];
  39537. if (Array.isArray(style)) {
  39538. flattenStyles(compId, style, target);
  39539. }
  39540. else {
  39541. style = style.replace(COMPONENT_REGEX, compId);
  39542. target.push(style);
  39543. }
  39544. }
  39545. return target;
  39546. }
  39547. /**
  39548. * @param {?} eventHandler
  39549. * @return {?}
  39550. */
  39551. function decoratePreventDefault(eventHandler) {
  39552. return function (event) {
  39553. var /** @type {?} */ allowDefaultBehavior = eventHandler(event);
  39554. if (allowDefaultBehavior === false) {
  39555. // TODO(tbosch): move preventDefault into event plugins...
  39556. event.preventDefault();
  39557. event.returnValue = false;
  39558. }
  39559. };
  39560. }
  39561. var DomRendererFactory2 = /** @class */ (function () {
  39562. function DomRendererFactory2(eventManager, sharedStylesHost) {
  39563. this.eventManager = eventManager;
  39564. this.sharedStylesHost = sharedStylesHost;
  39565. this.rendererByCompId = new Map();
  39566. this.defaultRenderer = new DefaultDomRenderer2(eventManager);
  39567. }
  39568. /**
  39569. * @param {?} element
  39570. * @param {?} type
  39571. * @return {?}
  39572. */
  39573. DomRendererFactory2.prototype.createRenderer = /**
  39574. * @param {?} element
  39575. * @param {?} type
  39576. * @return {?}
  39577. */
  39578. function (element, type) {
  39579. if (!element || !type) {
  39580. return this.defaultRenderer;
  39581. }
  39582. switch (type.encapsulation) {
  39583. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_11" /* ViewEncapsulation */].Emulated: {
  39584. var /** @type {?} */ renderer = this.rendererByCompId.get(type.id);
  39585. if (!renderer) {
  39586. renderer =
  39587. new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type);
  39588. this.rendererByCompId.set(type.id, renderer);
  39589. }
  39590. (/** @type {?} */ (renderer)).applyToHost(element);
  39591. return renderer;
  39592. }
  39593. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_11" /* ViewEncapsulation */].Native:
  39594. return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);
  39595. default: {
  39596. if (!this.rendererByCompId.has(type.id)) {
  39597. var /** @type {?} */ styles = flattenStyles(type.id, type.styles, []);
  39598. this.sharedStylesHost.addStyles(styles);
  39599. this.rendererByCompId.set(type.id, this.defaultRenderer);
  39600. }
  39601. return this.defaultRenderer;
  39602. }
  39603. }
  39604. };
  39605. /**
  39606. * @return {?}
  39607. */
  39608. DomRendererFactory2.prototype.begin = /**
  39609. * @return {?}
  39610. */
  39611. function () { };
  39612. /**
  39613. * @return {?}
  39614. */
  39615. DomRendererFactory2.prototype.end = /**
  39616. * @return {?}
  39617. */
  39618. function () { };
  39619. DomRendererFactory2.decorators = [
  39620. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  39621. ];
  39622. /** @nocollapse */
  39623. DomRendererFactory2.ctorParameters = function () { return [
  39624. { type: EventManager, },
  39625. { type: DomSharedStylesHost, },
  39626. ]; };
  39627. return DomRendererFactory2;
  39628. }());
  39629. var DefaultDomRenderer2 = /** @class */ (function () {
  39630. function DefaultDomRenderer2(eventManager) {
  39631. this.eventManager = eventManager;
  39632. this.data = Object.create(null);
  39633. }
  39634. /**
  39635. * @return {?}
  39636. */
  39637. DefaultDomRenderer2.prototype.destroy = /**
  39638. * @return {?}
  39639. */
  39640. function () { };
  39641. /**
  39642. * @param {?} name
  39643. * @param {?=} namespace
  39644. * @return {?}
  39645. */
  39646. DefaultDomRenderer2.prototype.createElement = /**
  39647. * @param {?} name
  39648. * @param {?=} namespace
  39649. * @return {?}
  39650. */
  39651. function (name, namespace) {
  39652. if (namespace) {
  39653. return document.createElementNS(NAMESPACE_URIS[namespace], name);
  39654. }
  39655. return document.createElement(name);
  39656. };
  39657. /**
  39658. * @param {?} value
  39659. * @return {?}
  39660. */
  39661. DefaultDomRenderer2.prototype.createComment = /**
  39662. * @param {?} value
  39663. * @return {?}
  39664. */
  39665. function (value) { return document.createComment(value); };
  39666. /**
  39667. * @param {?} value
  39668. * @return {?}
  39669. */
  39670. DefaultDomRenderer2.prototype.createText = /**
  39671. * @param {?} value
  39672. * @return {?}
  39673. */
  39674. function (value) { return document.createTextNode(value); };
  39675. /**
  39676. * @param {?} parent
  39677. * @param {?} newChild
  39678. * @return {?}
  39679. */
  39680. DefaultDomRenderer2.prototype.appendChild = /**
  39681. * @param {?} parent
  39682. * @param {?} newChild
  39683. * @return {?}
  39684. */
  39685. function (parent, newChild) { parent.appendChild(newChild); };
  39686. /**
  39687. * @param {?} parent
  39688. * @param {?} newChild
  39689. * @param {?} refChild
  39690. * @return {?}
  39691. */
  39692. DefaultDomRenderer2.prototype.insertBefore = /**
  39693. * @param {?} parent
  39694. * @param {?} newChild
  39695. * @param {?} refChild
  39696. * @return {?}
  39697. */
  39698. function (parent, newChild, refChild) {
  39699. if (parent) {
  39700. parent.insertBefore(newChild, refChild);
  39701. }
  39702. };
  39703. /**
  39704. * @param {?} parent
  39705. * @param {?} oldChild
  39706. * @return {?}
  39707. */
  39708. DefaultDomRenderer2.prototype.removeChild = /**
  39709. * @param {?} parent
  39710. * @param {?} oldChild
  39711. * @return {?}
  39712. */
  39713. function (parent, oldChild) {
  39714. if (parent) {
  39715. parent.removeChild(oldChild);
  39716. }
  39717. };
  39718. /**
  39719. * @param {?} selectorOrNode
  39720. * @return {?}
  39721. */
  39722. DefaultDomRenderer2.prototype.selectRootElement = /**
  39723. * @param {?} selectorOrNode
  39724. * @return {?}
  39725. */
  39726. function (selectorOrNode) {
  39727. var /** @type {?} */ el = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) :
  39728. selectorOrNode;
  39729. if (!el) {
  39730. throw new Error("The selector \"" + selectorOrNode + "\" did not match any elements");
  39731. }
  39732. el.textContent = '';
  39733. return el;
  39734. };
  39735. /**
  39736. * @param {?} node
  39737. * @return {?}
  39738. */
  39739. DefaultDomRenderer2.prototype.parentNode = /**
  39740. * @param {?} node
  39741. * @return {?}
  39742. */
  39743. function (node) { return node.parentNode; };
  39744. /**
  39745. * @param {?} node
  39746. * @return {?}
  39747. */
  39748. DefaultDomRenderer2.prototype.nextSibling = /**
  39749. * @param {?} node
  39750. * @return {?}
  39751. */
  39752. function (node) { return node.nextSibling; };
  39753. /**
  39754. * @param {?} el
  39755. * @param {?} name
  39756. * @param {?} value
  39757. * @param {?=} namespace
  39758. * @return {?}
  39759. */
  39760. DefaultDomRenderer2.prototype.setAttribute = /**
  39761. * @param {?} el
  39762. * @param {?} name
  39763. * @param {?} value
  39764. * @param {?=} namespace
  39765. * @return {?}
  39766. */
  39767. function (el, name, value, namespace) {
  39768. if (namespace) {
  39769. name = namespace + ":" + name;
  39770. var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];
  39771. if (namespaceUri) {
  39772. el.setAttributeNS(namespaceUri, name, value);
  39773. }
  39774. else {
  39775. el.setAttribute(name, value);
  39776. }
  39777. }
  39778. else {
  39779. el.setAttribute(name, value);
  39780. }
  39781. };
  39782. /**
  39783. * @param {?} el
  39784. * @param {?} name
  39785. * @param {?=} namespace
  39786. * @return {?}
  39787. */
  39788. DefaultDomRenderer2.prototype.removeAttribute = /**
  39789. * @param {?} el
  39790. * @param {?} name
  39791. * @param {?=} namespace
  39792. * @return {?}
  39793. */
  39794. function (el, name, namespace) {
  39795. if (namespace) {
  39796. var /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];
  39797. if (namespaceUri) {
  39798. el.removeAttributeNS(namespaceUri, name);
  39799. }
  39800. else {
  39801. el.removeAttribute(namespace + ":" + name);
  39802. }
  39803. }
  39804. else {
  39805. el.removeAttribute(name);
  39806. }
  39807. };
  39808. /**
  39809. * @param {?} el
  39810. * @param {?} name
  39811. * @return {?}
  39812. */
  39813. DefaultDomRenderer2.prototype.addClass = /**
  39814. * @param {?} el
  39815. * @param {?} name
  39816. * @return {?}
  39817. */
  39818. function (el, name) { el.classList.add(name); };
  39819. /**
  39820. * @param {?} el
  39821. * @param {?} name
  39822. * @return {?}
  39823. */
  39824. DefaultDomRenderer2.prototype.removeClass = /**
  39825. * @param {?} el
  39826. * @param {?} name
  39827. * @return {?}
  39828. */
  39829. function (el, name) { el.classList.remove(name); };
  39830. /**
  39831. * @param {?} el
  39832. * @param {?} style
  39833. * @param {?} value
  39834. * @param {?} flags
  39835. * @return {?}
  39836. */
  39837. DefaultDomRenderer2.prototype.setStyle = /**
  39838. * @param {?} el
  39839. * @param {?} style
  39840. * @param {?} value
  39841. * @param {?} flags
  39842. * @return {?}
  39843. */
  39844. function (el, style, value, flags) {
  39845. if (flags & __WEBPACK_IMPORTED_MODULE_1__angular_core__["Y" /* RendererStyleFlags2 */].DashCase) {
  39846. el.style.setProperty(style, value, !!(flags & __WEBPACK_IMPORTED_MODULE_1__angular_core__["Y" /* RendererStyleFlags2 */].Important) ? 'important' : '');
  39847. }
  39848. else {
  39849. el.style[style] = value;
  39850. }
  39851. };
  39852. /**
  39853. * @param {?} el
  39854. * @param {?} style
  39855. * @param {?} flags
  39856. * @return {?}
  39857. */
  39858. DefaultDomRenderer2.prototype.removeStyle = /**
  39859. * @param {?} el
  39860. * @param {?} style
  39861. * @param {?} flags
  39862. * @return {?}
  39863. */
  39864. function (el, style, flags) {
  39865. if (flags & __WEBPACK_IMPORTED_MODULE_1__angular_core__["Y" /* RendererStyleFlags2 */].DashCase) {
  39866. el.style.removeProperty(style);
  39867. }
  39868. else {
  39869. // IE requires '' instead of null
  39870. // see https://github.com/angular/angular/issues/7916
  39871. el.style[style] = '';
  39872. }
  39873. };
  39874. /**
  39875. * @param {?} el
  39876. * @param {?} name
  39877. * @param {?} value
  39878. * @return {?}
  39879. */
  39880. DefaultDomRenderer2.prototype.setProperty = /**
  39881. * @param {?} el
  39882. * @param {?} name
  39883. * @param {?} value
  39884. * @return {?}
  39885. */
  39886. function (el, name, value) {
  39887. checkNoSyntheticProp(name, 'property');
  39888. el[name] = value;
  39889. };
  39890. /**
  39891. * @param {?} node
  39892. * @param {?} value
  39893. * @return {?}
  39894. */
  39895. DefaultDomRenderer2.prototype.setValue = /**
  39896. * @param {?} node
  39897. * @param {?} value
  39898. * @return {?}
  39899. */
  39900. function (node, value) { node.nodeValue = value; };
  39901. /**
  39902. * @param {?} target
  39903. * @param {?} event
  39904. * @param {?} callback
  39905. * @return {?}
  39906. */
  39907. DefaultDomRenderer2.prototype.listen = /**
  39908. * @param {?} target
  39909. * @param {?} event
  39910. * @param {?} callback
  39911. * @return {?}
  39912. */
  39913. function (target, event, callback) {
  39914. checkNoSyntheticProp(event, 'listener');
  39915. if (typeof target === 'string') {
  39916. return /** @type {?} */ (this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback)));
  39917. }
  39918. return /** @type {?} */ ((this.eventManager.addEventListener(target, event, decoratePreventDefault(callback))));
  39919. };
  39920. return DefaultDomRenderer2;
  39921. }());
  39922. var AT_CHARCODE = '@'.charCodeAt(0);
  39923. /**
  39924. * @param {?} name
  39925. * @param {?} nameKind
  39926. * @return {?}
  39927. */
  39928. function checkNoSyntheticProp(name, nameKind) {
  39929. if (name.charCodeAt(0) === AT_CHARCODE) {
  39930. throw new Error("Found the synthetic " + nameKind + " " + name + ". Please include either \"BrowserAnimationsModule\" or \"NoopAnimationsModule\" in your application.");
  39931. }
  39932. }
  39933. var EmulatedEncapsulationDomRenderer2 = /** @class */ (function (_super) {
  39934. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(EmulatedEncapsulationDomRenderer2, _super);
  39935. function EmulatedEncapsulationDomRenderer2(eventManager, sharedStylesHost, component) {
  39936. var _this = _super.call(this, eventManager) || this;
  39937. _this.component = component;
  39938. var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);
  39939. sharedStylesHost.addStyles(styles);
  39940. _this.contentAttr = shimContentAttribute(component.id);
  39941. _this.hostAttr = shimHostAttribute(component.id);
  39942. return _this;
  39943. }
  39944. /**
  39945. * @param {?} element
  39946. * @return {?}
  39947. */
  39948. EmulatedEncapsulationDomRenderer2.prototype.applyToHost = /**
  39949. * @param {?} element
  39950. * @return {?}
  39951. */
  39952. function (element) { _super.prototype.setAttribute.call(this, element, this.hostAttr, ''); };
  39953. /**
  39954. * @param {?} parent
  39955. * @param {?} name
  39956. * @return {?}
  39957. */
  39958. EmulatedEncapsulationDomRenderer2.prototype.createElement = /**
  39959. * @param {?} parent
  39960. * @param {?} name
  39961. * @return {?}
  39962. */
  39963. function (parent, name) {
  39964. var /** @type {?} */ el = _super.prototype.createElement.call(this, parent, name);
  39965. _super.prototype.setAttribute.call(this, el, this.contentAttr, '');
  39966. return el;
  39967. };
  39968. return EmulatedEncapsulationDomRenderer2;
  39969. }(DefaultDomRenderer2));
  39970. var ShadowDomRenderer = /** @class */ (function (_super) {
  39971. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(ShadowDomRenderer, _super);
  39972. function ShadowDomRenderer(eventManager, sharedStylesHost, hostEl, component) {
  39973. var _this = _super.call(this, eventManager) || this;
  39974. _this.sharedStylesHost = sharedStylesHost;
  39975. _this.hostEl = hostEl;
  39976. _this.component = component;
  39977. _this.shadowRoot = (/** @type {?} */ (hostEl)).createShadowRoot();
  39978. _this.sharedStylesHost.addHost(_this.shadowRoot);
  39979. var /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);
  39980. for (var /** @type {?} */ i = 0; i < styles.length; i++) {
  39981. var /** @type {?} */ styleEl = document.createElement('style');
  39982. styleEl.textContent = styles[i];
  39983. _this.shadowRoot.appendChild(styleEl);
  39984. }
  39985. return _this;
  39986. }
  39987. /**
  39988. * @param {?} node
  39989. * @return {?}
  39990. */
  39991. ShadowDomRenderer.prototype.nodeOrShadowRoot = /**
  39992. * @param {?} node
  39993. * @return {?}
  39994. */
  39995. function (node) { return node === this.hostEl ? this.shadowRoot : node; };
  39996. /**
  39997. * @return {?}
  39998. */
  39999. ShadowDomRenderer.prototype.destroy = /**
  40000. * @return {?}
  40001. */
  40002. function () { this.sharedStylesHost.removeHost(this.shadowRoot); };
  40003. /**
  40004. * @param {?} parent
  40005. * @param {?} newChild
  40006. * @return {?}
  40007. */
  40008. ShadowDomRenderer.prototype.appendChild = /**
  40009. * @param {?} parent
  40010. * @param {?} newChild
  40011. * @return {?}
  40012. */
  40013. function (parent, newChild) {
  40014. return _super.prototype.appendChild.call(this, this.nodeOrShadowRoot(parent), newChild);
  40015. };
  40016. /**
  40017. * @param {?} parent
  40018. * @param {?} newChild
  40019. * @param {?} refChild
  40020. * @return {?}
  40021. */
  40022. ShadowDomRenderer.prototype.insertBefore = /**
  40023. * @param {?} parent
  40024. * @param {?} newChild
  40025. * @param {?} refChild
  40026. * @return {?}
  40027. */
  40028. function (parent, newChild, refChild) {
  40029. return _super.prototype.insertBefore.call(this, this.nodeOrShadowRoot(parent), newChild, refChild);
  40030. };
  40031. /**
  40032. * @param {?} parent
  40033. * @param {?} oldChild
  40034. * @return {?}
  40035. */
  40036. ShadowDomRenderer.prototype.removeChild = /**
  40037. * @param {?} parent
  40038. * @param {?} oldChild
  40039. * @return {?}
  40040. */
  40041. function (parent, oldChild) {
  40042. return _super.prototype.removeChild.call(this, this.nodeOrShadowRoot(parent), oldChild);
  40043. };
  40044. /**
  40045. * @param {?} node
  40046. * @return {?}
  40047. */
  40048. ShadowDomRenderer.prototype.parentNode = /**
  40049. * @param {?} node
  40050. * @return {?}
  40051. */
  40052. function (node) {
  40053. return this.nodeOrShadowRoot(_super.prototype.parentNode.call(this, this.nodeOrShadowRoot(node)));
  40054. };
  40055. return ShadowDomRenderer;
  40056. }(DefaultDomRenderer2));
  40057. /**
  40058. * @fileoverview added by tsickle
  40059. * @suppress {checkTypes} checked by tsc
  40060. */
  40061. /**
  40062. * @license
  40063. * Copyright Google Inc. All Rights Reserved.
  40064. *
  40065. * Use of this source code is governed by an MIT-style license that can be
  40066. * found in the LICENSE file at https://angular.io/license
  40067. */
  40068. var ɵ0 = function (v) {
  40069. return '__zone_symbol__' + v;
  40070. };
  40071. /**
  40072. * Detect if Zone is present. If it is then use simple zone aware 'addEventListener'
  40073. * since Angular can do much more
  40074. * efficient bookkeeping than Zone can, because we have additional information. This speeds up
  40075. * addEventListener by 3x.
  40076. */
  40077. var __symbol__ = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))['__symbol__'] || ɵ0;
  40078. var ADD_EVENT_LISTENER = __symbol__('addEventListener');
  40079. var REMOVE_EVENT_LISTENER = __symbol__('removeEventListener');
  40080. var symbolNames = {};
  40081. var FALSE = 'FALSE';
  40082. var ANGULAR = 'ANGULAR';
  40083. var NATIVE_ADD_LISTENER = 'addEventListener';
  40084. var NATIVE_REMOVE_LISTENER = 'removeEventListener';
  40085. // use the same symbol string which is used in zone.js
  40086. var stopSymbol = '__zone_symbol__propagationStopped';
  40087. var stopMethodSymbol = '__zone_symbol__stopImmediatePropagation';
  40088. var blackListedEvents = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))[__symbol__('BLACK_LISTED_EVENTS')];
  40089. var blackListedMap;
  40090. if (blackListedEvents) {
  40091. blackListedMap = {};
  40092. blackListedEvents.forEach(function (eventName) { blackListedMap[eventName] = eventName; });
  40093. }
  40094. var isBlackListedEvent = function (eventName) {
  40095. if (!blackListedMap) {
  40096. return false;
  40097. }
  40098. return blackListedMap.hasOwnProperty(eventName);
  40099. };
  40100. // a global listener to handle all dom event,
  40101. // so we do not need to create a closure everytime
  40102. var globalListener = function (event) {
  40103. var /** @type {?} */ symbolName = symbolNames[event.type];
  40104. if (!symbolName) {
  40105. return;
  40106. }
  40107. var /** @type {?} */ taskDatas = this[symbolName];
  40108. if (!taskDatas) {
  40109. return;
  40110. }
  40111. var /** @type {?} */ args = [event];
  40112. if (taskDatas.length === 1) {
  40113. // if taskDatas only have one element, just invoke it
  40114. var /** @type {?} */ taskData = taskDatas[0];
  40115. if (taskData.zone !== Zone.current) {
  40116. // only use Zone.run when Zone.current not equals to stored zone
  40117. return taskData.zone.run(taskData.handler, this, args);
  40118. }
  40119. else {
  40120. return taskData.handler.apply(this, args);
  40121. }
  40122. }
  40123. else {
  40124. // copy tasks as a snapshot to avoid event handlers remove
  40125. // itself or others
  40126. var /** @type {?} */ copiedTasks = taskDatas.slice();
  40127. for (var /** @type {?} */ i = 0; i < copiedTasks.length; i++) {
  40128. // if other listener call event.stopImmediatePropagation
  40129. // just break
  40130. if ((/** @type {?} */ (event))[stopSymbol] === true) {
  40131. break;
  40132. }
  40133. var /** @type {?} */ taskData = copiedTasks[i];
  40134. if (taskData.zone !== Zone.current) {
  40135. // only use Zone.run when Zone.current not equals to stored zone
  40136. taskData.zone.run(taskData.handler, this, args);
  40137. }
  40138. else {
  40139. taskData.handler.apply(this, args);
  40140. }
  40141. }
  40142. }
  40143. };
  40144. var DomEventsPlugin = /** @class */ (function (_super) {
  40145. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(DomEventsPlugin, _super);
  40146. function DomEventsPlugin(doc, ngZone) {
  40147. var _this = _super.call(this, doc) || this;
  40148. _this.ngZone = ngZone;
  40149. _this.patchEvent();
  40150. return _this;
  40151. }
  40152. /**
  40153. * @return {?}
  40154. */
  40155. DomEventsPlugin.prototype.patchEvent = /**
  40156. * @return {?}
  40157. */
  40158. function () {
  40159. if (!Event || !Event.prototype) {
  40160. return;
  40161. }
  40162. if ((/** @type {?} */ (Event.prototype))[stopMethodSymbol]) {
  40163. // already patched by zone.js
  40164. return;
  40165. }
  40166. var /** @type {?} */ delegate = (/** @type {?} */ (Event.prototype))[stopMethodSymbol] =
  40167. Event.prototype.stopImmediatePropagation;
  40168. Event.prototype.stopImmediatePropagation = function () {
  40169. if (this) {
  40170. this[stopSymbol] = true;
  40171. }
  40172. // should call native delegate in case
  40173. // in some enviroment part of the application
  40174. // will not use the patched Event
  40175. delegate && delegate.apply(this, arguments);
  40176. };
  40177. };
  40178. // This plugin should come last in the list of plugins, because it accepts all
  40179. // events.
  40180. /**
  40181. * @param {?} eventName
  40182. * @return {?}
  40183. */
  40184. DomEventsPlugin.prototype.supports = /**
  40185. * @param {?} eventName
  40186. * @return {?}
  40187. */
  40188. function (eventName) { return true; };
  40189. /**
  40190. * @param {?} element
  40191. * @param {?} eventName
  40192. * @param {?} handler
  40193. * @return {?}
  40194. */
  40195. DomEventsPlugin.prototype.addEventListener = /**
  40196. * @param {?} element
  40197. * @param {?} eventName
  40198. * @param {?} handler
  40199. * @return {?}
  40200. */
  40201. function (element, eventName, handler) {
  40202. var _this = this;
  40203. /**
  40204. * This code is about to add a listener to the DOM. If Zone.js is present, than
  40205. * `addEventListener` has been patched. The patched code adds overhead in both
  40206. * memory and speed (3x slower) than native. For this reason if we detect that
  40207. * Zone.js is present we use a simple version of zone aware addEventListener instead.
  40208. * The result is faster registration and the zone will be restored.
  40209. * But ZoneSpec.onScheduleTask, ZoneSpec.onInvokeTask, ZoneSpec.onCancelTask
  40210. * will not be invoked
  40211. * We also do manual zone restoration in element.ts renderEventHandlerClosure method.
  40212. *
  40213. * NOTE: it is possible that the element is from different iframe, and so we
  40214. * have to check before we execute the method.
  40215. */
  40216. var /** @type {?} */ self = this;
  40217. var /** @type {?} */ zoneJsLoaded = element[ADD_EVENT_LISTENER];
  40218. var /** @type {?} */ callback = /** @type {?} */ (handler);
  40219. // if zonejs is loaded and current zone is not ngZone
  40220. // we keep Zone.current on target for later restoration.
  40221. if (zoneJsLoaded && (!__WEBPACK_IMPORTED_MODULE_1__angular_core__["M" /* NgZone */].isInAngularZone() || isBlackListedEvent(eventName))) {
  40222. var /** @type {?} */ symbolName = symbolNames[eventName];
  40223. if (!symbolName) {
  40224. symbolName = symbolNames[eventName] = __symbol__(ANGULAR + eventName + FALSE);
  40225. }
  40226. var /** @type {?} */ taskDatas = (/** @type {?} */ (element))[symbolName];
  40227. var /** @type {?} */ globalListenerRegistered = taskDatas && taskDatas.length > 0;
  40228. if (!taskDatas) {
  40229. taskDatas = (/** @type {?} */ (element))[symbolName] = [];
  40230. }
  40231. var /** @type {?} */ zone = isBlackListedEvent(eventName) ? Zone.root : Zone.current;
  40232. if (taskDatas.length === 0) {
  40233. taskDatas.push({ zone: zone, handler: callback });
  40234. }
  40235. else {
  40236. var /** @type {?} */ callbackRegistered = false;
  40237. for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {
  40238. if (taskDatas[i].handler === callback) {
  40239. callbackRegistered = true;
  40240. break;
  40241. }
  40242. }
  40243. if (!callbackRegistered) {
  40244. taskDatas.push({ zone: zone, handler: callback });
  40245. }
  40246. }
  40247. if (!globalListenerRegistered) {
  40248. element[ADD_EVENT_LISTENER](eventName, globalListener, false);
  40249. }
  40250. }
  40251. else {
  40252. element[NATIVE_ADD_LISTENER](eventName, callback, false);
  40253. }
  40254. return function () { return _this.removeEventListener(element, eventName, callback); };
  40255. };
  40256. /**
  40257. * @param {?} target
  40258. * @param {?} eventName
  40259. * @param {?} callback
  40260. * @return {?}
  40261. */
  40262. DomEventsPlugin.prototype.removeEventListener = /**
  40263. * @param {?} target
  40264. * @param {?} eventName
  40265. * @param {?} callback
  40266. * @return {?}
  40267. */
  40268. function (target, eventName, callback) {
  40269. var /** @type {?} */ underlyingRemove = target[REMOVE_EVENT_LISTENER];
  40270. // zone.js not loaded, use native removeEventListener
  40271. if (!underlyingRemove) {
  40272. return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);
  40273. }
  40274. var /** @type {?} */ symbolName = symbolNames[eventName];
  40275. var /** @type {?} */ taskDatas = symbolName && target[symbolName];
  40276. if (!taskDatas) {
  40277. // addEventListener not using patched version
  40278. // just call native removeEventListener
  40279. return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);
  40280. }
  40281. // fix issue 20532, should be able to remove
  40282. // listener which was added inside of ngZone
  40283. var /** @type {?} */ found = false;
  40284. for (var /** @type {?} */ i = 0; i < taskDatas.length; i++) {
  40285. // remove listener from taskDatas if the callback equals
  40286. if (taskDatas[i].handler === callback) {
  40287. found = true;
  40288. taskDatas.splice(i, 1);
  40289. break;
  40290. }
  40291. }
  40292. if (found) {
  40293. if (taskDatas.length === 0) {
  40294. // all listeners are removed, we can remove the globalListener from target
  40295. underlyingRemove.apply(target, [eventName, globalListener, false]);
  40296. }
  40297. }
  40298. else {
  40299. // not found in taskDatas, the callback may be added inside of ngZone
  40300. // use native remove listener to remove the calback
  40301. target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);
  40302. }
  40303. };
  40304. DomEventsPlugin.decorators = [
  40305. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  40306. ];
  40307. /** @nocollapse */
  40308. DomEventsPlugin.ctorParameters = function () { return [
  40309. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  40310. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["M" /* NgZone */], },
  40311. ]; };
  40312. return DomEventsPlugin;
  40313. }(EventManagerPlugin));
  40314. /**
  40315. * @fileoverview added by tsickle
  40316. * @suppress {checkTypes} checked by tsc
  40317. */
  40318. /**
  40319. * @license
  40320. * Copyright Google Inc. All Rights Reserved.
  40321. *
  40322. * Use of this source code is governed by an MIT-style license that can be
  40323. * found in the LICENSE file at https://angular.io/license
  40324. */
  40325. var EVENT_NAMES = {
  40326. // pan
  40327. 'pan': true,
  40328. 'panstart': true,
  40329. 'panmove': true,
  40330. 'panend': true,
  40331. 'pancancel': true,
  40332. 'panleft': true,
  40333. 'panright': true,
  40334. 'panup': true,
  40335. 'pandown': true,
  40336. // pinch
  40337. 'pinch': true,
  40338. 'pinchstart': true,
  40339. 'pinchmove': true,
  40340. 'pinchend': true,
  40341. 'pinchcancel': true,
  40342. 'pinchin': true,
  40343. 'pinchout': true,
  40344. // press
  40345. 'press': true,
  40346. 'pressup': true,
  40347. // rotate
  40348. 'rotate': true,
  40349. 'rotatestart': true,
  40350. 'rotatemove': true,
  40351. 'rotateend': true,
  40352. 'rotatecancel': true,
  40353. // swipe
  40354. 'swipe': true,
  40355. 'swipeleft': true,
  40356. 'swiperight': true,
  40357. 'swipeup': true,
  40358. 'swipedown': true,
  40359. // tap
  40360. 'tap': true,
  40361. };
  40362. /**
  40363. * A DI token that you can use to provide{\@link HammerGestureConfig} to Angular. Use it to configure
  40364. * Hammer gestures.
  40365. *
  40366. * \@experimental
  40367. */
  40368. var HAMMER_GESTURE_CONFIG = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('HammerGestureConfig');
  40369. /**
  40370. * @record
  40371. */
  40372. /**
  40373. * \@experimental
  40374. */
  40375. var HammerGestureConfig = /** @class */ (function () {
  40376. function HammerGestureConfig() {
  40377. this.events = [];
  40378. this.overrides = {};
  40379. }
  40380. /**
  40381. * @param {?} element
  40382. * @return {?}
  40383. */
  40384. HammerGestureConfig.prototype.buildHammer = /**
  40385. * @param {?} element
  40386. * @return {?}
  40387. */
  40388. function (element) {
  40389. var /** @type {?} */ mc = new Hammer(element);
  40390. mc.get('pinch').set({ enable: true });
  40391. mc.get('rotate').set({ enable: true });
  40392. for (var /** @type {?} */ eventName in this.overrides) {
  40393. mc.get(eventName).set(this.overrides[eventName]);
  40394. }
  40395. return mc;
  40396. };
  40397. HammerGestureConfig.decorators = [
  40398. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  40399. ];
  40400. /** @nocollapse */
  40401. HammerGestureConfig.ctorParameters = function () { return []; };
  40402. return HammerGestureConfig;
  40403. }());
  40404. var HammerGesturesPlugin = /** @class */ (function (_super) {
  40405. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(HammerGesturesPlugin, _super);
  40406. function HammerGesturesPlugin(doc, _config) {
  40407. var _this = _super.call(this, doc) || this;
  40408. _this._config = _config;
  40409. return _this;
  40410. }
  40411. /**
  40412. * @param {?} eventName
  40413. * @return {?}
  40414. */
  40415. HammerGesturesPlugin.prototype.supports = /**
  40416. * @param {?} eventName
  40417. * @return {?}
  40418. */
  40419. function (eventName) {
  40420. if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {
  40421. return false;
  40422. }
  40423. if (!(/** @type {?} */ (window)).Hammer) {
  40424. throw new Error("Hammer.js is not loaded, can not bind " + eventName + " event");
  40425. }
  40426. return true;
  40427. };
  40428. /**
  40429. * @param {?} element
  40430. * @param {?} eventName
  40431. * @param {?} handler
  40432. * @return {?}
  40433. */
  40434. HammerGesturesPlugin.prototype.addEventListener = /**
  40435. * @param {?} element
  40436. * @param {?} eventName
  40437. * @param {?} handler
  40438. * @return {?}
  40439. */
  40440. function (element, eventName, handler) {
  40441. var _this = this;
  40442. var /** @type {?} */ zone = this.manager.getZone();
  40443. eventName = eventName.toLowerCase();
  40444. return zone.runOutsideAngular(function () {
  40445. // Creating the manager bind events, must be done outside of angular
  40446. var /** @type {?} */ mc = _this._config.buildHammer(element);
  40447. var /** @type {?} */ callback = function (eventObj) {
  40448. zone.runGuarded(function () { handler(eventObj); });
  40449. };
  40450. mc.on(eventName, callback);
  40451. return function () { return mc.off(eventName, callback); };
  40452. });
  40453. };
  40454. /**
  40455. * @param {?} eventName
  40456. * @return {?}
  40457. */
  40458. HammerGesturesPlugin.prototype.isCustomEvent = /**
  40459. * @param {?} eventName
  40460. * @return {?}
  40461. */
  40462. function (eventName) { return this._config.events.indexOf(eventName) > -1; };
  40463. HammerGesturesPlugin.decorators = [
  40464. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  40465. ];
  40466. /** @nocollapse */
  40467. HammerGesturesPlugin.ctorParameters = function () { return [
  40468. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  40469. { type: HammerGestureConfig, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [HAMMER_GESTURE_CONFIG,] },] },
  40470. ]; };
  40471. return HammerGesturesPlugin;
  40472. }(EventManagerPlugin));
  40473. /**
  40474. * @fileoverview added by tsickle
  40475. * @suppress {checkTypes} checked by tsc
  40476. */
  40477. /**
  40478. * @license
  40479. * Copyright Google Inc. All Rights Reserved.
  40480. *
  40481. * Use of this source code is governed by an MIT-style license that can be
  40482. * found in the LICENSE file at https://angular.io/license
  40483. */
  40484. var MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];
  40485. var ɵ0$1 = function (event) { return event.altKey; };
  40486. var ɵ1$1 = function (event) { return event.ctrlKey; };
  40487. var ɵ2$1 = function (event) { return event.metaKey; };
  40488. var ɵ3 = function (event) { return event.shiftKey; };
  40489. var MODIFIER_KEY_GETTERS = {
  40490. 'alt': ɵ0$1,
  40491. 'control': ɵ1$1,
  40492. 'meta': ɵ2$1,
  40493. 'shift': ɵ3
  40494. };
  40495. /**
  40496. * \@experimental
  40497. */
  40498. var KeyEventsPlugin = /** @class */ (function (_super) {
  40499. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(KeyEventsPlugin, _super);
  40500. function KeyEventsPlugin(doc) {
  40501. return _super.call(this, doc) || this;
  40502. }
  40503. /**
  40504. * @param {?} eventName
  40505. * @return {?}
  40506. */
  40507. KeyEventsPlugin.prototype.supports = /**
  40508. * @param {?} eventName
  40509. * @return {?}
  40510. */
  40511. function (eventName) { return KeyEventsPlugin.parseEventName(eventName) != null; };
  40512. /**
  40513. * @param {?} element
  40514. * @param {?} eventName
  40515. * @param {?} handler
  40516. * @return {?}
  40517. */
  40518. KeyEventsPlugin.prototype.addEventListener = /**
  40519. * @param {?} element
  40520. * @param {?} eventName
  40521. * @param {?} handler
  40522. * @return {?}
  40523. */
  40524. function (element, eventName, handler) {
  40525. var /** @type {?} */ parsedEvent = /** @type {?} */ ((KeyEventsPlugin.parseEventName(eventName)));
  40526. var /** @type {?} */ outsideHandler = KeyEventsPlugin.eventCallback(parsedEvent['fullKey'], handler, this.manager.getZone());
  40527. return this.manager.getZone().runOutsideAngular(function () {
  40528. return getDOM().onAndCancel(element, parsedEvent['domEventName'], outsideHandler);
  40529. });
  40530. };
  40531. /**
  40532. * @param {?} eventName
  40533. * @return {?}
  40534. */
  40535. KeyEventsPlugin.parseEventName = /**
  40536. * @param {?} eventName
  40537. * @return {?}
  40538. */
  40539. function (eventName) {
  40540. var /** @type {?} */ parts = eventName.toLowerCase().split('.');
  40541. var /** @type {?} */ domEventName = parts.shift();
  40542. if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {
  40543. return null;
  40544. }
  40545. var /** @type {?} */ key = KeyEventsPlugin._normalizeKey(/** @type {?} */ ((parts.pop())));
  40546. var /** @type {?} */ fullKey = '';
  40547. MODIFIER_KEYS.forEach(function (modifierName) {
  40548. var /** @type {?} */ index = parts.indexOf(modifierName);
  40549. if (index > -1) {
  40550. parts.splice(index, 1);
  40551. fullKey += modifierName + '.';
  40552. }
  40553. });
  40554. fullKey += key;
  40555. if (parts.length != 0 || key.length === 0) {
  40556. // returning null instead of throwing to let another plugin process the event
  40557. return null;
  40558. }
  40559. var /** @type {?} */ result = {};
  40560. result['domEventName'] = domEventName;
  40561. result['fullKey'] = fullKey;
  40562. return result;
  40563. };
  40564. /**
  40565. * @param {?} event
  40566. * @return {?}
  40567. */
  40568. KeyEventsPlugin.getEventFullKey = /**
  40569. * @param {?} event
  40570. * @return {?}
  40571. */
  40572. function (event) {
  40573. var /** @type {?} */ fullKey = '';
  40574. var /** @type {?} */ key = getDOM().getEventKey(event);
  40575. key = key.toLowerCase();
  40576. if (key === ' ') {
  40577. key = 'space'; // for readability
  40578. }
  40579. else if (key === '.') {
  40580. key = 'dot'; // because '.' is used as a separator in event names
  40581. }
  40582. MODIFIER_KEYS.forEach(function (modifierName) {
  40583. if (modifierName != key) {
  40584. var /** @type {?} */ modifierGetter = MODIFIER_KEY_GETTERS[modifierName];
  40585. if (modifierGetter(event)) {
  40586. fullKey += modifierName + '.';
  40587. }
  40588. }
  40589. });
  40590. fullKey += key;
  40591. return fullKey;
  40592. };
  40593. /**
  40594. * @param {?} fullKey
  40595. * @param {?} handler
  40596. * @param {?} zone
  40597. * @return {?}
  40598. */
  40599. KeyEventsPlugin.eventCallback = /**
  40600. * @param {?} fullKey
  40601. * @param {?} handler
  40602. * @param {?} zone
  40603. * @return {?}
  40604. */
  40605. function (fullKey, handler, zone) {
  40606. return function (event /** TODO #9100 */) {
  40607. if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {
  40608. zone.runGuarded(function () { return handler(event); });
  40609. }
  40610. };
  40611. };
  40612. /** @internal */
  40613. /**
  40614. * \@internal
  40615. * @param {?} keyName
  40616. * @return {?}
  40617. */
  40618. KeyEventsPlugin._normalizeKey = /**
  40619. * \@internal
  40620. * @param {?} keyName
  40621. * @return {?}
  40622. */
  40623. function (keyName) {
  40624. // TODO: switch to a Map if the mapping grows too much
  40625. switch (keyName) {
  40626. case 'esc':
  40627. return 'escape';
  40628. default:
  40629. return keyName;
  40630. }
  40631. };
  40632. KeyEventsPlugin.decorators = [
  40633. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  40634. ];
  40635. /** @nocollapse */
  40636. KeyEventsPlugin.ctorParameters = function () { return [
  40637. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  40638. ]; };
  40639. return KeyEventsPlugin;
  40640. }(EventManagerPlugin));
  40641. /**
  40642. * @fileoverview added by tsickle
  40643. * @suppress {checkTypes} checked by tsc
  40644. */
  40645. /**
  40646. * @license
  40647. * Copyright Google Inc. All Rights Reserved.
  40648. *
  40649. * Use of this source code is governed by an MIT-style license that can be
  40650. * found in the LICENSE file at https://angular.io/license
  40651. */
  40652. /**
  40653. * This helper class is used to get hold of an inert tree of DOM elements containing dirty HTML
  40654. * that needs sanitizing.
  40655. * Depending upon browser support we must use one of three strategies for doing this.
  40656. * Support: Safari 10.x -> XHR strategy
  40657. * Support: Firefox -> DomParser strategy
  40658. * Default: InertDocument strategy
  40659. */
  40660. var InertBodyHelper = /** @class */ (function () {
  40661. function InertBodyHelper(defaultDoc, DOM) {
  40662. this.defaultDoc = defaultDoc;
  40663. this.DOM = DOM;
  40664. var /** @type {?} */ inertDocument = this.DOM.createHtmlDocument();
  40665. this.inertBodyElement = inertDocument.body;
  40666. if (this.inertBodyElement == null) {
  40667. // usually there should be only one body element in the document, but IE doesn't have any, so
  40668. // we need to create one.
  40669. var /** @type {?} */ inertHtml = this.DOM.createElement('html', inertDocument);
  40670. this.inertBodyElement = this.DOM.createElement('body', inertDocument);
  40671. this.DOM.appendChild(inertHtml, this.inertBodyElement);
  40672. this.DOM.appendChild(inertDocument, inertHtml);
  40673. }
  40674. this.DOM.setInnerHTML(this.inertBodyElement, '<svg><g onload="this.parentNode.remove()"></g></svg>');
  40675. if (this.inertBodyElement.querySelector && !this.inertBodyElement.querySelector('svg')) {
  40676. // We just hit the Safari 10.1 bug - which allows JS to run inside the SVG G element
  40677. // so use the XHR strategy.
  40678. this.getInertBodyElement = this.getInertBodyElement_XHR;
  40679. return;
  40680. }
  40681. this.DOM.setInnerHTML(this.inertBodyElement, '<svg><p><style><img src="</style><img src=x onerror=alert(1)//">');
  40682. if (this.inertBodyElement.querySelector && this.inertBodyElement.querySelector('svg img')) {
  40683. // We just hit the Firefox bug - which prevents the inner img JS from being sanitized
  40684. // so use the DOMParser strategy, if it is available.
  40685. // If the DOMParser is not available then we are not in Firefox (Server/WebWorker?) so we
  40686. // fall through to the default strategy below.
  40687. if (isDOMParserAvailable()) {
  40688. this.getInertBodyElement = this.getInertBodyElement_DOMParser;
  40689. return;
  40690. }
  40691. }
  40692. // None of the bugs were hit so it is safe for us to use the default InertDocument strategy
  40693. this.getInertBodyElement = this.getInertBodyElement_InertDocument;
  40694. }
  40695. /**
  40696. * Use XHR to create and fill an inert body element (on Safari 10.1)
  40697. * See
  40698. * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449
  40699. * @param {?} html
  40700. * @return {?}
  40701. */
  40702. InertBodyHelper.prototype.getInertBodyElement_XHR = /**
  40703. * Use XHR to create and fill an inert body element (on Safari 10.1)
  40704. * See
  40705. * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449
  40706. * @param {?} html
  40707. * @return {?}
  40708. */
  40709. function (html) {
  40710. // We add these extra elements to ensure that the rest of the content is parsed as expected
  40711. // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the
  40712. // `<head>` tag.
  40713. html = '<body><remove></remove>' + html + '</body>';
  40714. try {
  40715. html = encodeURI(html);
  40716. }
  40717. catch (/** @type {?} */ e) {
  40718. return null;
  40719. }
  40720. var /** @type {?} */ xhr = new XMLHttpRequest();
  40721. xhr.responseType = 'document';
  40722. xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);
  40723. xhr.send(null);
  40724. var /** @type {?} */ body = xhr.response.body;
  40725. body.removeChild(/** @type {?} */ ((body.firstChild)));
  40726. return body;
  40727. };
  40728. /**
  40729. * Use DOMParser to create and fill an inert body element (on Firefox)
  40730. * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7
  40731. *
  40732. * @param {?} html
  40733. * @return {?}
  40734. */
  40735. InertBodyHelper.prototype.getInertBodyElement_DOMParser = /**
  40736. * Use DOMParser to create and fill an inert body element (on Firefox)
  40737. * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7
  40738. *
  40739. * @param {?} html
  40740. * @return {?}
  40741. */
  40742. function (html) {
  40743. // We add these extra elements to ensure that the rest of the content is parsed as expected
  40744. // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the
  40745. // `<head>` tag.
  40746. html = '<body><remove></remove>' + html + '</body>';
  40747. try {
  40748. var /** @type {?} */ body = /** @type {?} */ (new (/** @type {?} */ (window))
  40749. .DOMParser()
  40750. .parseFromString(html, 'text/html')
  40751. .body);
  40752. body.removeChild(/** @type {?} */ ((body.firstChild)));
  40753. return body;
  40754. }
  40755. catch (/** @type {?} */ e) {
  40756. return null;
  40757. }
  40758. };
  40759. /**
  40760. * Use an HTML5 `template` element, if supported, or an inert body element created via
  40761. * `createHtmlDocument` to create and fill an inert DOM element.
  40762. * This is the default sane strategy to use if the browser does not require one of the specialised
  40763. * strategies above.
  40764. * @param {?} html
  40765. * @return {?}
  40766. */
  40767. InertBodyHelper.prototype.getInertBodyElement_InertDocument = /**
  40768. * Use an HTML5 `template` element, if supported, or an inert body element created via
  40769. * `createHtmlDocument` to create and fill an inert DOM element.
  40770. * This is the default sane strategy to use if the browser does not require one of the specialised
  40771. * strategies above.
  40772. * @param {?} html
  40773. * @return {?}
  40774. */
  40775. function (html) {
  40776. // Prefer using <template> element if supported.
  40777. var /** @type {?} */ templateEl = this.DOM.createElement('template');
  40778. if ('content' in templateEl) {
  40779. this.DOM.setInnerHTML(templateEl, html);
  40780. return templateEl;
  40781. }
  40782. this.DOM.setInnerHTML(this.inertBodyElement, html);
  40783. // Support: IE 9-11 only
  40784. // strip custom-namespaced attributes on IE<=11
  40785. if (this.defaultDoc.documentMode) {
  40786. this.stripCustomNsAttrs(this.inertBodyElement);
  40787. }
  40788. return this.inertBodyElement;
  40789. };
  40790. /**
  40791. * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'
  40792. * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.
  40793. * 'ns1:xlink:foo').
  40794. *
  40795. * This is undesirable since we don't want to allow any of these custom attributes. This method
  40796. * strips them all.
  40797. * @param {?} el
  40798. * @return {?}
  40799. */
  40800. InertBodyHelper.prototype.stripCustomNsAttrs = /**
  40801. * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'
  40802. * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.
  40803. * 'ns1:xlink:foo').
  40804. *
  40805. * This is undesirable since we don't want to allow any of these custom attributes. This method
  40806. * strips them all.
  40807. * @param {?} el
  40808. * @return {?}
  40809. */
  40810. function (el) {
  40811. var _this = this;
  40812. this.DOM.attributeMap(el).forEach(function (_, attrName) {
  40813. if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {
  40814. _this.DOM.removeAttribute(el, attrName);
  40815. }
  40816. });
  40817. for (var _i = 0, _a = this.DOM.childNodesAsList(el); _i < _a.length; _i++) {
  40818. var n = _a[_i];
  40819. if (this.DOM.isElementNode(n))
  40820. this.stripCustomNsAttrs(/** @type {?} */ (n));
  40821. }
  40822. };
  40823. return InertBodyHelper;
  40824. }());
  40825. /**
  40826. * We need to determine whether the DOMParser exists in the global context.
  40827. * The try-catch is because, on some browsers, trying to access this property
  40828. * on window can actually throw an error.
  40829. *
  40830. * @suppress {uselessCode}
  40831. * @return {?}
  40832. */
  40833. function isDOMParserAvailable() {
  40834. try {
  40835. return !!(/** @type {?} */ (window)).DOMParser;
  40836. }
  40837. catch (/** @type {?} */ e) {
  40838. return false;
  40839. }
  40840. }
  40841. /**
  40842. * @fileoverview added by tsickle
  40843. * @suppress {checkTypes} checked by tsc
  40844. */
  40845. /**
  40846. * @license
  40847. * Copyright Google Inc. All Rights Reserved.
  40848. *
  40849. * Use of this source code is governed by an MIT-style license that can be
  40850. * found in the LICENSE file at https://angular.io/license
  40851. */
  40852. /**
  40853. * A pattern that recognizes a commonly useful subset of URLs that are safe.
  40854. *
  40855. * This regular expression matches a subset of URLs that will not cause script
  40856. * execution if used in URL context within a HTML document. Specifically, this
  40857. * regular expression matches if (comment from here on and regex copied from
  40858. * Soy's EscapingConventions):
  40859. * (1) Either a protocol in a whitelist (http, https, mailto or ftp).
  40860. * (2) or no protocol. A protocol must be followed by a colon. The below
  40861. * allows that by allowing colons only after one of the characters [/?#].
  40862. * A colon after a hash (#) must be in the fragment.
  40863. * Otherwise, a colon after a (?) must be in a query.
  40864. * Otherwise, a colon after a single solidus (/) must be in a path.
  40865. * Otherwise, a colon after a double solidus (//) must be in the authority
  40866. * (before port).
  40867. *
  40868. * The pattern disallows &, used in HTML entity declarations before
  40869. * one of the characters in [/?#]. This disallows HTML entities used in the
  40870. * protocol name, which should never happen, e.g. "h&#116;tp" for "http".
  40871. * It also disallows HTML entities in the first path part of a relative path,
  40872. * e.g. "foo&lt;bar/baz". Our existing escaping functions should not produce
  40873. * that. More importantly, it disallows masking of a colon,
  40874. * e.g. "javascript&#58;...".
  40875. *
  40876. * This regular expression was taken from the Closure sanitization library.
  40877. */
  40878. var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
  40879. /**
  40880. * A pattern that matches safe data URLs. Only matches image, video and audio types.
  40881. */
  40882. var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;
  40883. /**
  40884. * @param {?} url
  40885. * @return {?}
  40886. */
  40887. function sanitizeUrl(url) {
  40888. url = String(url);
  40889. if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN))
  40890. return url;
  40891. if (Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_16" /* isDevMode */])()) {
  40892. getDOM().log("WARNING: sanitizing unsafe URL value " + url + " (see http://g.co/ng/security#xss)");
  40893. }
  40894. return 'unsafe:' + url;
  40895. }
  40896. /**
  40897. * @param {?} srcset
  40898. * @return {?}
  40899. */
  40900. function sanitizeSrcset(srcset) {
  40901. srcset = String(srcset);
  40902. return srcset.split(',').map(function (srcset) { return sanitizeUrl(srcset.trim()); }).join(', ');
  40903. }
  40904. /**
  40905. * @fileoverview added by tsickle
  40906. * @suppress {checkTypes} checked by tsc
  40907. */
  40908. /**
  40909. * @license
  40910. * Copyright Google Inc. All Rights Reserved.
  40911. *
  40912. * Use of this source code is governed by an MIT-style license that can be
  40913. * found in the LICENSE file at https://angular.io/license
  40914. */
  40915. /**
  40916. * @param {?} tags
  40917. * @return {?}
  40918. */
  40919. function tagSet(tags) {
  40920. var /** @type {?} */ res = {};
  40921. for (var _i = 0, _a = tags.split(','); _i < _a.length; _i++) {
  40922. var t = _a[_i];
  40923. res[t] = true;
  40924. }
  40925. return res;
  40926. }
  40927. /**
  40928. * @param {...?} sets
  40929. * @return {?}
  40930. */
  40931. function merge() {
  40932. var sets = [];
  40933. for (var _i = 0; _i < arguments.length; _i++) {
  40934. sets[_i] = arguments[_i];
  40935. }
  40936. var /** @type {?} */ res = {};
  40937. for (var _a = 0, sets_1 = sets; _a < sets_1.length; _a++) {
  40938. var s = sets_1[_a];
  40939. for (var /** @type {?} */ v in s) {
  40940. if (s.hasOwnProperty(v))
  40941. res[v] = true;
  40942. }
  40943. }
  40944. return res;
  40945. }
  40946. // Good source of info about elements and attributes
  40947. // http://dev.w3.org/html5/spec/Overview.html#semantics
  40948. // http://simon.html5.org/html-elements
  40949. // Safe Void Elements - HTML5
  40950. // http://dev.w3.org/html5/spec/Overview.html#void-elements
  40951. var VOID_ELEMENTS = tagSet('area,br,col,hr,img,wbr');
  40952. // Elements that you can, intentionally, leave open (and which close themselves)
  40953. // http://dev.w3.org/html5/spec/Overview.html#optional-tags
  40954. var OPTIONAL_END_TAG_BLOCK_ELEMENTS = tagSet('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr');
  40955. var OPTIONAL_END_TAG_INLINE_ELEMENTS = tagSet('rp,rt');
  40956. var OPTIONAL_END_TAG_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, OPTIONAL_END_TAG_BLOCK_ELEMENTS);
  40957. // Safe Block Elements - HTML5
  40958. var BLOCK_ELEMENTS = merge(OPTIONAL_END_TAG_BLOCK_ELEMENTS, tagSet('address,article,' +
  40959. 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +
  40960. 'h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul'));
  40961. // Inline Elements - HTML5
  40962. var INLINE_ELEMENTS = merge(OPTIONAL_END_TAG_INLINE_ELEMENTS, tagSet('a,abbr,acronym,audio,b,' +
  40963. 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' +
  40964. 'samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video'));
  40965. var VALID_ELEMENTS = merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);
  40966. // Attributes that have href and hence need to be sanitized
  40967. var URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href');
  40968. // Attributes that have special href set hence need to be sanitized
  40969. var SRCSET_ATTRS = tagSet('srcset');
  40970. var HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' +
  40971. 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' +
  40972. 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' +
  40973. 'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' +
  40974. 'valign,value,vspace,width');
  40975. // NB: This currently consciously doesn't support SVG. SVG sanitization has had several security
  40976. // issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via
  40977. // innerHTML is required, SVG attributes should be added here.
  40978. // NB: Sanitization does not allow <form> elements or other active elements (<button> etc). Those
  40979. // can be sanitized, but they increase security surface area without a legitimate use case, so they
  40980. // are left out here.
  40981. var VALID_ATTRS = merge(URI_ATTRS, SRCSET_ATTRS, HTML_ATTRS);
  40982. /**
  40983. * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe
  40984. * attributes.
  40985. */
  40986. var SanitizingHtmlSerializer = /** @class */ (function () {
  40987. function SanitizingHtmlSerializer() {
  40988. this.sanitizedSomething = false;
  40989. this.buf = [];
  40990. this.DOM = getDOM();
  40991. }
  40992. /**
  40993. * @param {?} el
  40994. * @return {?}
  40995. */
  40996. SanitizingHtmlSerializer.prototype.sanitizeChildren = /**
  40997. * @param {?} el
  40998. * @return {?}
  40999. */
  41000. function (el) {
  41001. // This cannot use a TreeWalker, as it has to run on Angular's various DOM adapters.
  41002. // However this code never accesses properties off of `document` before deleting its contents
  41003. // again, so it shouldn't be vulnerable to DOM clobbering.
  41004. var /** @type {?} */ current = /** @type {?} */ ((this.DOM.firstChild(el)));
  41005. while (current) {
  41006. if (this.DOM.isElementNode(current)) {
  41007. this.startElement(/** @type {?} */ (current));
  41008. }
  41009. else if (this.DOM.isTextNode(current)) {
  41010. this.chars(/** @type {?} */ ((this.DOM.nodeValue(current))));
  41011. }
  41012. else {
  41013. // Strip non-element, non-text nodes.
  41014. this.sanitizedSomething = true;
  41015. }
  41016. if (this.DOM.firstChild(current)) {
  41017. current = /** @type {?} */ ((this.DOM.firstChild(current)));
  41018. continue;
  41019. }
  41020. while (current) {
  41021. // Leaving the element. Walk up and to the right, closing tags as we go.
  41022. if (this.DOM.isElementNode(current)) {
  41023. this.endElement(/** @type {?} */ (current));
  41024. }
  41025. var /** @type {?} */ next = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.nextSibling(current))));
  41026. if (next) {
  41027. current = next;
  41028. break;
  41029. }
  41030. current = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.parentElement(current))));
  41031. }
  41032. }
  41033. return this.buf.join('');
  41034. };
  41035. /**
  41036. * @param {?} element
  41037. * @return {?}
  41038. */
  41039. SanitizingHtmlSerializer.prototype.startElement = /**
  41040. * @param {?} element
  41041. * @return {?}
  41042. */
  41043. function (element) {
  41044. var _this = this;
  41045. var /** @type {?} */ tagName = this.DOM.nodeName(element).toLowerCase();
  41046. if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {
  41047. this.sanitizedSomething = true;
  41048. return;
  41049. }
  41050. this.buf.push('<');
  41051. this.buf.push(tagName);
  41052. this.DOM.attributeMap(element).forEach(function (value, attrName) {
  41053. var /** @type {?} */ lower = attrName.toLowerCase();
  41054. if (!VALID_ATTRS.hasOwnProperty(lower)) {
  41055. _this.sanitizedSomething = true;
  41056. return;
  41057. }
  41058. // TODO(martinprobst): Special case image URIs for data:image/...
  41059. if (URI_ATTRS[lower])
  41060. value = sanitizeUrl(value);
  41061. if (SRCSET_ATTRS[lower])
  41062. value = sanitizeSrcset(value);
  41063. _this.buf.push(' ');
  41064. _this.buf.push(attrName);
  41065. _this.buf.push('="');
  41066. _this.buf.push(encodeEntities(value));
  41067. _this.buf.push('"');
  41068. });
  41069. this.buf.push('>');
  41070. };
  41071. /**
  41072. * @param {?} current
  41073. * @return {?}
  41074. */
  41075. SanitizingHtmlSerializer.prototype.endElement = /**
  41076. * @param {?} current
  41077. * @return {?}
  41078. */
  41079. function (current) {
  41080. var /** @type {?} */ tagName = this.DOM.nodeName(current).toLowerCase();
  41081. if (VALID_ELEMENTS.hasOwnProperty(tagName) && !VOID_ELEMENTS.hasOwnProperty(tagName)) {
  41082. this.buf.push('</');
  41083. this.buf.push(tagName);
  41084. this.buf.push('>');
  41085. }
  41086. };
  41087. /**
  41088. * @param {?} chars
  41089. * @return {?}
  41090. */
  41091. SanitizingHtmlSerializer.prototype.chars = /**
  41092. * @param {?} chars
  41093. * @return {?}
  41094. */
  41095. function (chars) { this.buf.push(encodeEntities(chars)); };
  41096. /**
  41097. * @param {?} node
  41098. * @param {?} nextNode
  41099. * @return {?}
  41100. */
  41101. SanitizingHtmlSerializer.prototype.checkClobberedElement = /**
  41102. * @param {?} node
  41103. * @param {?} nextNode
  41104. * @return {?}
  41105. */
  41106. function (node, nextNode) {
  41107. if (nextNode && this.DOM.contains(node, nextNode)) {
  41108. throw new Error("Failed to sanitize html because the element is clobbered: " + this.DOM.getOuterHTML(node));
  41109. }
  41110. return nextNode;
  41111. };
  41112. return SanitizingHtmlSerializer;
  41113. }());
  41114. // Regular Expressions for parsing tags and attributes
  41115. var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
  41116. // ! to ~ is the ASCII range.
  41117. var NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
  41118. /**
  41119. * Escapes all potentially dangerous characters, so that the
  41120. * resulting string can be safely inserted into attribute or
  41121. * element text.
  41122. * @param {?} value
  41123. * @return {?}
  41124. */
  41125. function encodeEntities(value) {
  41126. return value.replace(/&/g, '&amp;')
  41127. .replace(SURROGATE_PAIR_REGEXP, function (match) {
  41128. var /** @type {?} */ hi = match.charCodeAt(0);
  41129. var /** @type {?} */ low = match.charCodeAt(1);
  41130. return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
  41131. })
  41132. .replace(NON_ALPHANUMERIC_REGEXP, function (match) { return '&#' + match.charCodeAt(0) + ';'; })
  41133. .replace(/</g, '&lt;')
  41134. .replace(/>/g, '&gt;');
  41135. }
  41136. var inertBodyHelper;
  41137. /**
  41138. * Sanitizes the given unsafe, untrusted HTML fragment, and returns HTML text that is safe to add to
  41139. * the DOM in a browser environment.
  41140. * @param {?} defaultDoc
  41141. * @param {?} unsafeHtmlInput
  41142. * @return {?}
  41143. */
  41144. function sanitizeHtml(defaultDoc, unsafeHtmlInput) {
  41145. var /** @type {?} */ DOM = getDOM();
  41146. var /** @type {?} */ inertBodyElement = null;
  41147. try {
  41148. inertBodyHelper = inertBodyHelper || new InertBodyHelper(defaultDoc, DOM);
  41149. // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).
  41150. var /** @type {?} */ unsafeHtml = unsafeHtmlInput ? String(unsafeHtmlInput) : '';
  41151. inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
  41152. // mXSS protection. Repeatedly parse the document to make sure it stabilizes, so that a browser
  41153. // trying to auto-correct incorrect HTML cannot cause formerly inert HTML to become dangerous.
  41154. var /** @type {?} */ mXSSAttempts = 5;
  41155. var /** @type {?} */ parsedHtml = unsafeHtml;
  41156. do {
  41157. if (mXSSAttempts === 0) {
  41158. throw new Error('Failed to sanitize html because the input is unstable');
  41159. }
  41160. mXSSAttempts--;
  41161. unsafeHtml = parsedHtml;
  41162. parsedHtml = DOM.getInnerHTML(inertBodyElement);
  41163. inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);
  41164. } while (unsafeHtml !== parsedHtml);
  41165. var /** @type {?} */ sanitizer = new SanitizingHtmlSerializer();
  41166. var /** @type {?} */ safeHtml = sanitizer.sanitizeChildren(DOM.getTemplateContent(inertBodyElement) || inertBodyElement);
  41167. if (Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_16" /* isDevMode */])() && sanitizer.sanitizedSomething) {
  41168. DOM.log('WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).');
  41169. }
  41170. return safeHtml;
  41171. }
  41172. finally {
  41173. // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.
  41174. if (inertBodyElement) {
  41175. var /** @type {?} */ parent_1 = DOM.getTemplateContent(inertBodyElement) || inertBodyElement;
  41176. for (var _i = 0, _a = DOM.childNodesAsList(parent_1); _i < _a.length; _i++) {
  41177. var child = _a[_i];
  41178. DOM.removeChild(parent_1, child);
  41179. }
  41180. }
  41181. }
  41182. }
  41183. /**
  41184. * @fileoverview added by tsickle
  41185. * @suppress {checkTypes} checked by tsc
  41186. */
  41187. /**
  41188. * @license
  41189. * Copyright Google Inc. All Rights Reserved.
  41190. *
  41191. * Use of this source code is governed by an MIT-style license that can be
  41192. * found in the LICENSE file at https://angular.io/license
  41193. */
  41194. /**
  41195. * Regular expression for safe style values.
  41196. *
  41197. * Quotes (" and ') are allowed, but a check must be done elsewhere to ensure they're balanced.
  41198. *
  41199. * ',' allows multiple values to be assigned to the same property (e.g. background-attachment or
  41200. * font-family) and hence could allow multiple values to get injected, but that should pose no risk
  41201. * of XSS.
  41202. *
  41203. * The function expression checks only for XSS safety, not for CSS validity.
  41204. *
  41205. * This regular expression was taken from the Closure sanitization library, and augmented for
  41206. * transformation values.
  41207. */
  41208. var VALUES = '[-,."\'%_!# a-zA-Z0-9]+';
  41209. var TRANSFORMATION_FNS = '(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?';
  41210. var COLOR_FNS = '(?:rgb|hsl)a?';
  41211. var GRADIENTS = '(?:repeating-)?(?:linear|radial)-gradient';
  41212. var CSS3_FNS = '(?:calc|attr)';
  41213. var FN_ARGS = '\\([-0-9.%, #a-zA-Z]+\\)';
  41214. var SAFE_STYLE_VALUE = new RegExp("^(" + VALUES + "|" +
  41215. ("(?:" + TRANSFORMATION_FNS + "|" + COLOR_FNS + "|" + GRADIENTS + "|" + CSS3_FNS + ")") +
  41216. (FN_ARGS + ")$"), 'g');
  41217. /**
  41218. * Matches a `url(...)` value with an arbitrary argument as long as it does
  41219. * not contain parentheses.
  41220. *
  41221. * The URL value still needs to be sanitized separately.
  41222. *
  41223. * `url(...)` values are a very common use case, e.g. for `background-image`. With carefully crafted
  41224. * CSS style rules, it is possible to construct an information leak with `url` values in CSS, e.g.
  41225. * by observing whether scroll bars are displayed, or character ranges used by a font face
  41226. * definition.
  41227. *
  41228. * Angular only allows binding CSS values (as opposed to entire CSS rules), so it is unlikely that
  41229. * binding a URL value without further cooperation from the page will cause an information leak, and
  41230. * if so, it is just a leak, not a full blown XSS vulnerability.
  41231. *
  41232. * Given the common use case, low likelihood of attack vector, and low impact of an attack, this
  41233. * code is permissive and allows URLs that sanitize otherwise.
  41234. */
  41235. var URL_RE = /^url\(([^)]+)\)$/;
  41236. /**
  41237. * Checks that quotes (" and ') are properly balanced inside a string. Assumes
  41238. * that neither escape (\) nor any other character that could result in
  41239. * breaking out of a string parsing context are allowed;
  41240. * see http://www.w3.org/TR/css3-syntax/#string-token-diagram.
  41241. *
  41242. * This code was taken from the Closure sanitization library.
  41243. * @param {?} value
  41244. * @return {?}
  41245. */
  41246. function hasBalancedQuotes(value) {
  41247. var /** @type {?} */ outsideSingle = true;
  41248. var /** @type {?} */ outsideDouble = true;
  41249. for (var /** @type {?} */ i = 0; i < value.length; i++) {
  41250. var /** @type {?} */ c = value.charAt(i);
  41251. if (c === '\'' && outsideDouble) {
  41252. outsideSingle = !outsideSingle;
  41253. }
  41254. else if (c === '"' && outsideSingle) {
  41255. outsideDouble = !outsideDouble;
  41256. }
  41257. }
  41258. return outsideSingle && outsideDouble;
  41259. }
  41260. /**
  41261. * Sanitizes the given untrusted CSS style property value (i.e. not an entire object, just a single
  41262. * value) and returns a value that is safe to use in a browser environment.
  41263. * @param {?} value
  41264. * @return {?}
  41265. */
  41266. function sanitizeStyle(value) {
  41267. value = String(value).trim(); // Make sure it's actually a string.
  41268. if (!value)
  41269. return '';
  41270. // Single url(...) values are supported, but only for URLs that sanitize cleanly. See above for
  41271. // reasoning behind this.
  41272. var /** @type {?} */ urlMatch = value.match(URL_RE);
  41273. if ((urlMatch && sanitizeUrl(urlMatch[1]) === urlMatch[1]) ||
  41274. value.match(SAFE_STYLE_VALUE) && hasBalancedQuotes(value)) {
  41275. return value; // Safe style values.
  41276. }
  41277. if (Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_16" /* isDevMode */])()) {
  41278. getDOM().log("WARNING: sanitizing unsafe style value " + value + " (see http://g.co/ng/security#xss).");
  41279. }
  41280. return 'unsafe';
  41281. }
  41282. /**
  41283. * @fileoverview added by tsickle
  41284. * @suppress {checkTypes} checked by tsc
  41285. */
  41286. /**
  41287. * @license
  41288. * Copyright Google Inc. All Rights Reserved.
  41289. *
  41290. * Use of this source code is governed by an MIT-style license that can be
  41291. * found in the LICENSE file at https://angular.io/license
  41292. */
  41293. /**
  41294. * Marker interface for a value that's safe to use in a particular context.
  41295. *
  41296. * \@stable
  41297. * @record
  41298. */
  41299. /**
  41300. * Marker interface for a value that's safe to use as HTML.
  41301. *
  41302. * \@stable
  41303. * @record
  41304. */
  41305. /**
  41306. * Marker interface for a value that's safe to use as style (CSS).
  41307. *
  41308. * \@stable
  41309. * @record
  41310. */
  41311. /**
  41312. * Marker interface for a value that's safe to use as JavaScript.
  41313. *
  41314. * \@stable
  41315. * @record
  41316. */
  41317. /**
  41318. * Marker interface for a value that's safe to use as a URL linking to a document.
  41319. *
  41320. * \@stable
  41321. * @record
  41322. */
  41323. /**
  41324. * Marker interface for a value that's safe to use as a URL to load executable code from.
  41325. *
  41326. * \@stable
  41327. * @record
  41328. */
  41329. /**
  41330. * DomSanitizer helps preventing Cross Site Scripting Security bugs (XSS) by sanitizing
  41331. * values to be safe to use in the different DOM contexts.
  41332. *
  41333. * For example, when binding a URL in an `<a [href]="someValue">` hyperlink, `someValue` will be
  41334. * sanitized so that an attacker cannot inject e.g. a `javascript:` URL that would execute code on
  41335. * the website.
  41336. *
  41337. * In specific situations, it might be necessary to disable sanitization, for example if the
  41338. * application genuinely needs to produce a `javascript:` style link with a dynamic value in it.
  41339. * Users can bypass security by constructing a value with one of the `bypassSecurityTrust...`
  41340. * methods, and then binding to that value from the template.
  41341. *
  41342. * These situations should be very rare, and extraordinary care must be taken to avoid creating a
  41343. * Cross Site Scripting (XSS) security bug!
  41344. *
  41345. * When using `bypassSecurityTrust...`, make sure to call the method as early as possible and as
  41346. * close as possible to the source of the value, to make it easy to verify no security bug is
  41347. * created by its use.
  41348. *
  41349. * It is not required (and not recommended) to bypass security if the value is safe, e.g. a URL that
  41350. * does not start with a suspicious protocol, or an HTML snippet that does not contain dangerous
  41351. * code. The sanitizer leaves safe values intact.
  41352. *
  41353. * \@security Calling any of the `bypassSecurityTrust...` APIs disables Angular's built-in
  41354. * sanitization for the value passed in. Carefully check and audit all values and code paths going
  41355. * into this call. Make sure any user data is appropriately escaped for this security context.
  41356. * For more detail, see the [Security Guide](http://g.co/ng/security).
  41357. *
  41358. * \@stable
  41359. * @abstract
  41360. */
  41361. var DomSanitizer = /** @class */ (function () {
  41362. function DomSanitizer() {
  41363. }
  41364. return DomSanitizer;
  41365. }());
  41366. var DomSanitizerImpl = /** @class */ (function (_super) {
  41367. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(DomSanitizerImpl, _super);
  41368. function DomSanitizerImpl(_doc) {
  41369. var _this = _super.call(this) || this;
  41370. _this._doc = _doc;
  41371. return _this;
  41372. }
  41373. /**
  41374. * @param {?} ctx
  41375. * @param {?} value
  41376. * @return {?}
  41377. */
  41378. DomSanitizerImpl.prototype.sanitize = /**
  41379. * @param {?} ctx
  41380. * @param {?} value
  41381. * @return {?}
  41382. */
  41383. function (ctx, value) {
  41384. if (value == null)
  41385. return null;
  41386. switch (ctx) {
  41387. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */].NONE:
  41388. return /** @type {?} */ (value);
  41389. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */].HTML:
  41390. if (value instanceof SafeHtmlImpl)
  41391. return value.changingThisBreaksApplicationSecurity;
  41392. this.checkNotSafeValue(value, 'HTML');
  41393. return sanitizeHtml(this._doc, String(value));
  41394. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */].STYLE:
  41395. if (value instanceof SafeStyleImpl)
  41396. return value.changingThisBreaksApplicationSecurity;
  41397. this.checkNotSafeValue(value, 'Style');
  41398. return sanitizeStyle(/** @type {?} */ (value));
  41399. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */].SCRIPT:
  41400. if (value instanceof SafeScriptImpl)
  41401. return value.changingThisBreaksApplicationSecurity;
  41402. this.checkNotSafeValue(value, 'Script');
  41403. throw new Error('unsafe value used in a script context');
  41404. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */].URL:
  41405. if (value instanceof SafeResourceUrlImpl || value instanceof SafeUrlImpl) {
  41406. // Allow resource URLs in URL contexts, they are strictly more trusted.
  41407. return value.changingThisBreaksApplicationSecurity;
  41408. }
  41409. this.checkNotSafeValue(value, 'URL');
  41410. return sanitizeUrl(String(value));
  41411. case __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */].RESOURCE_URL:
  41412. if (value instanceof SafeResourceUrlImpl) {
  41413. return value.changingThisBreaksApplicationSecurity;
  41414. }
  41415. this.checkNotSafeValue(value, 'ResourceURL');
  41416. throw new Error('unsafe value used in a resource URL context (see http://g.co/ng/security#xss)');
  41417. default:
  41418. throw new Error("Unexpected SecurityContext " + ctx + " (see http://g.co/ng/security#xss)");
  41419. }
  41420. };
  41421. /**
  41422. * @param {?} value
  41423. * @param {?} expectedType
  41424. * @return {?}
  41425. */
  41426. DomSanitizerImpl.prototype.checkNotSafeValue = /**
  41427. * @param {?} value
  41428. * @param {?} expectedType
  41429. * @return {?}
  41430. */
  41431. function (value, expectedType) {
  41432. if (value instanceof SafeValueImpl) {
  41433. throw new Error("Required a safe " + expectedType + ", got a " + value.getTypeName() + " " +
  41434. "(see http://g.co/ng/security#xss)");
  41435. }
  41436. };
  41437. /**
  41438. * @param {?} value
  41439. * @return {?}
  41440. */
  41441. DomSanitizerImpl.prototype.bypassSecurityTrustHtml = /**
  41442. * @param {?} value
  41443. * @return {?}
  41444. */
  41445. function (value) { return new SafeHtmlImpl(value); };
  41446. /**
  41447. * @param {?} value
  41448. * @return {?}
  41449. */
  41450. DomSanitizerImpl.prototype.bypassSecurityTrustStyle = /**
  41451. * @param {?} value
  41452. * @return {?}
  41453. */
  41454. function (value) { return new SafeStyleImpl(value); };
  41455. /**
  41456. * @param {?} value
  41457. * @return {?}
  41458. */
  41459. DomSanitizerImpl.prototype.bypassSecurityTrustScript = /**
  41460. * @param {?} value
  41461. * @return {?}
  41462. */
  41463. function (value) { return new SafeScriptImpl(value); };
  41464. /**
  41465. * @param {?} value
  41466. * @return {?}
  41467. */
  41468. DomSanitizerImpl.prototype.bypassSecurityTrustUrl = /**
  41469. * @param {?} value
  41470. * @return {?}
  41471. */
  41472. function (value) { return new SafeUrlImpl(value); };
  41473. /**
  41474. * @param {?} value
  41475. * @return {?}
  41476. */
  41477. DomSanitizerImpl.prototype.bypassSecurityTrustResourceUrl = /**
  41478. * @param {?} value
  41479. * @return {?}
  41480. */
  41481. function (value) {
  41482. return new SafeResourceUrlImpl(value);
  41483. };
  41484. DomSanitizerImpl.decorators = [
  41485. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  41486. ];
  41487. /** @nocollapse */
  41488. DomSanitizerImpl.ctorParameters = function () { return [
  41489. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */], args: [DOCUMENT$1,] },] },
  41490. ]; };
  41491. return DomSanitizerImpl;
  41492. }(DomSanitizer));
  41493. /**
  41494. * @abstract
  41495. */
  41496. var SafeValueImpl = /** @class */ (function () {
  41497. function SafeValueImpl(changingThisBreaksApplicationSecurity) {
  41498. // empty
  41499. this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;
  41500. }
  41501. /**
  41502. * @return {?}
  41503. */
  41504. SafeValueImpl.prototype.toString = /**
  41505. * @return {?}
  41506. */
  41507. function () {
  41508. return "SafeValue must use [property]=binding: " + this.changingThisBreaksApplicationSecurity +
  41509. " (see http://g.co/ng/security#xss)";
  41510. };
  41511. return SafeValueImpl;
  41512. }());
  41513. var SafeHtmlImpl = /** @class */ (function (_super) {
  41514. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(SafeHtmlImpl, _super);
  41515. function SafeHtmlImpl() {
  41516. return _super !== null && _super.apply(this, arguments) || this;
  41517. }
  41518. /**
  41519. * @return {?}
  41520. */
  41521. SafeHtmlImpl.prototype.getTypeName = /**
  41522. * @return {?}
  41523. */
  41524. function () { return 'HTML'; };
  41525. return SafeHtmlImpl;
  41526. }(SafeValueImpl));
  41527. var SafeStyleImpl = /** @class */ (function (_super) {
  41528. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(SafeStyleImpl, _super);
  41529. function SafeStyleImpl() {
  41530. return _super !== null && _super.apply(this, arguments) || this;
  41531. }
  41532. /**
  41533. * @return {?}
  41534. */
  41535. SafeStyleImpl.prototype.getTypeName = /**
  41536. * @return {?}
  41537. */
  41538. function () { return 'Style'; };
  41539. return SafeStyleImpl;
  41540. }(SafeValueImpl));
  41541. var SafeScriptImpl = /** @class */ (function (_super) {
  41542. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(SafeScriptImpl, _super);
  41543. function SafeScriptImpl() {
  41544. return _super !== null && _super.apply(this, arguments) || this;
  41545. }
  41546. /**
  41547. * @return {?}
  41548. */
  41549. SafeScriptImpl.prototype.getTypeName = /**
  41550. * @return {?}
  41551. */
  41552. function () { return 'Script'; };
  41553. return SafeScriptImpl;
  41554. }(SafeValueImpl));
  41555. var SafeUrlImpl = /** @class */ (function (_super) {
  41556. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(SafeUrlImpl, _super);
  41557. function SafeUrlImpl() {
  41558. return _super !== null && _super.apply(this, arguments) || this;
  41559. }
  41560. /**
  41561. * @return {?}
  41562. */
  41563. SafeUrlImpl.prototype.getTypeName = /**
  41564. * @return {?}
  41565. */
  41566. function () { return 'URL'; };
  41567. return SafeUrlImpl;
  41568. }(SafeValueImpl));
  41569. var SafeResourceUrlImpl = /** @class */ (function (_super) {
  41570. Object(__WEBPACK_IMPORTED_MODULE_2_tslib__["b" /* __extends */])(SafeResourceUrlImpl, _super);
  41571. function SafeResourceUrlImpl() {
  41572. return _super !== null && _super.apply(this, arguments) || this;
  41573. }
  41574. /**
  41575. * @return {?}
  41576. */
  41577. SafeResourceUrlImpl.prototype.getTypeName = /**
  41578. * @return {?}
  41579. */
  41580. function () { return 'ResourceURL'; };
  41581. return SafeResourceUrlImpl;
  41582. }(SafeValueImpl));
  41583. /**
  41584. * @fileoverview added by tsickle
  41585. * @suppress {checkTypes} checked by tsc
  41586. */
  41587. /**
  41588. * @license
  41589. * Copyright Google Inc. All Rights Reserved.
  41590. *
  41591. * Use of this source code is governed by an MIT-style license that can be
  41592. * found in the LICENSE file at https://angular.io/license
  41593. */
  41594. var INTERNAL_BROWSER_PLATFORM_PROVIDERS = [
  41595. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["Q" /* PLATFORM_ID */], useValue: __WEBPACK_IMPORTED_MODULE_0__angular_common__["i" /* ɵPLATFORM_BROWSER_ID */] },
  41596. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["R" /* PLATFORM_INITIALIZER */], useValue: initDomAdapter, multi: true },
  41597. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_common__["h" /* PlatformLocation */], useClass: BrowserPlatformLocation, deps: [DOCUMENT$1] },
  41598. { provide: DOCUMENT$1, useFactory: _document, deps: [] },
  41599. ];
  41600. /**
  41601. * \@security Replacing built-in sanitization providers exposes the application to XSS risks.
  41602. * Attacker-controlled data introduced by an unsanitized provider could expose your
  41603. * application to XSS risks. For more detail, see the [Security Guide](http://g.co/ng/security).
  41604. * \@experimental
  41605. */
  41606. var BROWSER_SANITIZATION_PROVIDERS = [
  41607. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["Z" /* Sanitizer */], useExisting: DomSanitizer },
  41608. { provide: DomSanitizer, useClass: DomSanitizerImpl, deps: [DOCUMENT$1] },
  41609. ];
  41610. /**
  41611. * \@stable
  41612. */
  41613. var platformBrowser = Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_13" /* createPlatformFactory */])(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_17" /* platformCore */], 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);
  41614. /**
  41615. * @return {?}
  41616. */
  41617. function initDomAdapter() {
  41618. BrowserDomAdapter.makeCurrent();
  41619. BrowserGetTestability.init();
  41620. }
  41621. /**
  41622. * @return {?}
  41623. */
  41624. function errorHandler() {
  41625. return new __WEBPACK_IMPORTED_MODULE_1__angular_core__["u" /* ErrorHandler */]();
  41626. }
  41627. /**
  41628. * @return {?}
  41629. */
  41630. function _document() {
  41631. return document;
  41632. }
  41633. /**
  41634. * The ng module for the browser.
  41635. *
  41636. * \@stable
  41637. */
  41638. var BrowserModule = /** @class */ (function () {
  41639. function BrowserModule(parentModule) {
  41640. if (parentModule) {
  41641. throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.");
  41642. }
  41643. }
  41644. /**
  41645. * Configures a browser-based application to transition from a server-rendered app, if
  41646. * one is present on the page. The specified parameters must include an application id,
  41647. * which must match between the client and server applications.
  41648. *
  41649. * @experimental
  41650. */
  41651. /**
  41652. * Configures a browser-based application to transition from a server-rendered app, if
  41653. * one is present on the page. The specified parameters must include an application id,
  41654. * which must match between the client and server applications.
  41655. *
  41656. * \@experimental
  41657. * @param {?} params
  41658. * @return {?}
  41659. */
  41660. BrowserModule.withServerTransition = /**
  41661. * Configures a browser-based application to transition from a server-rendered app, if
  41662. * one is present on the page. The specified parameters must include an application id,
  41663. * which must match between the client and server applications.
  41664. *
  41665. * \@experimental
  41666. * @param {?} params
  41667. * @return {?}
  41668. */
  41669. function (params) {
  41670. return {
  41671. ngModule: BrowserModule,
  41672. providers: [
  41673. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["b" /* APP_ID */], useValue: params.appId },
  41674. { provide: TRANSITION_ID, useExisting: __WEBPACK_IMPORTED_MODULE_1__angular_core__["b" /* APP_ID */] },
  41675. SERVER_TRANSITION_PROVIDERS,
  41676. ],
  41677. };
  41678. };
  41679. BrowserModule.decorators = [
  41680. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["I" /* NgModule */], args: [{
  41681. providers: [
  41682. BROWSER_SANITIZATION_PROVIDERS,
  41683. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["u" /* ErrorHandler */], useFactory: errorHandler, deps: [] },
  41684. { provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true },
  41685. { provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true },
  41686. { provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true },
  41687. { provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig },
  41688. DomRendererFactory2,
  41689. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["X" /* RendererFactory2 */], useExisting: DomRendererFactory2 },
  41690. { provide: SharedStylesHost, useExisting: DomSharedStylesHost },
  41691. DomSharedStylesHost,
  41692. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_6" /* Testability */],
  41693. EventManager,
  41694. ELEMENT_PROBE_PROVIDERS,
  41695. Meta,
  41696. Title,
  41697. ],
  41698. exports: [__WEBPACK_IMPORTED_MODULE_0__angular_common__["b" /* CommonModule */], __WEBPACK_IMPORTED_MODULE_1__angular_core__["e" /* ApplicationModule */]]
  41699. },] },
  41700. ];
  41701. /** @nocollapse */
  41702. BrowserModule.ctorParameters = function () { return [
  41703. { type: BrowserModule, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_2" /* SkipSelf */] },] },
  41704. ]; };
  41705. return BrowserModule;
  41706. }());
  41707. /**
  41708. * @fileoverview added by tsickle
  41709. * @suppress {checkTypes} checked by tsc
  41710. */
  41711. /**
  41712. * @license
  41713. * Copyright Google Inc. All Rights Reserved.
  41714. *
  41715. * Use of this source code is governed by an MIT-style license that can be
  41716. * found in the LICENSE file at https://angular.io/license
  41717. */
  41718. var win = typeof window !== 'undefined' && window || /** @type {?} */ ({});
  41719. /**
  41720. * @fileoverview added by tsickle
  41721. * @suppress {checkTypes} checked by tsc
  41722. */
  41723. /**
  41724. * @license
  41725. * Copyright Google Inc. All Rights Reserved.
  41726. *
  41727. * Use of this source code is governed by an MIT-style license that can be
  41728. * found in the LICENSE file at https://angular.io/license
  41729. */
  41730. var ChangeDetectionPerfRecord = /** @class */ (function () {
  41731. function ChangeDetectionPerfRecord(msPerTick, numTicks) {
  41732. this.msPerTick = msPerTick;
  41733. this.numTicks = numTicks;
  41734. }
  41735. return ChangeDetectionPerfRecord;
  41736. }());
  41737. /**
  41738. * Entry point for all Angular profiling-related debug tools. This object
  41739. * corresponds to the `ng.profiler` in the dev console.
  41740. */
  41741. var AngularProfiler = /** @class */ (function () {
  41742. function AngularProfiler(ref) {
  41743. this.appRef = ref.injector.get(__WEBPACK_IMPORTED_MODULE_1__angular_core__["f" /* ApplicationRef */]);
  41744. }
  41745. // tslint:disable:no-console
  41746. /**
  41747. * Exercises change detection in a loop and then prints the average amount of
  41748. * time in milliseconds how long a single round of change detection takes for
  41749. * the current state of the UI. It runs a minimum of 5 rounds for a minimum
  41750. * of 500 milliseconds.
  41751. *
  41752. * Optionally, a user may pass a `config` parameter containing a map of
  41753. * options. Supported options are:
  41754. *
  41755. * `record` (boolean) - causes the profiler to record a CPU profile while
  41756. * it exercises the change detector. Example:
  41757. *
  41758. * ```
  41759. * ng.profiler.timeChangeDetection({record: true})
  41760. * ```
  41761. */
  41762. /**
  41763. * Exercises change detection in a loop and then prints the average amount of
  41764. * time in milliseconds how long a single round of change detection takes for
  41765. * the current state of the UI. It runs a minimum of 5 rounds for a minimum
  41766. * of 500 milliseconds.
  41767. *
  41768. * Optionally, a user may pass a `config` parameter containing a map of
  41769. * options. Supported options are:
  41770. *
  41771. * `record` (boolean) - causes the profiler to record a CPU profile while
  41772. * it exercises the change detector. Example:
  41773. *
  41774. * ```
  41775. * ng.profiler.timeChangeDetection({record: true})
  41776. * ```
  41777. * @param {?} config
  41778. * @return {?}
  41779. */
  41780. AngularProfiler.prototype.timeChangeDetection = /**
  41781. * Exercises change detection in a loop and then prints the average amount of
  41782. * time in milliseconds how long a single round of change detection takes for
  41783. * the current state of the UI. It runs a minimum of 5 rounds for a minimum
  41784. * of 500 milliseconds.
  41785. *
  41786. * Optionally, a user may pass a `config` parameter containing a map of
  41787. * options. Supported options are:
  41788. *
  41789. * `record` (boolean) - causes the profiler to record a CPU profile while
  41790. * it exercises the change detector. Example:
  41791. *
  41792. * ```
  41793. * ng.profiler.timeChangeDetection({record: true})
  41794. * ```
  41795. * @param {?} config
  41796. * @return {?}
  41797. */
  41798. function (config) {
  41799. var /** @type {?} */ record = config && config['record'];
  41800. var /** @type {?} */ profileName = 'Change Detection';
  41801. // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened
  41802. var /** @type {?} */ isProfilerAvailable = win.console.profile != null;
  41803. if (record && isProfilerAvailable) {
  41804. win.console.profile(profileName);
  41805. }
  41806. var /** @type {?} */ start = getDOM().performanceNow();
  41807. var /** @type {?} */ numTicks = 0;
  41808. while (numTicks < 5 || (getDOM().performanceNow() - start) < 500) {
  41809. this.appRef.tick();
  41810. numTicks++;
  41811. }
  41812. var /** @type {?} */ end = getDOM().performanceNow();
  41813. if (record && isProfilerAvailable) {
  41814. // need to cast to <any> because type checker thinks there's no argument
  41815. // while in fact there is:
  41816. //
  41817. // https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd
  41818. (/** @type {?} */ (win.console.profileEnd))(profileName);
  41819. }
  41820. var /** @type {?} */ msPerTick = (end - start) / numTicks;
  41821. win.console.log("ran " + numTicks + " change detection cycles");
  41822. win.console.log(msPerTick.toFixed(2) + " ms per check");
  41823. return new ChangeDetectionPerfRecord(msPerTick, numTicks);
  41824. };
  41825. return AngularProfiler;
  41826. }());
  41827. /**
  41828. * @fileoverview added by tsickle
  41829. * @suppress {checkTypes} checked by tsc
  41830. */
  41831. /**
  41832. * @license
  41833. * Copyright Google Inc. All Rights Reserved.
  41834. *
  41835. * Use of this source code is governed by an MIT-style license that can be
  41836. * found in the LICENSE file at https://angular.io/license
  41837. */
  41838. var PROFILER_GLOBAL_NAME = 'profiler';
  41839. /**
  41840. * Enabled Angular debug tools that are accessible via your browser's
  41841. * developer console.
  41842. *
  41843. * Usage:
  41844. *
  41845. * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)
  41846. * 1. Type `ng.` (usually the console will show auto-complete suggestion)
  41847. * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`
  41848. * then hit Enter.
  41849. *
  41850. * \@experimental All debugging apis are currently experimental.
  41851. * @template T
  41852. * @param {?} ref
  41853. * @return {?}
  41854. */
  41855. function enableDebugTools(ref) {
  41856. exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));
  41857. return ref;
  41858. }
  41859. /**
  41860. * Disables Angular tools.
  41861. *
  41862. * \@experimental All debugging apis are currently experimental.
  41863. * @return {?}
  41864. */
  41865. function disableDebugTools() {
  41866. exportNgVar(PROFILER_GLOBAL_NAME, null);
  41867. }
  41868. /**
  41869. * @fileoverview added by tsickle
  41870. * @suppress {checkTypes} checked by tsc
  41871. */
  41872. /**
  41873. * @license
  41874. * Copyright Google Inc. All Rights Reserved.
  41875. *
  41876. * Use of this source code is governed by an MIT-style license that can be
  41877. * found in the LICENSE file at https://angular.io/license
  41878. */
  41879. /**
  41880. * @param {?} text
  41881. * @return {?}
  41882. */
  41883. function escapeHtml(text) {
  41884. var /** @type {?} */ escapedText = {
  41885. '&': '&a;',
  41886. '"': '&q;',
  41887. '\'': '&s;',
  41888. '<': '&l;',
  41889. '>': '&g;',
  41890. };
  41891. return text.replace(/[&"'<>]/g, function (s) { return escapedText[s]; });
  41892. }
  41893. /**
  41894. * @param {?} text
  41895. * @return {?}
  41896. */
  41897. function unescapeHtml(text) {
  41898. var /** @type {?} */ unescapedText = {
  41899. '&a;': '&',
  41900. '&q;': '"',
  41901. '&s;': '\'',
  41902. '&l;': '<',
  41903. '&g;': '>',
  41904. };
  41905. return text.replace(/&[^;]+;/g, function (s) { return unescapedText[s]; });
  41906. }
  41907. /**
  41908. * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.
  41909. *
  41910. * Example:
  41911. *
  41912. * ```
  41913. * const COUNTER_KEY = makeStateKey<number>('counter');
  41914. * let value = 10;
  41915. *
  41916. * transferState.set(COUNTER_KEY, value);
  41917. * ```
  41918. *
  41919. * \@experimental
  41920. * @template T
  41921. * @param {?} key
  41922. * @return {?}
  41923. */
  41924. function makeStateKey(key) {
  41925. return /** @type {?} */ (key);
  41926. }
  41927. /**
  41928. * A key value store that is transferred from the application on the server side to the application
  41929. * on the client side.
  41930. *
  41931. * `TransferState` will be available as an injectable token. To use it import
  41932. * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.
  41933. *
  41934. * The values in the store are serialized/deserialized using JSON.stringify/JSON.parse. So only
  41935. * boolean, number, string, null and non-class objects will be serialized and deserialzied in a
  41936. * non-lossy manner.
  41937. *
  41938. * \@experimental
  41939. */
  41940. var TransferState = /** @class */ (function () {
  41941. function TransferState() {
  41942. this.store = {};
  41943. this.onSerializeCallbacks = {};
  41944. }
  41945. /** @internal */
  41946. /**
  41947. * \@internal
  41948. * @param {?} initState
  41949. * @return {?}
  41950. */
  41951. TransferState.init = /**
  41952. * \@internal
  41953. * @param {?} initState
  41954. * @return {?}
  41955. */
  41956. function (initState) {
  41957. var /** @type {?} */ transferState = new TransferState();
  41958. transferState.store = initState;
  41959. return transferState;
  41960. };
  41961. /**
  41962. * Get the value corresponding to a key. Return `defaultValue` if key is not found.
  41963. */
  41964. /**
  41965. * Get the value corresponding to a key. Return `defaultValue` if key is not found.
  41966. * @template T
  41967. * @param {?} key
  41968. * @param {?} defaultValue
  41969. * @return {?}
  41970. */
  41971. TransferState.prototype.get = /**
  41972. * Get the value corresponding to a key. Return `defaultValue` if key is not found.
  41973. * @template T
  41974. * @param {?} key
  41975. * @param {?} defaultValue
  41976. * @return {?}
  41977. */
  41978. function (key, defaultValue) {
  41979. return this.store[key] !== undefined ? /** @type {?} */ (this.store[key]) : defaultValue;
  41980. };
  41981. /**
  41982. * Set the value corresponding to a key.
  41983. */
  41984. /**
  41985. * Set the value corresponding to a key.
  41986. * @template T
  41987. * @param {?} key
  41988. * @param {?} value
  41989. * @return {?}
  41990. */
  41991. TransferState.prototype.set = /**
  41992. * Set the value corresponding to a key.
  41993. * @template T
  41994. * @param {?} key
  41995. * @param {?} value
  41996. * @return {?}
  41997. */
  41998. function (key, value) { this.store[key] = value; };
  41999. /**
  42000. * Remove a key from the store.
  42001. */
  42002. /**
  42003. * Remove a key from the store.
  42004. * @template T
  42005. * @param {?} key
  42006. * @return {?}
  42007. */
  42008. TransferState.prototype.remove = /**
  42009. * Remove a key from the store.
  42010. * @template T
  42011. * @param {?} key
  42012. * @return {?}
  42013. */
  42014. function (key) { delete this.store[key]; };
  42015. /**
  42016. * Test whether a key exists in the store.
  42017. */
  42018. /**
  42019. * Test whether a key exists in the store.
  42020. * @template T
  42021. * @param {?} key
  42022. * @return {?}
  42023. */
  42024. TransferState.prototype.hasKey = /**
  42025. * Test whether a key exists in the store.
  42026. * @template T
  42027. * @param {?} key
  42028. * @return {?}
  42029. */
  42030. function (key) { return this.store.hasOwnProperty(key); };
  42031. /**
  42032. * Register a callback to provide the value for a key when `toJson` is called.
  42033. */
  42034. /**
  42035. * Register a callback to provide the value for a key when `toJson` is called.
  42036. * @template T
  42037. * @param {?} key
  42038. * @param {?} callback
  42039. * @return {?}
  42040. */
  42041. TransferState.prototype.onSerialize = /**
  42042. * Register a callback to provide the value for a key when `toJson` is called.
  42043. * @template T
  42044. * @param {?} key
  42045. * @param {?} callback
  42046. * @return {?}
  42047. */
  42048. function (key, callback) {
  42049. this.onSerializeCallbacks[key] = callback;
  42050. };
  42051. /**
  42052. * Serialize the current state of the store to JSON.
  42053. */
  42054. /**
  42055. * Serialize the current state of the store to JSON.
  42056. * @return {?}
  42057. */
  42058. TransferState.prototype.toJson = /**
  42059. * Serialize the current state of the store to JSON.
  42060. * @return {?}
  42061. */
  42062. function () {
  42063. // Call the onSerialize callbacks and put those values into the store.
  42064. for (var /** @type {?} */ key in this.onSerializeCallbacks) {
  42065. if (this.onSerializeCallbacks.hasOwnProperty(key)) {
  42066. try {
  42067. this.store[key] = this.onSerializeCallbacks[key]();
  42068. }
  42069. catch (/** @type {?} */ e) {
  42070. console.warn('Exception in onSerialize callback: ', e);
  42071. }
  42072. }
  42073. }
  42074. return JSON.stringify(this.store);
  42075. };
  42076. TransferState.decorators = [
  42077. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  42078. ];
  42079. /** @nocollapse */
  42080. TransferState.ctorParameters = function () { return []; };
  42081. return TransferState;
  42082. }());
  42083. /**
  42084. * @param {?} doc
  42085. * @param {?} appId
  42086. * @return {?}
  42087. */
  42088. function initTransferState(doc, appId) {
  42089. // Locate the script tag with the JSON data transferred from the server.
  42090. // The id of the script tag is set to the Angular appId + 'state'.
  42091. var /** @type {?} */ script = doc.getElementById(appId + '-state');
  42092. var /** @type {?} */ initialState = {};
  42093. if (script && script.textContent) {
  42094. try {
  42095. initialState = JSON.parse(unescapeHtml(script.textContent));
  42096. }
  42097. catch (/** @type {?} */ e) {
  42098. console.warn('Exception while restoring TransferState for app ' + appId, e);
  42099. }
  42100. }
  42101. return TransferState.init(initialState);
  42102. }
  42103. /**
  42104. * NgModule to install on the client side while using the `TransferState` to transfer state from
  42105. * server to client.
  42106. *
  42107. * \@experimental
  42108. */
  42109. var BrowserTransferStateModule = /** @class */ (function () {
  42110. function BrowserTransferStateModule() {
  42111. }
  42112. BrowserTransferStateModule.decorators = [
  42113. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["I" /* NgModule */], args: [{
  42114. providers: [{ provide: TransferState, useFactory: initTransferState, deps: [DOCUMENT$1, __WEBPACK_IMPORTED_MODULE_1__angular_core__["b" /* APP_ID */]] }],
  42115. },] },
  42116. ];
  42117. /** @nocollapse */
  42118. BrowserTransferStateModule.ctorParameters = function () { return []; };
  42119. return BrowserTransferStateModule;
  42120. }());
  42121. /**
  42122. * @fileoverview added by tsickle
  42123. * @suppress {checkTypes} checked by tsc
  42124. */
  42125. /**
  42126. * @license
  42127. * Copyright Google Inc. All Rights Reserved.
  42128. *
  42129. * Use of this source code is governed by an MIT-style license that can be
  42130. * found in the LICENSE file at https://angular.io/license
  42131. */
  42132. /**
  42133. * Predicates for use with {\@link DebugElement}'s query functions.
  42134. *
  42135. * \@experimental All debugging apis are currently experimental.
  42136. */
  42137. var By = /** @class */ (function () {
  42138. function By() {
  42139. }
  42140. /**
  42141. * Match all elements.
  42142. *
  42143. * ## Example
  42144. *
  42145. * {@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
  42146. */
  42147. /**
  42148. * Match all elements.
  42149. *
  42150. * ## Example
  42151. *
  42152. * {\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
  42153. * @return {?}
  42154. */
  42155. By.all = /**
  42156. * Match all elements.
  42157. *
  42158. * ## Example
  42159. *
  42160. * {\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}
  42161. * @return {?}
  42162. */
  42163. function () { return function (debugElement) { return true; }; };
  42164. /**
  42165. * Match elements by the given CSS selector.
  42166. *
  42167. * ## Example
  42168. *
  42169. * {@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
  42170. */
  42171. /**
  42172. * Match elements by the given CSS selector.
  42173. *
  42174. * ## Example
  42175. *
  42176. * {\@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
  42177. * @param {?} selector
  42178. * @return {?}
  42179. */
  42180. By.css = /**
  42181. * Match elements by the given CSS selector.
  42182. *
  42183. * ## Example
  42184. *
  42185. * {\@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}
  42186. * @param {?} selector
  42187. * @return {?}
  42188. */
  42189. function (selector) {
  42190. return function (debugElement) {
  42191. return debugElement.nativeElement != null ?
  42192. getDOM().elementMatches(debugElement.nativeElement, selector) :
  42193. false;
  42194. };
  42195. };
  42196. /**
  42197. * Match elements that have the given directive present.
  42198. *
  42199. * ## Example
  42200. *
  42201. * {@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
  42202. */
  42203. /**
  42204. * Match elements that have the given directive present.
  42205. *
  42206. * ## Example
  42207. *
  42208. * {\@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
  42209. * @param {?} type
  42210. * @return {?}
  42211. */
  42212. By.directive = /**
  42213. * Match elements that have the given directive present.
  42214. *
  42215. * ## Example
  42216. *
  42217. * {\@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}
  42218. * @param {?} type
  42219. * @return {?}
  42220. */
  42221. function (type) {
  42222. return function (debugElement) { return ((debugElement.providerTokens)).indexOf(type) !== -1; };
  42223. };
  42224. return By;
  42225. }());
  42226. /**
  42227. * @fileoverview added by tsickle
  42228. * @suppress {checkTypes} checked by tsc
  42229. */
  42230. /**
  42231. * @license
  42232. * Copyright Google Inc. All Rights Reserved.
  42233. *
  42234. * Use of this source code is governed by an MIT-style license that can be
  42235. * found in the LICENSE file at https://angular.io/license
  42236. */
  42237. /**
  42238. * @fileoverview added by tsickle
  42239. * @suppress {checkTypes} checked by tsc
  42240. */
  42241. /**
  42242. * @license
  42243. * Copyright Google Inc. All Rights Reserved.
  42244. *
  42245. * Use of this source code is governed by an MIT-style license that can be
  42246. * found in the LICENSE file at https://angular.io/license
  42247. */
  42248. /**
  42249. * \@stable
  42250. */
  42251. var VERSION = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["_7" /* Version */]('5.2.11');
  42252. /**
  42253. * @fileoverview added by tsickle
  42254. * @suppress {checkTypes} checked by tsc
  42255. */
  42256. /**
  42257. * @license
  42258. * Copyright Google Inc. All Rights Reserved.
  42259. *
  42260. * Use of this source code is governed by an MIT-style license that can be
  42261. * found in the LICENSE file at https://angular.io/license
  42262. */
  42263. /**
  42264. * @fileoverview added by tsickle
  42265. * @suppress {checkTypes} checked by tsc
  42266. */
  42267. /**
  42268. * @license
  42269. * Copyright Google Inc. All Rights Reserved.
  42270. *
  42271. * Use of this source code is governed by an MIT-style license that can be
  42272. * found in the LICENSE file at https://angular.io/license
  42273. */
  42274. /**
  42275. * @module
  42276. * @description
  42277. * Entry point for all public APIs of this package.
  42278. */
  42279. // This file only reexports content of the `src` folder. Keep it that way.
  42280. /**
  42281. * @fileoverview added by tsickle
  42282. * @suppress {checkTypes} checked by tsc
  42283. */
  42284. /**
  42285. * Generated bundle index. Do not edit.
  42286. */
  42287. //# sourceMappingURL=platform-browser.js.map
  42288. /***/ }),
  42289. /* 41 */
  42290. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  42291. "use strict";
  42292. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuController; });
  42293. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  42294. /**
  42295. * @name MenuController
  42296. * @description
  42297. * The MenuController is a provider which makes it easy to control a [Menu](../../Menu/Menu/).
  42298. * Its methods can be used to display the menu, enable the menu, toggle the menu, and more.
  42299. * The controller will grab a reference to the menu by the `side`, `id`, or, if neither
  42300. * of these are passed to it, it will grab the first menu it finds.
  42301. *
  42302. *
  42303. * @usage
  42304. *
  42305. * Add a basic menu component to start with. See the [Menu](../../Menu/Menu/) API docs
  42306. * for more information on adding menu components.
  42307. *
  42308. * ```html
  42309. * <ion-menu [content]="mycontent">
  42310. * <ion-content>
  42311. * <ion-list>
  42312. * ...
  42313. * </ion-list>
  42314. * </ion-content>
  42315. * </ion-menu>
  42316. *
  42317. * <ion-nav #mycontent [root]="rootPage"></ion-nav>
  42318. * ```
  42319. *
  42320. * To call the controller methods, inject the `MenuController` provider
  42321. * into the page. Then, create some methods for opening, closing, and
  42322. * toggling the menu.
  42323. *
  42324. * ```ts
  42325. * import { Component } from '@angular/core';
  42326. * import { MenuController } from 'ionic-angular';
  42327. *
  42328. * @Component({...})
  42329. * export class MyPage {
  42330. *
  42331. * constructor(public menuCtrl: MenuController) {
  42332. *
  42333. * }
  42334. *
  42335. * openMenu() {
  42336. * this.menuCtrl.open();
  42337. * }
  42338. *
  42339. * closeMenu() {
  42340. * this.menuCtrl.close();
  42341. * }
  42342. *
  42343. * toggleMenu() {
  42344. * this.menuCtrl.toggle();
  42345. * }
  42346. *
  42347. * }
  42348. * ```
  42349. *
  42350. * Since only one menu exists, the `MenuController` will grab the
  42351. * correct menu and call the correct method for each.
  42352. *
  42353. *
  42354. * ### Multiple Menus on Different Sides
  42355. *
  42356. * For applications with both a left and right menu, the desired menu can be
  42357. * grabbed by passing the `side` of the menu. If nothing is passed, it will
  42358. * default to the `"left"` menu.
  42359. *
  42360. * ```html
  42361. * <ion-menu side="left" [content]="mycontent">...</ion-menu>
  42362. * <ion-menu side="right" [content]="mycontent">...</ion-menu>
  42363. * <ion-nav #mycontent [root]="rootPage"></ion-nav>
  42364. * ```
  42365. *
  42366. * ```ts
  42367. * toggleLeftMenu() {
  42368. * this.menuCtrl.toggle();
  42369. * }
  42370. *
  42371. * toggleRightMenu() {
  42372. * this.menuCtrl.toggle('right');
  42373. * }
  42374. * ```
  42375. *
  42376. *
  42377. * ### Multiple Menus on the Same Side
  42378. *
  42379. * An application can have multiple menus on the same side. In order to determine
  42380. * the menu to control, an `id` should be passed. In the example below, the menu
  42381. * with the `authenticated` id will be enabled, and the menu with the `unauthenticated`
  42382. * id will be disabled.
  42383. *
  42384. * ```html
  42385. * <ion-menu id="authenticated" side="left" [content]="mycontent">...</ion-menu>
  42386. * <ion-menu id="unauthenticated" side="left" [content]="mycontent">...</ion-menu>
  42387. * <ion-nav #mycontent [root]="rootPage"></ion-nav>
  42388. * ```
  42389. *
  42390. * ```ts
  42391. * enableAuthenticatedMenu() {
  42392. * this.menuCtrl.enable(true, 'authenticated');
  42393. * this.menuCtrl.enable(false, 'unauthenticated');
  42394. * }
  42395. * ```
  42396. *
  42397. * Note: if an app only has one menu, there is no reason to pass an `id`.
  42398. *
  42399. *
  42400. * @demo /docs/demos/src/menu/
  42401. *
  42402. * @see {@link /docs/components#menus Menu Component Docs}
  42403. * @see {@link ../Menu Menu API Docs}
  42404. *
  42405. */
  42406. var MenuController = (function () {
  42407. function MenuController() {
  42408. this._menus = [];
  42409. }
  42410. /**
  42411. * Programatically open the Menu.
  42412. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42413. * @return {Promise} returns a promise when the menu is fully opened
  42414. */
  42415. MenuController.prototype.open = function (menuId) {
  42416. var menu = this.get(menuId);
  42417. if (menu && !this.isAnimating()) {
  42418. var openedMenu = this.getOpen();
  42419. if (openedMenu && menu !== openedMenu) {
  42420. openedMenu.setOpen(false, false);
  42421. }
  42422. return menu.open();
  42423. }
  42424. return Promise.resolve(false);
  42425. };
  42426. /**
  42427. * Programatically close the Menu. If no `menuId` is given as the first
  42428. * argument then it'll close any menu which is open. If a `menuId`
  42429. * is given then it'll close that exact menu.
  42430. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42431. * @return {Promise} returns a promise when the menu is fully closed
  42432. */
  42433. MenuController.prototype.close = function (menuId) {
  42434. var menu;
  42435. if (menuId) {
  42436. // find the menu by its id
  42437. menu = this.get(menuId);
  42438. }
  42439. else {
  42440. // find the menu that is open
  42441. menu = this.getOpen();
  42442. }
  42443. if (menu) {
  42444. // close the menu
  42445. return menu.close();
  42446. }
  42447. return Promise.resolve(false);
  42448. };
  42449. /**
  42450. * Toggle the menu. If it's closed, it will open, and if opened, it
  42451. * will close.
  42452. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42453. * @return {Promise} returns a promise when the menu has been toggled
  42454. */
  42455. MenuController.prototype.toggle = function (menuId) {
  42456. var menu = this.get(menuId);
  42457. if (menu && !this.isAnimating()) {
  42458. var openedMenu = this.getOpen();
  42459. if (openedMenu && menu !== openedMenu) {
  42460. openedMenu.setOpen(false, false);
  42461. }
  42462. return menu.toggle();
  42463. }
  42464. return Promise.resolve(false);
  42465. };
  42466. /**
  42467. * Used to enable or disable a menu. For example, there could be multiple
  42468. * left menus, but only one of them should be able to be opened at the same
  42469. * time. If there are multiple menus on the same side, then enabling one menu
  42470. * will also automatically disable all the others that are on the same side.
  42471. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42472. * @return {Menu} Returns the instance of the menu, which is useful for chaining.
  42473. */
  42474. MenuController.prototype.enable = function (shouldEnable, menuId) {
  42475. var menu = this.get(menuId);
  42476. if (menu) {
  42477. return menu.enable(shouldEnable);
  42478. }
  42479. };
  42480. /**
  42481. * Used to enable or disable the ability to swipe open the menu.
  42482. * @param {boolean} shouldEnable True if it should be swipe-able, false if not.
  42483. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42484. * @return {Menu} Returns the instance of the menu, which is useful for chaining.
  42485. */
  42486. MenuController.prototype.swipeEnable = function (shouldEnable, menuId) {
  42487. var menu = this.get(menuId);
  42488. if (menu) {
  42489. return menu.swipeEnable(shouldEnable);
  42490. }
  42491. };
  42492. /**
  42493. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42494. * @return {boolean} Returns true if the specified menu is currently open, otherwise false.
  42495. * If the menuId is not specified, it returns true if ANY menu is currenly open.
  42496. */
  42497. MenuController.prototype.isOpen = function (menuId) {
  42498. if (menuId) {
  42499. var menu = this.get(menuId);
  42500. return menu && menu.isOpen || false;
  42501. }
  42502. else {
  42503. return !!this.getOpen();
  42504. }
  42505. };
  42506. /**
  42507. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42508. * @return {boolean} Returns true if the menu is currently enabled, otherwise false.
  42509. */
  42510. MenuController.prototype.isEnabled = function (menuId) {
  42511. var menu = this.get(menuId);
  42512. return menu && menu.enabled || false;
  42513. };
  42514. /**
  42515. * Used to get a menu instance. If a `menuId` is not provided then it'll
  42516. * return the first menu found. If a `menuId` is `left` or `right`, then
  42517. * it'll return the enabled menu on that side. Otherwise, if a `menuId` is
  42518. * provided, then it'll try to find the menu using the menu's `id`
  42519. * property. If a menu is not found then it'll return `null`.
  42520. * @param {string} [menuId] Optionally get the menu by its id, or side.
  42521. * @return {Menu} Returns the instance of the menu if found, otherwise `null`.
  42522. */
  42523. MenuController.prototype.get = function (menuId) {
  42524. var menu;
  42525. if (menuId === 'left' || menuId === 'right') {
  42526. // there could be more than one menu on the same side
  42527. // so first try to get the enabled one
  42528. menu = this._menus.find(function (m) { return m.side === menuId && m.enabled; });
  42529. if (menu) {
  42530. return menu;
  42531. }
  42532. // didn't find a menu side that is enabled
  42533. // so try to get the first menu side found
  42534. return this._menus.find(function (m) { return m.side === menuId; }) || null;
  42535. }
  42536. else if (menuId) {
  42537. // the menuId was not left or right
  42538. // so try to get the menu by its "id"
  42539. return this._menus.find(function (m) { return m.id === menuId; }) || null;
  42540. }
  42541. // return the first enabled menu
  42542. menu = this._menus.find(function (m) { return m.enabled; });
  42543. if (menu) {
  42544. return menu;
  42545. }
  42546. // get the first menu in the array, if one exists
  42547. return (this._menus.length ? this._menus[0] : null);
  42548. };
  42549. /**
  42550. * @return {Menu} Returns the instance of the menu already opened, otherwise `null`.
  42551. */
  42552. MenuController.prototype.getOpen = function () {
  42553. return this._menus.find(function (m) { return m.isOpen; });
  42554. };
  42555. /**
  42556. * @return {Array<Menu>} Returns an array of all menu instances.
  42557. */
  42558. MenuController.prototype.getMenus = function () {
  42559. return this._menus;
  42560. };
  42561. /**
  42562. * @hidden
  42563. * @return {boolean} if any menu is currently animating
  42564. */
  42565. MenuController.prototype.isAnimating = function () {
  42566. return this._menus.some(function (menu) { return menu.isAnimating(); });
  42567. };
  42568. /**
  42569. * @hidden
  42570. */
  42571. MenuController.prototype._register = function (menu) {
  42572. (void 0) /* assert */;
  42573. this._menus.push(menu);
  42574. };
  42575. /**
  42576. * @hidden
  42577. */
  42578. MenuController.prototype._unregister = function (menu) {
  42579. (void 0) /* assert */;
  42580. Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["q" /* removeArrayItem */])(this._menus, menu);
  42581. };
  42582. /**
  42583. * @hidden
  42584. */
  42585. MenuController.prototype._setActiveMenu = function (menu) {
  42586. (void 0) /* assert */;
  42587. (void 0) /* assert */;
  42588. // if this menu should be enabled
  42589. // then find all the other menus on this same side
  42590. // and automatically disable other same side menus
  42591. var side = menu.side;
  42592. this._menus
  42593. .filter(function (m) { return m.side === side && m !== menu; })
  42594. .map(function (m) { return m.enable(false); });
  42595. };
  42596. /**
  42597. * @hidden
  42598. */
  42599. MenuController.registerType = function (name, cls) {
  42600. menuTypes[name] = cls;
  42601. };
  42602. /**
  42603. * @hidden
  42604. */
  42605. MenuController.create = function (type, menuCmp, plt) {
  42606. return new menuTypes[type](menuCmp, plt);
  42607. };
  42608. return MenuController;
  42609. }());
  42610. var menuTypes = {};
  42611. //# sourceMappingURL=menu-controller.js.map
  42612. /***/ }),
  42613. /* 42 */
  42614. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  42615. "use strict";
  42616. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Transition; });
  42617. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  42618. var __extends = (this && this.__extends) || (function () {
  42619. var extendStatics = Object.setPrototypeOf ||
  42620. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  42621. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  42622. return function (d, b) {
  42623. extendStatics(d, b);
  42624. function __() { this.constructor = d; }
  42625. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  42626. };
  42627. })();
  42628. /**
  42629. * @hidden
  42630. *
  42631. * - play
  42632. * - Add before classes - DOM WRITE
  42633. * - Remove before classes - DOM WRITE
  42634. * - Add before inline styles - DOM WRITE
  42635. * - set inline FROM styles - DOM WRITE
  42636. * - RAF
  42637. * - read toolbar dimensions - DOM READ
  42638. * - write content top/bottom padding - DOM WRITE
  42639. * - set css transition duration/easing - DOM WRITE
  42640. * - RAF
  42641. * - set inline TO styles - DOM WRITE
  42642. */
  42643. var Transition = (function (_super) {
  42644. __extends(Transition, _super);
  42645. function Transition(plt, enteringView, leavingView, opts) {
  42646. var _this = _super.call(this, plt, null, opts) || this;
  42647. _this.enteringView = enteringView;
  42648. _this.leavingView = leavingView;
  42649. return _this;
  42650. }
  42651. Transition.prototype.init = function () { };
  42652. Transition.prototype.registerStart = function (trnsStart) {
  42653. this._trnsStart = trnsStart;
  42654. };
  42655. Transition.prototype.start = function () {
  42656. this._trnsStart && this._trnsStart();
  42657. this._trnsStart = null;
  42658. // bubble up start
  42659. this.parent && this.parent.start();
  42660. };
  42661. Transition.prototype.destroy = function () {
  42662. _super.prototype.destroy.call(this);
  42663. this.parent = this.enteringView = this.leavingView = this._trnsStart = null;
  42664. };
  42665. return Transition;
  42666. }(__WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */]));
  42667. //# sourceMappingURL=transition.js.map
  42668. /***/ }),
  42669. /* 43 */
  42670. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  42671. "use strict";
  42672. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PageTransition; });
  42673. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  42674. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transition__ = __webpack_require__(42);
  42675. var __extends = (this && this.__extends) || (function () {
  42676. var extendStatics = Object.setPrototypeOf ||
  42677. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  42678. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  42679. return function (d, b) {
  42680. extendStatics(d, b);
  42681. function __() { this.constructor = d; }
  42682. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  42683. };
  42684. })();
  42685. /**
  42686. * @hidden
  42687. */
  42688. var PageTransition = (function (_super) {
  42689. __extends(PageTransition, _super);
  42690. function PageTransition() {
  42691. return _super !== null && _super.apply(this, arguments) || this;
  42692. }
  42693. PageTransition.prototype.init = function () {
  42694. var _this = this;
  42695. if (this.enteringView) {
  42696. this.enteringPage = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, this.enteringView.pageRef());
  42697. this.add(this.enteringPage.beforeAddClass('show-page'));
  42698. // Resize content before transition starts
  42699. this.beforeAddRead(function () {
  42700. _this.enteringView.readReady.emit();
  42701. });
  42702. this.beforeAddWrite(function () {
  42703. _this.enteringView.writeReady.emit();
  42704. });
  42705. }
  42706. };
  42707. PageTransition.prototype.destroy = function () {
  42708. _super.prototype.destroy.call(this);
  42709. this.enteringPage && this.enteringPage.destroy();
  42710. this.enteringPage = null;
  42711. };
  42712. return PageTransition;
  42713. }(__WEBPACK_IMPORTED_MODULE_1__transition__["a" /* Transition */]));
  42714. //# sourceMappingURL=page-transition.js.map
  42715. /***/ }),
  42716. /* 44 */
  42717. /***/ (function(module, exports, __webpack_require__) {
  42718. "use strict";
  42719. var Observable_1 = __webpack_require__(0);
  42720. var ArrayObservable_1 = __webpack_require__(32);
  42721. var isScheduler_1 = __webpack_require__(22);
  42722. var mergeAll_1 = __webpack_require__(65);
  42723. /* tslint:enable:max-line-length */
  42724. /**
  42725. * Creates an output Observable which concurrently emits all values from every
  42726. * given input Observable.
  42727. *
  42728. * <span class="informal">Flattens multiple Observables together by blending
  42729. * their values into one Observable.</span>
  42730. *
  42731. * <img src="./img/merge.png" width="100%">
  42732. *
  42733. * `merge` subscribes to each given input Observable (as arguments), and simply
  42734. * forwards (without doing any transformation) all the values from all the input
  42735. * Observables to the output Observable. The output Observable only completes
  42736. * once all input Observables have completed. Any error delivered by an input
  42737. * Observable will be immediately emitted on the output Observable.
  42738. *
  42739. * @example <caption>Merge together two Observables: 1s interval and clicks</caption>
  42740. * var clicks = Rx.Observable.fromEvent(document, 'click');
  42741. * var timer = Rx.Observable.interval(1000);
  42742. * var clicksOrTimer = Rx.Observable.merge(clicks, timer);
  42743. * clicksOrTimer.subscribe(x => console.log(x));
  42744. *
  42745. * // Results in the following:
  42746. * // timer will emit ascending values, one every second(1000ms) to console
  42747. * // clicks logs MouseEvents to console everytime the "document" is clicked
  42748. * // Since the two streams are merged you see these happening
  42749. * // as they occur.
  42750. *
  42751. * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>
  42752. * var timer1 = Rx.Observable.interval(1000).take(10);
  42753. * var timer2 = Rx.Observable.interval(2000).take(6);
  42754. * var timer3 = Rx.Observable.interval(500).take(10);
  42755. * var concurrent = 2; // the argument
  42756. * var merged = Rx.Observable.merge(timer1, timer2, timer3, concurrent);
  42757. * merged.subscribe(x => console.log(x));
  42758. *
  42759. * // Results in the following:
  42760. * // - First timer1 and timer2 will run concurrently
  42761. * // - timer1 will emit a value every 1000ms for 10 iterations
  42762. * // - timer2 will emit a value every 2000ms for 6 iterations
  42763. * // - after timer1 hits it's max iteration, timer2 will
  42764. * // continue, and timer3 will start to run concurrently with timer2
  42765. * // - when timer2 hits it's max iteration it terminates, and
  42766. * // timer3 will continue to emit a value every 500ms until it is complete
  42767. *
  42768. * @see {@link mergeAll}
  42769. * @see {@link mergeMap}
  42770. * @see {@link mergeMapTo}
  42771. * @see {@link mergeScan}
  42772. *
  42773. * @param {...ObservableInput} observables Input Observables to merge together.
  42774. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  42775. * Observables being subscribed to concurrently.
  42776. * @param {Scheduler} [scheduler=null] The IScheduler to use for managing
  42777. * concurrency of input Observables.
  42778. * @return {Observable} an Observable that emits items that are the result of
  42779. * every input Observable.
  42780. * @static true
  42781. * @name merge
  42782. * @owner Observable
  42783. */
  42784. function merge() {
  42785. var observables = [];
  42786. for (var _i = 0; _i < arguments.length; _i++) {
  42787. observables[_i - 0] = arguments[_i];
  42788. }
  42789. var concurrent = Number.POSITIVE_INFINITY;
  42790. var scheduler = null;
  42791. var last = observables[observables.length - 1];
  42792. if (isScheduler_1.isScheduler(last)) {
  42793. scheduler = observables.pop();
  42794. if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
  42795. concurrent = observables.pop();
  42796. }
  42797. }
  42798. else if (typeof last === 'number') {
  42799. concurrent = observables.pop();
  42800. }
  42801. if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) {
  42802. return observables[0];
  42803. }
  42804. return mergeAll_1.mergeAll(concurrent)(new ArrayObservable_1.ArrayObservable(observables, scheduler));
  42805. }
  42806. exports.merge = merge;
  42807. //# sourceMappingURL=merge.js.map
  42808. /***/ }),
  42809. /* 45 */
  42810. /***/ (function(module, exports, __webpack_require__) {
  42811. "use strict";
  42812. var __extends = (this && this.__extends) || function (d, b) {
  42813. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  42814. function __() { this.constructor = d; }
  42815. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  42816. };
  42817. var subscribeToResult_1 = __webpack_require__(5);
  42818. var OuterSubscriber_1 = __webpack_require__(6);
  42819. /* tslint:enable:max-line-length */
  42820. /**
  42821. * Projects each source value to an Observable which is merged in the output
  42822. * Observable.
  42823. *
  42824. * <span class="informal">Maps each value to an Observable, then flattens all of
  42825. * these inner Observables using {@link mergeAll}.</span>
  42826. *
  42827. * <img src="./img/mergeMap.png" width="100%">
  42828. *
  42829. * Returns an Observable that emits items based on applying a function that you
  42830. * supply to each item emitted by the source Observable, where that function
  42831. * returns an Observable, and then merging those resulting Observables and
  42832. * emitting the results of this merger.
  42833. *
  42834. * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>
  42835. * var letters = Rx.Observable.of('a', 'b', 'c');
  42836. * var result = letters.mergeMap(x =>
  42837. * Rx.Observable.interval(1000).map(i => x+i)
  42838. * );
  42839. * result.subscribe(x => console.log(x));
  42840. *
  42841. * // Results in the following:
  42842. * // a0
  42843. * // b0
  42844. * // c0
  42845. * // a1
  42846. * // b1
  42847. * // c1
  42848. * // continues to list a,b,c with respective ascending integers
  42849. *
  42850. * @see {@link concatMap}
  42851. * @see {@link exhaustMap}
  42852. * @see {@link merge}
  42853. * @see {@link mergeAll}
  42854. * @see {@link mergeMapTo}
  42855. * @see {@link mergeScan}
  42856. * @see {@link switchMap}
  42857. *
  42858. * @param {function(value: T, ?index: number): ObservableInput} project A function
  42859. * that, when applied to an item emitted by the source Observable, returns an
  42860. * Observable.
  42861. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  42862. * A function to produce the value on the output Observable based on the values
  42863. * and the indices of the source (outer) emission and the inner Observable
  42864. * emission. The arguments passed to this function are:
  42865. * - `outerValue`: the value that came from the source
  42866. * - `innerValue`: the value that came from the projected Observable
  42867. * - `outerIndex`: the "index" of the value that came from the source
  42868. * - `innerIndex`: the "index" of the value from the projected Observable
  42869. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  42870. * Observables being subscribed to concurrently.
  42871. * @return {Observable} An Observable that emits the result of applying the
  42872. * projection function (and the optional `resultSelector`) to each item emitted
  42873. * by the source Observable and merging the results of the Observables obtained
  42874. * from this transformation.
  42875. * @method mergeMap
  42876. * @owner Observable
  42877. */
  42878. function mergeMap(project, resultSelector, concurrent) {
  42879. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  42880. return function mergeMapOperatorFunction(source) {
  42881. if (typeof resultSelector === 'number') {
  42882. concurrent = resultSelector;
  42883. resultSelector = null;
  42884. }
  42885. return source.lift(new MergeMapOperator(project, resultSelector, concurrent));
  42886. };
  42887. }
  42888. exports.mergeMap = mergeMap;
  42889. var MergeMapOperator = (function () {
  42890. function MergeMapOperator(project, resultSelector, concurrent) {
  42891. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  42892. this.project = project;
  42893. this.resultSelector = resultSelector;
  42894. this.concurrent = concurrent;
  42895. }
  42896. MergeMapOperator.prototype.call = function (observer, source) {
  42897. return source.subscribe(new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent));
  42898. };
  42899. return MergeMapOperator;
  42900. }());
  42901. exports.MergeMapOperator = MergeMapOperator;
  42902. /**
  42903. * We need this JSDoc comment for affecting ESDoc.
  42904. * @ignore
  42905. * @extends {Ignored}
  42906. */
  42907. var MergeMapSubscriber = (function (_super) {
  42908. __extends(MergeMapSubscriber, _super);
  42909. function MergeMapSubscriber(destination, project, resultSelector, concurrent) {
  42910. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  42911. _super.call(this, destination);
  42912. this.project = project;
  42913. this.resultSelector = resultSelector;
  42914. this.concurrent = concurrent;
  42915. this.hasCompleted = false;
  42916. this.buffer = [];
  42917. this.active = 0;
  42918. this.index = 0;
  42919. }
  42920. MergeMapSubscriber.prototype._next = function (value) {
  42921. if (this.active < this.concurrent) {
  42922. this._tryNext(value);
  42923. }
  42924. else {
  42925. this.buffer.push(value);
  42926. }
  42927. };
  42928. MergeMapSubscriber.prototype._tryNext = function (value) {
  42929. var result;
  42930. var index = this.index++;
  42931. try {
  42932. result = this.project(value, index);
  42933. }
  42934. catch (err) {
  42935. this.destination.error(err);
  42936. return;
  42937. }
  42938. this.active++;
  42939. this._innerSub(result, value, index);
  42940. };
  42941. MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
  42942. this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));
  42943. };
  42944. MergeMapSubscriber.prototype._complete = function () {
  42945. this.hasCompleted = true;
  42946. if (this.active === 0 && this.buffer.length === 0) {
  42947. this.destination.complete();
  42948. }
  42949. };
  42950. MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  42951. if (this.resultSelector) {
  42952. this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);
  42953. }
  42954. else {
  42955. this.destination.next(innerValue);
  42956. }
  42957. };
  42958. MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {
  42959. var result;
  42960. try {
  42961. result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);
  42962. }
  42963. catch (err) {
  42964. this.destination.error(err);
  42965. return;
  42966. }
  42967. this.destination.next(result);
  42968. };
  42969. MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
  42970. var buffer = this.buffer;
  42971. this.remove(innerSub);
  42972. this.active--;
  42973. if (buffer.length > 0) {
  42974. this._next(buffer.shift());
  42975. }
  42976. else if (this.active === 0 && this.hasCompleted) {
  42977. this.destination.complete();
  42978. }
  42979. };
  42980. return MergeMapSubscriber;
  42981. }(OuterSubscriber_1.OuterSubscriber));
  42982. exports.MergeMapSubscriber = MergeMapSubscriber;
  42983. //# sourceMappingURL=mergeMap.js.map
  42984. /***/ }),
  42985. /* 46 */
  42986. /***/ (function(module, exports, __webpack_require__) {
  42987. "use strict";
  42988. var root_1 = __webpack_require__(19);
  42989. function symbolIteratorPonyfill(root) {
  42990. var Symbol = root.Symbol;
  42991. if (typeof Symbol === 'function') {
  42992. if (!Symbol.iterator) {
  42993. Symbol.iterator = Symbol('iterator polyfill');
  42994. }
  42995. return Symbol.iterator;
  42996. }
  42997. else {
  42998. // [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)
  42999. var Set_1 = root.Set;
  43000. if (Set_1 && typeof new Set_1()['@@iterator'] === 'function') {
  43001. return '@@iterator';
  43002. }
  43003. var Map_1 = root.Map;
  43004. // required for compatability with es6-shim
  43005. if (Map_1) {
  43006. var keys = Object.getOwnPropertyNames(Map_1.prototype);
  43007. for (var i = 0; i < keys.length; ++i) {
  43008. var key = keys[i];
  43009. // according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.
  43010. if (key !== 'entries' && key !== 'size' && Map_1.prototype[key] === Map_1.prototype['entries']) {
  43011. return key;
  43012. }
  43013. }
  43014. }
  43015. return '@@iterator';
  43016. }
  43017. }
  43018. exports.symbolIteratorPonyfill = symbolIteratorPonyfill;
  43019. exports.iterator = symbolIteratorPonyfill(root_1.root);
  43020. /**
  43021. * @deprecated use iterator instead
  43022. */
  43023. exports.$$iterator = exports.iterator;
  43024. //# sourceMappingURL=iterator.js.map
  43025. /***/ }),
  43026. /* 47 */
  43027. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  43028. "use strict";
  43029. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PORTAL_DEFAULT; });
  43030. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return PORTAL_MODAL; });
  43031. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PORTAL_LOADING; });
  43032. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return PORTAL_TOAST; });
  43033. var PORTAL_DEFAULT = 1;
  43034. var PORTAL_MODAL = 2;
  43035. var PORTAL_LOADING = 3;
  43036. var PORTAL_TOAST = 4;
  43037. //# sourceMappingURL=app-constants.js.map
  43038. /***/ }),
  43039. /* 48 */
  43040. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  43041. "use strict";
  43042. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Button; });
  43043. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  43044. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  43045. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  43046. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  43047. var __extends = (this && this.__extends) || (function () {
  43048. var extendStatics = Object.setPrototypeOf ||
  43049. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  43050. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  43051. return function (d, b) {
  43052. extendStatics(d, b);
  43053. function __() { this.constructor = d; }
  43054. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  43055. };
  43056. })();
  43057. /**
  43058. * @name Button
  43059. * @module ionic
  43060. * @description
  43061. * Buttons are simple components in Ionic. They can consist of text and icons
  43062. * and be enhanced by a wide range of attributes.
  43063. *
  43064. * @usage
  43065. *
  43066. * ```html
  43067. *
  43068. * <!-- Colors -->
  43069. * <button ion-button>Default</button>
  43070. *
  43071. * <button ion-button color="secondary">Secondary</button>
  43072. *
  43073. * <button ion-button color="danger">Danger</button>
  43074. *
  43075. * <button ion-button color="light">Light</button>
  43076. *
  43077. * <button ion-button color="dark">Dark</button>
  43078. *
  43079. * <!-- Shapes -->
  43080. * <button ion-button full>Full Button</button>
  43081. *
  43082. * <button ion-button block>Block Button</button>
  43083. *
  43084. * <button ion-button round>Round Button</button>
  43085. *
  43086. * <!-- Outline -->
  43087. * <button ion-button full outline>Outline + Full</button>
  43088. *
  43089. * <button ion-button block outline>Outline + Block</button>
  43090. *
  43091. * <button ion-button round outline>Outline + Round</button>
  43092. *
  43093. * <!-- Icons -->
  43094. * <button ion-button icon-start>
  43095. * <ion-icon name="star"></ion-icon>
  43096. * Left Icon
  43097. * </button>
  43098. *
  43099. * <button ion-button icon-end>
  43100. * Right Icon
  43101. * <ion-icon name="star"></ion-icon>
  43102. * </button>
  43103. *
  43104. * <button ion-button icon-only>
  43105. * <ion-icon name="star"></ion-icon>
  43106. * </button>
  43107. *
  43108. * <!-- Sizes -->
  43109. * <button ion-button large>Large</button>
  43110. *
  43111. * <button ion-button>Default</button>
  43112. *
  43113. * <button ion-button small>Small</button>
  43114. * ```
  43115. *
  43116. * @advanced
  43117. *
  43118. * ```html
  43119. *
  43120. * <!-- Bind the color and outline inputs to an expression -->
  43121. * <button ion-button [color]="isDanger ? 'danger' : 'primary'" [outline]="isOutline">
  43122. * Danger (Solid)
  43123. * </button>
  43124. *
  43125. * <!-- Bind the color and round inputs to an expression -->
  43126. * <button ion-button [color]="myColor" [round]="isRound">
  43127. * Secondary (Round)
  43128. * </button>
  43129. *
  43130. * <!-- Bind the color and clear inputs to an expression -->
  43131. * <button ion-button [color]="isSecondary ? 'secondary' : 'primary'" [clear]="isClear">
  43132. * Primary (Clear)
  43133. * </button>
  43134. *
  43135. * <!-- Bind the color, outline and round inputs to an expression -->
  43136. * <button ion-button [color]="myColor2" [outline]="isOutline" [round]="isRound">
  43137. * Dark (Solid + Round)
  43138. * </button>
  43139. *
  43140. * <!-- Bind the click event to a method -->
  43141. * <button ion-button (click)="logEvent($event)">
  43142. * Click me!
  43143. * </button>
  43144. * ```
  43145. *
  43146. * ```ts
  43147. * @Component({
  43148. * templateUrl: 'main.html'
  43149. * })
  43150. * class E2EPage {
  43151. * isDanger: boolean = true;
  43152. * isSecondary: boolean = false;
  43153. * isRound: boolean = true;
  43154. * isOutline: boolean = false;
  43155. * isClear: boolean = true;
  43156. * myColor: string = 'secondary';
  43157. * myColor2: string = 'dark';
  43158. *
  43159. * logEvent(event) {
  43160. * console.log(event)
  43161. * }
  43162. * }
  43163. *
  43164. * ```
  43165. *
  43166. * @demo /docs/demos/src/button/
  43167. * @see {@link /docs/components#buttons Button Component Docs}
  43168. * @see {@link /docs/components#fabs FabButton Docs}
  43169. * @see {@link ../../fab/FabButton FabButton API Docs}
  43170. * @see {@link ../../fab/FabContainer FabContainer API Docs}
  43171. */
  43172. var Button = (function (_super) {
  43173. __extends(Button, _super);
  43174. function Button(ionButton, config, elementRef, renderer) {
  43175. var _this = _super.call(this, config, elementRef, renderer) || this;
  43176. /** @hidden */
  43177. _this._role = 'button'; // bar-button
  43178. /** @hidden */
  43179. _this._style = 'default'; // outline/clear/solid
  43180. _this._mode = config.get('mode');
  43181. if (config.get('hoverCSS') === false) {
  43182. _this.setElementClass('disable-hover', true);
  43183. }
  43184. if (ionButton.trim().length > 0) {
  43185. _this.setRole(ionButton);
  43186. }
  43187. return _this;
  43188. }
  43189. Object.defineProperty(Button.prototype, "large", {
  43190. /**
  43191. * @input {boolean} If true, activates the large button size.
  43192. */
  43193. set: function (val) {
  43194. this._attr('_size', 'large', val);
  43195. },
  43196. enumerable: true,
  43197. configurable: true
  43198. });
  43199. Object.defineProperty(Button.prototype, "small", {
  43200. /**
  43201. * @input {boolean} If true, activates the small button size.
  43202. */
  43203. set: function (val) {
  43204. this._attr('_size', 'small', val);
  43205. },
  43206. enumerable: true,
  43207. configurable: true
  43208. });
  43209. Object.defineProperty(Button.prototype, "default", {
  43210. /**
  43211. * @input {boolean} If true, activates the default button size. Normally the default, useful for buttons in an item.
  43212. */
  43213. set: function (val) {
  43214. this._attr('_size', 'default', val);
  43215. },
  43216. enumerable: true,
  43217. configurable: true
  43218. });
  43219. Object.defineProperty(Button.prototype, "outline", {
  43220. /**
  43221. * @input {boolean} If true, activates a transparent button style with a border.
  43222. */
  43223. set: function (val) {
  43224. this._attr('_style', 'outline', val);
  43225. },
  43226. enumerable: true,
  43227. configurable: true
  43228. });
  43229. Object.defineProperty(Button.prototype, "clear", {
  43230. /**
  43231. * @input {boolean} If true, activates a transparent button style without a border.
  43232. */
  43233. set: function (val) {
  43234. this._attr('_style', 'clear', val);
  43235. },
  43236. enumerable: true,
  43237. configurable: true
  43238. });
  43239. Object.defineProperty(Button.prototype, "solid", {
  43240. /**
  43241. * @input {boolean} If true, activates a solid button style. Normally the default, useful for buttons in a toolbar.
  43242. */
  43243. set: function (val) {
  43244. this._attr('_style', 'solid', val);
  43245. },
  43246. enumerable: true,
  43247. configurable: true
  43248. });
  43249. Object.defineProperty(Button.prototype, "round", {
  43250. /**
  43251. * @input {boolean} If true, activates a button with rounded corners.
  43252. */
  43253. set: function (val) {
  43254. this._attr('_shape', 'round', val);
  43255. },
  43256. enumerable: true,
  43257. configurable: true
  43258. });
  43259. Object.defineProperty(Button.prototype, "block", {
  43260. /**
  43261. * @input {boolean} If true, activates a button style that fills the available width.
  43262. */
  43263. set: function (val) {
  43264. this._attr('_display', 'block', val);
  43265. },
  43266. enumerable: true,
  43267. configurable: true
  43268. });
  43269. Object.defineProperty(Button.prototype, "full", {
  43270. /**
  43271. * @input {boolean} If true, activates a button style that fills the available width without
  43272. * a left and right border.
  43273. */
  43274. set: function (val) {
  43275. this._attr('_display', 'full', val);
  43276. },
  43277. enumerable: true,
  43278. configurable: true
  43279. });
  43280. Object.defineProperty(Button.prototype, "strong", {
  43281. /**
  43282. * @input {boolean} If true, activates a button with a heavier font weight.
  43283. */
  43284. set: function (val) {
  43285. this._attr('_decorator', 'strong', val);
  43286. },
  43287. enumerable: true,
  43288. configurable: true
  43289. });
  43290. Object.defineProperty(Button.prototype, "mode", {
  43291. /**
  43292. * @input {string} The mode determines which platform styles to use.
  43293. * Possible values are: `"ios"`, `"md"`, or `"wp"`.
  43294. * For more information, see [Platform Styles](/docs/theming/platform-specific-styles).
  43295. */
  43296. set: function (val) {
  43297. this._assignCss(false);
  43298. this._mode = val;
  43299. this._assignCss(true);
  43300. },
  43301. enumerable: true,
  43302. configurable: true
  43303. });
  43304. /** @hidden */
  43305. Button.prototype._attr = function (type, attrName, attrValue) {
  43306. if (type === '_style') {
  43307. this._updateColor(this._color, false);
  43308. }
  43309. this._setClass(this[type], false);
  43310. if (Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(attrValue)) {
  43311. this[type] = attrName;
  43312. this._setClass(attrName, true);
  43313. }
  43314. else {
  43315. // Special handling for '_style' which defaults to 'default'.
  43316. this[type] = (type === '_style' ? 'default' : null);
  43317. this._setClass(this[type], true);
  43318. }
  43319. if (type === '_style') {
  43320. this._updateColor(this._color, true);
  43321. }
  43322. };
  43323. Object.defineProperty(Button.prototype, "color", {
  43324. /**
  43325. * @input {string} The color to use from your Sass `$colors` map.
  43326. * Default options are: `"primary"`, `"secondary"`, `"danger"`, `"light"`, and `"dark"`.
  43327. * For more information, see [Theming your App](/docs/theming/theming-your-app).
  43328. */
  43329. set: function (val) {
  43330. this._updateColor(this._color, false);
  43331. this._updateColor(val, true);
  43332. this._color = val;
  43333. },
  43334. enumerable: true,
  43335. configurable: true
  43336. });
  43337. /** @hidden */
  43338. Button.prototype.ngAfterContentInit = function () {
  43339. this._init = true;
  43340. this._assignCss(true);
  43341. };
  43342. /**
  43343. * @hidden
  43344. */
  43345. Button.prototype.setRole = function (val) {
  43346. this._assignCss(false);
  43347. this._role = val;
  43348. this._assignCss(true);
  43349. };
  43350. /**
  43351. * @hidden
  43352. */
  43353. Button.prototype._assignCss = function (assignCssClass) {
  43354. var role = this._role;
  43355. if (role) {
  43356. this.setElementClass(role, assignCssClass); // button
  43357. this.setElementClass(role + "-" + this._mode, assignCssClass); // button
  43358. this._setClass(this._style, assignCssClass); // button-clear
  43359. this._setClass(this._shape, assignCssClass); // button-round
  43360. this._setClass(this._display, assignCssClass); // button-full
  43361. this._setClass(this._size, assignCssClass); // button-small
  43362. this._setClass(this._decorator, assignCssClass); // button-strong
  43363. this._updateColor(this._color, assignCssClass); // button-secondary, bar-button-secondary
  43364. }
  43365. };
  43366. /**
  43367. * @hidden
  43368. */
  43369. Button.prototype._setClass = function (type, assignCssClass) {
  43370. if (type && this._init) {
  43371. type = type.toLocaleLowerCase();
  43372. this.setElementClass(this._role + "-" + type, assignCssClass);
  43373. this.setElementClass(this._role + "-" + type + "-" + this._mode, assignCssClass);
  43374. }
  43375. };
  43376. /**
  43377. * @hidden
  43378. */
  43379. Button.prototype._updateColor = function (color, isAdd) {
  43380. if (color && this._init) {
  43381. // The class should begin with the button role
  43382. // button, bar-button
  43383. var className = this._role;
  43384. // If the role is not a bar-button, don't apply the solid style
  43385. var style = this._style;
  43386. style = (this._role !== 'bar-button' && style === 'solid' ? 'default' : style);
  43387. className += (style !== null && style !== '' && style !== 'default' ? '-' + style.toLowerCase() : '');
  43388. if (color !== null && color !== '') {
  43389. this.setElementClass(className + "-" + this._mode + "-" + color, isAdd);
  43390. }
  43391. }
  43392. };
  43393. Button.decorators = [
  43394. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  43395. selector: '[ion-button]',
  43396. template: '<span class="button-inner">' +
  43397. '<ng-content></ng-content>' +
  43398. '</span>' +
  43399. '<div class="button-effect"></div>',
  43400. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  43401. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  43402. },] },
  43403. ];
  43404. /** @nocollapse */
  43405. Button.ctorParameters = function () { return [
  43406. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['ion-button',] },] },
  43407. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  43408. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  43409. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  43410. ]; };
  43411. Button.propDecorators = {
  43412. 'large': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43413. 'small': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43414. 'default': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43415. 'outline': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43416. 'clear': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43417. 'solid': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43418. 'round': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43419. 'block': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43420. 'full': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43421. 'strong': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43422. 'mode': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43423. 'color': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  43424. };
  43425. return Button;
  43426. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  43427. //# sourceMappingURL=button.js.map
  43428. /***/ }),
  43429. /* 49 */
  43430. /***/ (function(module, exports, __webpack_require__) {
  43431. "use strict";
  43432. var __extends = (this && this.__extends) || function (d, b) {
  43433. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  43434. function __() { this.constructor = d; }
  43435. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  43436. };
  43437. var Subscriber_1 = __webpack_require__(4);
  43438. /**
  43439. * Applies a given `project` function to each value emitted by the source
  43440. * Observable, and emits the resulting values as an Observable.
  43441. *
  43442. * <span class="informal">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),
  43443. * it passes each source value through a transformation function to get
  43444. * corresponding output values.</span>
  43445. *
  43446. * <img src="./img/map.png" width="100%">
  43447. *
  43448. * Similar to the well known `Array.prototype.map` function, this operator
  43449. * applies a projection to each value and emits that projection in the output
  43450. * Observable.
  43451. *
  43452. * @example <caption>Map every click to the clientX position of that click</caption>
  43453. * var clicks = Rx.Observable.fromEvent(document, 'click');
  43454. * var positions = clicks.map(ev => ev.clientX);
  43455. * positions.subscribe(x => console.log(x));
  43456. *
  43457. * @see {@link mapTo}
  43458. * @see {@link pluck}
  43459. *
  43460. * @param {function(value: T, index: number): R} project The function to apply
  43461. * to each `value` emitted by the source Observable. The `index` parameter is
  43462. * the number `i` for the i-th emission that has happened since the
  43463. * subscription, starting from the number `0`.
  43464. * @param {any} [thisArg] An optional argument to define what `this` is in the
  43465. * `project` function.
  43466. * @return {Observable<R>} An Observable that emits the values from the source
  43467. * Observable transformed by the given `project` function.
  43468. * @method map
  43469. * @owner Observable
  43470. */
  43471. function map(project, thisArg) {
  43472. return function mapOperation(source) {
  43473. if (typeof project !== 'function') {
  43474. throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
  43475. }
  43476. return source.lift(new MapOperator(project, thisArg));
  43477. };
  43478. }
  43479. exports.map = map;
  43480. var MapOperator = (function () {
  43481. function MapOperator(project, thisArg) {
  43482. this.project = project;
  43483. this.thisArg = thisArg;
  43484. }
  43485. MapOperator.prototype.call = function (subscriber, source) {
  43486. return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
  43487. };
  43488. return MapOperator;
  43489. }());
  43490. exports.MapOperator = MapOperator;
  43491. /**
  43492. * We need this JSDoc comment for affecting ESDoc.
  43493. * @ignore
  43494. * @extends {Ignored}
  43495. */
  43496. var MapSubscriber = (function (_super) {
  43497. __extends(MapSubscriber, _super);
  43498. function MapSubscriber(destination, project, thisArg) {
  43499. _super.call(this, destination);
  43500. this.project = project;
  43501. this.count = 0;
  43502. this.thisArg = thisArg || this;
  43503. }
  43504. // NOTE: This looks unoptimized, but it's actually purposefully NOT
  43505. // using try/catch optimizations.
  43506. MapSubscriber.prototype._next = function (value) {
  43507. var result;
  43508. try {
  43509. result = this.project.call(this.thisArg, value, this.count++);
  43510. }
  43511. catch (err) {
  43512. this.destination.error(err);
  43513. return;
  43514. }
  43515. this.destination.next(result);
  43516. };
  43517. return MapSubscriber;
  43518. }(Subscriber_1.Subscriber));
  43519. //# sourceMappingURL=map.js.map
  43520. /***/ }),
  43521. /* 50 */
  43522. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  43523. "use strict";
  43524. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Keyboard; });
  43525. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  43526. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  43527. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__dom_controller__ = __webpack_require__(15);
  43528. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_dom__ = __webpack_require__(18);
  43529. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__key__ = __webpack_require__(30);
  43530. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__platform__ = __webpack_require__(7);
  43531. /**
  43532. * @name Keyboard
  43533. * @description
  43534. * The `Keyboard` class allows you to work with the keyboard events provided
  43535. * by the Ionic keyboard plugin.
  43536. *
  43537. * @usage
  43538. * ```ts
  43539. * export class MyClass {
  43540. *
  43541. * constructor(public keyboard: Keyboard) { }
  43542. *
  43543. * }
  43544. * ```
  43545. */
  43546. var Keyboard = (function () {
  43547. function Keyboard(config, _plt, _zone, _dom) {
  43548. this._plt = _plt;
  43549. this._zone = _zone;
  43550. this._dom = _dom;
  43551. this.willShow = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  43552. this.willHide = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  43553. this.didShow = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  43554. this.didHide = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  43555. this.eventsAvailable = false;
  43556. this.focusOutline(config.get('focusOutline'));
  43557. var win = _plt.win();
  43558. if (win.Ionic && win.Ionic.keyboardPlugin) {
  43559. this.listenV2(win);
  43560. }
  43561. else {
  43562. this.listenV1(win);
  43563. }
  43564. }
  43565. Keyboard.prototype.listenV2 = function (win) {
  43566. var _this = this;
  43567. var platform = this._plt;
  43568. platform.registerListener(win, 'keyboardWillShow', function (ev) {
  43569. _this._zone.run(function () {
  43570. _this.willShow.emit(ev.keyboardHeight);
  43571. });
  43572. }, { zone: false, passive: true });
  43573. platform.registerListener(win, 'keyboardWillHide', function () {
  43574. _this._zone.run(function () {
  43575. _this.willHide.emit();
  43576. });
  43577. }, { zone: false, passive: true });
  43578. platform.registerListener(win, 'keyboardDidShow', function (ev) {
  43579. _this._zone.run(function () {
  43580. _this.didShow.emit(ev.keyboardHeight);
  43581. });
  43582. }, { zone: false, passive: true });
  43583. platform.registerListener(win, 'keyboardDidHide', function () {
  43584. _this._zone.run(function () {
  43585. _this.didHide.emit();
  43586. });
  43587. }, { zone: false, passive: true });
  43588. this.eventsAvailable = true;
  43589. };
  43590. Keyboard.prototype.listenV1 = function (win) {
  43591. var _this = this;
  43592. var platform = this._plt;
  43593. platform.registerListener(win, 'native.keyboardhide', function () {
  43594. _this.blurActiveInput(true);
  43595. }, { zone: false, passive: true });
  43596. platform.registerListener(win, 'native.keyboardshow', function () {
  43597. _this.blurActiveInput(false);
  43598. }, { zone: false, passive: true });
  43599. };
  43600. Keyboard.prototype.blurActiveInput = function (shouldBlur) {
  43601. var _this = this;
  43602. var platform = this._plt;
  43603. platform.cancelTimeout(this._tmr);
  43604. if (shouldBlur) {
  43605. this._tmr = platform.timeout(function () {
  43606. // this custom cordova plugin event fires when the keyboard will hide
  43607. // useful when the virtual keyboard is closed natively
  43608. // https://github.com/ionic-team/ionic-plugin-keyboard
  43609. if (_this.isOpen()) {
  43610. platform.focusOutActiveElement();
  43611. }
  43612. }, 80);
  43613. }
  43614. };
  43615. /**
  43616. * Check to see if the keyboard is open or not.
  43617. *
  43618. * ```ts
  43619. * export class MyClass {
  43620. * constructor(public keyboard: Keyboard) {
  43621. *
  43622. * }
  43623. *
  43624. * keyboardCheck() {
  43625. * console.log('The keyboard is open:', this.keyboard.isOpen());
  43626. * }
  43627. * }
  43628. * ```
  43629. *
  43630. * @return {boolean} returns a true or false value if the keyboard is open or not.
  43631. */
  43632. Keyboard.prototype.isOpen = function () {
  43633. return this.hasFocusedTextInput();
  43634. };
  43635. /**
  43636. * When the keyboard is closed, call any methods you want.
  43637. *
  43638. * ```ts
  43639. * export class MyClass {
  43640. * constructor(public keyboard: Keyboard) {
  43641. * this.keyboard.onClose(this.closeCallback);
  43642. * }
  43643. * closeCallback() {
  43644. * // call what ever functionality you want on keyboard close
  43645. * console.log('Closing time');
  43646. * }
  43647. * }
  43648. * ```
  43649. *
  43650. * @param {function} callback method you want to call when the keyboard has been closed.
  43651. * @return {function} returns a callback that gets fired when the keyboard is closed.
  43652. */
  43653. Keyboard.prototype.onClose = function (callback, pollingInternval, pollingChecksMax) {
  43654. if (pollingInternval === void 0) { pollingInternval = KEYBOARD_CLOSE_POLLING; }
  43655. if (pollingChecksMax === void 0) { pollingChecksMax = KEYBOARD_POLLING_CHECKS_MAX; }
  43656. (void 0) /* console.debug */;
  43657. var self = this;
  43658. var checks = 0;
  43659. var promise = null;
  43660. if (!callback) {
  43661. // a callback wasn't provided, so let's return a promise instead
  43662. promise = new Promise(function (resolve) { callback = resolve; });
  43663. }
  43664. function checkKeyboard() {
  43665. (void 0) /* console.debug */;
  43666. if (!self.isOpen() || checks > pollingChecksMax) {
  43667. self._plt.timeout(function () {
  43668. self._zone.run(function () {
  43669. (void 0) /* console.debug */;
  43670. callback();
  43671. });
  43672. }, 400);
  43673. }
  43674. else {
  43675. self._plt.timeout(checkKeyboard, pollingInternval);
  43676. }
  43677. checks++;
  43678. }
  43679. self._plt.timeout(checkKeyboard, pollingInternval);
  43680. return promise;
  43681. };
  43682. /**
  43683. * Programmatically close the keyboard.
  43684. */
  43685. Keyboard.prototype.close = function () {
  43686. var _this = this;
  43687. this._dom.read(function () {
  43688. if (_this.isOpen()) {
  43689. // only focus out when a text input has focus
  43690. (void 0) /* console.debug */;
  43691. _this._dom.write(function () {
  43692. _this._plt.focusOutActiveElement();
  43693. });
  43694. }
  43695. });
  43696. };
  43697. /**
  43698. * @hidden
  43699. */
  43700. Keyboard.prototype.focusOutline = function (setting) {
  43701. /* Focus Outline
  43702. * --------------------------------------------------
  43703. * By default, when a keydown event happens from a tab key, then
  43704. * the 'focus-outline' css class is added to the body element
  43705. * so focusable elements have an outline. On a mousedown or
  43706. * touchstart event, then the 'focus-outline' css class is removed.
  43707. *
  43708. * Config default overrides:
  43709. * focusOutline: true - Always add the focus-outline
  43710. * focusOutline: false - Do not add the focus-outline
  43711. */
  43712. var self = this;
  43713. var platform = self._plt;
  43714. var doc = platform.doc();
  43715. var isKeyInputEnabled = false;
  43716. var unRegMouse;
  43717. var unRegTouch;
  43718. var evOpts = { passive: true, zone: false };
  43719. function cssClass() {
  43720. self._dom.write(function () {
  43721. platform.doc().body.classList[isKeyInputEnabled ? 'add' : 'remove']('focus-outline');
  43722. });
  43723. }
  43724. if (setting === true) {
  43725. isKeyInputEnabled = true;
  43726. return cssClass();
  43727. }
  43728. else if (setting === false) {
  43729. return;
  43730. }
  43731. // default is to add the focus-outline when the tab key is used
  43732. function keyDown(ev) {
  43733. if (!isKeyInputEnabled && ev.keyCode === __WEBPACK_IMPORTED_MODULE_4__key__["g" /* KEY_TAB */]) {
  43734. isKeyInputEnabled = true;
  43735. enableKeyInput();
  43736. }
  43737. }
  43738. function pointerDown() {
  43739. isKeyInputEnabled = false;
  43740. enableKeyInput();
  43741. }
  43742. function enableKeyInput() {
  43743. cssClass();
  43744. unRegMouse && unRegMouse();
  43745. unRegTouch && unRegTouch();
  43746. if (isKeyInputEnabled) {
  43747. // listen for when a mousedown or touchstart event happens
  43748. unRegMouse = platform.registerListener(doc, 'mousedown', pointerDown, evOpts);
  43749. unRegTouch = platform.registerListener(doc, 'touchstart', pointerDown, evOpts);
  43750. }
  43751. }
  43752. // always listen for tab keydown events
  43753. platform.registerListener(platform.doc(), 'keydown', keyDown, evOpts);
  43754. };
  43755. Keyboard.prototype.hasFocusedTextInput = function () {
  43756. var activeEle = this._plt.getActiveElement();
  43757. if (Object(__WEBPACK_IMPORTED_MODULE_3__util_dom__["e" /* isTextInput */])(activeEle)) {
  43758. return (activeEle.parentElement.querySelector(':focus') === activeEle);
  43759. }
  43760. return false;
  43761. };
  43762. /**
  43763. * Set to true to hide the additional toolbar that is on top of the keyboard.
  43764. * This toolbar features the Prev, Next, and Done buttons.
  43765. * @param hidden
  43766. */
  43767. Keyboard.prototype.hideFormAccessoryBar = function (hidden) {
  43768. var win = this._plt.win();
  43769. if (win && win.Keyboard && win.Keyboard.hideFormAccessoryBar) {
  43770. win.Keyboard.hideFormAccessoryBar(hidden);
  43771. }
  43772. };
  43773. Keyboard.decorators = [
  43774. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  43775. ];
  43776. /** @nocollapse */
  43777. Keyboard.ctorParameters = function () { return [
  43778. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  43779. { type: __WEBPACK_IMPORTED_MODULE_5__platform__["a" /* Platform */], },
  43780. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  43781. { type: __WEBPACK_IMPORTED_MODULE_2__dom_controller__["a" /* DomController */], },
  43782. ]; };
  43783. return Keyboard;
  43784. }());
  43785. var KEYBOARD_CLOSE_POLLING = 150;
  43786. var KEYBOARD_POLLING_CHECKS_MAX = 100;
  43787. //# sourceMappingURL=keyboard.js.map
  43788. /***/ }),
  43789. /* 51 */
  43790. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  43791. "use strict";
  43792. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Haptic; });
  43793. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  43794. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_platform__ = __webpack_require__(7);
  43795. /**
  43796. * @name Haptic
  43797. * @description
  43798. * The `Haptic` class interacts with a haptic engine on the device, if
  43799. * available. Generally, Ionic components use this under the hood, but you're
  43800. * welcome to get a bit crazy with it if you fancy.
  43801. *
  43802. * Currently, this uses the Taptic engine on iOS.
  43803. *
  43804. * @usage
  43805. * ```ts
  43806. * export class MyClass {
  43807. *
  43808. * constructor(haptic: Haptic) {
  43809. * haptic.selection();
  43810. * }
  43811. * }
  43812. *
  43813. * ```
  43814. */
  43815. var Haptic = (function () {
  43816. function Haptic(plt) {
  43817. var _this = this;
  43818. if (plt) {
  43819. plt.ready().then(function () {
  43820. _this._p = plt.win().TapticEngine;
  43821. });
  43822. }
  43823. }
  43824. /**
  43825. * Check to see if the Haptic Plugin is available
  43826. * @return {boolean} Returns true or false if the plugin is available
  43827. *
  43828. */
  43829. Haptic.prototype.available = function () {
  43830. return !!this._p;
  43831. };
  43832. /**
  43833. * Trigger a selection changed haptic event. Good for one-time events
  43834. * (not for gestures)
  43835. */
  43836. Haptic.prototype.selection = function () {
  43837. this._p && this._p.selection();
  43838. };
  43839. /**
  43840. * Tell the haptic engine that a gesture for a selection change is starting.
  43841. */
  43842. Haptic.prototype.gestureSelectionStart = function () {
  43843. this._p && this._p.gestureSelectionStart();
  43844. };
  43845. /**
  43846. * Tell the haptic engine that a selection changed during a gesture.
  43847. */
  43848. Haptic.prototype.gestureSelectionChanged = function () {
  43849. this._p && this._p.gestureSelectionChanged();
  43850. };
  43851. /**
  43852. * Tell the haptic engine we are done with a gesture. This needs to be
  43853. * called lest resources are not properly recycled.
  43854. */
  43855. Haptic.prototype.gestureSelectionEnd = function () {
  43856. this._p && this._p.gestureSelectionEnd();
  43857. };
  43858. /**
  43859. * Use this to indicate success/failure/warning to the user.
  43860. * options should be of the type `{ type: 'success' }` (or `warning`/`error`)
  43861. */
  43862. Haptic.prototype.notification = function (options) {
  43863. this._p && this._p.notification(options);
  43864. };
  43865. /**
  43866. * Use this to indicate success/failure/warning to the user.
  43867. * options should be of the type `{ style: 'light' }` (or `medium`/`heavy`)
  43868. */
  43869. Haptic.prototype.impact = function (options) {
  43870. this._p && this._p.impact(options);
  43871. };
  43872. Haptic.decorators = [
  43873. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  43874. ];
  43875. /** @nocollapse */
  43876. Haptic.ctorParameters = function () { return [
  43877. { type: __WEBPACK_IMPORTED_MODULE_1__platform_platform__["a" /* Platform */], },
  43878. ]; };
  43879. return Haptic;
  43880. }());
  43881. //# sourceMappingURL=haptic.js.map
  43882. /***/ }),
  43883. /* 52 */
  43884. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  43885. "use strict";
  43886. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RootNode; });
  43887. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SplitPane; });
  43888. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  43889. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ion__ = __webpack_require__(8);
  43890. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  43891. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  43892. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_platform__ = __webpack_require__(7);
  43893. var __extends = (this && this.__extends) || (function () {
  43894. var extendStatics = Object.setPrototypeOf ||
  43895. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  43896. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  43897. return function (d, b) {
  43898. extendStatics(d, b);
  43899. function __() { this.constructor = d; }
  43900. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  43901. };
  43902. })();
  43903. var QUERY = {
  43904. xs: '(min-width: 0px)',
  43905. sm: '(min-width: 576px)',
  43906. md: '(min-width: 768px)',
  43907. lg: '(min-width: 992px)',
  43908. xl: '(min-width: 1200px)',
  43909. never: ''
  43910. };
  43911. /**
  43912. * @hidden
  43913. */
  43914. var RootNode = (function () {
  43915. function RootNode() {
  43916. }
  43917. return RootNode;
  43918. }());
  43919. /**
  43920. * @name SplitPane
  43921. *
  43922. * @description
  43923. * SplitPane is a component that makes it possible to create multi-view layout.
  43924. * Similar to iPad apps, SplitPane allows UI elements, like Menus, to be
  43925. * displayed as the viewport increases.
  43926. *
  43927. * If the devices screen size is below a certain size, the SplitPane will
  43928. * collapse and the menu will become hidden again. This is especially useful when
  43929. * creating an app that will be served over a browser or deployed through the app
  43930. * store to phones and tablets.
  43931. *
  43932. * @usage
  43933. * To use SplitPane, simply add the component around your root component.
  43934. * In this example, we'll be using a sidemenu layout, similar to what is
  43935. * provided from the sidemenu starter template.
  43936. *
  43937. * ```html
  43938. * <ion-split-pane>
  43939. * <!-- our side menu -->
  43940. * <ion-menu [content]="content">
  43941. * <ion-header>
  43942. * <ion-toolbar>
  43943. * <ion-title>Menu</ion-title>
  43944. * </ion-toolbar>
  43945. * </ion-header>
  43946. * </ion-menu>
  43947. *
  43948. * <!-- the main content -->
  43949. * <ion-nav [root]="root" main #content></ion-nav>
  43950. * </ion-split-pane>
  43951. * ```
  43952. *
  43953. * Here, SplitPane will look for the element with the `main` attribute and make
  43954. * that the central component on larger screens. The `main` component can be any
  43955. * Ionic component (`ion-nav` or `ion-tabs`) except `ion-menu`.
  43956. *
  43957. * ### Setting breakpoints
  43958. *
  43959. * By default, SplitPane will expand when the screen is larger than 768px.
  43960. * If you want to customize this, use the `when` input. The `when` input can
  43961. * accept any valid media query, as it uses `matchMedia()` underneath.
  43962. *
  43963. * ```
  43964. * <ion-split-pane when="(min-width: 475px)">
  43965. *
  43966. * <!-- our side menu -->
  43967. * <ion-menu [content]="content">
  43968. * ....
  43969. * </ion-menu>
  43970. *
  43971. * <!-- the main content -->
  43972. * <ion-nav [root]="root" main #content></ion-nav>
  43973. * </ion-split-pane>
  43974. * ```
  43975. *
  43976. * SplitPane also provides some predefined media queries that can be used.
  43977. *
  43978. * ```html
  43979. * <!-- could be "xs", "sm", "md", "lg", or "xl" -->
  43980. * <ion-split-pane when="lg">
  43981. * ...
  43982. * </ion-split-pane>
  43983. * ```
  43984. *
  43985. *
  43986. * | Size | Value | Description |
  43987. * |------|-----------------------|-----------------------------------------------------------------------|
  43988. * | `xs` | `(min-width: 0px)` | Show the split-pane when the min-width is 0px (meaning, always) |
  43989. * | `sm` | `(min-width: 576px)` | Show the split-pane when the min-width is 576px |
  43990. * | `md` | `(min-width: 768px)` | Show the split-pane when the min-width is 768px (default break point) |
  43991. * | `lg` | `(min-width: 992px)` | Show the split-pane when the min-width is 992px |
  43992. * | `xl` | `(min-width: 1200px)` | Show the split-pane when the min-width is 1200px |
  43993. *
  43994. * You can also pass in boolean values that will trigger SplitPane when the value
  43995. * or expression evaluates to true.
  43996. *
  43997. *
  43998. * ```html
  43999. * <ion-split-pane [when]="isLarge">
  44000. * ...
  44001. * </ion-split-pane>
  44002. * ```
  44003. *
  44004. * ```ts
  44005. * class MyClass {
  44006. * public isLarge = false;
  44007. * constructor(){}
  44008. * }
  44009. * ```
  44010. *
  44011. * Or
  44012. *
  44013. * ```html
  44014. * <ion-split-pane [when]="shouldShow()">
  44015. * ...
  44016. * </ion-split-pane>
  44017. * ```
  44018. *
  44019. * ```ts
  44020. * class MyClass {
  44021. * constructor(){}
  44022. * shouldShow(){
  44023. * if(conditionA){
  44024. * return true
  44025. * } else {
  44026. * return false
  44027. * }
  44028. * }
  44029. * }
  44030. * ```
  44031. *
  44032. */
  44033. var SplitPane = (function (_super) {
  44034. __extends(SplitPane, _super);
  44035. function SplitPane(_zone, _plt, config, elementRef, renderer) {
  44036. var _this = _super.call(this, config, elementRef, renderer, 'split-pane') || this;
  44037. _this._zone = _zone;
  44038. _this._plt = _plt;
  44039. _this._init = false;
  44040. _this._visible = false;
  44041. _this._isEnabled = true;
  44042. _this._mediaQuery = QUERY['md'];
  44043. /**
  44044. * @hidden
  44045. */
  44046. _this.sideContent = null;
  44047. /**
  44048. * @hidden
  44049. */
  44050. _this.mainContent = null;
  44051. /**
  44052. * @output {any} Expression to be called when the split-pane visibility has changed
  44053. */
  44054. _this.ionChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  44055. return _this;
  44056. }
  44057. Object.defineProperty(SplitPane.prototype, "_setchildren", {
  44058. /**
  44059. * @hidden
  44060. */
  44061. set: function (query) {
  44062. var _this = this;
  44063. var children = this._children = query.filter((function (child) { return child !== _this; }));
  44064. children.forEach(function (child) {
  44065. var isMain = child.initPane();
  44066. _this._setPaneCSSClass(child.getElementRef(), isMain);
  44067. });
  44068. },
  44069. enumerable: true,
  44070. configurable: true
  44071. });
  44072. Object.defineProperty(SplitPane.prototype, "when", {
  44073. get: function () {
  44074. return this._mediaQuery;
  44075. },
  44076. /**
  44077. * @input {string | boolean} When the split-pane should be shown.
  44078. * Can be a CSS media query expression, or a shortcut expression.
  44079. * Can also be a boolean expression.
  44080. */
  44081. set: function (query) {
  44082. if (typeof query === 'boolean') {
  44083. this._mediaQuery = query;
  44084. }
  44085. else {
  44086. var defaultQuery = QUERY[query];
  44087. this._mediaQuery = (defaultQuery)
  44088. ? defaultQuery
  44089. : query;
  44090. }
  44091. this._update();
  44092. },
  44093. enumerable: true,
  44094. configurable: true
  44095. });
  44096. Object.defineProperty(SplitPane.prototype, "enabled", {
  44097. get: function () {
  44098. return this._isEnabled;
  44099. },
  44100. /**
  44101. * @input {boolean} If `false`, the split-pane is disabled, ie. the side pane will
  44102. * never be displayed. Default `true`.
  44103. */
  44104. set: function (val) {
  44105. this._isEnabled = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["o" /* isTrueProperty */])(val);
  44106. this._update();
  44107. },
  44108. enumerable: true,
  44109. configurable: true
  44110. });
  44111. /**
  44112. * @hidden
  44113. */
  44114. SplitPane.prototype._register = function (node, isMain, callback) {
  44115. if (this.getElementRef().nativeElement !== node.getElementRef().nativeElement.parentNode) {
  44116. return false;
  44117. }
  44118. this._setPaneCSSClass(node.getElementRef(), isMain);
  44119. if (callback) {
  44120. this.ionChange.subscribe(callback);
  44121. }
  44122. if (isMain) {
  44123. if (this.mainContent) {
  44124. console.error('split pane: main content was already set');
  44125. }
  44126. this.mainContent = node;
  44127. }
  44128. return true;
  44129. };
  44130. /**
  44131. * @hidden
  44132. */
  44133. SplitPane.prototype.ngAfterViewInit = function () {
  44134. this._init = true;
  44135. this._update();
  44136. };
  44137. /**
  44138. * @hidden
  44139. */
  44140. SplitPane.prototype._update = function () {
  44141. var _this = this;
  44142. if (!this._init) {
  44143. return;
  44144. }
  44145. // Unlisten
  44146. this._rmListener && this._rmListener();
  44147. this._rmListener = null;
  44148. // Check if the split-pane is disabled
  44149. if (!this._isEnabled) {
  44150. this._setVisible(false);
  44151. return;
  44152. }
  44153. var query = this._mediaQuery;
  44154. if (typeof query === 'boolean') {
  44155. this._setVisible(query);
  44156. return;
  44157. }
  44158. if (query && query.length > 0) {
  44159. // Listen
  44160. var callback_1 = function (query) { return _this._setVisible(query.matches); };
  44161. var mediaList_1 = this._plt.win().matchMedia(query);
  44162. mediaList_1.addListener(callback_1);
  44163. this._setVisible(mediaList_1.matches);
  44164. this._rmListener = function () {
  44165. mediaList_1.removeListener(callback_1);
  44166. };
  44167. }
  44168. else {
  44169. this._setVisible(false);
  44170. }
  44171. };
  44172. /**
  44173. * @hidden
  44174. */
  44175. SplitPane.prototype._updateChildren = function () {
  44176. this.mainContent = null;
  44177. this.sideContent = null;
  44178. var visible = this._visible;
  44179. this._children.forEach(function (child) { return child.paneChanged && child.paneChanged(visible); });
  44180. };
  44181. /**
  44182. * @hidden
  44183. */
  44184. SplitPane.prototype._setVisible = function (visible) {
  44185. var _this = this;
  44186. if (this._visible === visible) {
  44187. return;
  44188. }
  44189. this._visible = visible;
  44190. this.setElementClass('split-pane-visible', visible);
  44191. this._updateChildren();
  44192. this._zone.run(function () {
  44193. _this.ionChange.emit(_this);
  44194. });
  44195. };
  44196. /**
  44197. * @hidden
  44198. */
  44199. SplitPane.prototype.isVisible = function () {
  44200. return this._visible;
  44201. };
  44202. /**
  44203. * @hidden
  44204. */
  44205. SplitPane.prototype.setElementClass = function (className, add) {
  44206. this._renderer.setElementClass(this._elementRef.nativeElement, className, add);
  44207. };
  44208. /**
  44209. * @hidden
  44210. */
  44211. SplitPane.prototype._setPaneCSSClass = function (elementRef, isMain) {
  44212. var ele = elementRef.nativeElement;
  44213. this._renderer.setElementClass(ele, 'split-pane-main', isMain);
  44214. this._renderer.setElementClass(ele, 'split-pane-side', !isMain);
  44215. };
  44216. /**
  44217. * @hidden
  44218. */
  44219. SplitPane.prototype.ngOnDestroy = function () {
  44220. (void 0) /* assert */;
  44221. this._rmListener && this._rmListener();
  44222. this._rmListener = null;
  44223. };
  44224. /**
  44225. * @hidden
  44226. */
  44227. SplitPane.prototype.initPane = function () {
  44228. return true;
  44229. };
  44230. SplitPane.decorators = [
  44231. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  44232. selector: 'ion-split-pane',
  44233. providers: [{ provide: RootNode, useExisting: Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return SplitPane; }) }]
  44234. },] },
  44235. ];
  44236. /** @nocollapse */
  44237. SplitPane.ctorParameters = function () { return [
  44238. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  44239. { type: __WEBPACK_IMPORTED_MODULE_4__platform_platform__["a" /* Platform */], },
  44240. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  44241. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  44242. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  44243. ]; };
  44244. SplitPane.propDecorators = {
  44245. '_setchildren': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [RootNode, { descendants: false },] },],
  44246. 'when': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  44247. 'enabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  44248. 'ionChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  44249. };
  44250. return SplitPane;
  44251. }(__WEBPACK_IMPORTED_MODULE_1__ion__["a" /* Ion */]));
  44252. //# sourceMappingURL=split-pane.js.map
  44253. /***/ }),
  44254. /* 53 */
  44255. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  44256. "use strict";
  44257. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Navbar; });
  44258. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  44259. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  44260. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  44261. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  44262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_nav_controller__ = __webpack_require__(35);
  44263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__toolbar_base__ = __webpack_require__(205);
  44264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__navigation_view_controller__ = __webpack_require__(9);
  44265. var __extends = (this && this.__extends) || (function () {
  44266. var extendStatics = Object.setPrototypeOf ||
  44267. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  44268. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  44269. return function (d, b) {
  44270. extendStatics(d, b);
  44271. function __() { this.constructor = d; }
  44272. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  44273. };
  44274. })();
  44275. /**
  44276. * @name Navbar
  44277. * @description
  44278. * Navbar acts as the navigational toolbar, which also comes with a back
  44279. * button. A navbar can contain a `ion-title`, any number of buttons,
  44280. * a segment, or a searchbar. Navbars must be placed within an
  44281. * `<ion-header>` in order for them to be placed above the content.
  44282. * It's important to note that navbar's are part of the dynamic navigation
  44283. * stack. If you need a static toolbar, use ion-toolbar.
  44284. *
  44285. * @usage
  44286. * ```html
  44287. * <ion-header>
  44288. *
  44289. * <ion-navbar>
  44290. * <button ion-button icon-only menuToggle>
  44291. * <ion-icon name="menu"></ion-icon>
  44292. * </button>
  44293. *
  44294. * <ion-title>
  44295. * Page Title
  44296. * </ion-title>
  44297. *
  44298. * <ion-buttons end>
  44299. * <button ion-button icon-only (click)="openModal()">
  44300. * <ion-icon name="options"></ion-icon>
  44301. * </button>
  44302. * </ion-buttons>
  44303. * </ion-navbar>
  44304. *
  44305. * </ion-header>
  44306. * ```
  44307. *
  44308. * @demo /docs/demos/src/navbar/
  44309. * @see {@link ../../toolbar/Toolbar/ Toolbar API Docs}
  44310. */
  44311. var Navbar = (function (_super) {
  44312. __extends(Navbar, _super);
  44313. function Navbar(_app, viewCtrl, navCtrl, config, elementRef, renderer) {
  44314. var _this = _super.call(this, config, elementRef, renderer) || this;
  44315. _this._app = _app;
  44316. _this.navCtrl = navCtrl;
  44317. /**
  44318. * @hidden
  44319. */
  44320. _this._hidden = false;
  44321. /**
  44322. * @hidden
  44323. */
  44324. _this._hideBb = false;
  44325. viewCtrl && viewCtrl._setNavbar(_this);
  44326. _this._bbIcon = config.get('backButtonIcon');
  44327. _this._sbPadding = config.getBoolean('statusbarPadding');
  44328. _this._backText = config.get('backButtonText', 'Back');
  44329. return _this;
  44330. }
  44331. Object.defineProperty(Navbar.prototype, "hideBackButton", {
  44332. /**
  44333. * @input {boolean} If true, the back button will be hidden.
  44334. */
  44335. get: function () {
  44336. return this._hideBb;
  44337. },
  44338. set: function (val) {
  44339. this._hideBb = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  44340. },
  44341. enumerable: true,
  44342. configurable: true
  44343. });
  44344. Navbar.prototype.backButtonClick = function (ev) {
  44345. ev.preventDefault();
  44346. ev.stopPropagation();
  44347. this.navCtrl && this.navCtrl.pop(null, null);
  44348. };
  44349. /**
  44350. * Set the text of the Back Button in the Nav Bar. Defaults to "Back".
  44351. */
  44352. Navbar.prototype.setBackButtonText = function (text) {
  44353. this._backText = text;
  44354. };
  44355. /**
  44356. * @hidden
  44357. */
  44358. Navbar.prototype.didEnter = function () {
  44359. try {
  44360. this._app.setTitle(this.getTitleText());
  44361. }
  44362. catch (e) {
  44363. console.error(e);
  44364. }
  44365. };
  44366. /**
  44367. * @hidden
  44368. */
  44369. Navbar.prototype.setHidden = function (isHidden) {
  44370. // used to display none/block the navbar
  44371. this._hidden = isHidden;
  44372. };
  44373. Navbar.decorators = [
  44374. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  44375. selector: 'ion-navbar',
  44376. template: '<div class="toolbar-background" [ngClass]="\'toolbar-background-\' + _mode"></div>' +
  44377. '<button (click)="backButtonClick($event)" ion-button="bar-button" class="back-button" [ngClass]="\'back-button-\' + _mode" [hidden]="_hideBb">' +
  44378. '<ion-icon class="back-button-icon" [ngClass]="\'back-button-icon-\' + _mode" [name]="_bbIcon"></ion-icon>' +
  44379. '<span class="back-button-text" [ngClass]="\'back-button-text-\' + _mode">{{_backText}}</span>' +
  44380. '</button>' +
  44381. '<ng-content select="[menuToggle],ion-buttons[left]"></ng-content>' +
  44382. '<ng-content select="ion-buttons[start]"></ng-content>' +
  44383. '<ng-content select="ion-buttons[end],ion-buttons[right]"></ng-content>' +
  44384. '<div class="toolbar-content" [ngClass]="\'toolbar-content-\' + _mode">' +
  44385. '<ng-content></ng-content>' +
  44386. '</div>',
  44387. host: {
  44388. '[hidden]': '_hidden',
  44389. 'class': 'toolbar',
  44390. '[class.statusbar-padding]': '_sbPadding'
  44391. }
  44392. },] },
  44393. ];
  44394. /** @nocollapse */
  44395. Navbar.ctorParameters = function () { return [
  44396. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  44397. { type: __WEBPACK_IMPORTED_MODULE_6__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  44398. { type: __WEBPACK_IMPORTED_MODULE_4__navigation_nav_controller__["a" /* NavController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  44399. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  44400. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  44401. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  44402. ]; };
  44403. Navbar.propDecorators = {
  44404. 'hideBackButton': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  44405. };
  44406. return Navbar;
  44407. }(__WEBPACK_IMPORTED_MODULE_5__toolbar_base__["a" /* ToolbarBase */]));
  44408. //# sourceMappingURL=navbar.js.map
  44409. /***/ }),
  44410. /* 54 */
  44411. /***/ (function(module, exports, __webpack_require__) {
  44412. "use strict";
  44413. var isScheduler_1 = __webpack_require__(22);
  44414. var of_1 = __webpack_require__(211);
  44415. var from_1 = __webpack_require__(212);
  44416. var concatAll_1 = __webpack_require__(114);
  44417. /* tslint:enable:max-line-length */
  44418. /**
  44419. * Creates an output Observable which sequentially emits all values from given
  44420. * Observable and then moves on to the next.
  44421. *
  44422. * <span class="informal">Concatenates multiple Observables together by
  44423. * sequentially emitting their values, one Observable after the other.</span>
  44424. *
  44425. * <img src="./img/concat.png" width="100%">
  44426. *
  44427. * `concat` joins multiple Observables together, by subscribing to them one at a time and
  44428. * merging their results into the output Observable. You can pass either an array of
  44429. * Observables, or put them directly as arguments. Passing an empty array will result
  44430. * in Observable that completes immediately.
  44431. *
  44432. * `concat` will subscribe to first input Observable and emit all its values, without
  44433. * changing or affecting them in any way. When that Observable completes, it will
  44434. * subscribe to then next Observable passed and, again, emit its values. This will be
  44435. * repeated, until the operator runs out of Observables. When last input Observable completes,
  44436. * `concat` will complete as well. At any given moment only one Observable passed to operator
  44437. * emits values. If you would like to emit values from passed Observables concurrently, check out
  44438. * {@link merge} instead, especially with optional `concurrent` parameter. As a matter of fact,
  44439. * `concat` is an equivalent of `merge` operator with `concurrent` parameter set to `1`.
  44440. *
  44441. * Note that if some input Observable never completes, `concat` will also never complete
  44442. * and Observables following the one that did not complete will never be subscribed. On the other
  44443. * hand, if some Observable simply completes immediately after it is subscribed, it will be
  44444. * invisible for `concat`, which will just move on to the next Observable.
  44445. *
  44446. * If any Observable in chain errors, instead of passing control to the next Observable,
  44447. * `concat` will error immediately as well. Observables that would be subscribed after
  44448. * the one that emitted error, never will.
  44449. *
  44450. * If you pass to `concat` the same Observable many times, its stream of values
  44451. * will be "replayed" on every subscription, which means you can repeat given Observable
  44452. * as many times as you like. If passing the same Observable to `concat` 1000 times becomes tedious,
  44453. * you can always use {@link repeat}.
  44454. *
  44455. * @example <caption>Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10</caption>
  44456. * var timer = Rx.Observable.interval(1000).take(4);
  44457. * var sequence = Rx.Observable.range(1, 10);
  44458. * var result = Rx.Observable.concat(timer, sequence);
  44459. * result.subscribe(x => console.log(x));
  44460. *
  44461. * // results in:
  44462. * // 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
  44463. *
  44464. *
  44465. * @example <caption>Concatenate an array of 3 Observables</caption>
  44466. * var timer1 = Rx.Observable.interval(1000).take(10);
  44467. * var timer2 = Rx.Observable.interval(2000).take(6);
  44468. * var timer3 = Rx.Observable.interval(500).take(10);
  44469. * var result = Rx.Observable.concat([timer1, timer2, timer3]); // note that array is passed
  44470. * result.subscribe(x => console.log(x));
  44471. *
  44472. * // results in the following:
  44473. * // (Prints to console sequentially)
  44474. * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
  44475. * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
  44476. * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9
  44477. *
  44478. *
  44479. * @example <caption>Concatenate the same Observable to repeat it</caption>
  44480. * const timer = Rx.Observable.interval(1000).take(2);
  44481. *
  44482. * Rx.Observable.concat(timer, timer) // concating the same Observable!
  44483. * .subscribe(
  44484. * value => console.log(value),
  44485. * err => {},
  44486. * () => console.log('...and it is done!')
  44487. * );
  44488. *
  44489. * // Logs:
  44490. * // 0 after 1s
  44491. * // 1 after 2s
  44492. * // 0 after 3s
  44493. * // 1 after 4s
  44494. * // "...and it is done!" also after 4s
  44495. *
  44496. * @see {@link concatAll}
  44497. * @see {@link concatMap}
  44498. * @see {@link concatMapTo}
  44499. *
  44500. * @param {ObservableInput} input1 An input Observable to concatenate with others.
  44501. * @param {ObservableInput} input2 An input Observable to concatenate with others.
  44502. * More than one input Observables may be given as argument.
  44503. * @param {Scheduler} [scheduler=null] An optional IScheduler to schedule each
  44504. * Observable subscription on.
  44505. * @return {Observable} All values of each passed Observable merged into a
  44506. * single Observable, in order, in serial fashion.
  44507. * @static true
  44508. * @name concat
  44509. * @owner Observable
  44510. */
  44511. function concat() {
  44512. var observables = [];
  44513. for (var _i = 0; _i < arguments.length; _i++) {
  44514. observables[_i - 0] = arguments[_i];
  44515. }
  44516. if (observables.length === 1 || (observables.length === 2 && isScheduler_1.isScheduler(observables[1]))) {
  44517. return from_1.from(observables[0]);
  44518. }
  44519. return concatAll_1.concatAll()(of_1.of.apply(void 0, observables));
  44520. }
  44521. exports.concat = concat;
  44522. //# sourceMappingURL=concat.js.map
  44523. /***/ }),
  44524. /* 55 */
  44525. /***/ (function(module, exports, __webpack_require__) {
  44526. "use strict";
  44527. var Observable_1 = __webpack_require__(0);
  44528. /**
  44529. * Represents a push-based event or value that an {@link Observable} can emit.
  44530. * This class is particularly useful for operators that manage notifications,
  44531. * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and
  44532. * others. Besides wrapping the actual delivered value, it also annotates it
  44533. * with metadata of, for instance, what type of push message it is (`next`,
  44534. * `error`, or `complete`).
  44535. *
  44536. * @see {@link materialize}
  44537. * @see {@link dematerialize}
  44538. * @see {@link observeOn}
  44539. *
  44540. * @class Notification<T>
  44541. */
  44542. var Notification = (function () {
  44543. function Notification(kind, value, error) {
  44544. this.kind = kind;
  44545. this.value = value;
  44546. this.error = error;
  44547. this.hasValue = kind === 'N';
  44548. }
  44549. /**
  44550. * Delivers to the given `observer` the value wrapped by this Notification.
  44551. * @param {Observer} observer
  44552. * @return
  44553. */
  44554. Notification.prototype.observe = function (observer) {
  44555. switch (this.kind) {
  44556. case 'N':
  44557. return observer.next && observer.next(this.value);
  44558. case 'E':
  44559. return observer.error && observer.error(this.error);
  44560. case 'C':
  44561. return observer.complete && observer.complete();
  44562. }
  44563. };
  44564. /**
  44565. * Given some {@link Observer} callbacks, deliver the value represented by the
  44566. * current Notification to the correctly corresponding callback.
  44567. * @param {function(value: T): void} next An Observer `next` callback.
  44568. * @param {function(err: any): void} [error] An Observer `error` callback.
  44569. * @param {function(): void} [complete] An Observer `complete` callback.
  44570. * @return {any}
  44571. */
  44572. Notification.prototype.do = function (next, error, complete) {
  44573. var kind = this.kind;
  44574. switch (kind) {
  44575. case 'N':
  44576. return next && next(this.value);
  44577. case 'E':
  44578. return error && error(this.error);
  44579. case 'C':
  44580. return complete && complete();
  44581. }
  44582. };
  44583. /**
  44584. * Takes an Observer or its individual callback functions, and calls `observe`
  44585. * or `do` methods accordingly.
  44586. * @param {Observer|function(value: T): void} nextOrObserver An Observer or
  44587. * the `next` callback.
  44588. * @param {function(err: any): void} [error] An Observer `error` callback.
  44589. * @param {function(): void} [complete] An Observer `complete` callback.
  44590. * @return {any}
  44591. */
  44592. Notification.prototype.accept = function (nextOrObserver, error, complete) {
  44593. if (nextOrObserver && typeof nextOrObserver.next === 'function') {
  44594. return this.observe(nextOrObserver);
  44595. }
  44596. else {
  44597. return this.do(nextOrObserver, error, complete);
  44598. }
  44599. };
  44600. /**
  44601. * Returns a simple Observable that just delivers the notification represented
  44602. * by this Notification instance.
  44603. * @return {any}
  44604. */
  44605. Notification.prototype.toObservable = function () {
  44606. var kind = this.kind;
  44607. switch (kind) {
  44608. case 'N':
  44609. return Observable_1.Observable.of(this.value);
  44610. case 'E':
  44611. return Observable_1.Observable.throw(this.error);
  44612. case 'C':
  44613. return Observable_1.Observable.empty();
  44614. }
  44615. throw new Error('unexpected notification kind value');
  44616. };
  44617. /**
  44618. * A shortcut to create a Notification instance of the type `next` from a
  44619. * given value.
  44620. * @param {T} value The `next` value.
  44621. * @return {Notification<T>} The "next" Notification representing the
  44622. * argument.
  44623. */
  44624. Notification.createNext = function (value) {
  44625. if (typeof value !== 'undefined') {
  44626. return new Notification('N', value);
  44627. }
  44628. return Notification.undefinedValueNotification;
  44629. };
  44630. /**
  44631. * A shortcut to create a Notification instance of the type `error` from a
  44632. * given error.
  44633. * @param {any} [err] The `error` error.
  44634. * @return {Notification<T>} The "error" Notification representing the
  44635. * argument.
  44636. */
  44637. Notification.createError = function (err) {
  44638. return new Notification('E', undefined, err);
  44639. };
  44640. /**
  44641. * A shortcut to create a Notification instance of the type `complete`.
  44642. * @return {Notification<any>} The valueless "complete" Notification.
  44643. */
  44644. Notification.createComplete = function () {
  44645. return Notification.completeNotification;
  44646. };
  44647. Notification.completeNotification = new Notification('C');
  44648. Notification.undefinedValueNotification = new Notification('N', undefined);
  44649. return Notification;
  44650. }());
  44651. exports.Notification = Notification;
  44652. //# sourceMappingURL=Notification.js.map
  44653. /***/ }),
  44654. /* 56 */
  44655. /***/ (function(module, exports, __webpack_require__) {
  44656. "use strict";
  44657. var isArray_1 = __webpack_require__(26);
  44658. function isNumeric(val) {
  44659. // parseFloat NaNs numeric-cast false positives (null|true|false|"")
  44660. // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
  44661. // subtraction forces infinities to NaN
  44662. // adding 1 corrects loss of precision from parseFloat (#15100)
  44663. return !isArray_1.isArray(val) && (val - parseFloat(val) + 1) >= 0;
  44664. }
  44665. exports.isNumeric = isNumeric;
  44666. ;
  44667. //# sourceMappingURL=isNumeric.js.map
  44668. /***/ }),
  44669. /* 57 */
  44670. /***/ (function(module, exports, __webpack_require__) {
  44671. "use strict";
  44672. var __extends = (this && this.__extends) || function (d, b) {
  44673. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  44674. function __() { this.constructor = d; }
  44675. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  44676. };
  44677. var root_1 = __webpack_require__(19);
  44678. var Action_1 = __webpack_require__(409);
  44679. /**
  44680. * We need this JSDoc comment for affecting ESDoc.
  44681. * @ignore
  44682. * @extends {Ignored}
  44683. */
  44684. var AsyncAction = (function (_super) {
  44685. __extends(AsyncAction, _super);
  44686. function AsyncAction(scheduler, work) {
  44687. _super.call(this, scheduler, work);
  44688. this.scheduler = scheduler;
  44689. this.work = work;
  44690. this.pending = false;
  44691. }
  44692. AsyncAction.prototype.schedule = function (state, delay) {
  44693. if (delay === void 0) { delay = 0; }
  44694. if (this.closed) {
  44695. return this;
  44696. }
  44697. // Always replace the current state with the new state.
  44698. this.state = state;
  44699. // Set the pending flag indicating that this action has been scheduled, or
  44700. // has recursively rescheduled itself.
  44701. this.pending = true;
  44702. var id = this.id;
  44703. var scheduler = this.scheduler;
  44704. //
  44705. // Important implementation note:
  44706. //
  44707. // Actions only execute once by default, unless rescheduled from within the
  44708. // scheduled callback. This allows us to implement single and repeat
  44709. // actions via the same code path, without adding API surface area, as well
  44710. // as mimic traditional recursion but across asynchronous boundaries.
  44711. //
  44712. // However, JS runtimes and timers distinguish between intervals achieved by
  44713. // serial `setTimeout` calls vs. a single `setInterval` call. An interval of
  44714. // serial `setTimeout` calls can be individually delayed, which delays
  44715. // scheduling the next `setTimeout`, and so on. `setInterval` attempts to
  44716. // guarantee the interval callback will be invoked more precisely to the
  44717. // interval period, regardless of load.
  44718. //
  44719. // Therefore, we use `setInterval` to schedule single and repeat actions.
  44720. // If the action reschedules itself with the same delay, the interval is not
  44721. // canceled. If the action doesn't reschedule, or reschedules with a
  44722. // different delay, the interval will be canceled after scheduled callback
  44723. // execution.
  44724. //
  44725. if (id != null) {
  44726. this.id = this.recycleAsyncId(scheduler, id, delay);
  44727. }
  44728. this.delay = delay;
  44729. // If this action has already an async Id, don't request a new one.
  44730. this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
  44731. return this;
  44732. };
  44733. AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
  44734. if (delay === void 0) { delay = 0; }
  44735. return root_1.root.setInterval(scheduler.flush.bind(scheduler, this), delay);
  44736. };
  44737. AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
  44738. if (delay === void 0) { delay = 0; }
  44739. // If this action is rescheduled with the same delay time, don't clear the interval id.
  44740. if (delay !== null && this.delay === delay && this.pending === false) {
  44741. return id;
  44742. }
  44743. // Otherwise, if the action's delay time is different from the current delay,
  44744. // or the action has been rescheduled before it's executed, clear the interval id
  44745. return root_1.root.clearInterval(id) && undefined || undefined;
  44746. };
  44747. /**
  44748. * Immediately executes this action and the `work` it contains.
  44749. * @return {any}
  44750. */
  44751. AsyncAction.prototype.execute = function (state, delay) {
  44752. if (this.closed) {
  44753. return new Error('executing a cancelled action');
  44754. }
  44755. this.pending = false;
  44756. var error = this._execute(state, delay);
  44757. if (error) {
  44758. return error;
  44759. }
  44760. else if (this.pending === false && this.id != null) {
  44761. // Dequeue if the action didn't reschedule itself. Don't call
  44762. // unsubscribe(), because the action could reschedule later.
  44763. // For example:
  44764. // ```
  44765. // scheduler.schedule(function doWork(counter) {
  44766. // /* ... I'm a busy worker bee ... */
  44767. // var originalAction = this;
  44768. // /* wait 100ms before rescheduling the action */
  44769. // setTimeout(function () {
  44770. // originalAction.schedule(counter + 1);
  44771. // }, 100);
  44772. // }, 1000);
  44773. // ```
  44774. this.id = this.recycleAsyncId(this.scheduler, this.id, null);
  44775. }
  44776. };
  44777. AsyncAction.prototype._execute = function (state, delay) {
  44778. var errored = false;
  44779. var errorValue = undefined;
  44780. try {
  44781. this.work(state);
  44782. }
  44783. catch (e) {
  44784. errored = true;
  44785. errorValue = !!e && e || new Error(e);
  44786. }
  44787. if (errored) {
  44788. this.unsubscribe();
  44789. return errorValue;
  44790. }
  44791. };
  44792. /** @deprecated internal use only */ AsyncAction.prototype._unsubscribe = function () {
  44793. var id = this.id;
  44794. var scheduler = this.scheduler;
  44795. var actions = scheduler.actions;
  44796. var index = actions.indexOf(this);
  44797. this.work = null;
  44798. this.state = null;
  44799. this.pending = false;
  44800. this.scheduler = null;
  44801. if (index !== -1) {
  44802. actions.splice(index, 1);
  44803. }
  44804. if (id != null) {
  44805. this.id = this.recycleAsyncId(scheduler, id, null);
  44806. }
  44807. this.delay = null;
  44808. };
  44809. return AsyncAction;
  44810. }(Action_1.Action));
  44811. exports.AsyncAction = AsyncAction;
  44812. //# sourceMappingURL=AsyncAction.js.map
  44813. /***/ }),
  44814. /* 58 */
  44815. /***/ (function(module, exports, __webpack_require__) {
  44816. "use strict";
  44817. var __extends = (this && this.__extends) || function (d, b) {
  44818. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  44819. function __() { this.constructor = d; }
  44820. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  44821. };
  44822. var Scheduler_1 = __webpack_require__(410);
  44823. var AsyncScheduler = (function (_super) {
  44824. __extends(AsyncScheduler, _super);
  44825. function AsyncScheduler() {
  44826. _super.apply(this, arguments);
  44827. this.actions = [];
  44828. /**
  44829. * A flag to indicate whether the Scheduler is currently executing a batch of
  44830. * queued actions.
  44831. * @type {boolean}
  44832. */
  44833. this.active = false;
  44834. /**
  44835. * An internal ID used to track the latest asynchronous task such as those
  44836. * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and
  44837. * others.
  44838. * @type {any}
  44839. */
  44840. this.scheduled = undefined;
  44841. }
  44842. AsyncScheduler.prototype.flush = function (action) {
  44843. var actions = this.actions;
  44844. if (this.active) {
  44845. actions.push(action);
  44846. return;
  44847. }
  44848. var error;
  44849. this.active = true;
  44850. do {
  44851. if (error = action.execute(action.state, action.delay)) {
  44852. break;
  44853. }
  44854. } while (action = actions.shift()); // exhaust the scheduler queue
  44855. this.active = false;
  44856. if (error) {
  44857. while (action = actions.shift()) {
  44858. action.unsubscribe();
  44859. }
  44860. throw error;
  44861. }
  44862. };
  44863. return AsyncScheduler;
  44864. }(Scheduler_1.Scheduler));
  44865. exports.AsyncScheduler = AsyncScheduler;
  44866. //# sourceMappingURL=AsyncScheduler.js.map
  44867. /***/ }),
  44868. /* 59 */
  44869. /***/ (function(module, exports, __webpack_require__) {
  44870. "use strict";
  44871. var __extends = (this && this.__extends) || function (d, b) {
  44872. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  44873. function __() { this.constructor = d; }
  44874. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  44875. };
  44876. /**
  44877. * An error thrown when an element was queried at a certain index of an
  44878. * Observable, but no such index or position exists in that sequence.
  44879. *
  44880. * @see {@link elementAt}
  44881. * @see {@link take}
  44882. * @see {@link takeLast}
  44883. *
  44884. * @class ArgumentOutOfRangeError
  44885. */
  44886. var ArgumentOutOfRangeError = (function (_super) {
  44887. __extends(ArgumentOutOfRangeError, _super);
  44888. function ArgumentOutOfRangeError() {
  44889. var err = _super.call(this, 'argument out of range');
  44890. this.name = err.name = 'ArgumentOutOfRangeError';
  44891. this.stack = err.stack;
  44892. this.message = err.message;
  44893. }
  44894. return ArgumentOutOfRangeError;
  44895. }(Error));
  44896. exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;
  44897. //# sourceMappingURL=ArgumentOutOfRangeError.js.map
  44898. /***/ }),
  44899. /* 60 */
  44900. /***/ (function(module, exports, __webpack_require__) {
  44901. "use strict";
  44902. var scan_1 = __webpack_require__(123);
  44903. var takeLast_1 = __webpack_require__(124);
  44904. var defaultIfEmpty_1 = __webpack_require__(118);
  44905. var pipe_1 = __webpack_require__(87);
  44906. /* tslint:enable:max-line-length */
  44907. /**
  44908. * Applies an accumulator function over the source Observable, and returns the
  44909. * accumulated result when the source completes, given an optional seed value.
  44910. *
  44911. * <span class="informal">Combines together all values emitted on the source,
  44912. * using an accumulator function that knows how to join a new source value into
  44913. * the accumulation from the past.</span>
  44914. *
  44915. * <img src="./img/reduce.png" width="100%">
  44916. *
  44917. * Like
  44918. * [Array.prototype.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce),
  44919. * `reduce` applies an `accumulator` function against an accumulation and each
  44920. * value of the source Observable (from the past) to reduce it to a single
  44921. * value, emitted on the output Observable. Note that `reduce` will only emit
  44922. * one value, only when the source Observable completes. It is equivalent to
  44923. * applying operator {@link scan} followed by operator {@link last}.
  44924. *
  44925. * Returns an Observable that applies a specified `accumulator` function to each
  44926. * item emitted by the source Observable. If a `seed` value is specified, then
  44927. * that value will be used as the initial value for the accumulator. If no seed
  44928. * value is specified, the first item of the source is used as the seed.
  44929. *
  44930. * @example <caption>Count the number of click events that happened in 5 seconds</caption>
  44931. * var clicksInFiveSeconds = Rx.Observable.fromEvent(document, 'click')
  44932. * .takeUntil(Rx.Observable.interval(5000));
  44933. * var ones = clicksInFiveSeconds.mapTo(1);
  44934. * var seed = 0;
  44935. * var count = ones.reduce((acc, one) => acc + one, seed);
  44936. * count.subscribe(x => console.log(x));
  44937. *
  44938. * @see {@link count}
  44939. * @see {@link expand}
  44940. * @see {@link mergeScan}
  44941. * @see {@link scan}
  44942. *
  44943. * @param {function(acc: R, value: T, index: number): R} accumulator The accumulator function
  44944. * called on each source value.
  44945. * @param {R} [seed] The initial accumulation value.
  44946. * @return {Observable<R>} An Observable that emits a single value that is the
  44947. * result of accumulating the values emitted by the source Observable.
  44948. * @method reduce
  44949. * @owner Observable
  44950. */
  44951. function reduce(accumulator, seed) {
  44952. // providing a seed of `undefined` *should* be valid and trigger
  44953. // hasSeed! so don't use `seed !== undefined` checks!
  44954. // For this reason, we have to check it here at the original call site
  44955. // otherwise inside Operator/Subscriber we won't know if `undefined`
  44956. // means they didn't provide anything or if they literally provided `undefined`
  44957. if (arguments.length >= 2) {
  44958. return function reduceOperatorFunctionWithSeed(source) {
  44959. return pipe_1.pipe(scan_1.scan(accumulator, seed), takeLast_1.takeLast(1), defaultIfEmpty_1.defaultIfEmpty(seed))(source);
  44960. };
  44961. }
  44962. return function reduceOperatorFunction(source) {
  44963. return pipe_1.pipe(scan_1.scan(function (acc, value, index) {
  44964. return accumulator(acc, value, index + 1);
  44965. }), takeLast_1.takeLast(1))(source);
  44966. };
  44967. }
  44968. exports.reduce = reduce;
  44969. //# sourceMappingURL=reduce.js.map
  44970. /***/ }),
  44971. /* 61 */
  44972. /***/ (function(module, exports) {
  44973. var g;
  44974. // This works in non-strict mode
  44975. g = (function() {
  44976. return this;
  44977. })();
  44978. try {
  44979. // This works if eval is allowed (see CSP)
  44980. g = g || Function("return this")() || (1,eval)("this");
  44981. } catch(e) {
  44982. // This works if the window reference is available
  44983. if(typeof window === "object")
  44984. g = window;
  44985. }
  44986. // g can still be undefined, but nothing to do about it...
  44987. // We return undefined, instead of nothing here, so it's
  44988. // easier to handle this case. if(!global) { ...}
  44989. module.exports = g;
  44990. /***/ }),
  44991. /* 62 */
  44992. /***/ (function(module, exports, __webpack_require__) {
  44993. "use strict";
  44994. function isFunction(x) {
  44995. return typeof x === 'function';
  44996. }
  44997. exports.isFunction = isFunction;
  44998. //# sourceMappingURL=isFunction.js.map
  44999. /***/ }),
  45000. /* 63 */
  45001. /***/ (function(module, exports, __webpack_require__) {
  45002. "use strict";
  45003. var root_1 = __webpack_require__(19);
  45004. var Symbol = root_1.root.Symbol;
  45005. exports.rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?
  45006. Symbol.for('rxSubscriber') : '@@rxSubscriber';
  45007. /**
  45008. * @deprecated use rxSubscriber instead
  45009. */
  45010. exports.$$rxSubscriber = exports.rxSubscriber;
  45011. //# sourceMappingURL=rxSubscriber.js.map
  45012. /***/ }),
  45013. /* 64 */
  45014. /***/ (function(module, exports, __webpack_require__) {
  45015. "use strict";
  45016. var root_1 = __webpack_require__(19);
  45017. function getSymbolObservable(context) {
  45018. var $$observable;
  45019. var Symbol = context.Symbol;
  45020. if (typeof Symbol === 'function') {
  45021. if (Symbol.observable) {
  45022. $$observable = Symbol.observable;
  45023. }
  45024. else {
  45025. $$observable = Symbol('observable');
  45026. Symbol.observable = $$observable;
  45027. }
  45028. }
  45029. else {
  45030. $$observable = '@@observable';
  45031. }
  45032. return $$observable;
  45033. }
  45034. exports.getSymbolObservable = getSymbolObservable;
  45035. exports.observable = getSymbolObservable(root_1.root);
  45036. /**
  45037. * @deprecated use observable instead
  45038. */
  45039. exports.$$observable = exports.observable;
  45040. //# sourceMappingURL=observable.js.map
  45041. /***/ }),
  45042. /* 65 */
  45043. /***/ (function(module, exports, __webpack_require__) {
  45044. "use strict";
  45045. var mergeMap_1 = __webpack_require__(45);
  45046. var identity_1 = __webpack_require__(159);
  45047. /**
  45048. * Converts a higher-order Observable into a first-order Observable which
  45049. * concurrently delivers all values that are emitted on the inner Observables.
  45050. *
  45051. * <span class="informal">Flattens an Observable-of-Observables.</span>
  45052. *
  45053. * <img src="./img/mergeAll.png" width="100%">
  45054. *
  45055. * `mergeAll` subscribes to an Observable that emits Observables, also known as
  45056. * a higher-order Observable. Each time it observes one of these emitted inner
  45057. * Observables, it subscribes to that and delivers all the values from the
  45058. * inner Observable on the output Observable. The output Observable only
  45059. * completes once all inner Observables have completed. Any error delivered by
  45060. * a inner Observable will be immediately emitted on the output Observable.
  45061. *
  45062. * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>
  45063. * var clicks = Rx.Observable.fromEvent(document, 'click');
  45064. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));
  45065. * var firstOrder = higherOrder.mergeAll();
  45066. * firstOrder.subscribe(x => console.log(x));
  45067. *
  45068. * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>
  45069. * var clicks = Rx.Observable.fromEvent(document, 'click');
  45070. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));
  45071. * var firstOrder = higherOrder.mergeAll(2);
  45072. * firstOrder.subscribe(x => console.log(x));
  45073. *
  45074. * @see {@link combineAll}
  45075. * @see {@link concatAll}
  45076. * @see {@link exhaust}
  45077. * @see {@link merge}
  45078. * @see {@link mergeMap}
  45079. * @see {@link mergeMapTo}
  45080. * @see {@link mergeScan}
  45081. * @see {@link switch}
  45082. * @see {@link zipAll}
  45083. *
  45084. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner
  45085. * Observables being subscribed to concurrently.
  45086. * @return {Observable} An Observable that emits values coming from all the
  45087. * inner Observables emitted by the source Observable.
  45088. * @method mergeAll
  45089. * @owner Observable
  45090. */
  45091. function mergeAll(concurrent) {
  45092. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  45093. return mergeMap_1.mergeMap(identity_1.identity, null, concurrent);
  45094. }
  45095. exports.mergeAll = mergeAll;
  45096. //# sourceMappingURL=mergeAll.js.map
  45097. /***/ }),
  45098. /* 66 */
  45099. /***/ (function(module, exports, __webpack_require__) {
  45100. "use strict";
  45101. var __extends = (this && this.__extends) || function (d, b) {
  45102. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  45103. function __() { this.constructor = d; }
  45104. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  45105. };
  45106. /**
  45107. * An error thrown when an action is invalid because the object has been
  45108. * unsubscribed.
  45109. *
  45110. * @see {@link Subject}
  45111. * @see {@link BehaviorSubject}
  45112. *
  45113. * @class ObjectUnsubscribedError
  45114. */
  45115. var ObjectUnsubscribedError = (function (_super) {
  45116. __extends(ObjectUnsubscribedError, _super);
  45117. function ObjectUnsubscribedError() {
  45118. var err = _super.call(this, 'object unsubscribed');
  45119. this.name = err.name = 'ObjectUnsubscribedError';
  45120. this.stack = err.stack;
  45121. this.message = err.message;
  45122. }
  45123. return ObjectUnsubscribedError;
  45124. }(Error));
  45125. exports.ObjectUnsubscribedError = ObjectUnsubscribedError;
  45126. //# sourceMappingURL=ObjectUnsubscribedError.js.map
  45127. /***/ }),
  45128. /* 67 */
  45129. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45130. "use strict";
  45131. /* unused harmony export ɵregisterLocaleData */
  45132. /* unused harmony export NgLocaleLocalization */
  45133. /* unused harmony export NgLocalization */
  45134. /* unused harmony export registerLocaleData */
  45135. /* unused harmony export Plural */
  45136. /* unused harmony export NumberFormatStyle */
  45137. /* unused harmony export FormStyle */
  45138. /* unused harmony export TranslationWidth */
  45139. /* unused harmony export FormatWidth */
  45140. /* unused harmony export NumberSymbol */
  45141. /* unused harmony export WeekDay */
  45142. /* unused harmony export getCurrencySymbol */
  45143. /* unused harmony export getLocaleDayPeriods */
  45144. /* unused harmony export getLocaleDayNames */
  45145. /* unused harmony export getLocaleMonthNames */
  45146. /* unused harmony export getLocaleId */
  45147. /* unused harmony export getLocaleEraNames */
  45148. /* unused harmony export getLocaleWeekEndRange */
  45149. /* unused harmony export getLocaleFirstDayOfWeek */
  45150. /* unused harmony export getLocaleDateFormat */
  45151. /* unused harmony export getLocaleDateTimeFormat */
  45152. /* unused harmony export getLocaleExtraDayPeriodRules */
  45153. /* unused harmony export getLocaleExtraDayPeriods */
  45154. /* unused harmony export getLocalePluralCase */
  45155. /* unused harmony export getLocaleTimeFormat */
  45156. /* unused harmony export getLocaleNumberSymbol */
  45157. /* unused harmony export getLocaleNumberFormat */
  45158. /* unused harmony export getLocaleCurrencyName */
  45159. /* unused harmony export getLocaleCurrencySymbol */
  45160. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return parseCookieValue; });
  45161. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return CommonModule; });
  45162. /* unused harmony export DeprecatedI18NPipesModule */
  45163. /* unused harmony export NgClass */
  45164. /* unused harmony export NgForOf */
  45165. /* unused harmony export NgForOfContext */
  45166. /* unused harmony export NgIf */
  45167. /* unused harmony export NgIfContext */
  45168. /* unused harmony export NgPlural */
  45169. /* unused harmony export NgPluralCase */
  45170. /* unused harmony export NgStyle */
  45171. /* unused harmony export NgSwitch */
  45172. /* unused harmony export NgSwitchCase */
  45173. /* unused harmony export NgSwitchDefault */
  45174. /* unused harmony export NgTemplateOutlet */
  45175. /* unused harmony export NgComponentOutlet */
  45176. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return DOCUMENT; });
  45177. /* unused harmony export AsyncPipe */
  45178. /* unused harmony export DatePipe */
  45179. /* unused harmony export I18nPluralPipe */
  45180. /* unused harmony export I18nSelectPipe */
  45181. /* unused harmony export JsonPipe */
  45182. /* unused harmony export LowerCasePipe */
  45183. /* unused harmony export CurrencyPipe */
  45184. /* unused harmony export DecimalPipe */
  45185. /* unused harmony export PercentPipe */
  45186. /* unused harmony export SlicePipe */
  45187. /* unused harmony export UpperCasePipe */
  45188. /* unused harmony export TitleCasePipe */
  45189. /* unused harmony export DeprecatedDatePipe */
  45190. /* unused harmony export DeprecatedCurrencyPipe */
  45191. /* unused harmony export DeprecatedDecimalPipe */
  45192. /* unused harmony export DeprecatedPercentPipe */
  45193. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return PLATFORM_BROWSER_ID; });
  45194. /* unused harmony export ɵPLATFORM_SERVER_ID */
  45195. /* unused harmony export ɵPLATFORM_WORKER_APP_ID */
  45196. /* unused harmony export ɵPLATFORM_WORKER_UI_ID */
  45197. /* unused harmony export isPlatformBrowser */
  45198. /* unused harmony export isPlatformServer */
  45199. /* unused harmony export isPlatformWorkerApp */
  45200. /* unused harmony export isPlatformWorkerUi */
  45201. /* unused harmony export VERSION */
  45202. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return PlatformLocation; });
  45203. /* unused harmony export LOCATION_INITIALIZED */
  45204. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return LocationStrategy; });
  45205. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return APP_BASE_HREF; });
  45206. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return HashLocationStrategy; });
  45207. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return PathLocationStrategy; });
  45208. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Location; });
  45209. /* unused harmony export ɵe */
  45210. /* unused harmony export ɵd */
  45211. /* unused harmony export ɵa */
  45212. /* unused harmony export ɵb */
  45213. /* unused harmony export ɵg */
  45214. /* unused harmony export ɵf */
  45215. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  45216. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tslib__ = __webpack_require__(38);
  45217. /**
  45218. * @license Angular v5.2.11
  45219. * (c) 2010-2018 Google, Inc. https://angular.io/
  45220. * License: MIT
  45221. */
  45222. /**
  45223. * @fileoverview added by tsickle
  45224. * @suppress {checkTypes} checked by tsc
  45225. */
  45226. /**
  45227. * @license
  45228. * Copyright Google Inc. All Rights Reserved.
  45229. *
  45230. * Use of this source code is governed by an MIT-style license that can be
  45231. * found in the LICENSE file at https://angular.io/license
  45232. */
  45233. /**
  45234. * This class should not be used directly by an application developer. Instead, use
  45235. * {\@link Location}.
  45236. *
  45237. * `PlatformLocation` encapsulates all calls to DOM apis, which allows the Router to be platform
  45238. * agnostic.
  45239. * This means that we can have different implementation of `PlatformLocation` for the different
  45240. * platforms that angular supports. For example, `\@angular/platform-browser` provides an
  45241. * implementation specific to the browser environment, while `\@angular/platform-webworker` provides
  45242. * one suitable for use with web workers.
  45243. *
  45244. * The `PlatformLocation` class is used directly by all implementations of {\@link LocationStrategy}
  45245. * when they need to interact with the DOM apis like pushState, popState, etc...
  45246. *
  45247. * {\@link LocationStrategy} in turn is used by the {\@link Location} service which is used directly
  45248. * by the {\@link Router} in order to navigate between routes. Since all interactions between {\@link
  45249. * Router} /
  45250. * {\@link Location} / {\@link LocationStrategy} and DOM apis flow through the `PlatformLocation`
  45251. * class they are all platform independent.
  45252. *
  45253. * \@stable
  45254. * @abstract
  45255. */
  45256. var PlatformLocation = /** @class */ (function () {
  45257. function PlatformLocation() {
  45258. }
  45259. return PlatformLocation;
  45260. }());
  45261. /**
  45262. * \@whatItDoes indicates when a location is initialized
  45263. * \@experimental
  45264. */
  45265. var LOCATION_INITIALIZED = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('Location Initialized');
  45266. /**
  45267. * A serializable version of the event from onPopState or onHashChange
  45268. *
  45269. * \@experimental
  45270. * @record
  45271. */
  45272. /**
  45273. * \@experimental
  45274. * @record
  45275. */
  45276. /**
  45277. * @fileoverview added by tsickle
  45278. * @suppress {checkTypes} checked by tsc
  45279. */
  45280. /**
  45281. * @license
  45282. * Copyright Google Inc. All Rights Reserved.
  45283. *
  45284. * Use of this source code is governed by an MIT-style license that can be
  45285. * found in the LICENSE file at https://angular.io/license
  45286. */
  45287. /**
  45288. * `LocationStrategy` is responsible for representing and reading route state
  45289. * from the browser's URL. Angular provides two strategies:
  45290. * {\@link HashLocationStrategy} and {\@link PathLocationStrategy}.
  45291. *
  45292. * This is used under the hood of the {\@link Location} service.
  45293. *
  45294. * Applications should use the {\@link Router} or {\@link Location} services to
  45295. * interact with application route state.
  45296. *
  45297. * For instance, {\@link HashLocationStrategy} produces URLs like
  45298. * `http://example.com#/foo`, and {\@link PathLocationStrategy} produces
  45299. * `http://example.com/foo` as an equivalent URL.
  45300. *
  45301. * See these two classes for more.
  45302. *
  45303. * \@stable
  45304. * @abstract
  45305. */
  45306. var LocationStrategy = /** @class */ (function () {
  45307. function LocationStrategy() {
  45308. }
  45309. return LocationStrategy;
  45310. }());
  45311. /**
  45312. * The `APP_BASE_HREF` token represents the base href to be used with the
  45313. * {\@link PathLocationStrategy}.
  45314. *
  45315. * If you're using {\@link PathLocationStrategy}, you must provide a provider to a string
  45316. * representing the URL prefix that should be preserved when generating and recognizing
  45317. * URLs.
  45318. *
  45319. * ### Example
  45320. *
  45321. * ```typescript
  45322. * import {Component, NgModule} from '\@angular/core';
  45323. * import {APP_BASE_HREF} from '\@angular/common';
  45324. *
  45325. * \@NgModule({
  45326. * providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]
  45327. * })
  45328. * class AppModule {}
  45329. * ```
  45330. *
  45331. * \@stable
  45332. */
  45333. var APP_BASE_HREF = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('appBaseHref');
  45334. /**
  45335. * @fileoverview added by tsickle
  45336. * @suppress {checkTypes} checked by tsc
  45337. */
  45338. /**
  45339. * @license
  45340. * Copyright Google Inc. All Rights Reserved.
  45341. *
  45342. * Use of this source code is governed by an MIT-style license that can be
  45343. * found in the LICENSE file at https://angular.io/license
  45344. */
  45345. /**
  45346. * \@experimental
  45347. * @record
  45348. */
  45349. /**
  45350. * \@whatItDoes `Location` is a service that applications can use to interact with a browser's URL.
  45351. * \@description
  45352. * Depending on which {\@link LocationStrategy} is used, `Location` will either persist
  45353. * to the URL's path or the URL's hash segment.
  45354. *
  45355. * Note: it's better to use {\@link Router#navigate} service to trigger route changes. Use
  45356. * `Location` only if you need to interact with or create normalized URLs outside of
  45357. * routing.
  45358. *
  45359. * `Location` is responsible for normalizing the URL against the application's base href.
  45360. * A normalized URL is absolute from the URL host, includes the application's base href, and has no
  45361. * trailing slash:
  45362. * - `/my/app/user/123` is normalized
  45363. * - `my/app/user/123` **is not** normalized
  45364. * - `/my/app/user/123/` **is not** normalized
  45365. *
  45366. * ### Example
  45367. * {\@example common/location/ts/path_location_component.ts region='LocationComponent'}
  45368. * \@stable
  45369. */
  45370. var Location = /** @class */ (function () {
  45371. function Location(platformStrategy) {
  45372. var _this = this;
  45373. /**
  45374. * \@internal
  45375. */
  45376. this._subject = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  45377. this._platformStrategy = platformStrategy;
  45378. var /** @type {?} */ browserBaseHref = this._platformStrategy.getBaseHref();
  45379. this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));
  45380. this._platformStrategy.onPopState(function (ev) {
  45381. _this._subject.emit({
  45382. 'url': _this.path(true),
  45383. 'pop': true,
  45384. 'type': ev.type,
  45385. });
  45386. });
  45387. }
  45388. /**
  45389. * Returns the normalized URL path.
  45390. */
  45391. // TODO: vsavkin. Remove the boolean flag and always include hash once the deprecated router is
  45392. // removed.
  45393. /**
  45394. * Returns the normalized URL path.
  45395. * @param {?=} includeHash
  45396. * @return {?}
  45397. */
  45398. Location.prototype.path = /**
  45399. * Returns the normalized URL path.
  45400. * @param {?=} includeHash
  45401. * @return {?}
  45402. */
  45403. function (includeHash) {
  45404. if (includeHash === void 0) { includeHash = false; }
  45405. return this.normalize(this._platformStrategy.path(includeHash));
  45406. };
  45407. /**
  45408. * Normalizes the given path and compares to the current normalized path.
  45409. */
  45410. /**
  45411. * Normalizes the given path and compares to the current normalized path.
  45412. * @param {?} path
  45413. * @param {?=} query
  45414. * @return {?}
  45415. */
  45416. Location.prototype.isCurrentPathEqualTo = /**
  45417. * Normalizes the given path and compares to the current normalized path.
  45418. * @param {?} path
  45419. * @param {?=} query
  45420. * @return {?}
  45421. */
  45422. function (path, query) {
  45423. if (query === void 0) { query = ''; }
  45424. return this.path() == this.normalize(path + Location.normalizeQueryParams(query));
  45425. };
  45426. /**
  45427. * Given a string representing a URL, returns the normalized URL path without leading or
  45428. * trailing slashes.
  45429. */
  45430. /**
  45431. * Given a string representing a URL, returns the normalized URL path without leading or
  45432. * trailing slashes.
  45433. * @param {?} url
  45434. * @return {?}
  45435. */
  45436. Location.prototype.normalize = /**
  45437. * Given a string representing a URL, returns the normalized URL path without leading or
  45438. * trailing slashes.
  45439. * @param {?} url
  45440. * @return {?}
  45441. */
  45442. function (url) {
  45443. return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));
  45444. };
  45445. /**
  45446. * Given a string representing a URL, returns the platform-specific external URL path.
  45447. * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one
  45448. * before normalizing. This method will also add a hash if `HashLocationStrategy` is
  45449. * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
  45450. */
  45451. /**
  45452. * Given a string representing a URL, returns the platform-specific external URL path.
  45453. * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one
  45454. * before normalizing. This method will also add a hash if `HashLocationStrategy` is
  45455. * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
  45456. * @param {?} url
  45457. * @return {?}
  45458. */
  45459. Location.prototype.prepareExternalUrl = /**
  45460. * Given a string representing a URL, returns the platform-specific external URL path.
  45461. * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one
  45462. * before normalizing. This method will also add a hash if `HashLocationStrategy` is
  45463. * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.
  45464. * @param {?} url
  45465. * @return {?}
  45466. */
  45467. function (url) {
  45468. if (url && url[0] !== '/') {
  45469. url = '/' + url;
  45470. }
  45471. return this._platformStrategy.prepareExternalUrl(url);
  45472. };
  45473. // TODO: rename this method to pushState
  45474. /**
  45475. * Changes the browsers URL to the normalized version of the given URL, and pushes a
  45476. * new item onto the platform's history.
  45477. */
  45478. /**
  45479. * Changes the browsers URL to the normalized version of the given URL, and pushes a
  45480. * new item onto the platform's history.
  45481. * @param {?} path
  45482. * @param {?=} query
  45483. * @return {?}
  45484. */
  45485. Location.prototype.go = /**
  45486. * Changes the browsers URL to the normalized version of the given URL, and pushes a
  45487. * new item onto the platform's history.
  45488. * @param {?} path
  45489. * @param {?=} query
  45490. * @return {?}
  45491. */
  45492. function (path, query) {
  45493. if (query === void 0) { query = ''; }
  45494. this._platformStrategy.pushState(null, '', path, query);
  45495. };
  45496. /**
  45497. * Changes the browsers URL to the normalized version of the given URL, and replaces
  45498. * the top item on the platform's history stack.
  45499. */
  45500. /**
  45501. * Changes the browsers URL to the normalized version of the given URL, and replaces
  45502. * the top item on the platform's history stack.
  45503. * @param {?} path
  45504. * @param {?=} query
  45505. * @return {?}
  45506. */
  45507. Location.prototype.replaceState = /**
  45508. * Changes the browsers URL to the normalized version of the given URL, and replaces
  45509. * the top item on the platform's history stack.
  45510. * @param {?} path
  45511. * @param {?=} query
  45512. * @return {?}
  45513. */
  45514. function (path, query) {
  45515. if (query === void 0) { query = ''; }
  45516. this._platformStrategy.replaceState(null, '', path, query);
  45517. };
  45518. /**
  45519. * Navigates forward in the platform's history.
  45520. */
  45521. /**
  45522. * Navigates forward in the platform's history.
  45523. * @return {?}
  45524. */
  45525. Location.prototype.forward = /**
  45526. * Navigates forward in the platform's history.
  45527. * @return {?}
  45528. */
  45529. function () { this._platformStrategy.forward(); };
  45530. /**
  45531. * Navigates back in the platform's history.
  45532. */
  45533. /**
  45534. * Navigates back in the platform's history.
  45535. * @return {?}
  45536. */
  45537. Location.prototype.back = /**
  45538. * Navigates back in the platform's history.
  45539. * @return {?}
  45540. */
  45541. function () { this._platformStrategy.back(); };
  45542. /**
  45543. * Subscribe to the platform's `popState` events.
  45544. */
  45545. /**
  45546. * Subscribe to the platform's `popState` events.
  45547. * @param {?} onNext
  45548. * @param {?=} onThrow
  45549. * @param {?=} onReturn
  45550. * @return {?}
  45551. */
  45552. Location.prototype.subscribe = /**
  45553. * Subscribe to the platform's `popState` events.
  45554. * @param {?} onNext
  45555. * @param {?=} onThrow
  45556. * @param {?=} onReturn
  45557. * @return {?}
  45558. */
  45559. function (onNext, onThrow, onReturn) {
  45560. return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });
  45561. };
  45562. /**
  45563. * Given a string of url parameters, prepend with '?' if needed, otherwise return parameters as
  45564. * is.
  45565. * @param {?} params
  45566. * @return {?}
  45567. */
  45568. Location.normalizeQueryParams = /**
  45569. * Given a string of url parameters, prepend with '?' if needed, otherwise return parameters as
  45570. * is.
  45571. * @param {?} params
  45572. * @return {?}
  45573. */
  45574. function (params) {
  45575. return params && params[0] !== '?' ? '?' + params : params;
  45576. };
  45577. /**
  45578. * Given 2 parts of a url, join them with a slash if needed.
  45579. * @param {?} start
  45580. * @param {?} end
  45581. * @return {?}
  45582. */
  45583. Location.joinWithSlash = /**
  45584. * Given 2 parts of a url, join them with a slash if needed.
  45585. * @param {?} start
  45586. * @param {?} end
  45587. * @return {?}
  45588. */
  45589. function (start, end) {
  45590. if (start.length == 0) {
  45591. return end;
  45592. }
  45593. if (end.length == 0) {
  45594. return start;
  45595. }
  45596. var /** @type {?} */ slashes = 0;
  45597. if (start.endsWith('/')) {
  45598. slashes++;
  45599. }
  45600. if (end.startsWith('/')) {
  45601. slashes++;
  45602. }
  45603. if (slashes == 2) {
  45604. return start + end.substring(1);
  45605. }
  45606. if (slashes == 1) {
  45607. return start + end;
  45608. }
  45609. return start + '/' + end;
  45610. };
  45611. /**
  45612. * If url has a trailing slash, remove it, otherwise return url as is. This
  45613. * method looks for the first occurence of either #, ?, or the end of the
  45614. * line as `/` characters after any of these should not be replaced.
  45615. * @param {?} url
  45616. * @return {?}
  45617. */
  45618. Location.stripTrailingSlash = /**
  45619. * If url has a trailing slash, remove it, otherwise return url as is. This
  45620. * method looks for the first occurence of either #, ?, or the end of the
  45621. * line as `/` characters after any of these should not be replaced.
  45622. * @param {?} url
  45623. * @return {?}
  45624. */
  45625. function (url) {
  45626. var /** @type {?} */ match = url.match(/#|\?|$/);
  45627. var /** @type {?} */ pathEndIdx = match && match.index || url.length;
  45628. var /** @type {?} */ droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);
  45629. return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);
  45630. };
  45631. Location.decorators = [
  45632. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  45633. ];
  45634. /** @nocollapse */
  45635. Location.ctorParameters = function () { return [
  45636. { type: LocationStrategy, },
  45637. ]; };
  45638. return Location;
  45639. }());
  45640. /**
  45641. * @param {?} baseHref
  45642. * @param {?} url
  45643. * @return {?}
  45644. */
  45645. function _stripBaseHref(baseHref, url) {
  45646. return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;
  45647. }
  45648. /**
  45649. * @param {?} url
  45650. * @return {?}
  45651. */
  45652. function _stripIndexHtml(url) {
  45653. return url.replace(/\/index.html$/, '');
  45654. }
  45655. /**
  45656. * @fileoverview added by tsickle
  45657. * @suppress {checkTypes} checked by tsc
  45658. */
  45659. /**
  45660. * @license
  45661. * Copyright Google Inc. All Rights Reserved.
  45662. *
  45663. * Use of this source code is governed by an MIT-style license that can be
  45664. * found in the LICENSE file at https://angular.io/license
  45665. */
  45666. /**
  45667. * \@whatItDoes Use URL hash for storing application location data.
  45668. * \@description
  45669. * `HashLocationStrategy` is a {\@link LocationStrategy} used to configure the
  45670. * {\@link Location} service to represent its state in the
  45671. * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)
  45672. * of the browser's URL.
  45673. *
  45674. * For instance, if you call `location.go('/foo')`, the browser's URL will become
  45675. * `example.com#/foo`.
  45676. *
  45677. * ### Example
  45678. *
  45679. * {\@example common/location/ts/hash_location_component.ts region='LocationComponent'}
  45680. *
  45681. * \@stable
  45682. */
  45683. var HashLocationStrategy = /** @class */ (function (_super) {
  45684. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(HashLocationStrategy, _super);
  45685. function HashLocationStrategy(_platformLocation, _baseHref) {
  45686. var _this = _super.call(this) || this;
  45687. _this._platformLocation = _platformLocation;
  45688. _this._baseHref = '';
  45689. if (_baseHref != null) {
  45690. _this._baseHref = _baseHref;
  45691. }
  45692. return _this;
  45693. }
  45694. /**
  45695. * @param {?} fn
  45696. * @return {?}
  45697. */
  45698. HashLocationStrategy.prototype.onPopState = /**
  45699. * @param {?} fn
  45700. * @return {?}
  45701. */
  45702. function (fn) {
  45703. this._platformLocation.onPopState(fn);
  45704. this._platformLocation.onHashChange(fn);
  45705. };
  45706. /**
  45707. * @return {?}
  45708. */
  45709. HashLocationStrategy.prototype.getBaseHref = /**
  45710. * @return {?}
  45711. */
  45712. function () { return this._baseHref; };
  45713. /**
  45714. * @param {?=} includeHash
  45715. * @return {?}
  45716. */
  45717. HashLocationStrategy.prototype.path = /**
  45718. * @param {?=} includeHash
  45719. * @return {?}
  45720. */
  45721. function (includeHash) {
  45722. if (includeHash === void 0) { includeHash = false; }
  45723. // the hash value is always prefixed with a `#`
  45724. // and if it is empty then it will stay empty
  45725. var /** @type {?} */ path = this._platformLocation.hash;
  45726. if (path == null)
  45727. path = '#';
  45728. return path.length > 0 ? path.substring(1) : path;
  45729. };
  45730. /**
  45731. * @param {?} internal
  45732. * @return {?}
  45733. */
  45734. HashLocationStrategy.prototype.prepareExternalUrl = /**
  45735. * @param {?} internal
  45736. * @return {?}
  45737. */
  45738. function (internal) {
  45739. var /** @type {?} */ url = Location.joinWithSlash(this._baseHref, internal);
  45740. return url.length > 0 ? ('#' + url) : url;
  45741. };
  45742. /**
  45743. * @param {?} state
  45744. * @param {?} title
  45745. * @param {?} path
  45746. * @param {?} queryParams
  45747. * @return {?}
  45748. */
  45749. HashLocationStrategy.prototype.pushState = /**
  45750. * @param {?} state
  45751. * @param {?} title
  45752. * @param {?} path
  45753. * @param {?} queryParams
  45754. * @return {?}
  45755. */
  45756. function (state, title, path, queryParams) {
  45757. var /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));
  45758. if (url.length == 0) {
  45759. url = this._platformLocation.pathname;
  45760. }
  45761. this._platformLocation.pushState(state, title, url);
  45762. };
  45763. /**
  45764. * @param {?} state
  45765. * @param {?} title
  45766. * @param {?} path
  45767. * @param {?} queryParams
  45768. * @return {?}
  45769. */
  45770. HashLocationStrategy.prototype.replaceState = /**
  45771. * @param {?} state
  45772. * @param {?} title
  45773. * @param {?} path
  45774. * @param {?} queryParams
  45775. * @return {?}
  45776. */
  45777. function (state, title, path, queryParams) {
  45778. var /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));
  45779. if (url.length == 0) {
  45780. url = this._platformLocation.pathname;
  45781. }
  45782. this._platformLocation.replaceState(state, title, url);
  45783. };
  45784. /**
  45785. * @return {?}
  45786. */
  45787. HashLocationStrategy.prototype.forward = /**
  45788. * @return {?}
  45789. */
  45790. function () { this._platformLocation.forward(); };
  45791. /**
  45792. * @return {?}
  45793. */
  45794. HashLocationStrategy.prototype.back = /**
  45795. * @return {?}
  45796. */
  45797. function () { this._platformLocation.back(); };
  45798. HashLocationStrategy.decorators = [
  45799. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  45800. ];
  45801. /** @nocollapse */
  45802. HashLocationStrategy.ctorParameters = function () { return [
  45803. { type: PlatformLocation, },
  45804. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [APP_BASE_HREF,] },] },
  45805. ]; };
  45806. return HashLocationStrategy;
  45807. }(LocationStrategy));
  45808. /**
  45809. * @fileoverview added by tsickle
  45810. * @suppress {checkTypes} checked by tsc
  45811. */
  45812. /**
  45813. * @license
  45814. * Copyright Google Inc. All Rights Reserved.
  45815. *
  45816. * Use of this source code is governed by an MIT-style license that can be
  45817. * found in the LICENSE file at https://angular.io/license
  45818. */
  45819. /**
  45820. * \@whatItDoes Use URL for storing application location data.
  45821. * \@description
  45822. * `PathLocationStrategy` is a {\@link LocationStrategy} used to configure the
  45823. * {\@link Location} service to represent its state in the
  45824. * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the
  45825. * browser's URL.
  45826. *
  45827. * If you're using `PathLocationStrategy`, you must provide a {\@link APP_BASE_HREF}
  45828. * or add a base element to the document. This URL prefix that will be preserved
  45829. * when generating and recognizing URLs.
  45830. *
  45831. * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call
  45832. * `location.go('/foo')`, the browser's URL will become
  45833. * `example.com/my/app/foo`.
  45834. *
  45835. * Similarly, if you add `<base href='/my/app'/>` to the document and call
  45836. * `location.go('/foo')`, the browser's URL will become
  45837. * `example.com/my/app/foo`.
  45838. *
  45839. * ### Example
  45840. *
  45841. * {\@example common/location/ts/path_location_component.ts region='LocationComponent'}
  45842. *
  45843. * \@stable
  45844. */
  45845. var PathLocationStrategy = /** @class */ (function (_super) {
  45846. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(PathLocationStrategy, _super);
  45847. function PathLocationStrategy(_platformLocation, href) {
  45848. var _this = _super.call(this) || this;
  45849. _this._platformLocation = _platformLocation;
  45850. if (href == null) {
  45851. href = _this._platformLocation.getBaseHrefFromDOM();
  45852. }
  45853. if (href == null) {
  45854. throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");
  45855. }
  45856. _this._baseHref = href;
  45857. return _this;
  45858. }
  45859. /**
  45860. * @param {?} fn
  45861. * @return {?}
  45862. */
  45863. PathLocationStrategy.prototype.onPopState = /**
  45864. * @param {?} fn
  45865. * @return {?}
  45866. */
  45867. function (fn) {
  45868. this._platformLocation.onPopState(fn);
  45869. this._platformLocation.onHashChange(fn);
  45870. };
  45871. /**
  45872. * @return {?}
  45873. */
  45874. PathLocationStrategy.prototype.getBaseHref = /**
  45875. * @return {?}
  45876. */
  45877. function () { return this._baseHref; };
  45878. /**
  45879. * @param {?} internal
  45880. * @return {?}
  45881. */
  45882. PathLocationStrategy.prototype.prepareExternalUrl = /**
  45883. * @param {?} internal
  45884. * @return {?}
  45885. */
  45886. function (internal) {
  45887. return Location.joinWithSlash(this._baseHref, internal);
  45888. };
  45889. /**
  45890. * @param {?=} includeHash
  45891. * @return {?}
  45892. */
  45893. PathLocationStrategy.prototype.path = /**
  45894. * @param {?=} includeHash
  45895. * @return {?}
  45896. */
  45897. function (includeHash) {
  45898. if (includeHash === void 0) { includeHash = false; }
  45899. var /** @type {?} */ pathname = this._platformLocation.pathname +
  45900. Location.normalizeQueryParams(this._platformLocation.search);
  45901. var /** @type {?} */ hash = this._platformLocation.hash;
  45902. return hash && includeHash ? "" + pathname + hash : pathname;
  45903. };
  45904. /**
  45905. * @param {?} state
  45906. * @param {?} title
  45907. * @param {?} url
  45908. * @param {?} queryParams
  45909. * @return {?}
  45910. */
  45911. PathLocationStrategy.prototype.pushState = /**
  45912. * @param {?} state
  45913. * @param {?} title
  45914. * @param {?} url
  45915. * @param {?} queryParams
  45916. * @return {?}
  45917. */
  45918. function (state, title, url, queryParams) {
  45919. var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));
  45920. this._platformLocation.pushState(state, title, externalUrl);
  45921. };
  45922. /**
  45923. * @param {?} state
  45924. * @param {?} title
  45925. * @param {?} url
  45926. * @param {?} queryParams
  45927. * @return {?}
  45928. */
  45929. PathLocationStrategy.prototype.replaceState = /**
  45930. * @param {?} state
  45931. * @param {?} title
  45932. * @param {?} url
  45933. * @param {?} queryParams
  45934. * @return {?}
  45935. */
  45936. function (state, title, url, queryParams) {
  45937. var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));
  45938. this._platformLocation.replaceState(state, title, externalUrl);
  45939. };
  45940. /**
  45941. * @return {?}
  45942. */
  45943. PathLocationStrategy.prototype.forward = /**
  45944. * @return {?}
  45945. */
  45946. function () { this._platformLocation.forward(); };
  45947. /**
  45948. * @return {?}
  45949. */
  45950. PathLocationStrategy.prototype.back = /**
  45951. * @return {?}
  45952. */
  45953. function () { this._platformLocation.back(); };
  45954. PathLocationStrategy.decorators = [
  45955. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  45956. ];
  45957. /** @nocollapse */
  45958. PathLocationStrategy.ctorParameters = function () { return [
  45959. { type: PlatformLocation, },
  45960. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [APP_BASE_HREF,] },] },
  45961. ]; };
  45962. return PathLocationStrategy;
  45963. }(LocationStrategy));
  45964. /**
  45965. * @fileoverview added by tsickle
  45966. * @suppress {checkTypes} checked by tsc
  45967. */
  45968. /**
  45969. * @license
  45970. * Copyright Google Inc. All Rights Reserved.
  45971. *
  45972. * Use of this source code is governed by an MIT-style license that can be
  45973. * found in the LICENSE file at https://angular.io/license
  45974. */
  45975. /**
  45976. * @fileoverview added by tsickle
  45977. * @suppress {checkTypes} checked by tsc
  45978. */
  45979. /**
  45980. * @license
  45981. * Copyright Google Inc. All Rights Reserved.
  45982. *
  45983. * Use of this source code is governed by an MIT-style license that can be
  45984. * found in the LICENSE file at https://angular.io/license
  45985. */
  45986. // THIS CODE IS GENERATED - DO NOT MODIFY
  45987. // See angular/tools/gulp-tasks/cldr/extract.js
  45988. /**
  45989. * \@internal
  45990. */
  45991. var CURRENCIES = {
  45992. 'AOA': [, 'Kz'],
  45993. 'ARS': [, '$'],
  45994. 'AUD': ['A$', '$'],
  45995. 'BAM': [, 'KM'],
  45996. 'BBD': [, '$'],
  45997. 'BDT': [, '৳'],
  45998. 'BMD': [, '$'],
  45999. 'BND': [, '$'],
  46000. 'BOB': [, 'Bs'],
  46001. 'BRL': ['R$'],
  46002. 'BSD': [, '$'],
  46003. 'BWP': [, 'P'],
  46004. 'BYN': [, 'р.'],
  46005. 'BZD': [, '$'],
  46006. 'CAD': ['CA$', '$'],
  46007. 'CLP': [, '$'],
  46008. 'CNY': ['CN¥', '¥'],
  46009. 'COP': [, '$'],
  46010. 'CRC': [, '₡'],
  46011. 'CUC': [, '$'],
  46012. 'CUP': [, '$'],
  46013. 'CZK': [, 'Kč'],
  46014. 'DKK': [, 'kr'],
  46015. 'DOP': [, '$'],
  46016. 'EGP': [, 'E£'],
  46017. 'ESP': [, '₧'],
  46018. 'EUR': ['€'],
  46019. 'FJD': [, '$'],
  46020. 'FKP': [, '£'],
  46021. 'GBP': ['£'],
  46022. 'GEL': [, '₾'],
  46023. 'GIP': [, '£'],
  46024. 'GNF': [, 'FG'],
  46025. 'GTQ': [, 'Q'],
  46026. 'GYD': [, '$'],
  46027. 'HKD': ['HK$', '$'],
  46028. 'HNL': [, 'L'],
  46029. 'HRK': [, 'kn'],
  46030. 'HUF': [, 'Ft'],
  46031. 'IDR': [, 'Rp'],
  46032. 'ILS': ['₪'],
  46033. 'INR': ['₹'],
  46034. 'ISK': [, 'kr'],
  46035. 'JMD': [, '$'],
  46036. 'JPY': ['¥'],
  46037. 'KHR': [, '៛'],
  46038. 'KMF': [, 'CF'],
  46039. 'KPW': [, '₩'],
  46040. 'KRW': ['₩'],
  46041. 'KYD': [, '$'],
  46042. 'KZT': [, '₸'],
  46043. 'LAK': [, '₭'],
  46044. 'LBP': [, 'L£'],
  46045. 'LKR': [, 'Rs'],
  46046. 'LRD': [, '$'],
  46047. 'LTL': [, 'Lt'],
  46048. 'LVL': [, 'Ls'],
  46049. 'MGA': [, 'Ar'],
  46050. 'MMK': [, 'K'],
  46051. 'MNT': [, '₮'],
  46052. 'MUR': [, 'Rs'],
  46053. 'MXN': ['MX$', '$'],
  46054. 'MYR': [, 'RM'],
  46055. 'NAD': [, '$'],
  46056. 'NGN': [, '₦'],
  46057. 'NIO': [, 'C$'],
  46058. 'NOK': [, 'kr'],
  46059. 'NPR': [, 'Rs'],
  46060. 'NZD': ['NZ$', '$'],
  46061. 'PHP': [, '₱'],
  46062. 'PKR': [, 'Rs'],
  46063. 'PLN': [, 'zł'],
  46064. 'PYG': [, '₲'],
  46065. 'RON': [, 'lei'],
  46066. 'RUB': [, '₽'],
  46067. 'RUR': [, 'р.'],
  46068. 'RWF': [, 'RF'],
  46069. 'SBD': [, '$'],
  46070. 'SEK': [, 'kr'],
  46071. 'SGD': [, '$'],
  46072. 'SHP': [, '£'],
  46073. 'SRD': [, '$'],
  46074. 'SSP': [, '£'],
  46075. 'STD': [, 'Db'],
  46076. 'SYP': [, '£'],
  46077. 'THB': [, '฿'],
  46078. 'TOP': [, 'T$'],
  46079. 'TRY': [, '₺'],
  46080. 'TTD': [, '$'],
  46081. 'TWD': ['NT$', '$'],
  46082. 'UAH': [, '₴'],
  46083. 'USD': ['$'],
  46084. 'UYU': [, '$'],
  46085. 'VEF': [, 'Bs'],
  46086. 'VND': ['₫'],
  46087. 'XAF': ['FCFA'],
  46088. 'XCD': ['EC$', '$'],
  46089. 'XOF': ['CFA'],
  46090. 'XPF': ['CFPF'],
  46091. 'ZAR': [, 'R'],
  46092. 'ZMW': [, 'ZK'],
  46093. };
  46094. /**
  46095. * @fileoverview added by tsickle
  46096. * @suppress {checkTypes} checked by tsc
  46097. */
  46098. /**
  46099. * @license
  46100. * Copyright Google Inc. All Rights Reserved.
  46101. *
  46102. * Use of this source code is governed by an MIT-style license that can be
  46103. * found in the LICENSE file at https://angular.io/license
  46104. */
  46105. // THIS CODE IS GENERATED - DO NOT MODIFY
  46106. // See angular/tools/gulp-tasks/cldr/extract.js
  46107. /**
  46108. * @param {?} n
  46109. * @return {?}
  46110. */
  46111. function plural(n) {
  46112. var /** @type {?} */ i = Math.floor(Math.abs(n)), /** @type {?} */ v = n.toString().replace(/^[^.]*\.?/, '').length;
  46113. if (i === 1 && v === 0)
  46114. return 1;
  46115. return 5;
  46116. }
  46117. var localeEn = [
  46118. 'en',
  46119. [
  46120. ['a', 'p'],
  46121. ['AM', 'PM'],
  46122. ],
  46123. [
  46124. ['AM', 'PM'],
  46125. ,
  46126. ],
  46127. [
  46128. ['S', 'M', 'T', 'W', 'T', 'F', 'S'], ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
  46129. ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
  46130. ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
  46131. ],
  46132. ,
  46133. [
  46134. ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
  46135. ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
  46136. [
  46137. 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',
  46138. 'October', 'November', 'December'
  46139. ]
  46140. ],
  46141. ,
  46142. [['B', 'A'], ['BC', 'AD'], ['Before Christ', 'Anno Domini']], 0, [6, 0],
  46143. ['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'],
  46144. ['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'],
  46145. [
  46146. '{1}, {0}',
  46147. ,
  46148. '{1} \'at\' {0}',
  46149. ],
  46150. ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],
  46151. ['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'], '$', 'US Dollar', plural
  46152. ];
  46153. /**
  46154. * @fileoverview added by tsickle
  46155. * @suppress {checkTypes} checked by tsc
  46156. */
  46157. /**
  46158. * @license
  46159. * Copyright Google Inc. All Rights Reserved.
  46160. *
  46161. * Use of this source code is governed by an MIT-style license that can be
  46162. * found in the LICENSE file at https://angular.io/license
  46163. */
  46164. /**
  46165. * \@experimental i18n support is experimental.
  46166. */
  46167. var LOCALE_DATA = {};
  46168. /**
  46169. * Register global data to be used internally by Angular. See the
  46170. * {\@linkDocs guide/i18n#i18n-pipes "I18n guide"} to know how to import additional locale data.
  46171. *
  46172. * \@experimental i18n support is experimental.
  46173. * @param {?} data
  46174. * @param {?=} localeId
  46175. * @param {?=} extraData
  46176. * @return {?}
  46177. */
  46178. function registerLocaleData(data, localeId, extraData) {
  46179. if (typeof localeId !== 'string') {
  46180. extraData = localeId;
  46181. localeId = data[0 /* LocaleId */];
  46182. }
  46183. localeId = localeId.toLowerCase().replace(/_/g, '-');
  46184. LOCALE_DATA[localeId] = data;
  46185. if (extraData) {
  46186. LOCALE_DATA[localeId][18 /* ExtraData */] = extraData;
  46187. }
  46188. }
  46189. /**
  46190. * @fileoverview added by tsickle
  46191. * @suppress {checkTypes} checked by tsc
  46192. */
  46193. /**
  46194. * @license
  46195. * Copyright Google Inc. All Rights Reserved.
  46196. *
  46197. * Use of this source code is governed by an MIT-style license that can be
  46198. * found in the LICENSE file at https://angular.io/license
  46199. */
  46200. /** @enum {number} */
  46201. var NumberFormatStyle = {
  46202. Decimal: 0,
  46203. Percent: 1,
  46204. Currency: 2,
  46205. Scientific: 3,
  46206. };
  46207. NumberFormatStyle[NumberFormatStyle.Decimal] = "Decimal";
  46208. NumberFormatStyle[NumberFormatStyle.Percent] = "Percent";
  46209. NumberFormatStyle[NumberFormatStyle.Currency] = "Currency";
  46210. NumberFormatStyle[NumberFormatStyle.Scientific] = "Scientific";
  46211. /** @enum {number} */
  46212. var Plural = {
  46213. Zero: 0,
  46214. One: 1,
  46215. Two: 2,
  46216. Few: 3,
  46217. Many: 4,
  46218. Other: 5,
  46219. };
  46220. Plural[Plural.Zero] = "Zero";
  46221. Plural[Plural.One] = "One";
  46222. Plural[Plural.Two] = "Two";
  46223. Plural[Plural.Few] = "Few";
  46224. Plural[Plural.Many] = "Many";
  46225. Plural[Plural.Other] = "Other";
  46226. /** @enum {number} */
  46227. var FormStyle = {
  46228. Format: 0,
  46229. Standalone: 1,
  46230. };
  46231. FormStyle[FormStyle.Format] = "Format";
  46232. FormStyle[FormStyle.Standalone] = "Standalone";
  46233. /** @enum {number} */
  46234. var TranslationWidth = {
  46235. Narrow: 0,
  46236. Abbreviated: 1,
  46237. Wide: 2,
  46238. Short: 3,
  46239. };
  46240. TranslationWidth[TranslationWidth.Narrow] = "Narrow";
  46241. TranslationWidth[TranslationWidth.Abbreviated] = "Abbreviated";
  46242. TranslationWidth[TranslationWidth.Wide] = "Wide";
  46243. TranslationWidth[TranslationWidth.Short] = "Short";
  46244. /** @enum {number} */
  46245. var FormatWidth = {
  46246. Short: 0,
  46247. Medium: 1,
  46248. Long: 2,
  46249. Full: 3,
  46250. };
  46251. FormatWidth[FormatWidth.Short] = "Short";
  46252. FormatWidth[FormatWidth.Medium] = "Medium";
  46253. FormatWidth[FormatWidth.Long] = "Long";
  46254. FormatWidth[FormatWidth.Full] = "Full";
  46255. /** @enum {number} */
  46256. var NumberSymbol = {
  46257. Decimal: 0,
  46258. Group: 1,
  46259. List: 2,
  46260. PercentSign: 3,
  46261. PlusSign: 4,
  46262. MinusSign: 5,
  46263. Exponential: 6,
  46264. SuperscriptingExponent: 7,
  46265. PerMille: 8,
  46266. Infinity: 9,
  46267. NaN: 10,
  46268. TimeSeparator: 11,
  46269. CurrencyDecimal: 12,
  46270. CurrencyGroup: 13,
  46271. };
  46272. NumberSymbol[NumberSymbol.Decimal] = "Decimal";
  46273. NumberSymbol[NumberSymbol.Group] = "Group";
  46274. NumberSymbol[NumberSymbol.List] = "List";
  46275. NumberSymbol[NumberSymbol.PercentSign] = "PercentSign";
  46276. NumberSymbol[NumberSymbol.PlusSign] = "PlusSign";
  46277. NumberSymbol[NumberSymbol.MinusSign] = "MinusSign";
  46278. NumberSymbol[NumberSymbol.Exponential] = "Exponential";
  46279. NumberSymbol[NumberSymbol.SuperscriptingExponent] = "SuperscriptingExponent";
  46280. NumberSymbol[NumberSymbol.PerMille] = "PerMille";
  46281. NumberSymbol[NumberSymbol.Infinity] = "Infinity";
  46282. NumberSymbol[NumberSymbol.NaN] = "NaN";
  46283. NumberSymbol[NumberSymbol.TimeSeparator] = "TimeSeparator";
  46284. NumberSymbol[NumberSymbol.CurrencyDecimal] = "CurrencyDecimal";
  46285. NumberSymbol[NumberSymbol.CurrencyGroup] = "CurrencyGroup";
  46286. /** @enum {number} */
  46287. var WeekDay = {
  46288. Sunday: 0,
  46289. Monday: 1,
  46290. Tuesday: 2,
  46291. Wednesday: 3,
  46292. Thursday: 4,
  46293. Friday: 5,
  46294. Saturday: 6,
  46295. };
  46296. WeekDay[WeekDay.Sunday] = "Sunday";
  46297. WeekDay[WeekDay.Monday] = "Monday";
  46298. WeekDay[WeekDay.Tuesday] = "Tuesday";
  46299. WeekDay[WeekDay.Wednesday] = "Wednesday";
  46300. WeekDay[WeekDay.Thursday] = "Thursday";
  46301. WeekDay[WeekDay.Friday] = "Friday";
  46302. WeekDay[WeekDay.Saturday] = "Saturday";
  46303. /**
  46304. * The locale id for the chosen locale (e.g `en-GB`).
  46305. *
  46306. * \@experimental i18n support is experimental.
  46307. * @param {?} locale
  46308. * @return {?}
  46309. */
  46310. function getLocaleId(locale) {
  46311. return findLocaleData(locale)[0 /* LocaleId */];
  46312. }
  46313. /**
  46314. * Periods of the day (e.g. `[AM, PM]` for en-US).
  46315. *
  46316. * \@experimental i18n support is experimental.
  46317. * @param {?} locale
  46318. * @param {?} formStyle
  46319. * @param {?} width
  46320. * @return {?}
  46321. */
  46322. function getLocaleDayPeriods(locale, formStyle, width) {
  46323. var /** @type {?} */ data = findLocaleData(locale);
  46324. var /** @type {?} */ amPmData = /** @type {?} */ ([data[1 /* DayPeriodsFormat */], data[2 /* DayPeriodsStandalone */]]);
  46325. var /** @type {?} */ amPm = getLastDefinedValue(amPmData, formStyle);
  46326. return getLastDefinedValue(amPm, width);
  46327. }
  46328. /**
  46329. * Days of the week for the Gregorian calendar (e.g. `[Sunday, Monday, ... Saturday]` for en-US).
  46330. *
  46331. * \@experimental i18n support is experimental.
  46332. * @param {?} locale
  46333. * @param {?} formStyle
  46334. * @param {?} width
  46335. * @return {?}
  46336. */
  46337. function getLocaleDayNames(locale, formStyle, width) {
  46338. var /** @type {?} */ data = findLocaleData(locale);
  46339. var /** @type {?} */ daysData = /** @type {?} */ ([data[3 /* DaysFormat */], data[4 /* DaysStandalone */]]);
  46340. var /** @type {?} */ days = getLastDefinedValue(daysData, formStyle);
  46341. return getLastDefinedValue(days, width);
  46342. }
  46343. /**
  46344. * Months of the year for the Gregorian calendar (e.g. `[January, February, ...]` for en-US).
  46345. *
  46346. * \@experimental i18n support is experimental.
  46347. * @param {?} locale
  46348. * @param {?} formStyle
  46349. * @param {?} width
  46350. * @return {?}
  46351. */
  46352. function getLocaleMonthNames(locale, formStyle, width) {
  46353. var /** @type {?} */ data = findLocaleData(locale);
  46354. var /** @type {?} */ monthsData = /** @type {?} */ ([data[5 /* MonthsFormat */], data[6 /* MonthsStandalone */]]);
  46355. var /** @type {?} */ months = getLastDefinedValue(monthsData, formStyle);
  46356. return getLastDefinedValue(months, width);
  46357. }
  46358. /**
  46359. * Eras for the Gregorian calendar (e.g. AD/BC).
  46360. *
  46361. * \@experimental i18n support is experimental.
  46362. * @param {?} locale
  46363. * @param {?} width
  46364. * @return {?}
  46365. */
  46366. function getLocaleEraNames(locale, width) {
  46367. var /** @type {?} */ data = findLocaleData(locale);
  46368. var /** @type {?} */ erasData = /** @type {?} */ (data[7 /* Eras */]);
  46369. return getLastDefinedValue(erasData, width);
  46370. }
  46371. /**
  46372. * First day of the week for this locale, based on english days (Sunday = 0, Monday = 1, ...).
  46373. * For example in french the value would be 1 because the first day of the week is Monday.
  46374. *
  46375. * \@experimental i18n support is experimental.
  46376. * @param {?} locale
  46377. * @return {?}
  46378. */
  46379. function getLocaleFirstDayOfWeek(locale) {
  46380. var /** @type {?} */ data = findLocaleData(locale);
  46381. return data[8 /* FirstDayOfWeek */];
  46382. }
  46383. /**
  46384. * Range of days in the week that represent the week-end for this locale, based on english days
  46385. * (Sunday = 0, Monday = 1, ...).
  46386. * For example in english the value would be [6,0] for Saturday to Sunday.
  46387. *
  46388. * \@experimental i18n support is experimental.
  46389. * @param {?} locale
  46390. * @return {?}
  46391. */
  46392. function getLocaleWeekEndRange(locale) {
  46393. var /** @type {?} */ data = findLocaleData(locale);
  46394. return data[9 /* WeekendRange */];
  46395. }
  46396. /**
  46397. * Date format that depends on the locale.
  46398. *
  46399. * There are four basic date formats:
  46400. * - `full` should contain long-weekday (EEEE), year (y), long-month (MMMM), day (d).
  46401. *
  46402. * For example, English uses `EEEE, MMMM d, y`, corresponding to a date like
  46403. * "Tuesday, September 14, 1999".
  46404. *
  46405. * - `long` should contain year, long-month, day.
  46406. *
  46407. * For example, `MMMM d, y`, corresponding to a date like "September 14, 1999".
  46408. *
  46409. * - `medium` should contain year, abbreviated-month (MMM), day.
  46410. *
  46411. * For example, `MMM d, y`, corresponding to a date like "Sep 14, 1999".
  46412. * For languages that do not use abbreviated months, use the numeric month (MM/M). For example,
  46413. * `y/MM/dd`, corresponding to a date like "1999/09/14".
  46414. *
  46415. * - `short` should contain year, numeric-month (MM/M), and day.
  46416. *
  46417. * For example, `M/d/yy`, corresponding to a date like "9/14/99".
  46418. *
  46419. * \@experimental i18n support is experimental.
  46420. * @param {?} locale
  46421. * @param {?} width
  46422. * @return {?}
  46423. */
  46424. function getLocaleDateFormat(locale, width) {
  46425. var /** @type {?} */ data = findLocaleData(locale);
  46426. return getLastDefinedValue(data[10 /* DateFormat */], width);
  46427. }
  46428. /**
  46429. * Time format that depends on the locale.
  46430. *
  46431. * The standard formats include four basic time formats:
  46432. * - `full` should contain hour (h/H), minute (mm), second (ss), and zone (zzzz).
  46433. * - `long` should contain hour, minute, second, and zone (z)
  46434. * - `medium` should contain hour, minute, second.
  46435. * - `short` should contain hour, minute.
  46436. *
  46437. * Note: The patterns depend on whether the main country using your language uses 12-hour time or
  46438. * not:
  46439. * - For 12-hour time, use a pattern like `hh:mm a` using h to mean a 12-hour clock cycle running
  46440. * 1 through 12 (midnight plus 1 minute is 12:01), or using K to mean a 12-hour clock cycle
  46441. * running 0 through 11 (midnight plus 1 minute is 0:01).
  46442. * - For 24-hour time, use a pattern like `HH:mm` using H to mean a 24-hour clock cycle running 0
  46443. * through 23 (midnight plus 1 minute is 0:01), or using k to mean a 24-hour clock cycle running
  46444. * 1 through 24 (midnight plus 1 minute is 24:01).
  46445. *
  46446. * \@experimental i18n support is experimental.
  46447. * @param {?} locale
  46448. * @param {?} width
  46449. * @return {?}
  46450. */
  46451. function getLocaleTimeFormat(locale, width) {
  46452. var /** @type {?} */ data = findLocaleData(locale);
  46453. return getLastDefinedValue(data[11 /* TimeFormat */], width);
  46454. }
  46455. /**
  46456. * Date-time format that depends on the locale.
  46457. *
  46458. * The date-time pattern shows how to combine separate patterns for date (represented by {1})
  46459. * and time (represented by {0}) into a single pattern. It usually doesn't need to be changed.
  46460. * What you want to pay attention to are:
  46461. * - possibly removing a space for languages that don't use it, such as many East Asian languages
  46462. * - possibly adding a comma, other punctuation, or a combining word
  46463. *
  46464. * For example:
  46465. * - English uses `{1} 'at' {0}` or `{1}, {0}` (depending on date style), while Japanese uses
  46466. * `{1}{0}`.
  46467. * - An English formatted date-time using the combining pattern `{1}, {0}` could be
  46468. * `Dec 10, 2010, 3:59:49 PM`. Notice the comma and space between the date portion and the time
  46469. * portion.
  46470. *
  46471. * There are four formats (`full`, `long`, `medium`, `short`); the determination of which to use
  46472. * is normally based on the date style. For example, if the date has a full month and weekday
  46473. * name, the full combining pattern will be used to combine that with a time. If the date has
  46474. * numeric month, the short version of the combining pattern will be used to combine that with a
  46475. * time. English uses `{1} 'at' {0}` for full and long styles, and `{1}, {0}` for medium and short
  46476. * styles.
  46477. *
  46478. * \@experimental i18n support is experimental.
  46479. * @param {?} locale
  46480. * @param {?} width
  46481. * @return {?}
  46482. */
  46483. function getLocaleDateTimeFormat(locale, width) {
  46484. var /** @type {?} */ data = findLocaleData(locale);
  46485. var /** @type {?} */ dateTimeFormatData = /** @type {?} */ (data[12 /* DateTimeFormat */]);
  46486. return getLastDefinedValue(dateTimeFormatData, width);
  46487. }
  46488. /**
  46489. * Number symbol that can be used to replace placeholders in number formats.
  46490. * See {\@link NumberSymbol} for more information.
  46491. *
  46492. * \@experimental i18n support is experimental.
  46493. * @param {?} locale
  46494. * @param {?} symbol
  46495. * @return {?}
  46496. */
  46497. function getLocaleNumberSymbol(locale, symbol) {
  46498. var /** @type {?} */ data = findLocaleData(locale);
  46499. var /** @type {?} */ res = data[13 /* NumberSymbols */][symbol];
  46500. if (typeof res === 'undefined') {
  46501. if (symbol === NumberSymbol.CurrencyDecimal) {
  46502. return data[13 /* NumberSymbols */][NumberSymbol.Decimal];
  46503. }
  46504. else if (symbol === NumberSymbol.CurrencyGroup) {
  46505. return data[13 /* NumberSymbols */][NumberSymbol.Group];
  46506. }
  46507. }
  46508. return res;
  46509. }
  46510. /**
  46511. * Number format that depends on the locale.
  46512. *
  46513. * Numbers are formatted using patterns, like `#,###.00`. For example, the pattern `#,###.00`
  46514. * when used to format the number 12345.678 could result in "12'345,67". That would happen if the
  46515. * grouping separator for your language is an apostrophe, and the decimal separator is a comma.
  46516. *
  46517. * <b>Important:</b> The characters `.` `,` `0` `#` (and others below) are special placeholders;
  46518. * they stand for the decimal separator, and so on, and are NOT real characters.
  46519. * You must NOT "translate" the placeholders; for example, don't change `.` to `,` even though in
  46520. * your language the decimal point is written with a comma. The symbols should be replaced by the
  46521. * local equivalents, using the Number Symbols for your language.
  46522. *
  46523. * Here are the special characters used in number patterns:
  46524. *
  46525. * | Symbol | Meaning |
  46526. * |--------|---------|
  46527. * | . | Replaced automatically by the character used for the decimal point. |
  46528. * | , | Replaced by the "grouping" (thousands) separator. |
  46529. * | 0 | Replaced by a digit (or zero if there aren't enough digits). |
  46530. * | # | Replaced by a digit (or nothing if there aren't enough). |
  46531. * | ¤ | This will be replaced by a currency symbol, such as $ or USD. |
  46532. * | % | This marks a percent format. The % symbol may change position, but must be retained. |
  46533. * | E | This marks a scientific format. The E symbol may change position, but must be retained. |
  46534. * | ' | Special characters used as literal characters are quoted with ASCII single quotes. |
  46535. *
  46536. * You can find more information
  46537. * [on the CLDR website](http://cldr.unicode.org/translation/number-patterns)
  46538. *
  46539. * \@experimental i18n support is experimental.
  46540. * @param {?} locale
  46541. * @param {?} type
  46542. * @return {?}
  46543. */
  46544. function getLocaleNumberFormat(locale, type) {
  46545. var /** @type {?} */ data = findLocaleData(locale);
  46546. return data[14 /* NumberFormats */][type];
  46547. }
  46548. /**
  46549. * The symbol used to represent the currency for the main country using this locale (e.g. $ for
  46550. * the locale en-US).
  46551. * The symbol will be `null` if the main country cannot be determined.
  46552. *
  46553. * \@experimental i18n support is experimental.
  46554. * @param {?} locale
  46555. * @return {?}
  46556. */
  46557. function getLocaleCurrencySymbol(locale) {
  46558. var /** @type {?} */ data = findLocaleData(locale);
  46559. return data[15 /* CurrencySymbol */] || null;
  46560. }
  46561. /**
  46562. * The name of the currency for the main country using this locale (e.g. USD for the locale
  46563. * en-US).
  46564. * The name will be `null` if the main country cannot be determined.
  46565. *
  46566. * \@experimental i18n support is experimental.
  46567. * @param {?} locale
  46568. * @return {?}
  46569. */
  46570. function getLocaleCurrencyName(locale) {
  46571. var /** @type {?} */ data = findLocaleData(locale);
  46572. return data[16 /* CurrencyName */] || null;
  46573. }
  46574. /**
  46575. * The locale plural function used by ICU expressions to determine the plural case to use.
  46576. * See {\@link NgPlural} for more information.
  46577. *
  46578. * \@experimental i18n support is experimental.
  46579. * @param {?} locale
  46580. * @return {?}
  46581. */
  46582. function getLocalePluralCase(locale) {
  46583. var /** @type {?} */ data = findLocaleData(locale);
  46584. return data[17 /* PluralCase */];
  46585. }
  46586. /**
  46587. * @param {?} data
  46588. * @return {?}
  46589. */
  46590. function checkFullData(data) {
  46591. if (!data[18 /* ExtraData */]) {
  46592. throw new Error("Missing extra locale data for the locale \"" + data[0 /* LocaleId */] + "\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.");
  46593. }
  46594. }
  46595. /**
  46596. * Rules used to determine which day period to use (See `dayPeriods` below).
  46597. * The rules can either be an array or a single value. If it's an array, consider it as "from"
  46598. * and "to". If it's a single value then it means that the period is only valid at this exact
  46599. * value.
  46600. * There is always the same number of rules as the number of day periods, which means that the
  46601. * first rule is applied to the first day period and so on.
  46602. * You should fallback to AM/PM when there are no rules available.
  46603. *
  46604. * Note: this is only available if you load the full locale data.
  46605. * See the {\@linkDocs guide/i18n#i18n-pipes "I18n guide"} to know how to import additional locale
  46606. * data.
  46607. *
  46608. * \@experimental i18n support is experimental.
  46609. * @param {?} locale
  46610. * @return {?}
  46611. */
  46612. function getLocaleExtraDayPeriodRules(locale) {
  46613. var /** @type {?} */ data = findLocaleData(locale);
  46614. checkFullData(data);
  46615. var /** @type {?} */ rules = data[18 /* ExtraData */][2 /* ExtraDayPeriodsRules */] || [];
  46616. return rules.map(function (rule) {
  46617. if (typeof rule === 'string') {
  46618. return extractTime(rule);
  46619. }
  46620. return [extractTime(rule[0]), extractTime(rule[1])];
  46621. });
  46622. }
  46623. /**
  46624. * Day Periods indicate roughly how the day is broken up in different languages (e.g. morning,
  46625. * noon, afternoon, midnight, ...).
  46626. * You should use the function {\@link getLocaleExtraDayPeriodRules} to determine which period to
  46627. * use.
  46628. * You should fallback to AM/PM when there are no day periods available.
  46629. *
  46630. * Note: this is only available if you load the full locale data.
  46631. * See the {\@linkDocs guide/i18n#i18n-pipes "I18n guide"} to know how to import additional locale
  46632. * data.
  46633. *
  46634. * \@experimental i18n support is experimental.
  46635. * @param {?} locale
  46636. * @param {?} formStyle
  46637. * @param {?} width
  46638. * @return {?}
  46639. */
  46640. function getLocaleExtraDayPeriods(locale, formStyle, width) {
  46641. var /** @type {?} */ data = findLocaleData(locale);
  46642. checkFullData(data);
  46643. var /** @type {?} */ dayPeriodsData = /** @type {?} */ ([
  46644. data[18 /* ExtraData */][0 /* ExtraDayPeriodFormats */],
  46645. data[18 /* ExtraData */][1 /* ExtraDayPeriodStandalone */]
  46646. ]);
  46647. var /** @type {?} */ dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
  46648. return getLastDefinedValue(dayPeriods, width) || [];
  46649. }
  46650. /**
  46651. * Returns the first value that is defined in an array, going backwards.
  46652. *
  46653. * To avoid repeating the same data (e.g. when "format" and "standalone" are the same) we only
  46654. * add the first one to the locale data arrays, the other ones are only defined when different.
  46655. * We use this function to retrieve the first defined value.
  46656. *
  46657. * \@experimental i18n support is experimental.
  46658. * @template T
  46659. * @param {?} data
  46660. * @param {?} index
  46661. * @return {?}
  46662. */
  46663. function getLastDefinedValue(data, index) {
  46664. for (var /** @type {?} */ i = index; i > -1; i--) {
  46665. if (typeof data[i] !== 'undefined') {
  46666. return data[i];
  46667. }
  46668. }
  46669. throw new Error('Locale data API: locale data undefined');
  46670. }
  46671. /**
  46672. * Extract the hours and minutes from a string like "15:45"
  46673. * @param {?} time
  46674. * @return {?}
  46675. */
  46676. function extractTime(time) {
  46677. var _a = time.split(':'), h = _a[0], m = _a[1];
  46678. return { hours: +h, minutes: +m };
  46679. }
  46680. /**
  46681. * Finds the locale data for a locale id
  46682. *
  46683. * \@experimental i18n support is experimental.
  46684. * @param {?} locale
  46685. * @return {?}
  46686. */
  46687. function findLocaleData(locale) {
  46688. var /** @type {?} */ normalizedLocale = locale.toLowerCase().replace(/_/g, '-');
  46689. var /** @type {?} */ match = LOCALE_DATA[normalizedLocale];
  46690. if (match) {
  46691. return match;
  46692. }
  46693. // let's try to find a parent locale
  46694. var /** @type {?} */ parentLocale = normalizedLocale.split('-')[0];
  46695. match = LOCALE_DATA[parentLocale];
  46696. if (match) {
  46697. return match;
  46698. }
  46699. if (parentLocale === 'en') {
  46700. return localeEn;
  46701. }
  46702. throw new Error("Missing locale data for the locale \"" + locale + "\".");
  46703. }
  46704. /**
  46705. * Return the currency symbol for a given currency code, or the code if no symbol available
  46706. * (e.g.: format narrow = $, format wide = US$, code = USD)
  46707. *
  46708. * \@experimental i18n support is experimental.
  46709. * @param {?} code
  46710. * @param {?} format
  46711. * @return {?}
  46712. */
  46713. function getCurrencySymbol(code, format) {
  46714. var /** @type {?} */ currency = CURRENCIES[code] || [];
  46715. var /** @type {?} */ symbolNarrow = currency[1];
  46716. if (format === 'narrow' && typeof symbolNarrow === 'string') {
  46717. return symbolNarrow;
  46718. }
  46719. return currency[0] || code;
  46720. }
  46721. /**
  46722. * @fileoverview added by tsickle
  46723. * @suppress {checkTypes} checked by tsc
  46724. */
  46725. /**
  46726. * @license
  46727. * Copyright Google Inc. All Rights Reserved.
  46728. *
  46729. * Use of this source code is governed by an MIT-style license that can be
  46730. * found in the LICENSE file at https://angular.io/license
  46731. */
  46732. /**
  46733. * @deprecated from v5
  46734. */
  46735. var DEPRECATED_PLURAL_FN = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('UseV4Plurals');
  46736. /**
  46737. * \@experimental
  46738. * @abstract
  46739. */
  46740. var NgLocalization = /** @class */ (function () {
  46741. function NgLocalization() {
  46742. }
  46743. return NgLocalization;
  46744. }());
  46745. /**
  46746. * Returns the plural category for a given value.
  46747. * - "=value" when the case exists,
  46748. * - the plural category otherwise
  46749. * @param {?} value
  46750. * @param {?} cases
  46751. * @param {?} ngLocalization
  46752. * @param {?=} locale
  46753. * @return {?}
  46754. */
  46755. function getPluralCategory(value, cases, ngLocalization, locale) {
  46756. var /** @type {?} */ key = "=" + value;
  46757. if (cases.indexOf(key) > -1) {
  46758. return key;
  46759. }
  46760. key = ngLocalization.getPluralCategory(value, locale);
  46761. if (cases.indexOf(key) > -1) {
  46762. return key;
  46763. }
  46764. if (cases.indexOf('other') > -1) {
  46765. return 'other';
  46766. }
  46767. throw new Error("No plural message found for value \"" + value + "\"");
  46768. }
  46769. /**
  46770. * Returns the plural case based on the locale
  46771. *
  46772. * \@experimental
  46773. */
  46774. var NgLocaleLocalization = /** @class */ (function (_super) {
  46775. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(NgLocaleLocalization, _super);
  46776. function NgLocaleLocalization(locale, /** @deprecated from v5 */
  46777. deprecatedPluralFn) {
  46778. var _this = _super.call(this) || this;
  46779. _this.locale = locale;
  46780. _this.deprecatedPluralFn = deprecatedPluralFn;
  46781. return _this;
  46782. }
  46783. /**
  46784. * @param {?} value
  46785. * @param {?=} locale
  46786. * @return {?}
  46787. */
  46788. NgLocaleLocalization.prototype.getPluralCategory = /**
  46789. * @param {?} value
  46790. * @param {?=} locale
  46791. * @return {?}
  46792. */
  46793. function (value, locale) {
  46794. var /** @type {?} */ plural = this.deprecatedPluralFn ? this.deprecatedPluralFn(locale || this.locale, value) :
  46795. getLocalePluralCase(locale || this.locale)(value);
  46796. switch (plural) {
  46797. case Plural.Zero:
  46798. return 'zero';
  46799. case Plural.One:
  46800. return 'one';
  46801. case Plural.Two:
  46802. return 'two';
  46803. case Plural.Few:
  46804. return 'few';
  46805. case Plural.Many:
  46806. return 'many';
  46807. default:
  46808. return 'other';
  46809. }
  46810. };
  46811. NgLocaleLocalization.decorators = [
  46812. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  46813. ];
  46814. /** @nocollapse */
  46815. NgLocaleLocalization.ctorParameters = function () { return [
  46816. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  46817. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [DEPRECATED_PLURAL_FN,] },] },
  46818. ]; };
  46819. return NgLocaleLocalization;
  46820. }(NgLocalization));
  46821. /**
  46822. * Returns the plural case based on the locale
  46823. *
  46824. * @deprecated from v5 the plural case function is in locale data files common/locales/*.ts
  46825. * \@experimental
  46826. * @param {?} locale
  46827. * @param {?} nLike
  46828. * @return {?}
  46829. */
  46830. function getPluralCase(locale, nLike) {
  46831. // TODO(vicb): lazy compute
  46832. if (typeof nLike === 'string') {
  46833. nLike = parseInt(/** @type {?} */ (nLike), 10);
  46834. }
  46835. var /** @type {?} */ n = /** @type {?} */ (nLike);
  46836. var /** @type {?} */ nDecimal = n.toString().replace(/^[^.]*\.?/, '');
  46837. var /** @type {?} */ i = Math.floor(Math.abs(n));
  46838. var /** @type {?} */ v = nDecimal.length;
  46839. var /** @type {?} */ f = parseInt(nDecimal, 10);
  46840. var /** @type {?} */ t = parseInt(n.toString().replace(/^[^.]*\.?|0+$/g, ''), 10) || 0;
  46841. var /** @type {?} */ lang = locale.split('-')[0].toLowerCase();
  46842. switch (lang) {
  46843. case 'af':
  46844. case 'asa':
  46845. case 'az':
  46846. case 'bem':
  46847. case 'bez':
  46848. case 'bg':
  46849. case 'brx':
  46850. case 'ce':
  46851. case 'cgg':
  46852. case 'chr':
  46853. case 'ckb':
  46854. case 'ee':
  46855. case 'el':
  46856. case 'eo':
  46857. case 'es':
  46858. case 'eu':
  46859. case 'fo':
  46860. case 'fur':
  46861. case 'gsw':
  46862. case 'ha':
  46863. case 'haw':
  46864. case 'hu':
  46865. case 'jgo':
  46866. case 'jmc':
  46867. case 'ka':
  46868. case 'kk':
  46869. case 'kkj':
  46870. case 'kl':
  46871. case 'ks':
  46872. case 'ksb':
  46873. case 'ky':
  46874. case 'lb':
  46875. case 'lg':
  46876. case 'mas':
  46877. case 'mgo':
  46878. case 'ml':
  46879. case 'mn':
  46880. case 'nb':
  46881. case 'nd':
  46882. case 'ne':
  46883. case 'nn':
  46884. case 'nnh':
  46885. case 'nyn':
  46886. case 'om':
  46887. case 'or':
  46888. case 'os':
  46889. case 'ps':
  46890. case 'rm':
  46891. case 'rof':
  46892. case 'rwk':
  46893. case 'saq':
  46894. case 'seh':
  46895. case 'sn':
  46896. case 'so':
  46897. case 'sq':
  46898. case 'ta':
  46899. case 'te':
  46900. case 'teo':
  46901. case 'tk':
  46902. case 'tr':
  46903. case 'ug':
  46904. case 'uz':
  46905. case 'vo':
  46906. case 'vun':
  46907. case 'wae':
  46908. case 'xog':
  46909. if (n === 1)
  46910. return Plural.One;
  46911. return Plural.Other;
  46912. case 'ak':
  46913. case 'ln':
  46914. case 'mg':
  46915. case 'pa':
  46916. case 'ti':
  46917. if (n === Math.floor(n) && n >= 0 && n <= 1)
  46918. return Plural.One;
  46919. return Plural.Other;
  46920. case 'am':
  46921. case 'as':
  46922. case 'bn':
  46923. case 'fa':
  46924. case 'gu':
  46925. case 'hi':
  46926. case 'kn':
  46927. case 'mr':
  46928. case 'zu':
  46929. if (i === 0 || n === 1)
  46930. return Plural.One;
  46931. return Plural.Other;
  46932. case 'ar':
  46933. if (n === 0)
  46934. return Plural.Zero;
  46935. if (n === 1)
  46936. return Plural.One;
  46937. if (n === 2)
  46938. return Plural.Two;
  46939. if (n % 100 === Math.floor(n % 100) && n % 100 >= 3 && n % 100 <= 10)
  46940. return Plural.Few;
  46941. if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 99)
  46942. return Plural.Many;
  46943. return Plural.Other;
  46944. case 'ast':
  46945. case 'ca':
  46946. case 'de':
  46947. case 'en':
  46948. case 'et':
  46949. case 'fi':
  46950. case 'fy':
  46951. case 'gl':
  46952. case 'it':
  46953. case 'nl':
  46954. case 'sv':
  46955. case 'sw':
  46956. case 'ur':
  46957. case 'yi':
  46958. if (i === 1 && v === 0)
  46959. return Plural.One;
  46960. return Plural.Other;
  46961. case 'be':
  46962. if (n % 10 === 1 && !(n % 100 === 11))
  46963. return Plural.One;
  46964. if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 4 &&
  46965. !(n % 100 >= 12 && n % 100 <= 14))
  46966. return Plural.Few;
  46967. if (n % 10 === 0 || n % 10 === Math.floor(n % 10) && n % 10 >= 5 && n % 10 <= 9 ||
  46968. n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 14)
  46969. return Plural.Many;
  46970. return Plural.Other;
  46971. case 'br':
  46972. if (n % 10 === 1 && !(n % 100 === 11 || n % 100 === 71 || n % 100 === 91))
  46973. return Plural.One;
  46974. if (n % 10 === 2 && !(n % 100 === 12 || n % 100 === 72 || n % 100 === 92))
  46975. return Plural.Two;
  46976. if (n % 10 === Math.floor(n % 10) && (n % 10 >= 3 && n % 10 <= 4 || n % 10 === 9) &&
  46977. !(n % 100 >= 10 && n % 100 <= 19 || n % 100 >= 70 && n % 100 <= 79 ||
  46978. n % 100 >= 90 && n % 100 <= 99))
  46979. return Plural.Few;
  46980. if (!(n === 0) && n % 1e6 === 0)
  46981. return Plural.Many;
  46982. return Plural.Other;
  46983. case 'bs':
  46984. case 'hr':
  46985. case 'sr':
  46986. if (v === 0 && i % 10 === 1 && !(i % 100 === 11) || f % 10 === 1 && !(f % 100 === 11))
  46987. return Plural.One;
  46988. if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&
  46989. !(i % 100 >= 12 && i % 100 <= 14) ||
  46990. f % 10 === Math.floor(f % 10) && f % 10 >= 2 && f % 10 <= 4 &&
  46991. !(f % 100 >= 12 && f % 100 <= 14))
  46992. return Plural.Few;
  46993. return Plural.Other;
  46994. case 'cs':
  46995. case 'sk':
  46996. if (i === 1 && v === 0)
  46997. return Plural.One;
  46998. if (i === Math.floor(i) && i >= 2 && i <= 4 && v === 0)
  46999. return Plural.Few;
  47000. if (!(v === 0))
  47001. return Plural.Many;
  47002. return Plural.Other;
  47003. case 'cy':
  47004. if (n === 0)
  47005. return Plural.Zero;
  47006. if (n === 1)
  47007. return Plural.One;
  47008. if (n === 2)
  47009. return Plural.Two;
  47010. if (n === 3)
  47011. return Plural.Few;
  47012. if (n === 6)
  47013. return Plural.Many;
  47014. return Plural.Other;
  47015. case 'da':
  47016. if (n === 1 || !(t === 0) && (i === 0 || i === 1))
  47017. return Plural.One;
  47018. return Plural.Other;
  47019. case 'dsb':
  47020. case 'hsb':
  47021. if (v === 0 && i % 100 === 1 || f % 100 === 1)
  47022. return Plural.One;
  47023. if (v === 0 && i % 100 === 2 || f % 100 === 2)
  47024. return Plural.Two;
  47025. if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 ||
  47026. f % 100 === Math.floor(f % 100) && f % 100 >= 3 && f % 100 <= 4)
  47027. return Plural.Few;
  47028. return Plural.Other;
  47029. case 'ff':
  47030. case 'fr':
  47031. case 'hy':
  47032. case 'kab':
  47033. if (i === 0 || i === 1)
  47034. return Plural.One;
  47035. return Plural.Other;
  47036. case 'fil':
  47037. if (v === 0 && (i === 1 || i === 2 || i === 3) ||
  47038. v === 0 && !(i % 10 === 4 || i % 10 === 6 || i % 10 === 9) ||
  47039. !(v === 0) && !(f % 10 === 4 || f % 10 === 6 || f % 10 === 9))
  47040. return Plural.One;
  47041. return Plural.Other;
  47042. case 'ga':
  47043. if (n === 1)
  47044. return Plural.One;
  47045. if (n === 2)
  47046. return Plural.Two;
  47047. if (n === Math.floor(n) && n >= 3 && n <= 6)
  47048. return Plural.Few;
  47049. if (n === Math.floor(n) && n >= 7 && n <= 10)
  47050. return Plural.Many;
  47051. return Plural.Other;
  47052. case 'gd':
  47053. if (n === 1 || n === 11)
  47054. return Plural.One;
  47055. if (n === 2 || n === 12)
  47056. return Plural.Two;
  47057. if (n === Math.floor(n) && (n >= 3 && n <= 10 || n >= 13 && n <= 19))
  47058. return Plural.Few;
  47059. return Plural.Other;
  47060. case 'gv':
  47061. if (v === 0 && i % 10 === 1)
  47062. return Plural.One;
  47063. if (v === 0 && i % 10 === 2)
  47064. return Plural.Two;
  47065. if (v === 0 &&
  47066. (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80))
  47067. return Plural.Few;
  47068. if (!(v === 0))
  47069. return Plural.Many;
  47070. return Plural.Other;
  47071. case 'he':
  47072. if (i === 1 && v === 0)
  47073. return Plural.One;
  47074. if (i === 2 && v === 0)
  47075. return Plural.Two;
  47076. if (v === 0 && !(n >= 0 && n <= 10) && n % 10 === 0)
  47077. return Plural.Many;
  47078. return Plural.Other;
  47079. case 'is':
  47080. if (t === 0 && i % 10 === 1 && !(i % 100 === 11) || !(t === 0))
  47081. return Plural.One;
  47082. return Plural.Other;
  47083. case 'ksh':
  47084. if (n === 0)
  47085. return Plural.Zero;
  47086. if (n === 1)
  47087. return Plural.One;
  47088. return Plural.Other;
  47089. case 'kw':
  47090. case 'naq':
  47091. case 'se':
  47092. case 'smn':
  47093. if (n === 1)
  47094. return Plural.One;
  47095. if (n === 2)
  47096. return Plural.Two;
  47097. return Plural.Other;
  47098. case 'lag':
  47099. if (n === 0)
  47100. return Plural.Zero;
  47101. if ((i === 0 || i === 1) && !(n === 0))
  47102. return Plural.One;
  47103. return Plural.Other;
  47104. case 'lt':
  47105. if (n % 10 === 1 && !(n % 100 >= 11 && n % 100 <= 19))
  47106. return Plural.One;
  47107. if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 9 &&
  47108. !(n % 100 >= 11 && n % 100 <= 19))
  47109. return Plural.Few;
  47110. if (!(f === 0))
  47111. return Plural.Many;
  47112. return Plural.Other;
  47113. case 'lv':
  47114. case 'prg':
  47115. if (n % 10 === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19 ||
  47116. v === 2 && f % 100 === Math.floor(f % 100) && f % 100 >= 11 && f % 100 <= 19)
  47117. return Plural.Zero;
  47118. if (n % 10 === 1 && !(n % 100 === 11) || v === 2 && f % 10 === 1 && !(f % 100 === 11) ||
  47119. !(v === 2) && f % 10 === 1)
  47120. return Plural.One;
  47121. return Plural.Other;
  47122. case 'mk':
  47123. if (v === 0 && i % 10 === 1 || f % 10 === 1)
  47124. return Plural.One;
  47125. return Plural.Other;
  47126. case 'mt':
  47127. if (n === 1)
  47128. return Plural.One;
  47129. if (n === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 2 && n % 100 <= 10)
  47130. return Plural.Few;
  47131. if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19)
  47132. return Plural.Many;
  47133. return Plural.Other;
  47134. case 'pl':
  47135. if (i === 1 && v === 0)
  47136. return Plural.One;
  47137. if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&
  47138. !(i % 100 >= 12 && i % 100 <= 14))
  47139. return Plural.Few;
  47140. if (v === 0 && !(i === 1) && i % 10 === Math.floor(i % 10) && i % 10 >= 0 && i % 10 <= 1 ||
  47141. v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||
  47142. v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 12 && i % 100 <= 14)
  47143. return Plural.Many;
  47144. return Plural.Other;
  47145. case 'pt':
  47146. if (n === Math.floor(n) && n >= 0 && n <= 2 && !(n === 2))
  47147. return Plural.One;
  47148. return Plural.Other;
  47149. case 'ro':
  47150. if (i === 1 && v === 0)
  47151. return Plural.One;
  47152. if (!(v === 0) || n === 0 ||
  47153. !(n === 1) && n % 100 === Math.floor(n % 100) && n % 100 >= 1 && n % 100 <= 19)
  47154. return Plural.Few;
  47155. return Plural.Other;
  47156. case 'ru':
  47157. case 'uk':
  47158. if (v === 0 && i % 10 === 1 && !(i % 100 === 11))
  47159. return Plural.One;
  47160. if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&
  47161. !(i % 100 >= 12 && i % 100 <= 14))
  47162. return Plural.Few;
  47163. if (v === 0 && i % 10 === 0 ||
  47164. v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||
  47165. v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 11 && i % 100 <= 14)
  47166. return Plural.Many;
  47167. return Plural.Other;
  47168. case 'shi':
  47169. if (i === 0 || n === 1)
  47170. return Plural.One;
  47171. if (n === Math.floor(n) && n >= 2 && n <= 10)
  47172. return Plural.Few;
  47173. return Plural.Other;
  47174. case 'si':
  47175. if (n === 0 || n === 1 || i === 0 && f === 1)
  47176. return Plural.One;
  47177. return Plural.Other;
  47178. case 'sl':
  47179. if (v === 0 && i % 100 === 1)
  47180. return Plural.One;
  47181. if (v === 0 && i % 100 === 2)
  47182. return Plural.Two;
  47183. if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 || !(v === 0))
  47184. return Plural.Few;
  47185. return Plural.Other;
  47186. case 'tzm':
  47187. if (n === Math.floor(n) && n >= 0 && n <= 1 || n === Math.floor(n) && n >= 11 && n <= 99)
  47188. return Plural.One;
  47189. return Plural.Other;
  47190. // When there is no specification, the default is always "other"
  47191. // Spec: http://cldr.unicode.org/index/cldr-spec/plural-rules
  47192. // > other (required—general plural form — also used if the language only has a single form)
  47193. default:
  47194. return Plural.Other;
  47195. }
  47196. }
  47197. /**
  47198. * @fileoverview added by tsickle
  47199. * @suppress {checkTypes} checked by tsc
  47200. */
  47201. /**
  47202. * @license
  47203. * Copyright Google Inc. All Rights Reserved.
  47204. *
  47205. * Use of this source code is governed by an MIT-style license that can be
  47206. * found in the LICENSE file at https://angular.io/license
  47207. */
  47208. /**
  47209. * @param {?} cookieStr
  47210. * @param {?} name
  47211. * @return {?}
  47212. */
  47213. function parseCookieValue(cookieStr, name) {
  47214. name = encodeURIComponent(name);
  47215. for (var _i = 0, _a = cookieStr.split(';'); _i < _a.length; _i++) {
  47216. var cookie = _a[_i];
  47217. var /** @type {?} */ eqIndex = cookie.indexOf('=');
  47218. var _b = eqIndex == -1 ? [cookie, ''] : [cookie.slice(0, eqIndex), cookie.slice(eqIndex + 1)], cookieName = _b[0], cookieValue = _b[1];
  47219. if (cookieName.trim() === name) {
  47220. return decodeURIComponent(cookieValue);
  47221. }
  47222. }
  47223. return null;
  47224. }
  47225. /**
  47226. * @fileoverview added by tsickle
  47227. * @suppress {checkTypes} checked by tsc
  47228. */
  47229. /**
  47230. * @license
  47231. * Copyright Google Inc. All Rights Reserved.
  47232. *
  47233. * Use of this source code is governed by an MIT-style license that can be
  47234. * found in the LICENSE file at https://angular.io/license
  47235. */
  47236. /**
  47237. * \@ngModule CommonModule
  47238. *
  47239. * \@whatItDoes Adds and removes CSS classes on an HTML element.
  47240. *
  47241. * \@howToUse
  47242. * ```
  47243. * <some-element [ngClass]="'first second'">...</some-element>
  47244. *
  47245. * <some-element [ngClass]="['first', 'second']">...</some-element>
  47246. *
  47247. * <some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element>
  47248. *
  47249. * <some-element [ngClass]="stringExp|arrayExp|objExp">...</some-element>
  47250. *
  47251. * <some-element [ngClass]="{'class1 class2 class3' : true}">...</some-element>
  47252. * ```
  47253. *
  47254. * \@description
  47255. *
  47256. * The CSS classes are updated as follows, depending on the type of the expression evaluation:
  47257. * - `string` - the CSS classes listed in the string (space delimited) are added,
  47258. * - `Array` - the CSS classes declared as Array elements are added,
  47259. * - `Object` - keys are CSS classes that get added when the expression given in the value
  47260. * evaluates to a truthy value, otherwise they are removed.
  47261. *
  47262. * \@stable
  47263. */
  47264. var NgClass = /** @class */ (function () {
  47265. function NgClass(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {
  47266. this._iterableDiffers = _iterableDiffers;
  47267. this._keyValueDiffers = _keyValueDiffers;
  47268. this._ngEl = _ngEl;
  47269. this._renderer = _renderer;
  47270. this._initialClasses = [];
  47271. }
  47272. Object.defineProperty(NgClass.prototype, "klass", {
  47273. set: /**
  47274. * @param {?} v
  47275. * @return {?}
  47276. */
  47277. function (v) {
  47278. this._removeClasses(this._initialClasses);
  47279. this._initialClasses = typeof v === 'string' ? v.split(/\s+/) : [];
  47280. this._applyClasses(this._initialClasses);
  47281. this._applyClasses(this._rawClass);
  47282. },
  47283. enumerable: true,
  47284. configurable: true
  47285. });
  47286. Object.defineProperty(NgClass.prototype, "ngClass", {
  47287. set: /**
  47288. * @param {?} v
  47289. * @return {?}
  47290. */
  47291. function (v) {
  47292. this._removeClasses(this._rawClass);
  47293. this._applyClasses(this._initialClasses);
  47294. this._iterableDiffer = null;
  47295. this._keyValueDiffer = null;
  47296. this._rawClass = typeof v === 'string' ? v.split(/\s+/) : v;
  47297. if (this._rawClass) {
  47298. if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_33" /* ɵisListLikeIterable */])(this._rawClass)) {
  47299. this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();
  47300. }
  47301. else {
  47302. this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();
  47303. }
  47304. }
  47305. },
  47306. enumerable: true,
  47307. configurable: true
  47308. });
  47309. /**
  47310. * @return {?}
  47311. */
  47312. NgClass.prototype.ngDoCheck = /**
  47313. * @return {?}
  47314. */
  47315. function () {
  47316. if (this._iterableDiffer) {
  47317. var /** @type {?} */ iterableChanges = this._iterableDiffer.diff(/** @type {?} */ (this._rawClass));
  47318. if (iterableChanges) {
  47319. this._applyIterableChanges(iterableChanges);
  47320. }
  47321. }
  47322. else if (this._keyValueDiffer) {
  47323. var /** @type {?} */ keyValueChanges = this._keyValueDiffer.diff(/** @type {?} */ (this._rawClass));
  47324. if (keyValueChanges) {
  47325. this._applyKeyValueChanges(keyValueChanges);
  47326. }
  47327. }
  47328. };
  47329. /**
  47330. * @param {?} changes
  47331. * @return {?}
  47332. */
  47333. NgClass.prototype._applyKeyValueChanges = /**
  47334. * @param {?} changes
  47335. * @return {?}
  47336. */
  47337. function (changes) {
  47338. var _this = this;
  47339. changes.forEachAddedItem(function (record) { return _this._toggleClass(record.key, record.currentValue); });
  47340. changes.forEachChangedItem(function (record) { return _this._toggleClass(record.key, record.currentValue); });
  47341. changes.forEachRemovedItem(function (record) {
  47342. if (record.previousValue) {
  47343. _this._toggleClass(record.key, false);
  47344. }
  47345. });
  47346. };
  47347. /**
  47348. * @param {?} changes
  47349. * @return {?}
  47350. */
  47351. NgClass.prototype._applyIterableChanges = /**
  47352. * @param {?} changes
  47353. * @return {?}
  47354. */
  47355. function (changes) {
  47356. var _this = this;
  47357. changes.forEachAddedItem(function (record) {
  47358. if (typeof record.item === 'string') {
  47359. _this._toggleClass(record.item, true);
  47360. }
  47361. else {
  47362. throw new Error("NgClass can only toggle CSS classes expressed as strings, got " + Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_48" /* ɵstringify */])(record.item));
  47363. }
  47364. });
  47365. changes.forEachRemovedItem(function (record) { return _this._toggleClass(record.item, false); });
  47366. };
  47367. /**
  47368. * Applies a collection of CSS classes to the DOM element.
  47369. *
  47370. * For argument of type Set and Array CSS class names contained in those collections are always
  47371. * added.
  47372. * For argument of type Map CSS class name in the map's key is toggled based on the value (added
  47373. * for truthy and removed for falsy).
  47374. * @param {?} rawClassVal
  47375. * @return {?}
  47376. */
  47377. NgClass.prototype._applyClasses = /**
  47378. * Applies a collection of CSS classes to the DOM element.
  47379. *
  47380. * For argument of type Set and Array CSS class names contained in those collections are always
  47381. * added.
  47382. * For argument of type Map CSS class name in the map's key is toggled based on the value (added
  47383. * for truthy and removed for falsy).
  47384. * @param {?} rawClassVal
  47385. * @return {?}
  47386. */
  47387. function (rawClassVal) {
  47388. var _this = this;
  47389. if (rawClassVal) {
  47390. if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {
  47391. (/** @type {?} */ (rawClassVal)).forEach(function (klass) { return _this._toggleClass(klass, true); });
  47392. }
  47393. else {
  47394. Object.keys(rawClassVal).forEach(function (klass) { return _this._toggleClass(klass, !!rawClassVal[klass]); });
  47395. }
  47396. }
  47397. };
  47398. /**
  47399. * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup
  47400. * purposes.
  47401. * @param {?} rawClassVal
  47402. * @return {?}
  47403. */
  47404. NgClass.prototype._removeClasses = /**
  47405. * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup
  47406. * purposes.
  47407. * @param {?} rawClassVal
  47408. * @return {?}
  47409. */
  47410. function (rawClassVal) {
  47411. var _this = this;
  47412. if (rawClassVal) {
  47413. if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {
  47414. (/** @type {?} */ (rawClassVal)).forEach(function (klass) { return _this._toggleClass(klass, false); });
  47415. }
  47416. else {
  47417. Object.keys(rawClassVal).forEach(function (klass) { return _this._toggleClass(klass, false); });
  47418. }
  47419. }
  47420. };
  47421. /**
  47422. * @param {?} klass
  47423. * @param {?} enabled
  47424. * @return {?}
  47425. */
  47426. NgClass.prototype._toggleClass = /**
  47427. * @param {?} klass
  47428. * @param {?} enabled
  47429. * @return {?}
  47430. */
  47431. function (klass, enabled) {
  47432. var _this = this;
  47433. klass = klass.trim();
  47434. if (klass) {
  47435. klass.split(/\s+/g).forEach(function (klass) {
  47436. if (enabled) {
  47437. _this._renderer.addClass(_this._ngEl.nativeElement, klass);
  47438. }
  47439. else {
  47440. _this._renderer.removeClass(_this._ngEl.nativeElement, klass);
  47441. }
  47442. });
  47443. }
  47444. };
  47445. NgClass.decorators = [
  47446. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngClass]' },] },
  47447. ];
  47448. /** @nocollapse */
  47449. NgClass.ctorParameters = function () { return [
  47450. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["E" /* IterableDiffers */], },
  47451. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* KeyValueDiffers */], },
  47452. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  47453. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["W" /* Renderer2 */], },
  47454. ]; };
  47455. NgClass.propDecorators = {
  47456. "klass": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */], args: ['class',] },],
  47457. "ngClass": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47458. };
  47459. return NgClass;
  47460. }());
  47461. /**
  47462. * @fileoverview added by tsickle
  47463. * @suppress {checkTypes} checked by tsc
  47464. */
  47465. /**
  47466. * @license
  47467. * Copyright Google Inc. All Rights Reserved.
  47468. *
  47469. * Use of this source code is governed by an MIT-style license that can be
  47470. * found in the LICENSE file at https://angular.io/license
  47471. */
  47472. /**
  47473. * Instantiates a single {\@link Component} type and inserts its Host View into current View.
  47474. * `NgComponentOutlet` provides a declarative approach for dynamic component creation.
  47475. *
  47476. * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and
  47477. * any existing component will get destroyed.
  47478. *
  47479. * ### Fine tune control
  47480. *
  47481. * You can control the component creation process by using the following optional attributes:
  47482. *
  47483. * * `ngComponentOutletInjector`: Optional custom {\@link Injector} that will be used as parent for
  47484. * the Component. Defaults to the injector of the current view container.
  47485. *
  47486. * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content
  47487. * section of the component, if exists.
  47488. *
  47489. * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other
  47490. * module, then load a component from that module.
  47491. *
  47492. * ### Syntax
  47493. *
  47494. * Simple
  47495. * ```
  47496. * <ng-container *ngComponentOutlet="componentTypeExpression"></ng-container>
  47497. * ```
  47498. *
  47499. * Customized injector/content
  47500. * ```
  47501. * <ng-container *ngComponentOutlet="componentTypeExpression;
  47502. * injector: injectorExpression;
  47503. * content: contentNodesExpression;">
  47504. * </ng-container>
  47505. * ```
  47506. *
  47507. * Customized ngModuleFactory
  47508. * ```
  47509. * <ng-container *ngComponentOutlet="componentTypeExpression;
  47510. * ngModuleFactory: moduleFactory;">
  47511. * </ng-container>
  47512. * ```
  47513. * ## Example
  47514. *
  47515. * {\@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}
  47516. *
  47517. * A more complete example with additional options:
  47518. *
  47519. * {\@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}
  47520. * A more complete example with ngModuleFactory:
  47521. *
  47522. * {\@example common/ngComponentOutlet/ts/module.ts region='NgModuleFactoryExample'}
  47523. *
  47524. * \@experimental
  47525. */
  47526. var NgComponentOutlet = /** @class */ (function () {
  47527. function NgComponentOutlet(_viewContainerRef) {
  47528. this._viewContainerRef = _viewContainerRef;
  47529. this._componentRef = null;
  47530. this._moduleRef = null;
  47531. }
  47532. /**
  47533. * @param {?} changes
  47534. * @return {?}
  47535. */
  47536. NgComponentOutlet.prototype.ngOnChanges = /**
  47537. * @param {?} changes
  47538. * @return {?}
  47539. */
  47540. function (changes) {
  47541. this._viewContainerRef.clear();
  47542. this._componentRef = null;
  47543. if (this.ngComponentOutlet) {
  47544. var /** @type {?} */ elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;
  47545. if (changes['ngComponentOutletNgModuleFactory']) {
  47546. if (this._moduleRef)
  47547. this._moduleRef.destroy();
  47548. if (this.ngComponentOutletNgModuleFactory) {
  47549. var /** @type {?} */ parentModule = elInjector.get(__WEBPACK_IMPORTED_MODULE_0__angular_core__["K" /* NgModuleRef */]);
  47550. this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);
  47551. }
  47552. else {
  47553. this._moduleRef = null;
  47554. }
  47555. }
  47556. var /** @type {?} */ componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver :
  47557. elInjector.get(__WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */]);
  47558. var /** @type {?} */ componentFactory = componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);
  47559. this._componentRef = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, elInjector, this.ngComponentOutletContent);
  47560. }
  47561. };
  47562. /**
  47563. * @return {?}
  47564. */
  47565. NgComponentOutlet.prototype.ngOnDestroy = /**
  47566. * @return {?}
  47567. */
  47568. function () {
  47569. if (this._moduleRef)
  47570. this._moduleRef.destroy();
  47571. };
  47572. NgComponentOutlet.decorators = [
  47573. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngComponentOutlet]' },] },
  47574. ];
  47575. /** @nocollapse */
  47576. NgComponentOutlet.ctorParameters = function () { return [
  47577. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  47578. ]; };
  47579. NgComponentOutlet.propDecorators = {
  47580. "ngComponentOutlet": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47581. "ngComponentOutletInjector": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47582. "ngComponentOutletContent": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47583. "ngComponentOutletNgModuleFactory": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47584. };
  47585. return NgComponentOutlet;
  47586. }());
  47587. /**
  47588. * @fileoverview added by tsickle
  47589. * @suppress {checkTypes} checked by tsc
  47590. */
  47591. /**
  47592. * @license
  47593. * Copyright Google Inc. All Rights Reserved.
  47594. *
  47595. * Use of this source code is governed by an MIT-style license that can be
  47596. * found in the LICENSE file at https://angular.io/license
  47597. */
  47598. /**
  47599. * \@stable
  47600. * @template T
  47601. */
  47602. var NgForOfContext = /** @class */ (function () {
  47603. function NgForOfContext($implicit, ngForOf, index, count) {
  47604. this.$implicit = $implicit;
  47605. this.ngForOf = ngForOf;
  47606. this.index = index;
  47607. this.count = count;
  47608. }
  47609. Object.defineProperty(NgForOfContext.prototype, "first", {
  47610. get: /**
  47611. * @return {?}
  47612. */
  47613. function () { return this.index === 0; },
  47614. enumerable: true,
  47615. configurable: true
  47616. });
  47617. Object.defineProperty(NgForOfContext.prototype, "last", {
  47618. get: /**
  47619. * @return {?}
  47620. */
  47621. function () { return this.index === this.count - 1; },
  47622. enumerable: true,
  47623. configurable: true
  47624. });
  47625. Object.defineProperty(NgForOfContext.prototype, "even", {
  47626. get: /**
  47627. * @return {?}
  47628. */
  47629. function () { return this.index % 2 === 0; },
  47630. enumerable: true,
  47631. configurable: true
  47632. });
  47633. Object.defineProperty(NgForOfContext.prototype, "odd", {
  47634. get: /**
  47635. * @return {?}
  47636. */
  47637. function () { return !this.even; },
  47638. enumerable: true,
  47639. configurable: true
  47640. });
  47641. return NgForOfContext;
  47642. }());
  47643. /**
  47644. * The `NgForOf` directive instantiates a template once per item from an iterable. The context
  47645. * for each instantiated template inherits from the outer context with the given loop variable
  47646. * set to the current item from the iterable.
  47647. *
  47648. * ### Local Variables
  47649. *
  47650. * `NgForOf` provides several exported values that can be aliased to local variables:
  47651. *
  47652. * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).
  47653. * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is
  47654. * more complex then a property access, for example when using the async pipe (`userStreams |
  47655. * async`).
  47656. * - `index: number`: The index of the current item in the iterable.
  47657. * - `first: boolean`: True when the item is the first item in the iterable.
  47658. * - `last: boolean`: True when the item is the last item in the iterable.
  47659. * - `even: boolean`: True when the item has an even index in the iterable.
  47660. * - `odd: boolean`: True when the item has an odd index in the iterable.
  47661. *
  47662. * ```
  47663. * <li *ngFor="let user of userObservable | async as users; index as i; first as isFirst">
  47664. * {{i}}/{{users.length}}. {{user}} <span *ngIf="isFirst">default</span>
  47665. * </li>
  47666. * ```
  47667. *
  47668. * ### Change Propagation
  47669. *
  47670. * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:
  47671. *
  47672. * * When an item is added, a new instance of the template is added to the DOM.
  47673. * * When an item is removed, its template instance is removed from the DOM.
  47674. * * When items are reordered, their respective templates are reordered in the DOM.
  47675. * * Otherwise, the DOM element for that item will remain the same.
  47676. *
  47677. * Angular uses object identity to track insertions and deletions within the iterator and reproduce
  47678. * those changes in the DOM. This has important implications for animations and any stateful
  47679. * controls (such as `<input>` elements which accept user input) that are present. Inserted rows can
  47680. * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state
  47681. * such as user input.
  47682. *
  47683. * It is possible for the identities of elements in the iterator to change while the data does not.
  47684. * This can happen, for example, if the iterator produced from an RPC to the server, and that
  47685. * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with
  47686. * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old
  47687. * elements were deleted and all new elements inserted). This is an expensive operation and should
  47688. * be avoided if possible.
  47689. *
  47690. * To customize the default tracking algorithm, `NgForOf` supports `trackBy` option.
  47691. * `trackBy` takes a function which has two arguments: `index` and `item`.
  47692. * If `trackBy` is given, Angular tracks changes by the return value of the function.
  47693. *
  47694. * ### Syntax
  47695. *
  47696. * - `<li *ngFor="let item of items; index as i; trackBy: trackByFn">...</li>`
  47697. *
  47698. * With `<ng-template>` element:
  47699. *
  47700. * ```
  47701. * <ng-template ngFor let-item [ngForOf]="items" let-i="index" [ngForTrackBy]="trackByFn">
  47702. * <li>...</li>
  47703. * </ng-template>
  47704. * ```
  47705. *
  47706. * ### Example
  47707. *
  47708. * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed
  47709. * example.
  47710. *
  47711. * \@stable
  47712. * @template T
  47713. */
  47714. var NgForOf = /** @class */ (function () {
  47715. function NgForOf(_viewContainer, _template, _differs) {
  47716. this._viewContainer = _viewContainer;
  47717. this._template = _template;
  47718. this._differs = _differs;
  47719. this._differ = null;
  47720. }
  47721. Object.defineProperty(NgForOf.prototype, "ngForTrackBy", {
  47722. get: /**
  47723. * @return {?}
  47724. */
  47725. function () { return this._trackByFn; },
  47726. set: /**
  47727. * @param {?} fn
  47728. * @return {?}
  47729. */
  47730. function (fn) {
  47731. if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_16" /* isDevMode */])() && fn != null && typeof fn !== 'function') {
  47732. // TODO(vicb): use a log service once there is a public one available
  47733. if (/** @type {?} */ (console) && /** @type {?} */ (console.warn)) {
  47734. console.warn("trackBy must be a function, but received " + JSON.stringify(fn) + ". " +
  47735. "See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.");
  47736. }
  47737. }
  47738. this._trackByFn = fn;
  47739. },
  47740. enumerable: true,
  47741. configurable: true
  47742. });
  47743. Object.defineProperty(NgForOf.prototype, "ngForTemplate", {
  47744. set: /**
  47745. * @param {?} value
  47746. * @return {?}
  47747. */
  47748. function (value) {
  47749. // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1
  47750. // The current type is too restrictive; a template that just uses index, for example,
  47751. // should be acceptable.
  47752. if (value) {
  47753. this._template = value;
  47754. }
  47755. },
  47756. enumerable: true,
  47757. configurable: true
  47758. });
  47759. /**
  47760. * @param {?} changes
  47761. * @return {?}
  47762. */
  47763. NgForOf.prototype.ngOnChanges = /**
  47764. * @param {?} changes
  47765. * @return {?}
  47766. */
  47767. function (changes) {
  47768. if ('ngForOf' in changes) {
  47769. // React on ngForOf changes only once all inputs have been initialized
  47770. var /** @type {?} */ value = changes['ngForOf'].currentValue;
  47771. if (!this._differ && value) {
  47772. try {
  47773. this._differ = this._differs.find(value).create(this.ngForTrackBy);
  47774. }
  47775. catch (/** @type {?} */ e) {
  47776. throw new Error("Cannot find a differ supporting object '" + value + "' of type '" + getTypeNameForDebugging(value) + "'. NgFor only supports binding to Iterables such as Arrays.");
  47777. }
  47778. }
  47779. }
  47780. };
  47781. /**
  47782. * @return {?}
  47783. */
  47784. NgForOf.prototype.ngDoCheck = /**
  47785. * @return {?}
  47786. */
  47787. function () {
  47788. if (this._differ) {
  47789. var /** @type {?} */ changes = this._differ.diff(this.ngForOf);
  47790. if (changes)
  47791. this._applyChanges(changes);
  47792. }
  47793. };
  47794. /**
  47795. * @param {?} changes
  47796. * @return {?}
  47797. */
  47798. NgForOf.prototype._applyChanges = /**
  47799. * @param {?} changes
  47800. * @return {?}
  47801. */
  47802. function (changes) {
  47803. var _this = this;
  47804. var /** @type {?} */ insertTuples = [];
  47805. changes.forEachOperation(function (item, adjustedPreviousIndex, currentIndex) {
  47806. if (item.previousIndex == null) {
  47807. var /** @type {?} */ view = _this._viewContainer.createEmbeddedView(_this._template, new NgForOfContext(/** @type {?} */ ((null)), _this.ngForOf, -1, -1), currentIndex);
  47808. var /** @type {?} */ tuple = new RecordViewTuple(item, view);
  47809. insertTuples.push(tuple);
  47810. }
  47811. else if (currentIndex == null) {
  47812. _this._viewContainer.remove(adjustedPreviousIndex);
  47813. }
  47814. else {
  47815. var /** @type {?} */ view = /** @type {?} */ ((_this._viewContainer.get(adjustedPreviousIndex)));
  47816. _this._viewContainer.move(view, currentIndex);
  47817. var /** @type {?} */ tuple = new RecordViewTuple(item, /** @type {?} */ (view));
  47818. insertTuples.push(tuple);
  47819. }
  47820. });
  47821. for (var /** @type {?} */ i = 0; i < insertTuples.length; i++) {
  47822. this._perViewChange(insertTuples[i].view, insertTuples[i].record);
  47823. }
  47824. for (var /** @type {?} */ i = 0, /** @type {?} */ ilen = this._viewContainer.length; i < ilen; i++) {
  47825. var /** @type {?} */ viewRef = /** @type {?} */ (this._viewContainer.get(i));
  47826. viewRef.context.index = i;
  47827. viewRef.context.count = ilen;
  47828. }
  47829. changes.forEachIdentityChange(function (record) {
  47830. var /** @type {?} */ viewRef = /** @type {?} */ (_this._viewContainer.get(record.currentIndex));
  47831. viewRef.context.$implicit = record.item;
  47832. });
  47833. };
  47834. /**
  47835. * @param {?} view
  47836. * @param {?} record
  47837. * @return {?}
  47838. */
  47839. NgForOf.prototype._perViewChange = /**
  47840. * @param {?} view
  47841. * @param {?} record
  47842. * @return {?}
  47843. */
  47844. function (view, record) {
  47845. view.context.$implicit = record.item;
  47846. };
  47847. NgForOf.decorators = [
  47848. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngFor][ngForOf]' },] },
  47849. ];
  47850. /** @nocollapse */
  47851. NgForOf.ctorParameters = function () { return [
  47852. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  47853. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  47854. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["E" /* IterableDiffers */], },
  47855. ]; };
  47856. NgForOf.propDecorators = {
  47857. "ngForOf": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47858. "ngForTrackBy": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47859. "ngForTemplate": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  47860. };
  47861. return NgForOf;
  47862. }());
  47863. /**
  47864. * @template T
  47865. */
  47866. var RecordViewTuple = /** @class */ (function () {
  47867. function RecordViewTuple(record, view) {
  47868. this.record = record;
  47869. this.view = view;
  47870. }
  47871. return RecordViewTuple;
  47872. }());
  47873. /**
  47874. * @param {?} type
  47875. * @return {?}
  47876. */
  47877. function getTypeNameForDebugging(type) {
  47878. return type['name'] || typeof type;
  47879. }
  47880. /**
  47881. * @fileoverview added by tsickle
  47882. * @suppress {checkTypes} checked by tsc
  47883. */
  47884. /**
  47885. * @license
  47886. * Copyright Google Inc. All Rights Reserved.
  47887. *
  47888. * Use of this source code is governed by an MIT-style license that can be
  47889. * found in the LICENSE file at https://angular.io/license
  47890. */
  47891. /**
  47892. * Conditionally includes a template based on the value of an `expression`.
  47893. *
  47894. * `ngIf` evaluates the `expression` and then renders the `then` or `else` template in its place
  47895. * when expression is truthy or falsy respectively. Typically the:
  47896. * - `then` template is the inline template of `ngIf` unless bound to a different value.
  47897. * - `else` template is blank unless it is bound.
  47898. *
  47899. * ## Most common usage
  47900. *
  47901. * The most common usage of the `ngIf` directive is to conditionally show the inline template as
  47902. * seen in this example:
  47903. * {\@example common/ngIf/ts/module.ts region='NgIfSimple'}
  47904. *
  47905. * ## Showing an alternative template using `else`
  47906. *
  47907. * If it is necessary to display a template when the `expression` is falsy use the `else` template
  47908. * binding as shown. Note that the `else` binding points to a `<ng-template>` labeled `#elseBlock`.
  47909. * The template can be defined anywhere in the component view but is typically placed right after
  47910. * `ngIf` for readability.
  47911. *
  47912. * {\@example common/ngIf/ts/module.ts region='NgIfElse'}
  47913. *
  47914. * ## Using non-inlined `then` template
  47915. *
  47916. * Usually the `then` template is the inlined template of the `ngIf`, but it can be changed using
  47917. * a binding (just like `else`). Because `then` and `else` are bindings, the template references can
  47918. * change at runtime as shown in this example.
  47919. *
  47920. * {\@example common/ngIf/ts/module.ts region='NgIfThenElse'}
  47921. *
  47922. * ## Storing conditional result in a variable
  47923. *
  47924. * A common pattern is that we need to show a set of properties from the same object. If the
  47925. * object is undefined, then we have to use the safe-traversal-operator `?.` to guard against
  47926. * dereferencing a `null` value. This is especially the case when waiting on async data such as
  47927. * when using the `async` pipe as shown in following example:
  47928. *
  47929. * ```
  47930. * Hello {{ (userStream|async)?.last }}, {{ (userStream|async)?.first }}!
  47931. * ```
  47932. *
  47933. * There are several inefficiencies in the above example:
  47934. * - We create multiple subscriptions on `userStream`. One for each `async` pipe, or two in the
  47935. * example above.
  47936. * - We cannot display an alternative screen while waiting for the data to arrive asynchronously.
  47937. * - We have to use the safe-traversal-operator `?.` to access properties, which is cumbersome.
  47938. * - We have to place the `async` pipe in parenthesis.
  47939. *
  47940. * A better way to do this is to use `ngIf` and store the result of the condition in a local
  47941. * variable as shown in the the example below:
  47942. *
  47943. * {\@example common/ngIf/ts/module.ts region='NgIfAs'}
  47944. *
  47945. * Notice that:
  47946. * - We use only one `async` pipe and hence only one subscription gets created.
  47947. * - `ngIf` stores the result of the `userStream|async` in the local variable `user`.
  47948. * - The local `user` can then be bound repeatedly in a more efficient way.
  47949. * - No need to use the safe-traversal-operator `?.` to access properties as `ngIf` will only
  47950. * display the data if `userStream` returns a value.
  47951. * - We can display an alternative template while waiting for the data.
  47952. *
  47953. * ### Syntax
  47954. *
  47955. * Simple form:
  47956. * - `<div *ngIf="condition">...</div>`
  47957. * - `<ng-template [ngIf]="condition"><div>...</div></ng-template>`
  47958. *
  47959. * Form with an else block:
  47960. * ```
  47961. * <div *ngIf="condition; else elseBlock">...</div>
  47962. * <ng-template #elseBlock>...</ng-template>
  47963. * ```
  47964. *
  47965. * Form with a `then` and `else` block:
  47966. * ```
  47967. * <div *ngIf="condition; then thenBlock else elseBlock"></div>
  47968. * <ng-template #thenBlock>...</ng-template>
  47969. * <ng-template #elseBlock>...</ng-template>
  47970. * ```
  47971. *
  47972. * Form with storing the value locally:
  47973. * ```
  47974. * <div *ngIf="condition as value; else elseBlock">{{value}}</div>
  47975. * <ng-template #elseBlock>...</ng-template>
  47976. * ```
  47977. *
  47978. * \@stable
  47979. */
  47980. var NgIf = /** @class */ (function () {
  47981. function NgIf(_viewContainer, templateRef) {
  47982. this._viewContainer = _viewContainer;
  47983. this._context = new NgIfContext();
  47984. this._thenTemplateRef = null;
  47985. this._elseTemplateRef = null;
  47986. this._thenViewRef = null;
  47987. this._elseViewRef = null;
  47988. this._thenTemplateRef = templateRef;
  47989. }
  47990. Object.defineProperty(NgIf.prototype, "ngIf", {
  47991. set: /**
  47992. * @param {?} condition
  47993. * @return {?}
  47994. */
  47995. function (condition) {
  47996. this._context.$implicit = this._context.ngIf = condition;
  47997. this._updateView();
  47998. },
  47999. enumerable: true,
  48000. configurable: true
  48001. });
  48002. Object.defineProperty(NgIf.prototype, "ngIfThen", {
  48003. set: /**
  48004. * @param {?} templateRef
  48005. * @return {?}
  48006. */
  48007. function (templateRef) {
  48008. this._thenTemplateRef = templateRef;
  48009. this._thenViewRef = null; // clear previous view if any.
  48010. this._updateView();
  48011. },
  48012. enumerable: true,
  48013. configurable: true
  48014. });
  48015. Object.defineProperty(NgIf.prototype, "ngIfElse", {
  48016. set: /**
  48017. * @param {?} templateRef
  48018. * @return {?}
  48019. */
  48020. function (templateRef) {
  48021. this._elseTemplateRef = templateRef;
  48022. this._elseViewRef = null; // clear previous view if any.
  48023. this._updateView();
  48024. },
  48025. enumerable: true,
  48026. configurable: true
  48027. });
  48028. /**
  48029. * @return {?}
  48030. */
  48031. NgIf.prototype._updateView = /**
  48032. * @return {?}
  48033. */
  48034. function () {
  48035. if (this._context.$implicit) {
  48036. if (!this._thenViewRef) {
  48037. this._viewContainer.clear();
  48038. this._elseViewRef = null;
  48039. if (this._thenTemplateRef) {
  48040. this._thenViewRef =
  48041. this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
  48042. }
  48043. }
  48044. }
  48045. else {
  48046. if (!this._elseViewRef) {
  48047. this._viewContainer.clear();
  48048. this._thenViewRef = null;
  48049. if (this._elseTemplateRef) {
  48050. this._elseViewRef =
  48051. this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
  48052. }
  48053. }
  48054. }
  48055. };
  48056. NgIf.decorators = [
  48057. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngIf]' },] },
  48058. ];
  48059. /** @nocollapse */
  48060. NgIf.ctorParameters = function () { return [
  48061. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  48062. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  48063. ]; };
  48064. NgIf.propDecorators = {
  48065. "ngIf": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48066. "ngIfThen": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48067. "ngIfElse": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48068. };
  48069. return NgIf;
  48070. }());
  48071. /**
  48072. * \@stable
  48073. */
  48074. var NgIfContext = /** @class */ (function () {
  48075. function NgIfContext() {
  48076. this.$implicit = null;
  48077. this.ngIf = null;
  48078. }
  48079. return NgIfContext;
  48080. }());
  48081. /**
  48082. * @fileoverview added by tsickle
  48083. * @suppress {checkTypes} checked by tsc
  48084. */
  48085. /**
  48086. * @license
  48087. * Copyright Google Inc. All Rights Reserved.
  48088. *
  48089. * Use of this source code is governed by an MIT-style license that can be
  48090. * found in the LICENSE file at https://angular.io/license
  48091. */
  48092. var SwitchView = /** @class */ (function () {
  48093. function SwitchView(_viewContainerRef, _templateRef) {
  48094. this._viewContainerRef = _viewContainerRef;
  48095. this._templateRef = _templateRef;
  48096. this._created = false;
  48097. }
  48098. /**
  48099. * @return {?}
  48100. */
  48101. SwitchView.prototype.create = /**
  48102. * @return {?}
  48103. */
  48104. function () {
  48105. this._created = true;
  48106. this._viewContainerRef.createEmbeddedView(this._templateRef);
  48107. };
  48108. /**
  48109. * @return {?}
  48110. */
  48111. SwitchView.prototype.destroy = /**
  48112. * @return {?}
  48113. */
  48114. function () {
  48115. this._created = false;
  48116. this._viewContainerRef.clear();
  48117. };
  48118. /**
  48119. * @param {?} created
  48120. * @return {?}
  48121. */
  48122. SwitchView.prototype.enforceState = /**
  48123. * @param {?} created
  48124. * @return {?}
  48125. */
  48126. function (created) {
  48127. if (created && !this._created) {
  48128. this.create();
  48129. }
  48130. else if (!created && this._created) {
  48131. this.destroy();
  48132. }
  48133. };
  48134. return SwitchView;
  48135. }());
  48136. /**
  48137. * \@ngModule CommonModule
  48138. *
  48139. * \@whatItDoes Adds / removes DOM sub-trees when the nest match expressions matches the switch
  48140. * expression.
  48141. *
  48142. * \@howToUse
  48143. * ```
  48144. * <container-element [ngSwitch]="switch_expression">
  48145. * <some-element *ngSwitchCase="match_expression_1">...</some-element>
  48146. * <some-element *ngSwitchCase="match_expression_2">...</some-element>
  48147. * <some-other-element *ngSwitchCase="match_expression_3">...</some-other-element>
  48148. * <ng-container *ngSwitchCase="match_expression_3">
  48149. * <!-- use a ng-container to group multiple root nodes -->
  48150. * <inner-element></inner-element>
  48151. * <inner-other-element></inner-other-element>
  48152. * </ng-container>
  48153. * <some-element *ngSwitchDefault>...</some-element>
  48154. * </container-element>
  48155. * ```
  48156. * \@description
  48157. *
  48158. * `NgSwitch` stamps out nested views when their match expression value matches the value of the
  48159. * switch expression.
  48160. *
  48161. * In other words:
  48162. * - you define a container element (where you place the directive with a switch expression on the
  48163. * `[ngSwitch]="..."` attribute)
  48164. * - you define inner views inside the `NgSwitch` and place a `*ngSwitchCase` attribute on the view
  48165. * root elements.
  48166. *
  48167. * Elements within `NgSwitch` but outside of a `NgSwitchCase` or `NgSwitchDefault` directives will
  48168. * be preserved at the location.
  48169. *
  48170. * The `ngSwitchCase` directive informs the parent `NgSwitch` of which view to display when the
  48171. * expression is evaluated.
  48172. * When no matching expression is found on a `ngSwitchCase` view, the `ngSwitchDefault` view is
  48173. * stamped out.
  48174. *
  48175. * \@stable
  48176. */
  48177. var NgSwitch = /** @class */ (function () {
  48178. function NgSwitch() {
  48179. this._defaultUsed = false;
  48180. this._caseCount = 0;
  48181. this._lastCaseCheckIndex = 0;
  48182. this._lastCasesMatched = false;
  48183. }
  48184. Object.defineProperty(NgSwitch.prototype, "ngSwitch", {
  48185. set: /**
  48186. * @param {?} newValue
  48187. * @return {?}
  48188. */
  48189. function (newValue) {
  48190. this._ngSwitch = newValue;
  48191. if (this._caseCount === 0) {
  48192. this._updateDefaultCases(true);
  48193. }
  48194. },
  48195. enumerable: true,
  48196. configurable: true
  48197. });
  48198. /** @internal */
  48199. /**
  48200. * \@internal
  48201. * @return {?}
  48202. */
  48203. NgSwitch.prototype._addCase = /**
  48204. * \@internal
  48205. * @return {?}
  48206. */
  48207. function () { return this._caseCount++; };
  48208. /** @internal */
  48209. /**
  48210. * \@internal
  48211. * @param {?} view
  48212. * @return {?}
  48213. */
  48214. NgSwitch.prototype._addDefault = /**
  48215. * \@internal
  48216. * @param {?} view
  48217. * @return {?}
  48218. */
  48219. function (view) {
  48220. if (!this._defaultViews) {
  48221. this._defaultViews = [];
  48222. }
  48223. this._defaultViews.push(view);
  48224. };
  48225. /** @internal */
  48226. /**
  48227. * \@internal
  48228. * @param {?} value
  48229. * @return {?}
  48230. */
  48231. NgSwitch.prototype._matchCase = /**
  48232. * \@internal
  48233. * @param {?} value
  48234. * @return {?}
  48235. */
  48236. function (value) {
  48237. var /** @type {?} */ matched = value == this._ngSwitch;
  48238. this._lastCasesMatched = this._lastCasesMatched || matched;
  48239. this._lastCaseCheckIndex++;
  48240. if (this._lastCaseCheckIndex === this._caseCount) {
  48241. this._updateDefaultCases(!this._lastCasesMatched);
  48242. this._lastCaseCheckIndex = 0;
  48243. this._lastCasesMatched = false;
  48244. }
  48245. return matched;
  48246. };
  48247. /**
  48248. * @param {?} useDefault
  48249. * @return {?}
  48250. */
  48251. NgSwitch.prototype._updateDefaultCases = /**
  48252. * @param {?} useDefault
  48253. * @return {?}
  48254. */
  48255. function (useDefault) {
  48256. if (this._defaultViews && useDefault !== this._defaultUsed) {
  48257. this._defaultUsed = useDefault;
  48258. for (var /** @type {?} */ i = 0; i < this._defaultViews.length; i++) {
  48259. var /** @type {?} */ defaultView = this._defaultViews[i];
  48260. defaultView.enforceState(useDefault);
  48261. }
  48262. }
  48263. };
  48264. NgSwitch.decorators = [
  48265. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngSwitch]' },] },
  48266. ];
  48267. /** @nocollapse */
  48268. NgSwitch.ctorParameters = function () { return []; };
  48269. NgSwitch.propDecorators = {
  48270. "ngSwitch": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48271. };
  48272. return NgSwitch;
  48273. }());
  48274. /**
  48275. * \@ngModule CommonModule
  48276. *
  48277. * \@whatItDoes Creates a view that will be added/removed from the parent {\@link NgSwitch} when the
  48278. * given expression evaluate to respectively the same/different value as the switch
  48279. * expression.
  48280. *
  48281. * \@howToUse
  48282. * ```
  48283. * <container-element [ngSwitch]="switch_expression">
  48284. * <some-element *ngSwitchCase="match_expression_1">...</some-element>
  48285. * </container-element>
  48286. * ```
  48287. * \@description
  48288. *
  48289. * Insert the sub-tree when the expression evaluates to the same value as the enclosing switch
  48290. * expression.
  48291. *
  48292. * If multiple match expressions match the switch expression value, all of them are displayed.
  48293. *
  48294. * See {\@link NgSwitch} for more details and example.
  48295. *
  48296. * \@stable
  48297. */
  48298. var NgSwitchCase = /** @class */ (function () {
  48299. function NgSwitchCase(viewContainer, templateRef, ngSwitch) {
  48300. this.ngSwitch = ngSwitch;
  48301. ngSwitch._addCase();
  48302. this._view = new SwitchView(viewContainer, templateRef);
  48303. }
  48304. /**
  48305. * @return {?}
  48306. */
  48307. NgSwitchCase.prototype.ngDoCheck = /**
  48308. * @return {?}
  48309. */
  48310. function () { this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); };
  48311. NgSwitchCase.decorators = [
  48312. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngSwitchCase]' },] },
  48313. ];
  48314. /** @nocollapse */
  48315. NgSwitchCase.ctorParameters = function () { return [
  48316. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  48317. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  48318. { type: NgSwitch, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["w" /* Host */] },] },
  48319. ]; };
  48320. NgSwitchCase.propDecorators = {
  48321. "ngSwitchCase": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48322. };
  48323. return NgSwitchCase;
  48324. }());
  48325. /**
  48326. * \@ngModule CommonModule
  48327. * \@whatItDoes Creates a view that is added to the parent {\@link NgSwitch} when no case expressions
  48328. * match the
  48329. * switch expression.
  48330. *
  48331. * \@howToUse
  48332. * ```
  48333. * <container-element [ngSwitch]="switch_expression">
  48334. * <some-element *ngSwitchCase="match_expression_1">...</some-element>
  48335. * <some-other-element *ngSwitchDefault>...</some-other-element>
  48336. * </container-element>
  48337. * ```
  48338. *
  48339. * \@description
  48340. *
  48341. * Insert the sub-tree when no case expressions evaluate to the same value as the enclosing switch
  48342. * expression.
  48343. *
  48344. * See {\@link NgSwitch} for more details and example.
  48345. *
  48346. * \@stable
  48347. */
  48348. var NgSwitchDefault = /** @class */ (function () {
  48349. function NgSwitchDefault(viewContainer, templateRef, ngSwitch) {
  48350. ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));
  48351. }
  48352. NgSwitchDefault.decorators = [
  48353. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngSwitchDefault]' },] },
  48354. ];
  48355. /** @nocollapse */
  48356. NgSwitchDefault.ctorParameters = function () { return [
  48357. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  48358. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  48359. { type: NgSwitch, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["w" /* Host */] },] },
  48360. ]; };
  48361. return NgSwitchDefault;
  48362. }());
  48363. /**
  48364. * @fileoverview added by tsickle
  48365. * @suppress {checkTypes} checked by tsc
  48366. */
  48367. /**
  48368. * @license
  48369. * Copyright Google Inc. All Rights Reserved.
  48370. *
  48371. * Use of this source code is governed by an MIT-style license that can be
  48372. * found in the LICENSE file at https://angular.io/license
  48373. */
  48374. /**
  48375. * \@ngModule CommonModule
  48376. *
  48377. * \@whatItDoes Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.
  48378. *
  48379. * \@howToUse
  48380. * ```
  48381. * <some-element [ngPlural]="value">
  48382. * <ng-template ngPluralCase="=0">there is nothing</ng-template>
  48383. * <ng-template ngPluralCase="=1">there is one</ng-template>
  48384. * <ng-template ngPluralCase="few">there are a few</ng-template>
  48385. * </some-element>
  48386. * ```
  48387. *
  48388. * \@description
  48389. *
  48390. * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees
  48391. * that match the switch expression's pluralization category.
  48392. *
  48393. * To use this directive you must provide a container element that sets the `[ngPlural]` attribute
  48394. * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their
  48395. * expression:
  48396. * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value
  48397. * matches the switch expression exactly,
  48398. * - otherwise, the view will be treated as a "category match", and will only display if exact
  48399. * value matches aren't found and the value maps to its category for the defined locale.
  48400. *
  48401. * See http://cldr.unicode.org/index/cldr-spec/plural-rules
  48402. *
  48403. * \@experimental
  48404. */
  48405. var NgPlural = /** @class */ (function () {
  48406. function NgPlural(_localization) {
  48407. this._localization = _localization;
  48408. this._caseViews = {};
  48409. }
  48410. Object.defineProperty(NgPlural.prototype, "ngPlural", {
  48411. set: /**
  48412. * @param {?} value
  48413. * @return {?}
  48414. */
  48415. function (value) {
  48416. this._switchValue = value;
  48417. this._updateView();
  48418. },
  48419. enumerable: true,
  48420. configurable: true
  48421. });
  48422. /**
  48423. * @param {?} value
  48424. * @param {?} switchView
  48425. * @return {?}
  48426. */
  48427. NgPlural.prototype.addCase = /**
  48428. * @param {?} value
  48429. * @param {?} switchView
  48430. * @return {?}
  48431. */
  48432. function (value, switchView) { this._caseViews[value] = switchView; };
  48433. /**
  48434. * @return {?}
  48435. */
  48436. NgPlural.prototype._updateView = /**
  48437. * @return {?}
  48438. */
  48439. function () {
  48440. this._clearViews();
  48441. var /** @type {?} */ cases = Object.keys(this._caseViews);
  48442. var /** @type {?} */ key = getPluralCategory(this._switchValue, cases, this._localization);
  48443. this._activateView(this._caseViews[key]);
  48444. };
  48445. /**
  48446. * @return {?}
  48447. */
  48448. NgPlural.prototype._clearViews = /**
  48449. * @return {?}
  48450. */
  48451. function () {
  48452. if (this._activeView)
  48453. this._activeView.destroy();
  48454. };
  48455. /**
  48456. * @param {?} view
  48457. * @return {?}
  48458. */
  48459. NgPlural.prototype._activateView = /**
  48460. * @param {?} view
  48461. * @return {?}
  48462. */
  48463. function (view) {
  48464. if (view) {
  48465. this._activeView = view;
  48466. this._activeView.create();
  48467. }
  48468. };
  48469. NgPlural.decorators = [
  48470. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngPlural]' },] },
  48471. ];
  48472. /** @nocollapse */
  48473. NgPlural.ctorParameters = function () { return [
  48474. { type: NgLocalization, },
  48475. ]; };
  48476. NgPlural.propDecorators = {
  48477. "ngPlural": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48478. };
  48479. return NgPlural;
  48480. }());
  48481. /**
  48482. * \@ngModule CommonModule
  48483. *
  48484. * \@whatItDoes Creates a view that will be added/removed from the parent {\@link NgPlural} when the
  48485. * given expression matches the plural expression according to CLDR rules.
  48486. *
  48487. * \@howToUse
  48488. * ```
  48489. * <some-element [ngPlural]="value">
  48490. * <ng-template ngPluralCase="=0">...</ng-template>
  48491. * <ng-template ngPluralCase="other">...</ng-template>
  48492. * </some-element>
  48493. * ```
  48494. *
  48495. * See {\@link NgPlural} for more details and example.
  48496. *
  48497. * \@experimental
  48498. */
  48499. var NgPluralCase = /** @class */ (function () {
  48500. function NgPluralCase(value, template, viewContainer, ngPlural) {
  48501. this.value = value;
  48502. var /** @type {?} */ isANumber = !isNaN(Number(value));
  48503. ngPlural.addCase(isANumber ? "=" + value : value, new SwitchView(viewContainer, template));
  48504. }
  48505. NgPluralCase.decorators = [
  48506. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngPluralCase]' },] },
  48507. ];
  48508. /** @nocollapse */
  48509. NgPluralCase.ctorParameters = function () { return [
  48510. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['ngPluralCase',] },] },
  48511. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  48512. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  48513. { type: NgPlural, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["w" /* Host */] },] },
  48514. ]; };
  48515. return NgPluralCase;
  48516. }());
  48517. /**
  48518. * @fileoverview added by tsickle
  48519. * @suppress {checkTypes} checked by tsc
  48520. */
  48521. /**
  48522. * @license
  48523. * Copyright Google Inc. All Rights Reserved.
  48524. *
  48525. * Use of this source code is governed by an MIT-style license that can be
  48526. * found in the LICENSE file at https://angular.io/license
  48527. */
  48528. /**
  48529. * \@ngModule CommonModule
  48530. *
  48531. * \@whatItDoes Update an HTML element styles.
  48532. *
  48533. * \@howToUse
  48534. * ```
  48535. * <some-element [ngStyle]="{'font-style': styleExp}">...</some-element>
  48536. *
  48537. * <some-element [ngStyle]="{'max-width.px': widthExp}">...</some-element>
  48538. *
  48539. * <some-element [ngStyle]="objExp">...</some-element>
  48540. * ```
  48541. *
  48542. * \@description
  48543. *
  48544. * The styles are updated according to the value of the expression evaluation:
  48545. * - keys are style names with an optional `.<unit>` suffix (ie 'top.px', 'font-style.em'),
  48546. * - values are the values assigned to those properties (expressed in the given unit).
  48547. *
  48548. * \@stable
  48549. */
  48550. var NgStyle = /** @class */ (function () {
  48551. function NgStyle(_differs, _ngEl, _renderer) {
  48552. this._differs = _differs;
  48553. this._ngEl = _ngEl;
  48554. this._renderer = _renderer;
  48555. }
  48556. Object.defineProperty(NgStyle.prototype, "ngStyle", {
  48557. set: /**
  48558. * @param {?} v
  48559. * @return {?}
  48560. */
  48561. function (v) {
  48562. this._ngStyle = v;
  48563. if (!this._differ && v) {
  48564. this._differ = this._differs.find(v).create();
  48565. }
  48566. },
  48567. enumerable: true,
  48568. configurable: true
  48569. });
  48570. /**
  48571. * @return {?}
  48572. */
  48573. NgStyle.prototype.ngDoCheck = /**
  48574. * @return {?}
  48575. */
  48576. function () {
  48577. if (this._differ) {
  48578. var /** @type {?} */ changes = this._differ.diff(this._ngStyle);
  48579. if (changes) {
  48580. this._applyChanges(changes);
  48581. }
  48582. }
  48583. };
  48584. /**
  48585. * @param {?} changes
  48586. * @return {?}
  48587. */
  48588. NgStyle.prototype._applyChanges = /**
  48589. * @param {?} changes
  48590. * @return {?}
  48591. */
  48592. function (changes) {
  48593. var _this = this;
  48594. changes.forEachRemovedItem(function (record) { return _this._setStyle(record.key, null); });
  48595. changes.forEachAddedItem(function (record) { return _this._setStyle(record.key, record.currentValue); });
  48596. changes.forEachChangedItem(function (record) { return _this._setStyle(record.key, record.currentValue); });
  48597. };
  48598. /**
  48599. * @param {?} nameAndUnit
  48600. * @param {?} value
  48601. * @return {?}
  48602. */
  48603. NgStyle.prototype._setStyle = /**
  48604. * @param {?} nameAndUnit
  48605. * @param {?} value
  48606. * @return {?}
  48607. */
  48608. function (nameAndUnit, value) {
  48609. var _a = nameAndUnit.split('.'), name = _a[0], unit = _a[1];
  48610. value = value != null && unit ? "" + value + unit : value;
  48611. if (value != null) {
  48612. this._renderer.setStyle(this._ngEl.nativeElement, name, /** @type {?} */ (value));
  48613. }
  48614. else {
  48615. this._renderer.removeStyle(this._ngEl.nativeElement, name);
  48616. }
  48617. };
  48618. NgStyle.decorators = [
  48619. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngStyle]' },] },
  48620. ];
  48621. /** @nocollapse */
  48622. NgStyle.ctorParameters = function () { return [
  48623. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["F" /* KeyValueDiffers */], },
  48624. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  48625. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["W" /* Renderer2 */], },
  48626. ]; };
  48627. NgStyle.propDecorators = {
  48628. "ngStyle": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48629. };
  48630. return NgStyle;
  48631. }());
  48632. /**
  48633. * @fileoverview added by tsickle
  48634. * @suppress {checkTypes} checked by tsc
  48635. */
  48636. /**
  48637. * @license
  48638. * Copyright Google Inc. All Rights Reserved.
  48639. *
  48640. * Use of this source code is governed by an MIT-style license that can be
  48641. * found in the LICENSE file at https://angular.io/license
  48642. */
  48643. /**
  48644. * \@ngModule CommonModule
  48645. *
  48646. * \@whatItDoes Inserts an embedded view from a prepared `TemplateRef`
  48647. *
  48648. * \@howToUse
  48649. * ```
  48650. * <ng-container *ngTemplateOutlet="templateRefExp; context: contextExp"></ng-container>
  48651. * ```
  48652. *
  48653. * \@description
  48654. *
  48655. * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.
  48656. * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding
  48657. * by the local template `let` declarations.
  48658. *
  48659. * Note: using the key `$implicit` in the context object will set its value as default.
  48660. *
  48661. * ## Example
  48662. *
  48663. * {\@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}
  48664. *
  48665. * \@stable
  48666. */
  48667. var NgTemplateOutlet = /** @class */ (function () {
  48668. function NgTemplateOutlet(_viewContainerRef) {
  48669. this._viewContainerRef = _viewContainerRef;
  48670. }
  48671. /**
  48672. * @param {?} changes
  48673. * @return {?}
  48674. */
  48675. NgTemplateOutlet.prototype.ngOnChanges = /**
  48676. * @param {?} changes
  48677. * @return {?}
  48678. */
  48679. function (changes) {
  48680. var /** @type {?} */ recreateView = this._shouldRecreateView(changes);
  48681. if (recreateView) {
  48682. if (this._viewRef) {
  48683. this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef));
  48684. }
  48685. if (this.ngTemplateOutlet) {
  48686. this._viewRef = this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext);
  48687. }
  48688. }
  48689. else {
  48690. if (this._viewRef && this.ngTemplateOutletContext) {
  48691. this._updateExistingContext(this.ngTemplateOutletContext);
  48692. }
  48693. }
  48694. };
  48695. /**
  48696. * We need to re-create existing embedded view if:
  48697. * - templateRef has changed
  48698. * - context has changes
  48699. *
  48700. * We mark context object as changed when the corresponding object
  48701. * shape changes (new properties are added or existing properties are removed).
  48702. * In other words we consider context with the same properties as "the same" even
  48703. * if object reference changes (see https://github.com/angular/angular/issues/13407).
  48704. * @param {?} changes
  48705. * @return {?}
  48706. */
  48707. NgTemplateOutlet.prototype._shouldRecreateView = /**
  48708. * We need to re-create existing embedded view if:
  48709. * - templateRef has changed
  48710. * - context has changes
  48711. *
  48712. * We mark context object as changed when the corresponding object
  48713. * shape changes (new properties are added or existing properties are removed).
  48714. * In other words we consider context with the same properties as "the same" even
  48715. * if object reference changes (see https://github.com/angular/angular/issues/13407).
  48716. * @param {?} changes
  48717. * @return {?}
  48718. */
  48719. function (changes) {
  48720. var /** @type {?} */ ctxChange = changes['ngTemplateOutletContext'];
  48721. return !!changes['ngTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));
  48722. };
  48723. /**
  48724. * @param {?} ctxChange
  48725. * @return {?}
  48726. */
  48727. NgTemplateOutlet.prototype._hasContextShapeChanged = /**
  48728. * @param {?} ctxChange
  48729. * @return {?}
  48730. */
  48731. function (ctxChange) {
  48732. var /** @type {?} */ prevCtxKeys = Object.keys(ctxChange.previousValue || {});
  48733. var /** @type {?} */ currCtxKeys = Object.keys(ctxChange.currentValue || {});
  48734. if (prevCtxKeys.length === currCtxKeys.length) {
  48735. for (var _i = 0, currCtxKeys_1 = currCtxKeys; _i < currCtxKeys_1.length; _i++) {
  48736. var propName = currCtxKeys_1[_i];
  48737. if (prevCtxKeys.indexOf(propName) === -1) {
  48738. return true;
  48739. }
  48740. }
  48741. return false;
  48742. }
  48743. else {
  48744. return true;
  48745. }
  48746. };
  48747. /**
  48748. * @param {?} ctx
  48749. * @return {?}
  48750. */
  48751. NgTemplateOutlet.prototype._updateExistingContext = /**
  48752. * @param {?} ctx
  48753. * @return {?}
  48754. */
  48755. function (ctx) {
  48756. for (var _i = 0, _a = Object.keys(ctx); _i < _a.length; _i++) {
  48757. var propName = _a[_i];
  48758. (/** @type {?} */ (this._viewRef.context))[propName] = (/** @type {?} */ (this.ngTemplateOutletContext))[propName];
  48759. }
  48760. };
  48761. NgTemplateOutlet.decorators = [
  48762. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[ngTemplateOutlet]' },] },
  48763. ];
  48764. /** @nocollapse */
  48765. NgTemplateOutlet.ctorParameters = function () { return [
  48766. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  48767. ]; };
  48768. NgTemplateOutlet.propDecorators = {
  48769. "ngTemplateOutletContext": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48770. "ngTemplateOutlet": [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  48771. };
  48772. return NgTemplateOutlet;
  48773. }());
  48774. /**
  48775. * @fileoverview added by tsickle
  48776. * @suppress {checkTypes} checked by tsc
  48777. */
  48778. /**
  48779. * @license
  48780. * Copyright Google Inc. All Rights Reserved.
  48781. *
  48782. * Use of this source code is governed by an MIT-style license that can be
  48783. * found in the LICENSE file at https://angular.io/license
  48784. */
  48785. /**
  48786. * A collection of Angular directives that are likely to be used in each and every Angular
  48787. * application.
  48788. */
  48789. var COMMON_DIRECTIVES = [
  48790. NgClass,
  48791. NgComponentOutlet,
  48792. NgForOf,
  48793. NgIf,
  48794. NgTemplateOutlet,
  48795. NgStyle,
  48796. NgSwitch,
  48797. NgSwitchCase,
  48798. NgSwitchDefault,
  48799. NgPlural,
  48800. NgPluralCase,
  48801. ];
  48802. /**
  48803. * @fileoverview added by tsickle
  48804. * @suppress {checkTypes} checked by tsc
  48805. */
  48806. /**
  48807. * @license
  48808. * Copyright Google Inc. All Rights Reserved.
  48809. *
  48810. * Use of this source code is governed by an MIT-style license that can be
  48811. * found in the LICENSE file at https://angular.io/license
  48812. */
  48813. var NAMED_FORMATS = {};
  48814. var DATE_FORMATS_SPLIT = /((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;
  48815. /** @enum {number} */
  48816. var ZoneWidth = {
  48817. Short: 0,
  48818. ShortGMT: 1,
  48819. Long: 2,
  48820. Extended: 3,
  48821. };
  48822. ZoneWidth[ZoneWidth.Short] = "Short";
  48823. ZoneWidth[ZoneWidth.ShortGMT] = "ShortGMT";
  48824. ZoneWidth[ZoneWidth.Long] = "Long";
  48825. ZoneWidth[ZoneWidth.Extended] = "Extended";
  48826. /** @enum {number} */
  48827. var DateType = {
  48828. FullYear: 0,
  48829. Month: 1,
  48830. Date: 2,
  48831. Hours: 3,
  48832. Minutes: 4,
  48833. Seconds: 5,
  48834. Milliseconds: 6,
  48835. Day: 7,
  48836. };
  48837. DateType[DateType.FullYear] = "FullYear";
  48838. DateType[DateType.Month] = "Month";
  48839. DateType[DateType.Date] = "Date";
  48840. DateType[DateType.Hours] = "Hours";
  48841. DateType[DateType.Minutes] = "Minutes";
  48842. DateType[DateType.Seconds] = "Seconds";
  48843. DateType[DateType.Milliseconds] = "Milliseconds";
  48844. DateType[DateType.Day] = "Day";
  48845. /** @enum {number} */
  48846. var TranslationType = {
  48847. DayPeriods: 0,
  48848. Days: 1,
  48849. Months: 2,
  48850. Eras: 3,
  48851. };
  48852. TranslationType[TranslationType.DayPeriods] = "DayPeriods";
  48853. TranslationType[TranslationType.Days] = "Days";
  48854. TranslationType[TranslationType.Months] = "Months";
  48855. TranslationType[TranslationType.Eras] = "Eras";
  48856. /**
  48857. * Transforms a date to a locale string based on a pattern and a timezone
  48858. *
  48859. * \@internal
  48860. * @param {?} date
  48861. * @param {?} format
  48862. * @param {?} locale
  48863. * @param {?=} timezone
  48864. * @return {?}
  48865. */
  48866. function formatDate(date, format, locale, timezone) {
  48867. var /** @type {?} */ namedFormat = getNamedFormat(locale, format);
  48868. format = namedFormat || format;
  48869. var /** @type {?} */ parts = [];
  48870. var /** @type {?} */ match;
  48871. while (format) {
  48872. match = DATE_FORMATS_SPLIT.exec(format);
  48873. if (match) {
  48874. parts = parts.concat(match.slice(1));
  48875. var /** @type {?} */ part = parts.pop();
  48876. if (!part) {
  48877. break;
  48878. }
  48879. format = part;
  48880. }
  48881. else {
  48882. parts.push(format);
  48883. break;
  48884. }
  48885. }
  48886. var /** @type {?} */ dateTimezoneOffset = date.getTimezoneOffset();
  48887. if (timezone) {
  48888. dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
  48889. date = convertTimezoneToLocal(date, timezone, true);
  48890. }
  48891. var /** @type {?} */ text = '';
  48892. parts.forEach(function (value) {
  48893. var /** @type {?} */ dateFormatter = getDateFormatter(value);
  48894. text += dateFormatter ?
  48895. dateFormatter(date, locale, dateTimezoneOffset) :
  48896. value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\'');
  48897. });
  48898. return text;
  48899. }
  48900. /**
  48901. * @param {?} locale
  48902. * @param {?} format
  48903. * @return {?}
  48904. */
  48905. function getNamedFormat(locale, format) {
  48906. var /** @type {?} */ localeId = getLocaleId(locale);
  48907. NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};
  48908. if (NAMED_FORMATS[localeId][format]) {
  48909. return NAMED_FORMATS[localeId][format];
  48910. }
  48911. var /** @type {?} */ formatValue = '';
  48912. switch (format) {
  48913. case 'shortDate':
  48914. formatValue = getLocaleDateFormat(locale, FormatWidth.Short);
  48915. break;
  48916. case 'mediumDate':
  48917. formatValue = getLocaleDateFormat(locale, FormatWidth.Medium);
  48918. break;
  48919. case 'longDate':
  48920. formatValue = getLocaleDateFormat(locale, FormatWidth.Long);
  48921. break;
  48922. case 'fullDate':
  48923. formatValue = getLocaleDateFormat(locale, FormatWidth.Full);
  48924. break;
  48925. case 'shortTime':
  48926. formatValue = getLocaleTimeFormat(locale, FormatWidth.Short);
  48927. break;
  48928. case 'mediumTime':
  48929. formatValue = getLocaleTimeFormat(locale, FormatWidth.Medium);
  48930. break;
  48931. case 'longTime':
  48932. formatValue = getLocaleTimeFormat(locale, FormatWidth.Long);
  48933. break;
  48934. case 'fullTime':
  48935. formatValue = getLocaleTimeFormat(locale, FormatWidth.Full);
  48936. break;
  48937. case 'short':
  48938. var /** @type {?} */ shortTime = getNamedFormat(locale, 'shortTime');
  48939. var /** @type {?} */ shortDate = getNamedFormat(locale, 'shortDate');
  48940. formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);
  48941. break;
  48942. case 'medium':
  48943. var /** @type {?} */ mediumTime = getNamedFormat(locale, 'mediumTime');
  48944. var /** @type {?} */ mediumDate = getNamedFormat(locale, 'mediumDate');
  48945. formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);
  48946. break;
  48947. case 'long':
  48948. var /** @type {?} */ longTime = getNamedFormat(locale, 'longTime');
  48949. var /** @type {?} */ longDate = getNamedFormat(locale, 'longDate');
  48950. formatValue =
  48951. formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);
  48952. break;
  48953. case 'full':
  48954. var /** @type {?} */ fullTime = getNamedFormat(locale, 'fullTime');
  48955. var /** @type {?} */ fullDate = getNamedFormat(locale, 'fullDate');
  48956. formatValue =
  48957. formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);
  48958. break;
  48959. }
  48960. if (formatValue) {
  48961. NAMED_FORMATS[localeId][format] = formatValue;
  48962. }
  48963. return formatValue;
  48964. }
  48965. /**
  48966. * @param {?} str
  48967. * @param {?} opt_values
  48968. * @return {?}
  48969. */
  48970. function formatDateTime(str, opt_values) {
  48971. if (opt_values) {
  48972. str = str.replace(/\{([^}]+)}/g, function (match, key) {
  48973. return (opt_values != null && key in opt_values) ? opt_values[key] : match;
  48974. });
  48975. }
  48976. return str;
  48977. }
  48978. /**
  48979. * @param {?} num
  48980. * @param {?} digits
  48981. * @param {?=} minusSign
  48982. * @param {?=} trim
  48983. * @param {?=} negWrap
  48984. * @return {?}
  48985. */
  48986. function padNumber(num, digits, minusSign, trim, negWrap) {
  48987. if (minusSign === void 0) { minusSign = '-'; }
  48988. var /** @type {?} */ neg = '';
  48989. if (num < 0 || (negWrap && num <= 0)) {
  48990. if (negWrap) {
  48991. num = -num + 1;
  48992. }
  48993. else {
  48994. num = -num;
  48995. neg = minusSign;
  48996. }
  48997. }
  48998. var /** @type {?} */ strNum = '' + num;
  48999. while (strNum.length < digits)
  49000. strNum = '0' + strNum;
  49001. if (trim) {
  49002. strNum = strNum.substr(strNum.length - digits);
  49003. }
  49004. return neg + strNum;
  49005. }
  49006. /**
  49007. * Returns a date formatter that transforms a date into its locale digit representation
  49008. * @param {?} name
  49009. * @param {?} size
  49010. * @param {?=} offset
  49011. * @param {?=} trim
  49012. * @param {?=} negWrap
  49013. * @return {?}
  49014. */
  49015. function dateGetter(name, size, offset, trim, negWrap) {
  49016. if (offset === void 0) { offset = 0; }
  49017. if (trim === void 0) { trim = false; }
  49018. if (negWrap === void 0) { negWrap = false; }
  49019. return function (date, locale) {
  49020. var /** @type {?} */ part = getDatePart(name, date, size);
  49021. if (offset > 0 || part > -offset) {
  49022. part += offset;
  49023. }
  49024. if (name === DateType.Hours && part === 0 && offset === -12) {
  49025. part = 12;
  49026. }
  49027. return padNumber(part, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim, negWrap);
  49028. };
  49029. }
  49030. /**
  49031. * @param {?} name
  49032. * @param {?} date
  49033. * @param {?} size
  49034. * @return {?}
  49035. */
  49036. function getDatePart(name, date, size) {
  49037. switch (name) {
  49038. case DateType.FullYear:
  49039. return date.getFullYear();
  49040. case DateType.Month:
  49041. return date.getMonth();
  49042. case DateType.Date:
  49043. return date.getDate();
  49044. case DateType.Hours:
  49045. return date.getHours();
  49046. case DateType.Minutes:
  49047. return date.getMinutes();
  49048. case DateType.Seconds:
  49049. return date.getSeconds();
  49050. case DateType.Milliseconds:
  49051. var /** @type {?} */ div = size === 1 ? 100 : (size === 2 ? 10 : 1);
  49052. return Math.round(date.getMilliseconds() / div);
  49053. case DateType.Day:
  49054. return date.getDay();
  49055. default:
  49056. throw new Error("Unknown DateType value \"" + name + "\".");
  49057. }
  49058. }
  49059. /**
  49060. * Returns a date formatter that transforms a date into its locale string representation
  49061. * @param {?} name
  49062. * @param {?} width
  49063. * @param {?=} form
  49064. * @param {?=} extended
  49065. * @return {?}
  49066. */
  49067. function dateStrGetter(name, width, form, extended) {
  49068. if (form === void 0) { form = FormStyle.Format; }
  49069. if (extended === void 0) { extended = false; }
  49070. return function (date, locale) {
  49071. return getDateTranslation(date, locale, name, width, form, extended);
  49072. };
  49073. }
  49074. /**
  49075. * Returns the locale translation of a date for a given form, type and width
  49076. * @param {?} date
  49077. * @param {?} locale
  49078. * @param {?} name
  49079. * @param {?} width
  49080. * @param {?} form
  49081. * @param {?} extended
  49082. * @return {?}
  49083. */
  49084. function getDateTranslation(date, locale, name, width, form, extended) {
  49085. switch (name) {
  49086. case TranslationType.Months:
  49087. return getLocaleMonthNames(locale, form, width)[date.getMonth()];
  49088. case TranslationType.Days:
  49089. return getLocaleDayNames(locale, form, width)[date.getDay()];
  49090. case TranslationType.DayPeriods:
  49091. var /** @type {?} */ currentHours_1 = date.getHours();
  49092. var /** @type {?} */ currentMinutes_1 = date.getMinutes();
  49093. if (extended) {
  49094. var /** @type {?} */ rules = getLocaleExtraDayPeriodRules(locale);
  49095. var /** @type {?} */ dayPeriods_1 = getLocaleExtraDayPeriods(locale, form, width);
  49096. var /** @type {?} */ result_1;
  49097. rules.forEach(function (rule, index) {
  49098. if (Array.isArray(rule)) {
  49099. // morning, afternoon, evening, night
  49100. var _a = rule[0], hoursFrom = _a.hours, minutesFrom = _a.minutes;
  49101. var _b = rule[1], hoursTo = _b.hours, minutesTo = _b.minutes;
  49102. if (currentHours_1 >= hoursFrom && currentMinutes_1 >= minutesFrom &&
  49103. (currentHours_1 < hoursTo ||
  49104. (currentHours_1 === hoursTo && currentMinutes_1 < minutesTo))) {
  49105. result_1 = dayPeriods_1[index];
  49106. }
  49107. }
  49108. else {
  49109. // noon or midnight
  49110. var hours = rule.hours, minutes = rule.minutes;
  49111. if (hours === currentHours_1 && minutes === currentMinutes_1) {
  49112. result_1 = dayPeriods_1[index];
  49113. }
  49114. }
  49115. });
  49116. if (result_1) {
  49117. return result_1;
  49118. }
  49119. }
  49120. // if no rules for the day periods, we use am/pm by default
  49121. return getLocaleDayPeriods(locale, form, /** @type {?} */ (width))[currentHours_1 < 12 ? 0 : 1];
  49122. case TranslationType.Eras:
  49123. return getLocaleEraNames(locale, /** @type {?} */ (width))[date.getFullYear() <= 0 ? 0 : 1];
  49124. default:
  49125. // This default case is not needed by TypeScript compiler, as the switch is exhaustive.
  49126. // However Closure Compiler does not understand that and reports an error in typed mode.
  49127. // The `throw new Error` below works around the problem, and the unexpected: never variable
  49128. // makes sure tsc still checks this code is unreachable.
  49129. var /** @type {?} */ unexpected = name;
  49130. throw new Error("unexpected translation type " + unexpected);
  49131. }
  49132. }
  49133. /**
  49134. * Returns a date formatter that transforms a date and an offset into a timezone with ISO8601 or
  49135. * GMT format depending on the width (eg: short = +0430, short:GMT = GMT+4, long = GMT+04:30,
  49136. * extended = +04:30)
  49137. * @param {?} width
  49138. * @return {?}
  49139. */
  49140. function timeZoneGetter(width) {
  49141. return function (date, locale, offset) {
  49142. var /** @type {?} */ zone = -1 * offset;
  49143. var /** @type {?} */ minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);
  49144. var /** @type {?} */ hours = zone > 0 ? Math.floor(zone / 60) : Math.ceil(zone / 60);
  49145. switch (width) {
  49146. case ZoneWidth.Short:
  49147. return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) +
  49148. padNumber(Math.abs(zone % 60), 2, minusSign);
  49149. case ZoneWidth.ShortGMT:
  49150. return 'GMT' + ((zone >= 0) ? '+' : '') + padNumber(hours, 1, minusSign);
  49151. case ZoneWidth.Long:
  49152. return 'GMT' + ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +
  49153. padNumber(Math.abs(zone % 60), 2, minusSign);
  49154. case ZoneWidth.Extended:
  49155. if (offset === 0) {
  49156. return 'Z';
  49157. }
  49158. else {
  49159. return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +
  49160. padNumber(Math.abs(zone % 60), 2, minusSign);
  49161. }
  49162. default:
  49163. throw new Error("Unknown zone width \"" + width + "\"");
  49164. }
  49165. };
  49166. }
  49167. var JANUARY = 0;
  49168. var THURSDAY = 4;
  49169. /**
  49170. * @param {?} year
  49171. * @return {?}
  49172. */
  49173. function getFirstThursdayOfYear(year) {
  49174. var /** @type {?} */ firstDayOfYear = (new Date(year, JANUARY, 1)).getDay();
  49175. return new Date(year, 0, 1 + ((firstDayOfYear <= THURSDAY) ? THURSDAY : THURSDAY + 7) - firstDayOfYear);
  49176. }
  49177. /**
  49178. * @param {?} datetime
  49179. * @return {?}
  49180. */
  49181. function getThursdayThisWeek(datetime) {
  49182. return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + (THURSDAY - datetime.getDay()));
  49183. }
  49184. /**
  49185. * @param {?} size
  49186. * @param {?=} monthBased
  49187. * @return {?}
  49188. */
  49189. function weekGetter(size, monthBased) {
  49190. if (monthBased === void 0) { monthBased = false; }
  49191. return function (date, locale) {
  49192. var /** @type {?} */ result;
  49193. if (monthBased) {
  49194. var /** @type {?} */ nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;
  49195. var /** @type {?} */ today = date.getDate();
  49196. result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);
  49197. }
  49198. else {
  49199. var /** @type {?} */ firstThurs = getFirstThursdayOfYear(date.getFullYear());
  49200. var /** @type {?} */ thisThurs = getThursdayThisWeek(date);
  49201. var /** @type {?} */ diff = thisThurs.getTime() - firstThurs.getTime();
  49202. result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
  49203. }
  49204. return padNumber(result, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
  49205. };
  49206. }
  49207. var DATE_FORMATS = {};
  49208. /**
  49209. * @param {?} format
  49210. * @return {?}
  49211. */
  49212. function getDateFormatter(format) {
  49213. if (DATE_FORMATS[format]) {
  49214. return DATE_FORMATS[format];
  49215. }
  49216. var /** @type {?} */ formatter;
  49217. switch (format) {
  49218. // Era name (AD/BC)
  49219. case 'G':
  49220. case 'GG':
  49221. case 'GGG':
  49222. formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Abbreviated);
  49223. break;
  49224. case 'GGGG':
  49225. formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Wide);
  49226. break;
  49227. case 'GGGGG':
  49228. formatter = dateStrGetter(TranslationType.Eras, TranslationWidth.Narrow);
  49229. break;
  49230. // 1 digit representation of the year, e.g. (AD 1 => 1, AD 199 => 199)
  49231. case 'y':
  49232. formatter = dateGetter(DateType.FullYear, 1, 0, false, true);
  49233. break;
  49234. // 2 digit representation of the year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
  49235. case 'yy':
  49236. formatter = dateGetter(DateType.FullYear, 2, 0, true, true);
  49237. break;
  49238. // 3 digit representation of the year, padded (000-999). (e.g. AD 2001 => 01, AD 2010 => 10)
  49239. case 'yyy':
  49240. formatter = dateGetter(DateType.FullYear, 3, 0, false, true);
  49241. break;
  49242. // 4 digit representation of the year (e.g. AD 1 => 0001, AD 2010 => 2010)
  49243. case 'yyyy':
  49244. formatter = dateGetter(DateType.FullYear, 4, 0, false, true);
  49245. break;
  49246. // Month of the year (1-12), numeric
  49247. case 'M':
  49248. case 'L':
  49249. formatter = dateGetter(DateType.Month, 1, 1);
  49250. break;
  49251. case 'MM':
  49252. case 'LL':
  49253. formatter = dateGetter(DateType.Month, 2, 1);
  49254. break;
  49255. // Month of the year (January, ...), string, format
  49256. case 'MMM':
  49257. formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated);
  49258. break;
  49259. case 'MMMM':
  49260. formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Wide);
  49261. break;
  49262. case 'MMMMM':
  49263. formatter = dateStrGetter(TranslationType.Months, TranslationWidth.Narrow);
  49264. break;
  49265. // Month of the year (January, ...), string, standalone
  49266. case 'LLL':
  49267. formatter =
  49268. dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);
  49269. break;
  49270. case 'LLLL':
  49271. formatter =
  49272. dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);
  49273. break;
  49274. case 'LLLLL':
  49275. formatter =
  49276. dateStrGetter(TranslationType.Months, TranslationWidth.Narrow, FormStyle.Standalone);
  49277. break;
  49278. // Week of the year (1, ... 52)
  49279. case 'w':
  49280. formatter = weekGetter(1);
  49281. break;
  49282. case 'ww':
  49283. formatter = weekGetter(2);
  49284. break;
  49285. // Week of the month (1, ...)
  49286. case 'W':
  49287. formatter = weekGetter(1, true);
  49288. break;
  49289. // Day of the month (1-31)
  49290. case 'd':
  49291. formatter = dateGetter(DateType.Date, 1);
  49292. break;
  49293. case 'dd':
  49294. formatter = dateGetter(DateType.Date, 2);
  49295. break;
  49296. // Day of the Week
  49297. case 'E':
  49298. case 'EE':
  49299. case 'EEE':
  49300. formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Abbreviated);
  49301. break;
  49302. case 'EEEE':
  49303. formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Wide);
  49304. break;
  49305. case 'EEEEE':
  49306. formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Narrow);
  49307. break;
  49308. case 'EEEEEE':
  49309. formatter = dateStrGetter(TranslationType.Days, TranslationWidth.Short);
  49310. break;
  49311. // Generic period of the day (am-pm)
  49312. case 'a':
  49313. case 'aa':
  49314. case 'aaa':
  49315. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated);
  49316. break;
  49317. case 'aaaa':
  49318. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide);
  49319. break;
  49320. case 'aaaaa':
  49321. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow);
  49322. break;
  49323. // Extended period of the day (midnight, at night, ...), standalone
  49324. case 'b':
  49325. case 'bb':
  49326. case 'bbb':
  49327. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Standalone, true);
  49328. break;
  49329. case 'bbbb':
  49330. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Standalone, true);
  49331. break;
  49332. case 'bbbbb':
  49333. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Standalone, true);
  49334. break;
  49335. // Extended period of the day (midnight, night, ...), standalone
  49336. case 'B':
  49337. case 'BB':
  49338. case 'BBB':
  49339. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Abbreviated, FormStyle.Format, true);
  49340. break;
  49341. case 'BBBB':
  49342. formatter =
  49343. dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Wide, FormStyle.Format, true);
  49344. break;
  49345. case 'BBBBB':
  49346. formatter = dateStrGetter(TranslationType.DayPeriods, TranslationWidth.Narrow, FormStyle.Format, true);
  49347. break;
  49348. // Hour in AM/PM, (1-12)
  49349. case 'h':
  49350. formatter = dateGetter(DateType.Hours, 1, -12);
  49351. break;
  49352. case 'hh':
  49353. formatter = dateGetter(DateType.Hours, 2, -12);
  49354. break;
  49355. // Hour of the day (0-23)
  49356. case 'H':
  49357. formatter = dateGetter(DateType.Hours, 1);
  49358. break;
  49359. // Hour in day, padded (00-23)
  49360. case 'HH':
  49361. formatter = dateGetter(DateType.Hours, 2);
  49362. break;
  49363. // Minute of the hour (0-59)
  49364. case 'm':
  49365. formatter = dateGetter(DateType.Minutes, 1);
  49366. break;
  49367. case 'mm':
  49368. formatter = dateGetter(DateType.Minutes, 2);
  49369. break;
  49370. // Second of the minute (0-59)
  49371. case 's':
  49372. formatter = dateGetter(DateType.Seconds, 1);
  49373. break;
  49374. case 'ss':
  49375. formatter = dateGetter(DateType.Seconds, 2);
  49376. break;
  49377. // Fractional second padded (0-9)
  49378. case 'S':
  49379. formatter = dateGetter(DateType.Milliseconds, 1);
  49380. break;
  49381. case 'SS':
  49382. formatter = dateGetter(DateType.Milliseconds, 2);
  49383. break;
  49384. // = millisecond
  49385. case 'SSS':
  49386. formatter = dateGetter(DateType.Milliseconds, 3);
  49387. break;
  49388. // Timezone ISO8601 short format (-0430)
  49389. case 'Z':
  49390. case 'ZZ':
  49391. case 'ZZZ':
  49392. formatter = timeZoneGetter(ZoneWidth.Short);
  49393. break;
  49394. // Timezone ISO8601 extended format (-04:30)
  49395. case 'ZZZZZ':
  49396. formatter = timeZoneGetter(ZoneWidth.Extended);
  49397. break;
  49398. // Timezone GMT short format (GMT+4)
  49399. case 'O':
  49400. case 'OO':
  49401. case 'OOO':
  49402. // Should be location, but fallback to format O instead because we don't have the data yet
  49403. case 'z':
  49404. case 'zz':
  49405. case 'zzz':
  49406. formatter = timeZoneGetter(ZoneWidth.ShortGMT);
  49407. break;
  49408. // Timezone GMT long format (GMT+0430)
  49409. case 'OOOO':
  49410. case 'ZZZZ':
  49411. // Should be location, but fallback to format O instead because we don't have the data yet
  49412. case 'zzzz':
  49413. formatter = timeZoneGetter(ZoneWidth.Long);
  49414. break;
  49415. default:
  49416. return null;
  49417. }
  49418. DATE_FORMATS[format] = formatter;
  49419. return formatter;
  49420. }
  49421. /**
  49422. * @param {?} timezone
  49423. * @param {?} fallback
  49424. * @return {?}
  49425. */
  49426. function timezoneToOffset(timezone, fallback) {
  49427. // Support: IE 9-11 only, Edge 13-15+
  49428. // IE/Edge do not "understand" colon (`:`) in timezone
  49429. timezone = timezone.replace(/:/g, '');
  49430. var /** @type {?} */ requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
  49431. return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
  49432. }
  49433. /**
  49434. * @param {?} date
  49435. * @param {?} minutes
  49436. * @return {?}
  49437. */
  49438. function addDateMinutes(date, minutes) {
  49439. date = new Date(date.getTime());
  49440. date.setMinutes(date.getMinutes() + minutes);
  49441. return date;
  49442. }
  49443. /**
  49444. * @param {?} date
  49445. * @param {?} timezone
  49446. * @param {?} reverse
  49447. * @return {?}
  49448. */
  49449. function convertTimezoneToLocal(date, timezone, reverse) {
  49450. var /** @type {?} */ reverseValue = reverse ? -1 : 1;
  49451. var /** @type {?} */ dateTimezoneOffset = date.getTimezoneOffset();
  49452. var /** @type {?} */ timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
  49453. return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));
  49454. }
  49455. /**
  49456. * @fileoverview added by tsickle
  49457. * @suppress {checkTypes} checked by tsc
  49458. */
  49459. /**
  49460. * @license
  49461. * Copyright Google Inc. All Rights Reserved.
  49462. *
  49463. * Use of this source code is governed by an MIT-style license that can be
  49464. * found in the LICENSE file at https://angular.io/license
  49465. */
  49466. /**
  49467. * @param {?} type
  49468. * @param {?} value
  49469. * @return {?}
  49470. */
  49471. function invalidPipeArgumentError(type, value) {
  49472. return Error("InvalidPipeArgument: '" + value + "' for pipe '" + Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_48" /* ɵstringify */])(type) + "'");
  49473. }
  49474. /**
  49475. * @fileoverview added by tsickle
  49476. * @suppress {checkTypes} checked by tsc
  49477. */
  49478. /**
  49479. * @license
  49480. * Copyright Google Inc. All Rights Reserved.
  49481. *
  49482. * Use of this source code is governed by an MIT-style license that can be
  49483. * found in the LICENSE file at https://angular.io/license
  49484. */
  49485. var ISO8601_DATE_REGEX = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
  49486. /**
  49487. * \@ngModule CommonModule
  49488. * \@whatItDoes Formats a date according to locale rules.
  49489. * \@howToUse `date_expression | date[:format[:timezone[:locale]]]`
  49490. * \@description
  49491. *
  49492. * Where:
  49493. * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string
  49494. * (https://www.w3.org/TR/NOTE-datetime).
  49495. * - `format` indicates which date/time components to include. The format can be predefined as
  49496. * shown below (all examples are given for `en-US`) or custom as shown in the table.
  49497. * - `'short'`: equivalent to `'M/d/yy, h:mm a'` (e.g. `6/15/15, 9:03 AM`)
  49498. * - `'medium'`: equivalent to `'MMM d, y, h:mm:ss a'` (e.g. `Jun 15, 2015, 9:03:01 AM`)
  49499. * - `'long'`: equivalent to `'MMMM d, y, h:mm:ss a z'` (e.g. `June 15, 2015 at 9:03:01 AM GMT+1`)
  49500. * - `'full'`: equivalent to `'EEEE, MMMM d, y, h:mm:ss a zzzz'` (e.g. `Monday, June 15, 2015 at
  49501. * 9:03:01 AM GMT+01:00`)
  49502. * - `'shortDate'`: equivalent to `'M/d/yy'` (e.g. `6/15/15`)
  49503. * - `'mediumDate'`: equivalent to `'MMM d, y'` (e.g. `Jun 15, 2015`)
  49504. * - `'longDate'`: equivalent to `'MMMM d, y'` (e.g. `June 15, 2015`)
  49505. * - `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` (e.g. `Monday, June 15, 2015`)
  49506. * - `'shortTime'`: equivalent to `'h:mm a'` (e.g. `9:03 AM`)
  49507. * - `'mediumTime'`: equivalent to `'h:mm:ss a'` (e.g. `9:03:01 AM`)
  49508. * - `'longTime'`: equivalent to `'h:mm:ss a z'` (e.g. `9:03:01 AM GMT+1`)
  49509. * - `'fullTime'`: equivalent to `'h:mm:ss a zzzz'` (e.g. `9:03:01 AM GMT+01:00`)
  49510. * - `timezone` to be used for formatting. It understands UTC/GMT and the continental US time zone
  49511. * abbreviations, but for general use, use a time zone offset, for example,
  49512. * `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)
  49513. * If not specified, the local system timezone of the end-user's browser will be used.
  49514. * - `locale` is a `string` defining the locale to use (uses the current {\@link LOCALE_ID} by
  49515. * default)
  49516. *
  49517. *
  49518. * | Field Type | Format | Description | Example Value |
  49519. * |--------------------|-------------|---------------------------------------------------------------|------------------------------------------------------------|
  49520. * | Era | G, GG & GGG | Abbreviated | AD |
  49521. * | | GGGG | Wide | Anno Domini |
  49522. * | | GGGGG | Narrow | A |
  49523. * | Year | y | Numeric: minimum digits | 2, 20, 201, 2017, 20173 |
  49524. * | | yy | Numeric: 2 digits + zero padded | 02, 20, 01, 17, 73 |
  49525. * | | yyy | Numeric: 3 digits + zero padded | 002, 020, 201, 2017, 20173 |
  49526. * | | yyyy | Numeric: 4 digits or more + zero padded | 0002, 0020, 0201, 2017, 20173 |
  49527. * | Month | M | Numeric: 1 digit | 9, 12 |
  49528. * | | MM | Numeric: 2 digits + zero padded | 09, 12 |
  49529. * | | MMM | Abbreviated | Sep |
  49530. * | | MMMM | Wide | September |
  49531. * | | MMMMM | Narrow | S |
  49532. * | Month standalone | L | Numeric: 1 digit | 9, 12 |
  49533. * | | LL | Numeric: 2 digits + zero padded | 09, 12 |
  49534. * | | LLL | Abbreviated | Sep |
  49535. * | | LLLL | Wide | September |
  49536. * | | LLLLL | Narrow | S |
  49537. * | Week of year | w | Numeric: minimum digits | 1... 53 |
  49538. * | | ww | Numeric: 2 digits + zero padded | 01... 53 |
  49539. * | Week of month | W | Numeric: 1 digit | 1... 5 |
  49540. * | Day of month | d | Numeric: minimum digits | 1 |
  49541. * | | dd | Numeric: 2 digits + zero padded | 01 |
  49542. * | Week day | E, EE & EEE | Abbreviated | Tue |
  49543. * | | EEEE | Wide | Tuesday |
  49544. * | | EEEEE | Narrow | T |
  49545. * | | EEEEEE | Short | Tu |
  49546. * | Period | a, aa & aaa | Abbreviated | am/pm or AM/PM |
  49547. * | | aaaa | Wide (fallback to `a` when missing) | ante meridiem/post meridiem |
  49548. * | | aaaaa | Narrow | a/p |
  49549. * | Period* | B, BB & BBB | Abbreviated | mid. |
  49550. * | | BBBB | Wide | am, pm, midnight, noon, morning, afternoon, evening, night |
  49551. * | | BBBBB | Narrow | md |
  49552. * | Period standalone* | b, bb & bbb | Abbreviated | mid. |
  49553. * | | bbbb | Wide | am, pm, midnight, noon, morning, afternoon, evening, night |
  49554. * | | bbbbb | Narrow | md |
  49555. * | Hour 1-12 | h | Numeric: minimum digits | 1, 12 |
  49556. * | | hh | Numeric: 2 digits + zero padded | 01, 12 |
  49557. * | Hour 0-23 | H | Numeric: minimum digits | 0, 23 |
  49558. * | | HH | Numeric: 2 digits + zero padded | 00, 23 |
  49559. * | Minute | m | Numeric: minimum digits | 8, 59 |
  49560. * | | mm | Numeric: 2 digits + zero padded | 08, 59 |
  49561. * | Second | s | Numeric: minimum digits | 0... 59 |
  49562. * | | ss | Numeric: 2 digits + zero padded | 00... 59 |
  49563. * | Fractional seconds | S | Numeric: 1 digit | 0... 9 |
  49564. * | | SS | Numeric: 2 digits + zero padded | 00... 99 |
  49565. * | | SSS | Numeric: 3 digits + zero padded (= milliseconds) | 000... 999 |
  49566. * | Zone | z, zz & zzz | Short specific non location format (fallback to O) | GMT-8 |
  49567. * | | zzzz | Long specific non location format (fallback to OOOO) | GMT-08:00 |
  49568. * | | Z, ZZ & ZZZ | ISO8601 basic format | -0800 |
  49569. * | | ZZZZ | Long localized GMT format | GMT-8:00 |
  49570. * | | ZZZZZ | ISO8601 extended format + Z indicator for offset 0 (= XXXXX) | -08:00 |
  49571. * | | O, OO & OOO | Short localized GMT format | GMT-8 |
  49572. * | | OOOO | Long localized GMT format | GMT-08:00 |
  49573. *
  49574. *
  49575. * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not
  49576. * applied and the formatted text will have the same day, month and year of the expression.
  49577. *
  49578. * WARNINGS:
  49579. * - this pipe has only access to en-US locale data by default. If you want to localize the dates
  49580. * in another language, you will have to import data for other locales.
  49581. * See the {\@linkDocs guide/i18n#i18n-pipes "I18n guide"} to know how to import additional locale
  49582. * data.
  49583. * - Fields suffixed with * are only available in the extra dataset.
  49584. * See the {\@linkDocs guide/i18n#i18n-pipes "I18n guide"} to know how to import extra locale
  49585. * data.
  49586. * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.
  49587. * Instead users should treat the date as an immutable object and change the reference when the
  49588. * pipe needs to re-run (this is to avoid reformatting the date on every change detection run
  49589. * which would be an expensive operation).
  49590. *
  49591. * ### Examples
  49592. *
  49593. * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)
  49594. * in the _local_ time and locale is 'en-US':
  49595. *
  49596. * {\@example common/pipes/ts/date_pipe.ts region='DatePipe'}
  49597. *
  49598. * \@stable
  49599. */
  49600. var DatePipe = /** @class */ (function () {
  49601. function DatePipe(locale) {
  49602. this.locale = locale;
  49603. }
  49604. /**
  49605. * @param {?} value
  49606. * @param {?=} format
  49607. * @param {?=} timezone
  49608. * @param {?=} locale
  49609. * @return {?}
  49610. */
  49611. DatePipe.prototype.transform = /**
  49612. * @param {?} value
  49613. * @param {?=} format
  49614. * @param {?=} timezone
  49615. * @param {?=} locale
  49616. * @return {?}
  49617. */
  49618. function (value, format, timezone, locale) {
  49619. if (format === void 0) { format = 'mediumDate'; }
  49620. if (value == null || value === '' || value !== value)
  49621. return null;
  49622. if (typeof value === 'string') {
  49623. value = value.trim();
  49624. }
  49625. var /** @type {?} */ date;
  49626. var /** @type {?} */ match;
  49627. if (isDate$1(value)) {
  49628. date = value;
  49629. }
  49630. else if (!isNaN(value - parseFloat(value))) {
  49631. date = new Date(parseFloat(value));
  49632. }
  49633. else if (typeof value === 'string' && /^(\d{4}-\d{1,2}-\d{1,2})$/.test(value)) {
  49634. /**
  49635. * For ISO Strings without time the day, month and year must be extracted from the ISO String
  49636. * before Date creation to avoid time offset and errors in the new Date.
  49637. * If we only replace '-' with ',' in the ISO String ("2015,01,01"), and try to create a new
  49638. * date, some browsers (e.g. IE 9) will throw an invalid Date error
  49639. * If we leave the '-' ("2015-01-01") and try to create a new Date("2015-01-01") the timeoffset
  49640. * is applied
  49641. * Note: ISO months are 0 for January, 1 for February, ...
  49642. */
  49643. var _a = value.split('-').map(function (val) { return +val; }), y = _a[0], m = _a[1], d = _a[2];
  49644. date = new Date(y, m - 1, d);
  49645. }
  49646. else if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {
  49647. date = isoStringToDate(match);
  49648. }
  49649. else {
  49650. date = new Date(value);
  49651. }
  49652. if (!isDate$1(date)) {
  49653. throw invalidPipeArgumentError(DatePipe, value);
  49654. }
  49655. return formatDate(date, format, locale || this.locale, timezone);
  49656. };
  49657. DatePipe.decorators = [
  49658. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'date', pure: true },] },
  49659. ];
  49660. /** @nocollapse */
  49661. DatePipe.ctorParameters = function () { return [
  49662. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  49663. ]; };
  49664. return DatePipe;
  49665. }());
  49666. /**
  49667. * \@internal
  49668. * @param {?} match
  49669. * @return {?}
  49670. */
  49671. function isoStringToDate(match) {
  49672. var /** @type {?} */ date = new Date(0);
  49673. var /** @type {?} */ tzHour = 0;
  49674. var /** @type {?} */ tzMin = 0;
  49675. // match[8] means that the string contains "Z" (UTC) or a timezone like "+01:00" or "+0100"
  49676. var /** @type {?} */ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;
  49677. var /** @type {?} */ timeSetter = match[8] ? date.setUTCHours : date.setHours;
  49678. // if there is a timezone defined like "+01:00" or "+0100"
  49679. if (match[9]) {
  49680. tzHour = +(match[9] + match[10]);
  49681. tzMin = +(match[9] + match[11]);
  49682. }
  49683. dateSetter.call(date, +(match[1]), +(match[2]) - 1, +(match[3]));
  49684. var /** @type {?} */ h = +(match[4] || '0') - tzHour;
  49685. var /** @type {?} */ m = +(match[5] || '0') - tzMin;
  49686. var /** @type {?} */ s = +(match[6] || '0');
  49687. var /** @type {?} */ ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);
  49688. timeSetter.call(date, h, m, s, ms);
  49689. return date;
  49690. }
  49691. /**
  49692. * @param {?} value
  49693. * @return {?}
  49694. */
  49695. function isDate$1(value) {
  49696. return value instanceof Date && !isNaN(value.valueOf());
  49697. }
  49698. /**
  49699. * @fileoverview added by tsickle
  49700. * @suppress {checkTypes} checked by tsc
  49701. */
  49702. var NumberFormatter = /** @class */ (function () {
  49703. function NumberFormatter() {
  49704. }
  49705. /**
  49706. * @param {?} num
  49707. * @param {?} locale
  49708. * @param {?} style
  49709. * @param {?=} opts
  49710. * @return {?}
  49711. */
  49712. NumberFormatter.format = /**
  49713. * @param {?} num
  49714. * @param {?} locale
  49715. * @param {?} style
  49716. * @param {?=} opts
  49717. * @return {?}
  49718. */
  49719. function (num, locale, style, opts) {
  49720. if (opts === void 0) { opts = {}; }
  49721. var minimumIntegerDigits = opts.minimumIntegerDigits, minimumFractionDigits = opts.minimumFractionDigits, maximumFractionDigits = opts.maximumFractionDigits, currency = opts.currency, _a = opts.currencyAsSymbol, currencyAsSymbol = _a === void 0 ? false : _a;
  49722. var /** @type {?} */ options = {
  49723. minimumIntegerDigits: minimumIntegerDigits,
  49724. minimumFractionDigits: minimumFractionDigits,
  49725. maximumFractionDigits: maximumFractionDigits,
  49726. style: NumberFormatStyle[style].toLowerCase()
  49727. };
  49728. if (style == NumberFormatStyle.Currency) {
  49729. options.currency = typeof currency == 'string' ? currency : undefined;
  49730. options.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';
  49731. }
  49732. return new Intl.NumberFormat(locale, options).format(num);
  49733. };
  49734. return NumberFormatter;
  49735. }());
  49736. var DATE_FORMATS_SPLIT$1 = /((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/;
  49737. var PATTERN_ALIASES = {
  49738. // Keys are quoted so they do not get renamed during closure compilation.
  49739. 'yMMMdjms': datePartGetterFactory(combine([
  49740. digitCondition('year', 1),
  49741. nameCondition('month', 3),
  49742. digitCondition('day', 1),
  49743. digitCondition('hour', 1),
  49744. digitCondition('minute', 1),
  49745. digitCondition('second', 1),
  49746. ])),
  49747. 'yMdjm': datePartGetterFactory(combine([
  49748. digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1),
  49749. digitCondition('hour', 1), digitCondition('minute', 1)
  49750. ])),
  49751. 'yMMMMEEEEd': datePartGetterFactory(combine([
  49752. digitCondition('year', 1), nameCondition('month', 4), nameCondition('weekday', 4),
  49753. digitCondition('day', 1)
  49754. ])),
  49755. 'yMMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 4), digitCondition('day', 1)])),
  49756. 'yMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 3), digitCondition('day', 1)])),
  49757. 'yMd': datePartGetterFactory(combine([digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1)])),
  49758. 'jms': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('second', 1), digitCondition('minute', 1)])),
  49759. 'jm': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('minute', 1)]))
  49760. };
  49761. var DATE_FORMATS$1 = {
  49762. // Keys are quoted so they do not get renamed.
  49763. 'yyyy': datePartGetterFactory(digitCondition('year', 4)),
  49764. 'yy': datePartGetterFactory(digitCondition('year', 2)),
  49765. 'y': datePartGetterFactory(digitCondition('year', 1)),
  49766. 'MMMM': datePartGetterFactory(nameCondition('month', 4)),
  49767. 'MMM': datePartGetterFactory(nameCondition('month', 3)),
  49768. 'MM': datePartGetterFactory(digitCondition('month', 2)),
  49769. 'M': datePartGetterFactory(digitCondition('month', 1)),
  49770. 'LLLL': datePartGetterFactory(nameCondition('month', 4)),
  49771. 'L': datePartGetterFactory(nameCondition('month', 1)),
  49772. 'dd': datePartGetterFactory(digitCondition('day', 2)),
  49773. 'd': datePartGetterFactory(digitCondition('day', 1)),
  49774. 'HH': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), false)))),
  49775. 'H': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), false))),
  49776. 'hh': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), true)))),
  49777. 'h': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),
  49778. 'jj': datePartGetterFactory(digitCondition('hour', 2)),
  49779. 'j': datePartGetterFactory(digitCondition('hour', 1)),
  49780. 'mm': digitModifier(datePartGetterFactory(digitCondition('minute', 2))),
  49781. 'm': datePartGetterFactory(digitCondition('minute', 1)),
  49782. 'ss': digitModifier(datePartGetterFactory(digitCondition('second', 2))),
  49783. 's': datePartGetterFactory(digitCondition('second', 1)),
  49784. // while ISO 8601 requires fractions to be prefixed with `.` or `,`
  49785. // we can be just safely rely on using `sss` since we currently don't support single or two digit
  49786. // fractions
  49787. 'sss': datePartGetterFactory(digitCondition('second', 3)),
  49788. 'EEEE': datePartGetterFactory(nameCondition('weekday', 4)),
  49789. 'EEE': datePartGetterFactory(nameCondition('weekday', 3)),
  49790. 'EE': datePartGetterFactory(nameCondition('weekday', 2)),
  49791. 'E': datePartGetterFactory(nameCondition('weekday', 1)),
  49792. 'a': hourClockExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),
  49793. 'Z': timeZoneGetter$1('short'),
  49794. 'z': timeZoneGetter$1('long'),
  49795. 'ww': datePartGetterFactory({}),
  49796. // Week of year, padded (00-53). Week 01 is the week with the
  49797. // first Thursday of the year. not support ?
  49798. 'w': datePartGetterFactory({}),
  49799. // Week of year (0-53). Week 1 is the week with the first Thursday
  49800. // of the year not support ?
  49801. 'G': datePartGetterFactory(nameCondition('era', 1)),
  49802. 'GG': datePartGetterFactory(nameCondition('era', 2)),
  49803. 'GGG': datePartGetterFactory(nameCondition('era', 3)),
  49804. 'GGGG': datePartGetterFactory(nameCondition('era', 4))
  49805. };
  49806. /**
  49807. * @param {?} inner
  49808. * @return {?}
  49809. */
  49810. function digitModifier(inner) {
  49811. return function (date, locale) {
  49812. var /** @type {?} */ result = inner(date, locale);
  49813. return result.length == 1 ? '0' + result : result;
  49814. };
  49815. }
  49816. /**
  49817. * @param {?} inner
  49818. * @return {?}
  49819. */
  49820. function hourClockExtractor(inner) {
  49821. return function (date, locale) { return inner(date, locale).split(' ')[1]; };
  49822. }
  49823. /**
  49824. * @param {?} inner
  49825. * @return {?}
  49826. */
  49827. function hourExtractor(inner) {
  49828. return function (date, locale) { return inner(date, locale).split(' ')[0]; };
  49829. }
  49830. /**
  49831. * @param {?} date
  49832. * @param {?} locale
  49833. * @param {?} options
  49834. * @return {?}
  49835. */
  49836. function intlDateFormat(date, locale, options) {
  49837. return new Intl.DateTimeFormat(locale, options).format(date).replace(/[\u200e\u200f]/g, '');
  49838. }
  49839. /**
  49840. * @param {?} timezone
  49841. * @return {?}
  49842. */
  49843. function timeZoneGetter$1(timezone) {
  49844. // To workaround `Intl` API restriction for single timezone let format with 24 hours
  49845. var /** @type {?} */ options = { hour: '2-digit', hour12: false, timeZoneName: timezone };
  49846. return function (date, locale) {
  49847. var /** @type {?} */ result = intlDateFormat(date, locale, options);
  49848. // Then extract first 3 letters that related to hours
  49849. return result ? result.substring(3) : '';
  49850. };
  49851. }
  49852. /**
  49853. * @param {?} options
  49854. * @param {?} value
  49855. * @return {?}
  49856. */
  49857. function hour12Modify(options, value) {
  49858. options.hour12 = value;
  49859. return options;
  49860. }
  49861. /**
  49862. * @param {?} prop
  49863. * @param {?} len
  49864. * @return {?}
  49865. */
  49866. function digitCondition(prop, len) {
  49867. var /** @type {?} */ result = {};
  49868. result[prop] = len === 2 ? '2-digit' : 'numeric';
  49869. return result;
  49870. }
  49871. /**
  49872. * @param {?} prop
  49873. * @param {?} len
  49874. * @return {?}
  49875. */
  49876. function nameCondition(prop, len) {
  49877. var /** @type {?} */ result = {};
  49878. if (len < 4) {
  49879. result[prop] = len > 1 ? 'short' : 'narrow';
  49880. }
  49881. else {
  49882. result[prop] = 'long';
  49883. }
  49884. return result;
  49885. }
  49886. /**
  49887. * @param {?} options
  49888. * @return {?}
  49889. */
  49890. function combine(options) {
  49891. return options.reduce(function (merged, opt) { return (Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["a" /* __assign */])({}, merged, opt)); }, {});
  49892. }
  49893. /**
  49894. * @param {?} ret
  49895. * @return {?}
  49896. */
  49897. function datePartGetterFactory(ret) {
  49898. return function (date, locale) { return intlDateFormat(date, locale, ret); };
  49899. }
  49900. var DATE_FORMATTER_CACHE = new Map();
  49901. /**
  49902. * @param {?} format
  49903. * @param {?} date
  49904. * @param {?} locale
  49905. * @return {?}
  49906. */
  49907. function dateFormatter(format, date, locale) {
  49908. var /** @type {?} */ fn = PATTERN_ALIASES[format];
  49909. if (fn)
  49910. return fn(date, locale);
  49911. var /** @type {?} */ cacheKey = format;
  49912. var /** @type {?} */ parts = DATE_FORMATTER_CACHE.get(cacheKey);
  49913. if (!parts) {
  49914. parts = [];
  49915. var /** @type {?} */ match = void 0;
  49916. DATE_FORMATS_SPLIT$1.exec(format);
  49917. var /** @type {?} */ _format = format;
  49918. while (_format) {
  49919. match = DATE_FORMATS_SPLIT$1.exec(_format);
  49920. if (match) {
  49921. parts = parts.concat(match.slice(1));
  49922. _format = /** @type {?} */ ((parts.pop()));
  49923. }
  49924. else {
  49925. parts.push(_format);
  49926. _format = null;
  49927. }
  49928. }
  49929. DATE_FORMATTER_CACHE.set(cacheKey, parts);
  49930. }
  49931. return parts.reduce(function (text, part) {
  49932. var /** @type {?} */ fn = DATE_FORMATS$1[part];
  49933. return text + (fn ? fn(date, locale) : partToTime(part));
  49934. }, '');
  49935. }
  49936. /**
  49937. * @param {?} part
  49938. * @return {?}
  49939. */
  49940. function partToTime(part) {
  49941. return part === '\'\'' ? '\'' : part.replace(/(^'|'$)/g, '').replace(/''/g, '\'');
  49942. }
  49943. var DateFormatter = /** @class */ (function () {
  49944. function DateFormatter() {
  49945. }
  49946. /**
  49947. * @param {?} date
  49948. * @param {?} locale
  49949. * @param {?} pattern
  49950. * @return {?}
  49951. */
  49952. DateFormatter.format = /**
  49953. * @param {?} date
  49954. * @param {?} locale
  49955. * @param {?} pattern
  49956. * @return {?}
  49957. */
  49958. function (date, locale, pattern) {
  49959. return dateFormatter(pattern, date, locale);
  49960. };
  49961. return DateFormatter;
  49962. }());
  49963. /**
  49964. * @fileoverview added by tsickle
  49965. * @suppress {checkTypes} checked by tsc
  49966. */
  49967. /**
  49968. * @license
  49969. * Copyright Google Inc. All Rights Reserved.
  49970. *
  49971. * Use of this source code is governed by an MIT-style license that can be
  49972. * found in the LICENSE file at https://angular.io/license
  49973. */
  49974. /**
  49975. * \@ngModule CommonModule
  49976. * \@whatItDoes Formats a date according to locale rules.
  49977. * \@howToUse `date_expression | date[:format]`
  49978. * \@description
  49979. *
  49980. * Where:
  49981. * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string
  49982. * (https://www.w3.org/TR/NOTE-datetime).
  49983. * - `format` indicates which date/time components to include. The format can be predefined as
  49984. * shown below or custom as shown in the table.
  49985. * - `'medium'`: equivalent to `'yMMMdjms'` (e.g. `Sep 3, 2010, 12:05:08 PM` for `en-US`)
  49986. * - `'short'`: equivalent to `'yMdjm'` (e.g. `9/3/2010, 12:05 PM` for `en-US`)
  49987. * - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. `Friday, September 3, 2010` for `en-US`)
  49988. * - `'longDate'`: equivalent to `'yMMMMd'` (e.g. `September 3, 2010` for `en-US`)
  49989. * - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. `Sep 3, 2010` for `en-US`)
  49990. * - `'shortDate'`: equivalent to `'yMd'` (e.g. `9/3/2010` for `en-US`)
  49991. * - `'mediumTime'`: equivalent to `'jms'` (e.g. `12:05:08 PM` for `en-US`)
  49992. * - `'shortTime'`: equivalent to `'jm'` (e.g. `12:05 PM` for `en-US`)
  49993. *
  49994. *
  49995. * | Component | Symbol | Narrow | Short Form | Long Form | Numeric | 2-digit |
  49996. * |-----------|:------:|--------|--------------|-------------------|-----------|-----------|
  49997. * | era | G | G (A) | GGG (AD) | GGGG (Anno Domini)| - | - |
  49998. * | year | y | - | - | - | y (2015) | yy (15) |
  49999. * | month | M | L (S) | MMM (Sep) | MMMM (September) | M (9) | MM (09) |
  50000. * | day | d | - | - | - | d (3) | dd (03) |
  50001. * | weekday | E | E (S) | EEE (Sun) | EEEE (Sunday) | - | - |
  50002. * | hour | j | - | - | - | j (13) | jj (13) |
  50003. * | hour12 | h | - | - | - | h (1 PM) | hh (01 PM)|
  50004. * | hour24 | H | - | - | - | H (13) | HH (13) |
  50005. * | minute | m | - | - | - | m (5) | mm (05) |
  50006. * | second | s | - | - | - | s (9) | ss (09) |
  50007. * | timezone | z | - | - | z (Pacific Standard Time)| - | - |
  50008. * | timezone | Z | - | Z (GMT-8:00) | - | - | - |
  50009. * | timezone | a | - | a (PM) | - | - | - |
  50010. *
  50011. * In javascript, only the components specified will be respected (not the ordering,
  50012. * punctuations, ...) and details of the formatting will be dependent on the locale.
  50013. *
  50014. * Timezone of the formatted text will be the local system timezone of the end-user's machine.
  50015. *
  50016. * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not
  50017. * applied and the formatted text will have the same day, month and year of the expression.
  50018. *
  50019. * WARNINGS:
  50020. * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.
  50021. * Instead users should treat the date as an immutable object and change the reference when the
  50022. * pipe needs to re-run (this is to avoid reformatting the date on every change detection run
  50023. * which would be an expensive operation).
  50024. * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera
  50025. * browsers.
  50026. *
  50027. * ### Examples
  50028. *
  50029. * Assuming `dateObj` is (year: 2010, month: 9, day: 3, hour: 12 PM, minute: 05, second: 08)
  50030. * in the _local_ time and locale is 'en-US':
  50031. *
  50032. * {\@example common/pipes/ts/date_pipe.ts region='DeprecatedDatePipe'}
  50033. *
  50034. * \@stable
  50035. */
  50036. var DeprecatedDatePipe = /** @class */ (function () {
  50037. function DeprecatedDatePipe(_locale) {
  50038. this._locale = _locale;
  50039. }
  50040. /**
  50041. * @param {?} value
  50042. * @param {?=} pattern
  50043. * @return {?}
  50044. */
  50045. DeprecatedDatePipe.prototype.transform = /**
  50046. * @param {?} value
  50047. * @param {?=} pattern
  50048. * @return {?}
  50049. */
  50050. function (value, pattern) {
  50051. if (pattern === void 0) { pattern = 'mediumDate'; }
  50052. if (value == null || value === '' || value !== value)
  50053. return null;
  50054. var /** @type {?} */ date;
  50055. if (typeof value === 'string') {
  50056. value = value.trim();
  50057. }
  50058. if (isDate(value)) {
  50059. date = value;
  50060. }
  50061. else if (!isNaN(value - parseFloat(value))) {
  50062. date = new Date(parseFloat(value));
  50063. }
  50064. else if (typeof value === 'string' && /^(\d{4}-\d{1,2}-\d{1,2})$/.test(value)) {
  50065. /**
  50066. * For ISO Strings without time the day, month and year must be extracted from the ISO String
  50067. * before Date creation to avoid time offset and errors in the new Date.
  50068. * If we only replace '-' with ',' in the ISO String ("2015,01,01"), and try to create a new
  50069. * date, some browsers (e.g. IE 9) will throw an invalid Date error
  50070. * If we leave the '-' ("2015-01-01") and try to create a new Date("2015-01-01") the
  50071. * timeoffset
  50072. * is applied
  50073. * Note: ISO months are 0 for January, 1 for February, ...
  50074. */
  50075. var _a = value.split('-').map(function (val) { return parseInt(val, 10); }), y = _a[0], m = _a[1], d = _a[2];
  50076. date = new Date(y, m - 1, d);
  50077. }
  50078. else {
  50079. date = new Date(value);
  50080. }
  50081. if (!isDate(date)) {
  50082. var /** @type {?} */ match = void 0;
  50083. if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {
  50084. date = isoStringToDate(match);
  50085. }
  50086. else {
  50087. throw invalidPipeArgumentError(DeprecatedDatePipe, value);
  50088. }
  50089. }
  50090. return DateFormatter.format(date, this._locale, DeprecatedDatePipe._ALIASES[pattern] || pattern);
  50091. };
  50092. /**
  50093. * \@internal
  50094. */
  50095. DeprecatedDatePipe._ALIASES = {
  50096. 'medium': 'yMMMdjms',
  50097. 'short': 'yMdjm',
  50098. 'fullDate': 'yMMMMEEEEd',
  50099. 'longDate': 'yMMMMd',
  50100. 'mediumDate': 'yMMMd',
  50101. 'shortDate': 'yMd',
  50102. 'mediumTime': 'jms',
  50103. 'shortTime': 'jm'
  50104. };
  50105. DeprecatedDatePipe.decorators = [
  50106. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'date', pure: true },] },
  50107. ];
  50108. /** @nocollapse */
  50109. DeprecatedDatePipe.ctorParameters = function () { return [
  50110. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  50111. ]; };
  50112. return DeprecatedDatePipe;
  50113. }());
  50114. /**
  50115. * @param {?} value
  50116. * @return {?}
  50117. */
  50118. function isDate(value) {
  50119. return value instanceof Date && !isNaN(value.valueOf());
  50120. }
  50121. /**
  50122. * @fileoverview added by tsickle
  50123. * @suppress {checkTypes} checked by tsc
  50124. */
  50125. /**
  50126. * @license
  50127. * Copyright Google Inc. All Rights Reserved.
  50128. *
  50129. * Use of this source code is governed by an MIT-style license that can be
  50130. * found in the LICENSE file at https://angular.io/license
  50131. */
  50132. var NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
  50133. var MAX_DIGITS = 22;
  50134. var DECIMAL_SEP = '.';
  50135. var ZERO_CHAR = '0';
  50136. var PATTERN_SEP = ';';
  50137. var GROUP_SEP = ',';
  50138. var DIGIT_CHAR = '#';
  50139. var CURRENCY_CHAR = '¤';
  50140. var PERCENT_CHAR = '%';
  50141. /**
  50142. * Transform a number to a locale string based on a style and a format
  50143. *
  50144. * \@internal
  50145. * @param {?} value
  50146. * @param {?} locale
  50147. * @param {?} style
  50148. * @param {?=} digitsInfo
  50149. * @param {?=} currency
  50150. * @return {?}
  50151. */
  50152. function formatNumber$1(value, locale, style, digitsInfo, currency) {
  50153. if (currency === void 0) { currency = null; }
  50154. var /** @type {?} */ res = { str: null };
  50155. var /** @type {?} */ format = getLocaleNumberFormat(locale, style);
  50156. var /** @type {?} */ num;
  50157. // Convert strings to numbers
  50158. if (typeof value === 'string' && !isNaN(+value - parseFloat(value))) {
  50159. num = +value;
  50160. }
  50161. else if (typeof value !== 'number') {
  50162. res.error = value + " is not a number";
  50163. return res;
  50164. }
  50165. else {
  50166. num = value;
  50167. }
  50168. var /** @type {?} */ pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));
  50169. var /** @type {?} */ formattedText = '';
  50170. var /** @type {?} */ isZero = false;
  50171. if (!isFinite(num)) {
  50172. formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);
  50173. }
  50174. else {
  50175. var /** @type {?} */ parsedNumber = parseNumber(num);
  50176. if (style === NumberFormatStyle.Percent) {
  50177. parsedNumber = toPercent(parsedNumber);
  50178. }
  50179. var /** @type {?} */ minInt = pattern.minInt;
  50180. var /** @type {?} */ minFraction = pattern.minFrac;
  50181. var /** @type {?} */ maxFraction = pattern.maxFrac;
  50182. if (digitsInfo) {
  50183. var /** @type {?} */ parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);
  50184. if (parts === null) {
  50185. res.error = digitsInfo + " is not a valid digit info";
  50186. return res;
  50187. }
  50188. var /** @type {?} */ minIntPart = parts[1];
  50189. var /** @type {?} */ minFractionPart = parts[3];
  50190. var /** @type {?} */ maxFractionPart = parts[5];
  50191. if (minIntPart != null) {
  50192. minInt = parseIntAutoRadix(minIntPart);
  50193. }
  50194. if (minFractionPart != null) {
  50195. minFraction = parseIntAutoRadix(minFractionPart);
  50196. }
  50197. if (maxFractionPart != null) {
  50198. maxFraction = parseIntAutoRadix(maxFractionPart);
  50199. }
  50200. else if (minFractionPart != null && minFraction > maxFraction) {
  50201. maxFraction = minFraction;
  50202. }
  50203. }
  50204. roundNumber(parsedNumber, minFraction, maxFraction);
  50205. var /** @type {?} */ digits = parsedNumber.digits;
  50206. var /** @type {?} */ integerLen = parsedNumber.integerLen;
  50207. var /** @type {?} */ exponent = parsedNumber.exponent;
  50208. var /** @type {?} */ decimals = [];
  50209. isZero = digits.every(function (d) { return !d; });
  50210. // pad zeros for small numbers
  50211. for (; integerLen < minInt; integerLen++) {
  50212. digits.unshift(0);
  50213. }
  50214. // pad zeros for small numbers
  50215. for (; integerLen < 0; integerLen++) {
  50216. digits.unshift(0);
  50217. }
  50218. // extract decimals digits
  50219. if (integerLen > 0) {
  50220. decimals = digits.splice(integerLen, digits.length);
  50221. }
  50222. else {
  50223. decimals = digits;
  50224. digits = [0];
  50225. }
  50226. // format the integer digits with grouping separators
  50227. var /** @type {?} */ groups = [];
  50228. if (digits.length >= pattern.lgSize) {
  50229. groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));
  50230. }
  50231. while (digits.length > pattern.gSize) {
  50232. groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));
  50233. }
  50234. if (digits.length) {
  50235. groups.unshift(digits.join(''));
  50236. }
  50237. var /** @type {?} */ groupSymbol = currency ? NumberSymbol.CurrencyGroup : NumberSymbol.Group;
  50238. formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));
  50239. // append the decimal digits
  50240. if (decimals.length) {
  50241. var /** @type {?} */ decimalSymbol = currency ? NumberSymbol.CurrencyDecimal : NumberSymbol.Decimal;
  50242. formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');
  50243. }
  50244. if (exponent) {
  50245. formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;
  50246. }
  50247. }
  50248. if (num < 0 && !isZero) {
  50249. formattedText = pattern.negPre + formattedText + pattern.negSuf;
  50250. }
  50251. else {
  50252. formattedText = pattern.posPre + formattedText + pattern.posSuf;
  50253. }
  50254. if (style === NumberFormatStyle.Currency && currency !== null) {
  50255. res.str = formattedText
  50256. .replace(CURRENCY_CHAR, currency)
  50257. .replace(CURRENCY_CHAR, '');
  50258. return res;
  50259. }
  50260. if (style === NumberFormatStyle.Percent) {
  50261. res.str = formattedText.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));
  50262. return res;
  50263. }
  50264. res.str = formattedText;
  50265. return res;
  50266. }
  50267. /**
  50268. * @param {?} format
  50269. * @param {?=} minusSign
  50270. * @return {?}
  50271. */
  50272. function parseNumberFormat(format, minusSign) {
  50273. if (minusSign === void 0) { minusSign = '-'; }
  50274. var /** @type {?} */ p = {
  50275. minInt: 1,
  50276. minFrac: 0,
  50277. maxFrac: 0,
  50278. posPre: '',
  50279. posSuf: '',
  50280. negPre: '',
  50281. negSuf: '',
  50282. gSize: 0,
  50283. lgSize: 0
  50284. };
  50285. var /** @type {?} */ patternParts = format.split(PATTERN_SEP);
  50286. var /** @type {?} */ positive = patternParts[0];
  50287. var /** @type {?} */ negative = patternParts[1];
  50288. var /** @type {?} */ positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ?
  50289. positive.split(DECIMAL_SEP) :
  50290. [
  50291. positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1),
  50292. positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)
  50293. ], /** @type {?} */
  50294. integer = positiveParts[0], /** @type {?} */ fraction = positiveParts[1] || '';
  50295. p.posPre = integer.substr(0, integer.indexOf(DIGIT_CHAR));
  50296. for (var /** @type {?} */ i = 0; i < fraction.length; i++) {
  50297. var /** @type {?} */ ch = fraction.charAt(i);
  50298. if (ch === ZERO_CHAR) {
  50299. p.minFrac = p.maxFrac = i + 1;
  50300. }
  50301. else if (ch === DIGIT_CHAR) {
  50302. p.maxFrac = i + 1;
  50303. }
  50304. else {
  50305. p.posSuf += ch;
  50306. }
  50307. }
  50308. var /** @type {?} */ groups = integer.split(GROUP_SEP);
  50309. p.gSize = groups[1] ? groups[1].length : 0;
  50310. p.lgSize = (groups[2] || groups[1]) ? (groups[2] || groups[1]).length : 0;
  50311. if (negative) {
  50312. var /** @type {?} */ trunkLen = positive.length - p.posPre.length - p.posSuf.length, /** @type {?} */
  50313. pos = negative.indexOf(DIGIT_CHAR);
  50314. p.negPre = negative.substr(0, pos).replace(/'/g, '');
  50315. p.negSuf = negative.substr(pos + trunkLen).replace(/'/g, '');
  50316. }
  50317. else {
  50318. p.negPre = minusSign + p.posPre;
  50319. p.negSuf = p.posSuf;
  50320. }
  50321. return p;
  50322. }
  50323. /**
  50324. * @param {?} parsedNumber
  50325. * @return {?}
  50326. */
  50327. function toPercent(parsedNumber) {
  50328. // if the number is 0, don't do anything
  50329. if (parsedNumber.digits[0] === 0) {
  50330. return parsedNumber;
  50331. }
  50332. // Getting the current number of decimals
  50333. var /** @type {?} */ fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;
  50334. if (parsedNumber.exponent) {
  50335. parsedNumber.exponent += 2;
  50336. }
  50337. else {
  50338. if (fractionLen === 0) {
  50339. parsedNumber.digits.push(0, 0);
  50340. }
  50341. else if (fractionLen === 1) {
  50342. parsedNumber.digits.push(0);
  50343. }
  50344. parsedNumber.integerLen += 2;
  50345. }
  50346. return parsedNumber;
  50347. }
  50348. /**
  50349. * Parses a number.
  50350. * Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/
  50351. * @param {?} num
  50352. * @return {?}
  50353. */
  50354. function parseNumber(num) {
  50355. var /** @type {?} */ numStr = Math.abs(num) + '';
  50356. var /** @type {?} */ exponent = 0, /** @type {?} */ digits, /** @type {?} */ integerLen;
  50357. var /** @type {?} */ i, /** @type {?} */ j, /** @type {?} */ zeros;
  50358. // Decimal point?
  50359. if ((integerLen = numStr.indexOf(DECIMAL_SEP)) > -1) {
  50360. numStr = numStr.replace(DECIMAL_SEP, '');
  50361. }
  50362. // Exponential form?
  50363. if ((i = numStr.search(/e/i)) > 0) {
  50364. // Work out the exponent.
  50365. if (integerLen < 0)
  50366. integerLen = i;
  50367. integerLen += +numStr.slice(i + 1);
  50368. numStr = numStr.substring(0, i);
  50369. }
  50370. else if (integerLen < 0) {
  50371. // There was no decimal point or exponent so it is an integer.
  50372. integerLen = numStr.length;
  50373. }
  50374. // Count the number of leading zeros.
  50375. for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) {
  50376. /* empty */
  50377. }
  50378. if (i === (zeros = numStr.length)) {
  50379. // The digits are all zero.
  50380. digits = [0];
  50381. integerLen = 1;
  50382. }
  50383. else {
  50384. // Count the number of trailing zeros
  50385. zeros--;
  50386. while (numStr.charAt(zeros) === ZERO_CHAR)
  50387. zeros--;
  50388. // Trailing zeros are insignificant so ignore them
  50389. integerLen -= i;
  50390. digits = [];
  50391. // Convert string to array of digits without leading/trailing zeros.
  50392. for (j = 0; i <= zeros; i++, j++) {
  50393. digits[j] = +numStr.charAt(i);
  50394. }
  50395. }
  50396. // If the number overflows the maximum allowed digits then use an exponent.
  50397. if (integerLen > MAX_DIGITS) {
  50398. digits = digits.splice(0, MAX_DIGITS - 1);
  50399. exponent = integerLen - 1;
  50400. integerLen = 1;
  50401. }
  50402. return { digits: digits, exponent: exponent, integerLen: integerLen };
  50403. }
  50404. /**
  50405. * Round the parsed number to the specified number of decimal places
  50406. * This function changes the parsedNumber in-place
  50407. * @param {?} parsedNumber
  50408. * @param {?} minFrac
  50409. * @param {?} maxFrac
  50410. * @return {?}
  50411. */
  50412. function roundNumber(parsedNumber, minFrac, maxFrac) {
  50413. if (minFrac > maxFrac) {
  50414. throw new Error("The minimum number of digits after fraction (" + minFrac + ") is higher than the maximum (" + maxFrac + ").");
  50415. }
  50416. var /** @type {?} */ digits = parsedNumber.digits;
  50417. var /** @type {?} */ fractionLen = digits.length - parsedNumber.integerLen;
  50418. var /** @type {?} */ fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);
  50419. // The index of the digit to where rounding is to occur
  50420. var /** @type {?} */ roundAt = fractionSize + parsedNumber.integerLen;
  50421. var /** @type {?} */ digit = digits[roundAt];
  50422. if (roundAt > 0) {
  50423. // Drop fractional digits beyond `roundAt`
  50424. digits.splice(Math.max(parsedNumber.integerLen, roundAt));
  50425. // Set non-fractional digits beyond `roundAt` to 0
  50426. for (var /** @type {?} */ j = roundAt; j < digits.length; j++) {
  50427. digits[j] = 0;
  50428. }
  50429. }
  50430. else {
  50431. // We rounded to zero so reset the parsedNumber
  50432. fractionLen = Math.max(0, fractionLen);
  50433. parsedNumber.integerLen = 1;
  50434. digits.length = Math.max(1, roundAt = fractionSize + 1);
  50435. digits[0] = 0;
  50436. for (var /** @type {?} */ i = 1; i < roundAt; i++)
  50437. digits[i] = 0;
  50438. }
  50439. if (digit >= 5) {
  50440. if (roundAt - 1 < 0) {
  50441. for (var /** @type {?} */ k = 0; k > roundAt; k--) {
  50442. digits.unshift(0);
  50443. parsedNumber.integerLen++;
  50444. }
  50445. digits.unshift(1);
  50446. parsedNumber.integerLen++;
  50447. }
  50448. else {
  50449. digits[roundAt - 1]++;
  50450. }
  50451. }
  50452. // Pad out with zeros to get the required fraction length
  50453. for (; fractionLen < Math.max(0, fractionSize); fractionLen++)
  50454. digits.push(0);
  50455. var /** @type {?} */ dropTrailingZeros = fractionSize !== 0;
  50456. // Minimal length = nb of decimals required + current nb of integers
  50457. // Any number besides that is optional and can be removed if it's a trailing 0
  50458. var /** @type {?} */ minLen = minFrac + parsedNumber.integerLen;
  50459. // Do any carrying, e.g. a digit was rounded up to 10
  50460. var /** @type {?} */ carry = digits.reduceRight(function (carry, d, i, digits) {
  50461. d = d + carry;
  50462. digits[i] = d < 10 ? d : d - 10; // d % 10
  50463. if (dropTrailingZeros) {
  50464. // Do not keep meaningless fractional trailing zeros (e.g. 15.52000 --> 15.52)
  50465. if (digits[i] === 0 && i >= minLen) {
  50466. digits.pop();
  50467. }
  50468. else {
  50469. dropTrailingZeros = false;
  50470. }
  50471. }
  50472. return d >= 10 ? 1 : 0; // Math.floor(d / 10);
  50473. }, 0);
  50474. if (carry) {
  50475. digits.unshift(carry);
  50476. parsedNumber.integerLen++;
  50477. }
  50478. }
  50479. /**
  50480. * \@internal
  50481. * @param {?} text
  50482. * @return {?}
  50483. */
  50484. function parseIntAutoRadix(text) {
  50485. var /** @type {?} */ result = parseInt(text);
  50486. if (isNaN(result)) {
  50487. throw new Error('Invalid integer literal when parsing ' + text);
  50488. }
  50489. return result;
  50490. }
  50491. /**
  50492. * @fileoverview added by tsickle
  50493. * @suppress {checkTypes} checked by tsc
  50494. */
  50495. /**
  50496. * @license
  50497. * Copyright Google Inc. All Rights Reserved.
  50498. *
  50499. * Use of this source code is governed by an MIT-style license that can be
  50500. * found in the LICENSE file at https://angular.io/license
  50501. */
  50502. /**
  50503. * @param {?} pipe
  50504. * @param {?} locale
  50505. * @param {?} value
  50506. * @param {?} style
  50507. * @param {?=} digits
  50508. * @param {?=} currency
  50509. * @param {?=} currencyAsSymbol
  50510. * @return {?}
  50511. */
  50512. function formatNumber(pipe, locale, value, style, digits, currency, currencyAsSymbol) {
  50513. if (currency === void 0) { currency = null; }
  50514. if (currencyAsSymbol === void 0) { currencyAsSymbol = false; }
  50515. if (value == null)
  50516. return null;
  50517. // Convert strings to numbers
  50518. value = typeof value === 'string' && !isNaN(+value - parseFloat(value)) ? +value : value;
  50519. if (typeof value !== 'number') {
  50520. throw invalidPipeArgumentError(pipe, value);
  50521. }
  50522. var /** @type {?} */ minInt;
  50523. var /** @type {?} */ minFraction;
  50524. var /** @type {?} */ maxFraction;
  50525. if (style !== NumberFormatStyle.Currency) {
  50526. // rely on Intl default for currency
  50527. minInt = 1;
  50528. minFraction = 0;
  50529. maxFraction = 3;
  50530. }
  50531. if (digits) {
  50532. var /** @type {?} */ parts = digits.match(NUMBER_FORMAT_REGEXP);
  50533. if (parts === null) {
  50534. throw new Error(digits + " is not a valid digit info for number pipes");
  50535. }
  50536. if (parts[1] != null) {
  50537. // min integer digits
  50538. minInt = parseIntAutoRadix(parts[1]);
  50539. }
  50540. if (parts[3] != null) {
  50541. // min fraction digits
  50542. minFraction = parseIntAutoRadix(parts[3]);
  50543. }
  50544. if (parts[5] != null) {
  50545. // max fraction digits
  50546. maxFraction = parseIntAutoRadix(parts[5]);
  50547. }
  50548. }
  50549. return NumberFormatter.format(/** @type {?} */ (value), locale, style, {
  50550. minimumIntegerDigits: minInt,
  50551. minimumFractionDigits: minFraction,
  50552. maximumFractionDigits: maxFraction,
  50553. currency: currency,
  50554. currencyAsSymbol: currencyAsSymbol,
  50555. });
  50556. }
  50557. /**
  50558. * \@ngModule CommonModule
  50559. * \@whatItDoes Formats a number according to locale rules.
  50560. * \@howToUse `number_expression | number[:digitInfo]`
  50561. *
  50562. * Formats a number as text. Group sizing and separator and other locale-specific
  50563. * configurations are based on the active locale.
  50564. *
  50565. * where `expression` is a number:
  50566. * - `digitInfo` is a `string` which has a following format: <br>
  50567. * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>
  50568. * - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.
  50569. * - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.
  50570. * - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.
  50571. *
  50572. * For more information on the acceptable range for each of these numbers and other
  50573. * details see your native internationalization library.
  50574. *
  50575. * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers
  50576. * and may require a polyfill. See [Browser Support](guide/browser-support) for details.
  50577. *
  50578. * ### Example
  50579. *
  50580. * {\@example common/pipes/ts/number_pipe.ts region='DeprecatedNumberPipe'}
  50581. *
  50582. * \@stable
  50583. */
  50584. var DeprecatedDecimalPipe = /** @class */ (function () {
  50585. function DeprecatedDecimalPipe(_locale) {
  50586. this._locale = _locale;
  50587. }
  50588. /**
  50589. * @param {?} value
  50590. * @param {?=} digits
  50591. * @return {?}
  50592. */
  50593. DeprecatedDecimalPipe.prototype.transform = /**
  50594. * @param {?} value
  50595. * @param {?=} digits
  50596. * @return {?}
  50597. */
  50598. function (value, digits) {
  50599. return formatNumber(DeprecatedDecimalPipe, this._locale, value, NumberFormatStyle.Decimal, digits);
  50600. };
  50601. DeprecatedDecimalPipe.decorators = [
  50602. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'number' },] },
  50603. ];
  50604. /** @nocollapse */
  50605. DeprecatedDecimalPipe.ctorParameters = function () { return [
  50606. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  50607. ]; };
  50608. return DeprecatedDecimalPipe;
  50609. }());
  50610. /**
  50611. * \@ngModule CommonModule
  50612. * \@whatItDoes Formats a number as a percentage according to locale rules.
  50613. * \@howToUse `number_expression | percent[:digitInfo]`
  50614. *
  50615. * \@description
  50616. *
  50617. * Formats a number as percentage.
  50618. *
  50619. * - `digitInfo` See {\@link DecimalPipe} for detailed description.
  50620. *
  50621. * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers
  50622. * and may require a polyfill. See [Browser Support](guide/browser-support) for details.
  50623. *
  50624. * ### Example
  50625. *
  50626. * {\@example common/pipes/ts/percent_pipe.ts region='DeprecatedPercentPipe'}
  50627. *
  50628. * \@stable
  50629. */
  50630. var DeprecatedPercentPipe = /** @class */ (function () {
  50631. function DeprecatedPercentPipe(_locale) {
  50632. this._locale = _locale;
  50633. }
  50634. /**
  50635. * @param {?} value
  50636. * @param {?=} digits
  50637. * @return {?}
  50638. */
  50639. DeprecatedPercentPipe.prototype.transform = /**
  50640. * @param {?} value
  50641. * @param {?=} digits
  50642. * @return {?}
  50643. */
  50644. function (value, digits) {
  50645. return formatNumber(DeprecatedPercentPipe, this._locale, value, NumberFormatStyle.Percent, digits);
  50646. };
  50647. DeprecatedPercentPipe.decorators = [
  50648. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'percent' },] },
  50649. ];
  50650. /** @nocollapse */
  50651. DeprecatedPercentPipe.ctorParameters = function () { return [
  50652. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  50653. ]; };
  50654. return DeprecatedPercentPipe;
  50655. }());
  50656. /**
  50657. * \@ngModule CommonModule
  50658. * \@whatItDoes Formats a number as currency using locale rules.
  50659. * \@howToUse `number_expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]`
  50660. * \@description
  50661. *
  50662. * Use `currency` to format a number as currency.
  50663. *
  50664. * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such
  50665. * as `USD` for the US dollar and `EUR` for the euro.
  50666. * - `symbolDisplay` is a boolean indicating whether to use the currency symbol or code.
  50667. * - `true`: use symbol (e.g. `$`).
  50668. * - `false`(default): use code (e.g. `USD`).
  50669. * - `digitInfo` See {\@link DecimalPipe} for detailed description.
  50670. *
  50671. * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers
  50672. * and may require a polyfill. See [Browser Support](guide/browser-support) for details.
  50673. *
  50674. * ### Example
  50675. *
  50676. * {\@example common/pipes/ts/currency_pipe.ts region='DeprecatedCurrencyPipe'}
  50677. *
  50678. * \@stable
  50679. */
  50680. var DeprecatedCurrencyPipe = /** @class */ (function () {
  50681. function DeprecatedCurrencyPipe(_locale) {
  50682. this._locale = _locale;
  50683. }
  50684. /**
  50685. * @param {?} value
  50686. * @param {?=} currencyCode
  50687. * @param {?=} symbolDisplay
  50688. * @param {?=} digits
  50689. * @return {?}
  50690. */
  50691. DeprecatedCurrencyPipe.prototype.transform = /**
  50692. * @param {?} value
  50693. * @param {?=} currencyCode
  50694. * @param {?=} symbolDisplay
  50695. * @param {?=} digits
  50696. * @return {?}
  50697. */
  50698. function (value, currencyCode, symbolDisplay, digits) {
  50699. if (currencyCode === void 0) { currencyCode = 'USD'; }
  50700. if (symbolDisplay === void 0) { symbolDisplay = false; }
  50701. return formatNumber(DeprecatedCurrencyPipe, this._locale, value, NumberFormatStyle.Currency, digits, currencyCode, symbolDisplay);
  50702. };
  50703. DeprecatedCurrencyPipe.decorators = [
  50704. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'currency' },] },
  50705. ];
  50706. /** @nocollapse */
  50707. DeprecatedCurrencyPipe.ctorParameters = function () { return [
  50708. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  50709. ]; };
  50710. return DeprecatedCurrencyPipe;
  50711. }());
  50712. /**
  50713. * @fileoverview added by tsickle
  50714. * @suppress {checkTypes} checked by tsc
  50715. */
  50716. /**
  50717. * @license
  50718. * Copyright Google Inc. All Rights Reserved.
  50719. *
  50720. * Use of this source code is governed by an MIT-style license that can be
  50721. * found in the LICENSE file at https://angular.io/license
  50722. */
  50723. /**
  50724. * A collection of deprecated i18n pipes that require intl api
  50725. *
  50726. * @deprecated from v5
  50727. */
  50728. var COMMON_DEPRECATED_I18N_PIPES = [DeprecatedDecimalPipe, DeprecatedPercentPipe, DeprecatedCurrencyPipe, DeprecatedDatePipe];
  50729. /**
  50730. * @fileoverview added by tsickle
  50731. * @suppress {checkTypes} checked by tsc
  50732. */
  50733. /**
  50734. * @license
  50735. * Copyright Google Inc. All Rights Reserved.
  50736. *
  50737. * Use of this source code is governed by an MIT-style license that can be
  50738. * found in the LICENSE file at https://angular.io/license
  50739. */
  50740. var ObservableStrategy = /** @class */ (function () {
  50741. function ObservableStrategy() {
  50742. }
  50743. /**
  50744. * @param {?} async
  50745. * @param {?} updateLatestValue
  50746. * @return {?}
  50747. */
  50748. ObservableStrategy.prototype.createSubscription = /**
  50749. * @param {?} async
  50750. * @param {?} updateLatestValue
  50751. * @return {?}
  50752. */
  50753. function (async, updateLatestValue) {
  50754. return async.subscribe({ next: updateLatestValue, error: function (e) { throw e; } });
  50755. };
  50756. /**
  50757. * @param {?} subscription
  50758. * @return {?}
  50759. */
  50760. ObservableStrategy.prototype.dispose = /**
  50761. * @param {?} subscription
  50762. * @return {?}
  50763. */
  50764. function (subscription) { subscription.unsubscribe(); };
  50765. /**
  50766. * @param {?} subscription
  50767. * @return {?}
  50768. */
  50769. ObservableStrategy.prototype.onDestroy = /**
  50770. * @param {?} subscription
  50771. * @return {?}
  50772. */
  50773. function (subscription) { subscription.unsubscribe(); };
  50774. return ObservableStrategy;
  50775. }());
  50776. var PromiseStrategy = /** @class */ (function () {
  50777. function PromiseStrategy() {
  50778. }
  50779. /**
  50780. * @param {?} async
  50781. * @param {?} updateLatestValue
  50782. * @return {?}
  50783. */
  50784. PromiseStrategy.prototype.createSubscription = /**
  50785. * @param {?} async
  50786. * @param {?} updateLatestValue
  50787. * @return {?}
  50788. */
  50789. function (async, updateLatestValue) {
  50790. return async.then(updateLatestValue, function (e) { throw e; });
  50791. };
  50792. /**
  50793. * @param {?} subscription
  50794. * @return {?}
  50795. */
  50796. PromiseStrategy.prototype.dispose = /**
  50797. * @param {?} subscription
  50798. * @return {?}
  50799. */
  50800. function (subscription) { };
  50801. /**
  50802. * @param {?} subscription
  50803. * @return {?}
  50804. */
  50805. PromiseStrategy.prototype.onDestroy = /**
  50806. * @param {?} subscription
  50807. * @return {?}
  50808. */
  50809. function (subscription) { };
  50810. return PromiseStrategy;
  50811. }());
  50812. var _promiseStrategy = new PromiseStrategy();
  50813. var _observableStrategy = new ObservableStrategy();
  50814. /**
  50815. * \@ngModule CommonModule
  50816. * \@whatItDoes Unwraps a value from an asynchronous primitive.
  50817. * \@howToUse `observable_or_promise_expression | async`
  50818. * \@description
  50819. * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has
  50820. * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for
  50821. * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid
  50822. * potential memory leaks.
  50823. *
  50824. *
  50825. * ## Examples
  50826. *
  50827. * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the
  50828. * promise.
  50829. *
  50830. * {\@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}
  50831. *
  50832. * It's also possible to use `async` with Observables. The example below binds the `time` Observable
  50833. * to the view. The Observable continuously updates the view with the current time.
  50834. *
  50835. * {\@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}
  50836. *
  50837. * \@stable
  50838. */
  50839. var AsyncPipe = /** @class */ (function () {
  50840. function AsyncPipe(_ref) {
  50841. this._ref = _ref;
  50842. this._latestValue = null;
  50843. this._latestReturnedValue = null;
  50844. this._subscription = null;
  50845. this._obj = null;
  50846. this._strategy = /** @type {?} */ ((null));
  50847. }
  50848. /**
  50849. * @return {?}
  50850. */
  50851. AsyncPipe.prototype.ngOnDestroy = /**
  50852. * @return {?}
  50853. */
  50854. function () {
  50855. if (this._subscription) {
  50856. this._dispose();
  50857. }
  50858. };
  50859. /**
  50860. * @param {?} obj
  50861. * @return {?}
  50862. */
  50863. AsyncPipe.prototype.transform = /**
  50864. * @param {?} obj
  50865. * @return {?}
  50866. */
  50867. function (obj) {
  50868. if (!this._obj) {
  50869. if (obj) {
  50870. this._subscribe(obj);
  50871. }
  50872. this._latestReturnedValue = this._latestValue;
  50873. return this._latestValue;
  50874. }
  50875. if (obj !== this._obj) {
  50876. this._dispose();
  50877. return this.transform(/** @type {?} */ (obj));
  50878. }
  50879. if (this._latestValue === this._latestReturnedValue) {
  50880. return this._latestReturnedValue;
  50881. }
  50882. this._latestReturnedValue = this._latestValue;
  50883. return __WEBPACK_IMPORTED_MODULE_0__angular_core__["_12" /* WrappedValue */].wrap(this._latestValue);
  50884. };
  50885. /**
  50886. * @param {?} obj
  50887. * @return {?}
  50888. */
  50889. AsyncPipe.prototype._subscribe = /**
  50890. * @param {?} obj
  50891. * @return {?}
  50892. */
  50893. function (obj) {
  50894. var _this = this;
  50895. this._obj = obj;
  50896. this._strategy = this._selectStrategy(obj);
  50897. this._subscription = this._strategy.createSubscription(obj, function (value) { return _this._updateLatestValue(obj, value); });
  50898. };
  50899. /**
  50900. * @param {?} obj
  50901. * @return {?}
  50902. */
  50903. AsyncPipe.prototype._selectStrategy = /**
  50904. * @param {?} obj
  50905. * @return {?}
  50906. */
  50907. function (obj) {
  50908. if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_35" /* ɵisPromise */])(obj)) {
  50909. return _promiseStrategy;
  50910. }
  50911. if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_34" /* ɵisObservable */])(obj)) {
  50912. return _observableStrategy;
  50913. }
  50914. throw invalidPipeArgumentError(AsyncPipe, obj);
  50915. };
  50916. /**
  50917. * @return {?}
  50918. */
  50919. AsyncPipe.prototype._dispose = /**
  50920. * @return {?}
  50921. */
  50922. function () {
  50923. this._strategy.dispose(/** @type {?} */ ((this._subscription)));
  50924. this._latestValue = null;
  50925. this._latestReturnedValue = null;
  50926. this._subscription = null;
  50927. this._obj = null;
  50928. };
  50929. /**
  50930. * @param {?} async
  50931. * @param {?} value
  50932. * @return {?}
  50933. */
  50934. AsyncPipe.prototype._updateLatestValue = /**
  50935. * @param {?} async
  50936. * @param {?} value
  50937. * @return {?}
  50938. */
  50939. function (async, value) {
  50940. if (async === this._obj) {
  50941. this._latestValue = value;
  50942. this._ref.markForCheck();
  50943. }
  50944. };
  50945. AsyncPipe.decorators = [
  50946. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'async', pure: false },] },
  50947. ];
  50948. /** @nocollapse */
  50949. AsyncPipe.ctorParameters = function () { return [
  50950. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["j" /* ChangeDetectorRef */], },
  50951. ]; };
  50952. return AsyncPipe;
  50953. }());
  50954. /**
  50955. * @fileoverview added by tsickle
  50956. * @suppress {checkTypes} checked by tsc
  50957. */
  50958. /**
  50959. * @license
  50960. * Copyright Google Inc. All Rights Reserved.
  50961. *
  50962. * Use of this source code is governed by an MIT-style license that can be
  50963. * found in the LICENSE file at https://angular.io/license
  50964. */
  50965. /**
  50966. * Transforms text to lowercase.
  50967. *
  50968. * {\@example common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe' }
  50969. *
  50970. * \@stable
  50971. */
  50972. var LowerCasePipe = /** @class */ (function () {
  50973. function LowerCasePipe() {
  50974. }
  50975. /**
  50976. * @param {?} value
  50977. * @return {?}
  50978. */
  50979. LowerCasePipe.prototype.transform = /**
  50980. * @param {?} value
  50981. * @return {?}
  50982. */
  50983. function (value) {
  50984. if (!value)
  50985. return value;
  50986. if (typeof value !== 'string') {
  50987. throw invalidPipeArgumentError(LowerCasePipe, value);
  50988. }
  50989. return value.toLowerCase();
  50990. };
  50991. LowerCasePipe.decorators = [
  50992. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'lowercase' },] },
  50993. ];
  50994. /** @nocollapse */
  50995. LowerCasePipe.ctorParameters = function () { return []; };
  50996. return LowerCasePipe;
  50997. }());
  50998. /**
  50999. * Helper method to transform a single word to titlecase.
  51000. *
  51001. * \@stable
  51002. * @param {?} word
  51003. * @return {?}
  51004. */
  51005. function titleCaseWord(word) {
  51006. if (!word)
  51007. return word;
  51008. return word[0].toUpperCase() + word.substr(1).toLowerCase();
  51009. }
  51010. /**
  51011. * Transforms text to titlecase.
  51012. *
  51013. * \@stable
  51014. */
  51015. var TitleCasePipe = /** @class */ (function () {
  51016. function TitleCasePipe() {
  51017. }
  51018. /**
  51019. * @param {?} value
  51020. * @return {?}
  51021. */
  51022. TitleCasePipe.prototype.transform = /**
  51023. * @param {?} value
  51024. * @return {?}
  51025. */
  51026. function (value) {
  51027. if (!value)
  51028. return value;
  51029. if (typeof value !== 'string') {
  51030. throw invalidPipeArgumentError(TitleCasePipe, value);
  51031. }
  51032. return value.split(/\b/g).map(function (word) { return titleCaseWord(word); }).join('');
  51033. };
  51034. TitleCasePipe.decorators = [
  51035. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'titlecase' },] },
  51036. ];
  51037. /** @nocollapse */
  51038. TitleCasePipe.ctorParameters = function () { return []; };
  51039. return TitleCasePipe;
  51040. }());
  51041. /**
  51042. * Transforms text to uppercase.
  51043. *
  51044. * \@stable
  51045. */
  51046. var UpperCasePipe = /** @class */ (function () {
  51047. function UpperCasePipe() {
  51048. }
  51049. /**
  51050. * @param {?} value
  51051. * @return {?}
  51052. */
  51053. UpperCasePipe.prototype.transform = /**
  51054. * @param {?} value
  51055. * @return {?}
  51056. */
  51057. function (value) {
  51058. if (!value)
  51059. return value;
  51060. if (typeof value !== 'string') {
  51061. throw invalidPipeArgumentError(UpperCasePipe, value);
  51062. }
  51063. return value.toUpperCase();
  51064. };
  51065. UpperCasePipe.decorators = [
  51066. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'uppercase' },] },
  51067. ];
  51068. /** @nocollapse */
  51069. UpperCasePipe.ctorParameters = function () { return []; };
  51070. return UpperCasePipe;
  51071. }());
  51072. /**
  51073. * @fileoverview added by tsickle
  51074. * @suppress {checkTypes} checked by tsc
  51075. */
  51076. /**
  51077. * @license
  51078. * Copyright Google Inc. All Rights Reserved.
  51079. *
  51080. * Use of this source code is governed by an MIT-style license that can be
  51081. * found in the LICENSE file at https://angular.io/license
  51082. */
  51083. var _INTERPOLATION_REGEXP = /#/g;
  51084. /**
  51085. * \@ngModule CommonModule
  51086. * \@whatItDoes Maps a value to a string that pluralizes the value according to locale rules.
  51087. * \@howToUse `expression | i18nPlural:mapping[:locale]`
  51088. * \@description
  51089. *
  51090. * Where:
  51091. * - `expression` is a number.
  51092. * - `mapping` is an object that mimics the ICU format, see
  51093. * http://userguide.icu-project.org/formatparse/messages
  51094. * - `locale` is a `string` defining the locale to use (uses the current {\@link LOCALE_ID} by
  51095. * default)
  51096. *
  51097. * ## Example
  51098. *
  51099. * {\@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}
  51100. *
  51101. * \@experimental
  51102. */
  51103. var I18nPluralPipe = /** @class */ (function () {
  51104. function I18nPluralPipe(_localization) {
  51105. this._localization = _localization;
  51106. }
  51107. /**
  51108. * @param {?} value
  51109. * @param {?} pluralMap
  51110. * @param {?=} locale
  51111. * @return {?}
  51112. */
  51113. I18nPluralPipe.prototype.transform = /**
  51114. * @param {?} value
  51115. * @param {?} pluralMap
  51116. * @param {?=} locale
  51117. * @return {?}
  51118. */
  51119. function (value, pluralMap, locale) {
  51120. if (value == null)
  51121. return '';
  51122. if (typeof pluralMap !== 'object' || pluralMap === null) {
  51123. throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);
  51124. }
  51125. var /** @type {?} */ key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);
  51126. return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());
  51127. };
  51128. I18nPluralPipe.decorators = [
  51129. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'i18nPlural', pure: true },] },
  51130. ];
  51131. /** @nocollapse */
  51132. I18nPluralPipe.ctorParameters = function () { return [
  51133. { type: NgLocalization, },
  51134. ]; };
  51135. return I18nPluralPipe;
  51136. }());
  51137. /**
  51138. * @fileoverview added by tsickle
  51139. * @suppress {checkTypes} checked by tsc
  51140. */
  51141. /**
  51142. * @license
  51143. * Copyright Google Inc. All Rights Reserved.
  51144. *
  51145. * Use of this source code is governed by an MIT-style license that can be
  51146. * found in the LICENSE file at https://angular.io/license
  51147. */
  51148. /**
  51149. * \@ngModule CommonModule
  51150. * \@whatItDoes Generic selector that displays the string that matches the current value.
  51151. * \@howToUse `expression | i18nSelect:mapping`
  51152. * \@description
  51153. *
  51154. * Where `mapping` is an object that indicates the text that should be displayed
  51155. * for different values of the provided `expression`.
  51156. * If none of the keys of the mapping match the value of the `expression`, then the content
  51157. * of the `other` key is returned when present, otherwise an empty string is returned.
  51158. *
  51159. * ## Example
  51160. *
  51161. * {\@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}
  51162. *
  51163. * \@experimental
  51164. */
  51165. var I18nSelectPipe = /** @class */ (function () {
  51166. function I18nSelectPipe() {
  51167. }
  51168. /**
  51169. * @param {?} value
  51170. * @param {?} mapping
  51171. * @return {?}
  51172. */
  51173. I18nSelectPipe.prototype.transform = /**
  51174. * @param {?} value
  51175. * @param {?} mapping
  51176. * @return {?}
  51177. */
  51178. function (value, mapping) {
  51179. if (value == null)
  51180. return '';
  51181. if (typeof mapping !== 'object' || typeof value !== 'string') {
  51182. throw invalidPipeArgumentError(I18nSelectPipe, mapping);
  51183. }
  51184. if (mapping.hasOwnProperty(value)) {
  51185. return mapping[value];
  51186. }
  51187. if (mapping.hasOwnProperty('other')) {
  51188. return mapping['other'];
  51189. }
  51190. return '';
  51191. };
  51192. I18nSelectPipe.decorators = [
  51193. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'i18nSelect', pure: true },] },
  51194. ];
  51195. /** @nocollapse */
  51196. I18nSelectPipe.ctorParameters = function () { return []; };
  51197. return I18nSelectPipe;
  51198. }());
  51199. /**
  51200. * @fileoverview added by tsickle
  51201. * @suppress {checkTypes} checked by tsc
  51202. */
  51203. /**
  51204. * @license
  51205. * Copyright Google Inc. All Rights Reserved.
  51206. *
  51207. * Use of this source code is governed by an MIT-style license that can be
  51208. * found in the LICENSE file at https://angular.io/license
  51209. */
  51210. /**
  51211. * \@ngModule CommonModule
  51212. * \@whatItDoes Converts value into JSON string.
  51213. * \@howToUse `expression | json`
  51214. * \@description
  51215. *
  51216. * Converts value into string using `JSON.stringify`. Useful for debugging.
  51217. *
  51218. * ### Example
  51219. * {\@example common/pipes/ts/json_pipe.ts region='JsonPipe'}
  51220. *
  51221. * \@stable
  51222. */
  51223. var JsonPipe = /** @class */ (function () {
  51224. function JsonPipe() {
  51225. }
  51226. /**
  51227. * @param {?} value
  51228. * @return {?}
  51229. */
  51230. JsonPipe.prototype.transform = /**
  51231. * @param {?} value
  51232. * @return {?}
  51233. */
  51234. function (value) { return JSON.stringify(value, null, 2); };
  51235. JsonPipe.decorators = [
  51236. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'json', pure: false },] },
  51237. ];
  51238. /** @nocollapse */
  51239. JsonPipe.ctorParameters = function () { return []; };
  51240. return JsonPipe;
  51241. }());
  51242. /**
  51243. * @fileoverview added by tsickle
  51244. * @suppress {checkTypes} checked by tsc
  51245. */
  51246. /**
  51247. * @license
  51248. * Copyright Google Inc. All Rights Reserved.
  51249. *
  51250. * Use of this source code is governed by an MIT-style license that can be
  51251. * found in the LICENSE file at https://angular.io/license
  51252. */
  51253. /**
  51254. * \@ngModule CommonModule
  51255. * \@whatItDoes Formats a number according to locale rules.
  51256. * \@howToUse `number_expression | number[:digitInfo[:locale]]`
  51257. *
  51258. * Formats a number as text. Group sizing and separator and other locale-specific
  51259. * configurations are based on the active locale.
  51260. *
  51261. * where `expression` is a number:
  51262. * - `digitInfo` is a `string` which has a following format: <br>
  51263. * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>
  51264. * - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.
  51265. * - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.
  51266. * - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.
  51267. * - `locale` is a `string` defining the locale to use (uses the current {\@link LOCALE_ID} by
  51268. * default)
  51269. *
  51270. * For more information on the acceptable range for each of these numbers and other
  51271. * details see your native internationalization library.
  51272. *
  51273. * ### Example
  51274. *
  51275. * {\@example common/pipes/ts/number_pipe.ts region='NumberPipe'}
  51276. *
  51277. * \@stable
  51278. */
  51279. var DecimalPipe = /** @class */ (function () {
  51280. function DecimalPipe(_locale) {
  51281. this._locale = _locale;
  51282. }
  51283. /**
  51284. * @param {?} value
  51285. * @param {?=} digits
  51286. * @param {?=} locale
  51287. * @return {?}
  51288. */
  51289. DecimalPipe.prototype.transform = /**
  51290. * @param {?} value
  51291. * @param {?=} digits
  51292. * @param {?=} locale
  51293. * @return {?}
  51294. */
  51295. function (value, digits, locale) {
  51296. if (isEmpty(value))
  51297. return null;
  51298. locale = locale || this._locale;
  51299. var _a = formatNumber$1(value, locale, NumberFormatStyle.Decimal, digits), str = _a.str, error = _a.error;
  51300. if (error) {
  51301. throw invalidPipeArgumentError(DecimalPipe, error);
  51302. }
  51303. return str;
  51304. };
  51305. DecimalPipe.decorators = [
  51306. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'number' },] },
  51307. ];
  51308. /** @nocollapse */
  51309. DecimalPipe.ctorParameters = function () { return [
  51310. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  51311. ]; };
  51312. return DecimalPipe;
  51313. }());
  51314. /**
  51315. * \@ngModule CommonModule
  51316. * \@whatItDoes Formats a number as a percentage according to locale rules.
  51317. * \@howToUse `number_expression | percent[:digitInfo[:locale]]`
  51318. *
  51319. * \@description
  51320. *
  51321. * Formats a number as percentage.
  51322. *
  51323. * - `digitInfo` See {\@link DecimalPipe} for detailed description.
  51324. * - `locale` is a `string` defining the locale to use (uses the current {\@link LOCALE_ID} by
  51325. * default)
  51326. *
  51327. * ### Example
  51328. *
  51329. * {\@example common/pipes/ts/percent_pipe.ts region='PercentPipe'}
  51330. *
  51331. * \@stable
  51332. */
  51333. var PercentPipe = /** @class */ (function () {
  51334. function PercentPipe(_locale) {
  51335. this._locale = _locale;
  51336. }
  51337. /**
  51338. * @param {?} value
  51339. * @param {?=} digits
  51340. * @param {?=} locale
  51341. * @return {?}
  51342. */
  51343. PercentPipe.prototype.transform = /**
  51344. * @param {?} value
  51345. * @param {?=} digits
  51346. * @param {?=} locale
  51347. * @return {?}
  51348. */
  51349. function (value, digits, locale) {
  51350. if (isEmpty(value))
  51351. return null;
  51352. locale = locale || this._locale;
  51353. var _a = formatNumber$1(value, locale, NumberFormatStyle.Percent, digits), str = _a.str, error = _a.error;
  51354. if (error) {
  51355. throw invalidPipeArgumentError(PercentPipe, error);
  51356. }
  51357. return str;
  51358. };
  51359. PercentPipe.decorators = [
  51360. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'percent' },] },
  51361. ];
  51362. /** @nocollapse */
  51363. PercentPipe.ctorParameters = function () { return [
  51364. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  51365. ]; };
  51366. return PercentPipe;
  51367. }());
  51368. /**
  51369. * \@ngModule CommonModule
  51370. * \@whatItDoes Formats a number as currency using locale rules.
  51371. * \@howToUse `number_expression | currency[:currencyCode[:display[:digitInfo[:locale]]]]`
  51372. * \@description
  51373. *
  51374. * Use `currency` to format a number as currency.
  51375. *
  51376. * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such
  51377. * as `USD` for the US dollar and `EUR` for the euro.
  51378. * - `display` indicates whether to show the currency symbol or the code.
  51379. * - `code`: use code (e.g. `USD`).
  51380. * - `symbol`(default): use symbol (e.g. `$`).
  51381. * - `symbol-narrow`: some countries have two symbols for their currency, one regular and one
  51382. * narrow (e.g. the canadian dollar CAD has the symbol `CA$` and the symbol-narrow `$`).
  51383. * - boolean (deprecated from v5): `true` for symbol and false for `code`
  51384. * If there is no narrow symbol for the chosen currency, the regular symbol will be used.
  51385. * - `digitInfo` See {\@link DecimalPipe} for detailed description.
  51386. * - `locale` is a `string` defining the locale to use (uses the current {\@link LOCALE_ID} by
  51387. * default)
  51388. *
  51389. * ### Example
  51390. *
  51391. * {\@example common/pipes/ts/currency_pipe.ts region='CurrencyPipe'}
  51392. *
  51393. * \@stable
  51394. */
  51395. var CurrencyPipe = /** @class */ (function () {
  51396. function CurrencyPipe(_locale) {
  51397. this._locale = _locale;
  51398. }
  51399. /**
  51400. * @param {?} value
  51401. * @param {?=} currencyCode
  51402. * @param {?=} display
  51403. * @param {?=} digits
  51404. * @param {?=} locale
  51405. * @return {?}
  51406. */
  51407. CurrencyPipe.prototype.transform = /**
  51408. * @param {?} value
  51409. * @param {?=} currencyCode
  51410. * @param {?=} display
  51411. * @param {?=} digits
  51412. * @param {?=} locale
  51413. * @return {?}
  51414. */
  51415. function (value, currencyCode, display, digits, locale) {
  51416. if (display === void 0) { display = 'symbol'; }
  51417. if (isEmpty(value))
  51418. return null;
  51419. locale = locale || this._locale;
  51420. if (typeof display === 'boolean') {
  51421. if (/** @type {?} */ (console) && /** @type {?} */ (console.warn)) {
  51422. console.warn("Warning: the currency pipe has been changed in Angular v5. The symbolDisplay option (third parameter) is now a string instead of a boolean. The accepted values are \"code\", \"symbol\" or \"symbol-narrow\".");
  51423. }
  51424. display = display ? 'symbol' : 'code';
  51425. }
  51426. var /** @type {?} */ currency = currencyCode || 'USD';
  51427. if (display !== 'code') {
  51428. currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow');
  51429. }
  51430. var _a = formatNumber$1(value, locale, NumberFormatStyle.Currency, digits, currency), str = _a.str, error = _a.error;
  51431. if (error) {
  51432. throw invalidPipeArgumentError(CurrencyPipe, error);
  51433. }
  51434. return str;
  51435. };
  51436. CurrencyPipe.decorators = [
  51437. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'currency' },] },
  51438. ];
  51439. /** @nocollapse */
  51440. CurrencyPipe.ctorParameters = function () { return [
  51441. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__["G" /* LOCALE_ID */],] },] },
  51442. ]; };
  51443. return CurrencyPipe;
  51444. }());
  51445. /**
  51446. * @param {?} value
  51447. * @return {?}
  51448. */
  51449. function isEmpty(value) {
  51450. return value == null || value === '' || value !== value;
  51451. }
  51452. /**
  51453. * @fileoverview added by tsickle
  51454. * @suppress {checkTypes} checked by tsc
  51455. */
  51456. /**
  51457. * @license
  51458. * Copyright Google Inc. All Rights Reserved.
  51459. *
  51460. * Use of this source code is governed by an MIT-style license that can be
  51461. * found in the LICENSE file at https://angular.io/license
  51462. */
  51463. /**
  51464. * \@ngModule CommonModule
  51465. * \@whatItDoes Creates a new List or String containing a subset (slice) of the elements.
  51466. * \@howToUse `array_or_string_expression | slice:start[:end]`
  51467. * \@description
  51468. *
  51469. * Where the input expression is a `List` or `String`, and:
  51470. * - `start`: The starting index of the subset to return.
  51471. * - **a positive integer**: return the item at `start` index and all items after
  51472. * in the list or string expression.
  51473. * - **a negative integer**: return the item at `start` index from the end and all items after
  51474. * in the list or string expression.
  51475. * - **if positive and greater than the size of the expression**: return an empty list or string.
  51476. * - **if negative and greater than the size of the expression**: return entire list or string.
  51477. * - `end`: The ending index of the subset to return.
  51478. * - **omitted**: return all items until the end.
  51479. * - **if positive**: return all items before `end` index of the list or string.
  51480. * - **if negative**: return all items before `end` index from the end of the list or string.
  51481. *
  51482. * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`
  51483. * and `String.prototype.slice()`.
  51484. *
  51485. * When operating on a [List], the returned list is always a copy even when all
  51486. * the elements are being returned.
  51487. *
  51488. * When operating on a blank value, the pipe returns the blank value.
  51489. *
  51490. * ## List Example
  51491. *
  51492. * This `ngFor` example:
  51493. *
  51494. * {\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}
  51495. *
  51496. * produces the following:
  51497. *
  51498. * <li>b</li>
  51499. * <li>c</li>
  51500. *
  51501. * ## String Examples
  51502. *
  51503. * {\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}
  51504. *
  51505. * \@stable
  51506. */
  51507. var SlicePipe = /** @class */ (function () {
  51508. function SlicePipe() {
  51509. }
  51510. /**
  51511. * @param {?} value
  51512. * @param {?} start
  51513. * @param {?=} end
  51514. * @return {?}
  51515. */
  51516. SlicePipe.prototype.transform = /**
  51517. * @param {?} value
  51518. * @param {?} start
  51519. * @param {?=} end
  51520. * @return {?}
  51521. */
  51522. function (value, start, end) {
  51523. if (value == null)
  51524. return value;
  51525. if (!this.supports(value)) {
  51526. throw invalidPipeArgumentError(SlicePipe, value);
  51527. }
  51528. return value.slice(start, end);
  51529. };
  51530. /**
  51531. * @param {?} obj
  51532. * @return {?}
  51533. */
  51534. SlicePipe.prototype.supports = /**
  51535. * @param {?} obj
  51536. * @return {?}
  51537. */
  51538. function (obj) { return typeof obj === 'string' || Array.isArray(obj); };
  51539. SlicePipe.decorators = [
  51540. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["S" /* Pipe */], args: [{ name: 'slice', pure: false },] },
  51541. ];
  51542. /** @nocollapse */
  51543. SlicePipe.ctorParameters = function () { return []; };
  51544. return SlicePipe;
  51545. }());
  51546. /**
  51547. * @fileoverview added by tsickle
  51548. * @suppress {checkTypes} checked by tsc
  51549. */
  51550. /**
  51551. * @license
  51552. * Copyright Google Inc. All Rights Reserved.
  51553. *
  51554. * Use of this source code is governed by an MIT-style license that can be
  51555. * found in the LICENSE file at https://angular.io/license
  51556. */
  51557. /**
  51558. * A collection of Angular pipes that are likely to be used in each and every application.
  51559. */
  51560. var COMMON_PIPES = [
  51561. AsyncPipe,
  51562. UpperCasePipe,
  51563. LowerCasePipe,
  51564. JsonPipe,
  51565. SlicePipe,
  51566. DecimalPipe,
  51567. PercentPipe,
  51568. TitleCasePipe,
  51569. CurrencyPipe,
  51570. DatePipe,
  51571. I18nPluralPipe,
  51572. I18nSelectPipe,
  51573. ];
  51574. /**
  51575. * @fileoverview added by tsickle
  51576. * @suppress {checkTypes} checked by tsc
  51577. */
  51578. /**
  51579. * @license
  51580. * Copyright Google Inc. All Rights Reserved.
  51581. *
  51582. * Use of this source code is governed by an MIT-style license that can be
  51583. * found in the LICENSE file at https://angular.io/license
  51584. */
  51585. /**
  51586. * The module that includes all the basic Angular directives like {\@link NgIf}, {\@link NgForOf}, ...
  51587. *
  51588. * \@stable
  51589. */
  51590. var CommonModule = /** @class */ (function () {
  51591. function CommonModule() {
  51592. }
  51593. CommonModule.decorators = [
  51594. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */], args: [{
  51595. declarations: [COMMON_DIRECTIVES, COMMON_PIPES],
  51596. exports: [COMMON_DIRECTIVES, COMMON_PIPES],
  51597. providers: [
  51598. { provide: NgLocalization, useClass: NgLocaleLocalization },
  51599. ],
  51600. },] },
  51601. ];
  51602. /** @nocollapse */
  51603. CommonModule.ctorParameters = function () { return []; };
  51604. return CommonModule;
  51605. }());
  51606. var ɵ0 = getPluralCase;
  51607. /**
  51608. * A module that contains the deprecated i18n pipes.
  51609. *
  51610. * @deprecated from v5
  51611. */
  51612. var DeprecatedI18NPipesModule = /** @class */ (function () {
  51613. function DeprecatedI18NPipesModule() {
  51614. }
  51615. DeprecatedI18NPipesModule.decorators = [
  51616. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */], args: [{
  51617. declarations: [COMMON_DEPRECATED_I18N_PIPES],
  51618. exports: [COMMON_DEPRECATED_I18N_PIPES],
  51619. providers: [{ provide: DEPRECATED_PLURAL_FN, useValue: ɵ0 }],
  51620. },] },
  51621. ];
  51622. /** @nocollapse */
  51623. DeprecatedI18NPipesModule.ctorParameters = function () { return []; };
  51624. return DeprecatedI18NPipesModule;
  51625. }());
  51626. /**
  51627. * @fileoverview added by tsickle
  51628. * @suppress {checkTypes} checked by tsc
  51629. */
  51630. /**
  51631. * @license
  51632. * Copyright Google Inc. All Rights Reserved.
  51633. *
  51634. * Use of this source code is governed by an MIT-style license that can be
  51635. * found in the LICENSE file at https://angular.io/license
  51636. */
  51637. /**
  51638. * A DI Token representing the main rendering context. In a browser this is the DOM Document.
  51639. *
  51640. * Note: Document might not be available in the Application Context when Application and Rendering
  51641. * Contexts are not the same (e.g. when running the application into a Web Worker).
  51642. *
  51643. * \@stable
  51644. */
  51645. var DOCUMENT = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('DocumentToken');
  51646. /**
  51647. * @fileoverview added by tsickle
  51648. * @suppress {checkTypes} checked by tsc
  51649. */
  51650. /**
  51651. * @license
  51652. * Copyright Google Inc. All Rights Reserved.
  51653. *
  51654. * Use of this source code is governed by an MIT-style license that can be
  51655. * found in the LICENSE file at https://angular.io/license
  51656. */
  51657. var PLATFORM_BROWSER_ID = 'browser';
  51658. var PLATFORM_SERVER_ID = 'server';
  51659. var PLATFORM_WORKER_APP_ID = 'browserWorkerApp';
  51660. var PLATFORM_WORKER_UI_ID = 'browserWorkerUi';
  51661. /**
  51662. * Returns whether a platform id represents a browser platform.
  51663. * \@experimental
  51664. * @param {?} platformId
  51665. * @return {?}
  51666. */
  51667. function isPlatformBrowser(platformId) {
  51668. return platformId === PLATFORM_BROWSER_ID;
  51669. }
  51670. /**
  51671. * Returns whether a platform id represents a server platform.
  51672. * \@experimental
  51673. * @param {?} platformId
  51674. * @return {?}
  51675. */
  51676. function isPlatformServer(platformId) {
  51677. return platformId === PLATFORM_SERVER_ID;
  51678. }
  51679. /**
  51680. * Returns whether a platform id represents a web worker app platform.
  51681. * \@experimental
  51682. * @param {?} platformId
  51683. * @return {?}
  51684. */
  51685. function isPlatformWorkerApp(platformId) {
  51686. return platformId === PLATFORM_WORKER_APP_ID;
  51687. }
  51688. /**
  51689. * Returns whether a platform id represents a web worker UI platform.
  51690. * \@experimental
  51691. * @param {?} platformId
  51692. * @return {?}
  51693. */
  51694. function isPlatformWorkerUi(platformId) {
  51695. return platformId === PLATFORM_WORKER_UI_ID;
  51696. }
  51697. /**
  51698. * @fileoverview added by tsickle
  51699. * @suppress {checkTypes} checked by tsc
  51700. */
  51701. /**
  51702. * @license
  51703. * Copyright Google Inc. All Rights Reserved.
  51704. *
  51705. * Use of this source code is governed by an MIT-style license that can be
  51706. * found in the LICENSE file at https://angular.io/license
  51707. */
  51708. /**
  51709. * \@stable
  51710. */
  51711. var VERSION = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["_7" /* Version */]('5.2.11');
  51712. /**
  51713. * @fileoverview added by tsickle
  51714. * @suppress {checkTypes} checked by tsc
  51715. */
  51716. /**
  51717. * @license
  51718. * Copyright Google Inc. All Rights Reserved.
  51719. *
  51720. * Use of this source code is governed by an MIT-style license that can be
  51721. * found in the LICENSE file at https://angular.io/license
  51722. */
  51723. /**
  51724. * @module
  51725. * @description
  51726. * Entry point for all public APIs of the common package.
  51727. */
  51728. /**
  51729. * @fileoverview added by tsickle
  51730. * @suppress {checkTypes} checked by tsc
  51731. */
  51732. /**
  51733. * @license
  51734. * Copyright Google Inc. All Rights Reserved.
  51735. *
  51736. * Use of this source code is governed by an MIT-style license that can be
  51737. * found in the LICENSE file at https://angular.io/license
  51738. */
  51739. /**
  51740. * @module
  51741. * @description
  51742. * Entry point for all public APIs of this package.
  51743. */
  51744. // This file only reexports content of the `src` folder. Keep it that way.
  51745. /**
  51746. * @fileoverview added by tsickle
  51747. * @suppress {checkTypes} checked by tsc
  51748. */
  51749. /**
  51750. * Generated bundle index. Do not edit.
  51751. */
  51752. //# sourceMappingURL=common.js.map
  51753. /***/ }),
  51754. /* 68 */
  51755. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  51756. "use strict";
  51757. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return UrlSerializer; });
  51758. /* harmony export (immutable) */ __webpack_exports__["c"] = formatUrlPart;
  51759. /* unused harmony export isPartMatch */
  51760. /* unused harmony export createMatchedData */
  51761. /* unused harmony export findLinkByComponentData */
  51762. /* unused harmony export normalizeLinks */
  51763. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DeepLinkConfigToken; });
  51764. /* harmony export (immutable) */ __webpack_exports__["d"] = setupUrlSerializer;
  51765. /* unused harmony export navGroupStringtoObjects */
  51766. /* unused harmony export urlToNavGroupStrings */
  51767. /* unused harmony export convertUrlToSegments */
  51768. /* unused harmony export convertUrlToDehydratedSegments */
  51769. /* unused harmony export hydrateSegmentsWithNav */
  51770. /* unused harmony export getNavFromNavGroup */
  51771. /* unused harmony export getSegmentsFromNavGroups */
  51772. /* unused harmony export getSegmentsFromUrlPieces */
  51773. /* unused harmony export hydrateSegment */
  51774. /* unused harmony export getNonHydratedSegmentIfLinkAndUrlMatch */
  51775. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  51776. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  51777. /**
  51778. * @hidden
  51779. */
  51780. var UrlSerializer = (function () {
  51781. function UrlSerializer(_app, config) {
  51782. this._app = _app;
  51783. if (config && Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["e" /* isArray */])(config.links)) {
  51784. this.links = normalizeLinks(config.links);
  51785. }
  51786. else {
  51787. this.links = [];
  51788. }
  51789. }
  51790. /**
  51791. * Parse the URL into a Path, which is made up of multiple NavSegments.
  51792. * Match which components belong to each segment.
  51793. */
  51794. UrlSerializer.prototype.parse = function (browserUrl) {
  51795. if (browserUrl.charAt(0) === '/') {
  51796. browserUrl = browserUrl.substr(1);
  51797. }
  51798. // trim off data after ? and #
  51799. browserUrl = browserUrl.split('?')[0].split('#')[0];
  51800. return convertUrlToSegments(this._app, browserUrl, this.links);
  51801. };
  51802. UrlSerializer.prototype.createSegmentFromName = function (navContainer, nameOrComponent) {
  51803. var configLink = this.getLinkFromName(nameOrComponent);
  51804. if (configLink) {
  51805. return this._createSegment(this._app, navContainer, configLink, null);
  51806. }
  51807. return null;
  51808. };
  51809. UrlSerializer.prototype.getLinkFromName = function (nameOrComponent) {
  51810. return this.links.find(function (link) {
  51811. return (link.component === nameOrComponent) ||
  51812. (link.name === nameOrComponent);
  51813. });
  51814. };
  51815. /**
  51816. * Serialize a path, which is made up of multiple NavSegments,
  51817. * into a URL string. Turn each segment into a string and concat them to a URL.
  51818. */
  51819. UrlSerializer.prototype.serialize = function (segments) {
  51820. if (!segments || !segments.length) {
  51821. return '/';
  51822. }
  51823. var sections = segments.map(function (segment) {
  51824. if (segment.type === 'tabs') {
  51825. if (segment.requiresExplicitNavPrefix) {
  51826. return "/" + segment.type + "/" + segment.navId + "/" + segment.secondaryId + "/" + segment.id;
  51827. }
  51828. return "/" + segment.secondaryId + "/" + segment.id;
  51829. }
  51830. // it's a nav
  51831. if (segment.requiresExplicitNavPrefix) {
  51832. return "/" + segment.type + "/" + segment.navId + "/" + segment.id;
  51833. }
  51834. return "/" + segment.id;
  51835. });
  51836. return sections.join('');
  51837. };
  51838. /**
  51839. * Serializes a component and its data into a NavSegment.
  51840. */
  51841. UrlSerializer.prototype.serializeComponent = function (navContainer, component, data) {
  51842. if (component) {
  51843. var link = findLinkByComponentData(this.links, component, data);
  51844. if (link) {
  51845. return this._createSegment(this._app, navContainer, link, data);
  51846. }
  51847. }
  51848. return null;
  51849. };
  51850. /**
  51851. * @internal
  51852. */
  51853. UrlSerializer.prototype._createSegment = function (app, navContainer, configLink, data) {
  51854. var urlParts = configLink.segmentParts;
  51855. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(data)) {
  51856. // create a copy of the original parts in the link config
  51857. urlParts = urlParts.slice();
  51858. // loop through all the data and convert it to a string
  51859. var keys = Object.keys(data);
  51860. var keysLength = keys.length;
  51861. if (keysLength) {
  51862. for (var i = 0; i < urlParts.length; i++) {
  51863. if (urlParts[i].charAt(0) === ':') {
  51864. for (var j = 0; j < keysLength; j++) {
  51865. if (urlParts[i] === ":" + keys[j]) {
  51866. // this data goes into the URL part (between slashes)
  51867. urlParts[i] = encodeURIComponent(data[keys[j]]);
  51868. break;
  51869. }
  51870. }
  51871. }
  51872. }
  51873. }
  51874. }
  51875. var requiresExplicitPrefix = true;
  51876. if (navContainer.parent) {
  51877. requiresExplicitPrefix = navContainer.parent && navContainer.parent.getAllChildNavs().length > 1;
  51878. }
  51879. else {
  51880. // if it's a root nav, and there are multiple root navs, we need an explicit prefix
  51881. requiresExplicitPrefix = app.getRootNavById(navContainer.id) && app.getRootNavs().length > 1;
  51882. }
  51883. return {
  51884. id: urlParts.join('/'),
  51885. name: configLink.name,
  51886. component: configLink.component,
  51887. loadChildren: configLink.loadChildren,
  51888. data: data,
  51889. defaultHistory: configLink.defaultHistory,
  51890. navId: navContainer.name || navContainer.id,
  51891. type: navContainer.getType(),
  51892. secondaryId: navContainer.getSecondaryIdentifier(),
  51893. requiresExplicitNavPrefix: requiresExplicitPrefix
  51894. };
  51895. };
  51896. return UrlSerializer;
  51897. }());
  51898. function formatUrlPart(name) {
  51899. name = name.replace(URL_REPLACE_REG, '-');
  51900. name = name.charAt(0).toLowerCase() + name.substring(1).replace(/[A-Z]/g, function (match) {
  51901. return '-' + match.toLowerCase();
  51902. });
  51903. while (name.indexOf('--') > -1) {
  51904. name = name.replace('--', '-');
  51905. }
  51906. if (name.charAt(0) === '-') {
  51907. name = name.substring(1);
  51908. }
  51909. if (name.substring(name.length - 1) === '-') {
  51910. name = name.substring(0, name.length - 1);
  51911. }
  51912. return encodeURIComponent(name);
  51913. }
  51914. var isPartMatch = function (urlPart, configLinkPart) {
  51915. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(urlPart) && Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(configLinkPart)) {
  51916. if (configLinkPart.charAt(0) === ':') {
  51917. return true;
  51918. }
  51919. return (urlPart === configLinkPart);
  51920. }
  51921. return false;
  51922. };
  51923. var createMatchedData = function (matchedUrlParts, link) {
  51924. var data = null;
  51925. for (var i = 0; i < link.segmentPartsLen; i++) {
  51926. if (link.segmentParts[i].charAt(0) === ':') {
  51927. data = data || {};
  51928. data[link.segmentParts[i].substring(1)] = decodeURIComponent(matchedUrlParts[i]);
  51929. }
  51930. }
  51931. return data;
  51932. };
  51933. var findLinkByComponentData = function (links, component, instanceData) {
  51934. var foundLink = null;
  51935. var foundLinkDataMatches = -1;
  51936. for (var i = 0; i < links.length; i++) {
  51937. var link = links[i];
  51938. if (link.component === component) {
  51939. // ok, so the component matched, but multiple links can point
  51940. // to the same component, so let's make sure this is the right link
  51941. var dataMatches = 0;
  51942. if (instanceData) {
  51943. var instanceDataKeys = Object.keys(instanceData);
  51944. // this link has data
  51945. for (var j = 0; j < instanceDataKeys.length; j++) {
  51946. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(link.dataKeys[instanceDataKeys[j]])) {
  51947. dataMatches++;
  51948. }
  51949. }
  51950. }
  51951. else if (link.dataLen) {
  51952. // this component does not have data but the link does
  51953. continue;
  51954. }
  51955. if (dataMatches >= foundLinkDataMatches) {
  51956. foundLink = link;
  51957. foundLinkDataMatches = dataMatches;
  51958. }
  51959. }
  51960. }
  51961. return foundLink;
  51962. };
  51963. var normalizeLinks = function (links) {
  51964. for (var i = 0, ilen = links.length; i < ilen; i++) {
  51965. var link = links[i];
  51966. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["f" /* isBlank */])(link.segment)) {
  51967. link.segment = link.name;
  51968. }
  51969. link.dataKeys = {};
  51970. link.segmentParts = link.segment.split('/');
  51971. link.segmentPartsLen = link.segmentParts.length;
  51972. // used for sorting
  51973. link.staticLen = link.dataLen = 0;
  51974. var stillCountingStatic = true;
  51975. for (var j = 0; j < link.segmentPartsLen; j++) {
  51976. if (link.segmentParts[j].charAt(0) === ':') {
  51977. link.dataLen++;
  51978. stillCountingStatic = false;
  51979. link.dataKeys[link.segmentParts[j].substring(1)] = true;
  51980. }
  51981. else if (stillCountingStatic) {
  51982. link.staticLen++;
  51983. }
  51984. }
  51985. }
  51986. // sort by the number of parts, with the links
  51987. // with the most parts first
  51988. return links.sort(sortConfigLinks);
  51989. };
  51990. function sortConfigLinks(a, b) {
  51991. // sort by the number of parts
  51992. if (a.segmentPartsLen > b.segmentPartsLen) {
  51993. return -1;
  51994. }
  51995. if (a.segmentPartsLen < b.segmentPartsLen) {
  51996. return 1;
  51997. }
  51998. // sort by the number of static parts in a row
  51999. if (a.staticLen > b.staticLen) {
  52000. return -1;
  52001. }
  52002. if (a.staticLen < b.staticLen) {
  52003. return 1;
  52004. }
  52005. // sort by the number of total data parts
  52006. if (a.dataLen < b.dataLen) {
  52007. return -1;
  52008. }
  52009. if (a.dataLen > b.dataLen) {
  52010. return 1;
  52011. }
  52012. return 0;
  52013. }
  52014. var URL_REPLACE_REG = /\s+|\?|\!|\$|\,|\.|\+|\"|\'|\*|\^|\||\/|\\|\[|\]|#|%|`|>|<|;|:|@|&|=/g;
  52015. /**
  52016. * @hidden
  52017. */
  52018. var DeepLinkConfigToken = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('USERLINKS');
  52019. function setupUrlSerializer(app, userDeepLinkConfig) {
  52020. return new UrlSerializer(app, userDeepLinkConfig);
  52021. }
  52022. function navGroupStringtoObjects(navGroupStrings) {
  52023. // each string has a known format-ish, convert it to it
  52024. return navGroupStrings.map(function (navGroupString) {
  52025. var sections = navGroupString.split('/');
  52026. if (sections[0] === 'nav') {
  52027. return {
  52028. type: 'nav',
  52029. navId: sections[1],
  52030. niceId: sections[1],
  52031. secondaryId: null,
  52032. segmentPieces: sections.splice(2)
  52033. };
  52034. }
  52035. else if (sections[0] === 'tabs') {
  52036. return {
  52037. type: 'tabs',
  52038. navId: sections[1],
  52039. niceId: sections[1],
  52040. secondaryId: sections[2],
  52041. segmentPieces: sections.splice(3)
  52042. };
  52043. }
  52044. return {
  52045. type: null,
  52046. navId: null,
  52047. niceId: null,
  52048. secondaryId: null,
  52049. segmentPieces: sections
  52050. };
  52051. });
  52052. }
  52053. function urlToNavGroupStrings(url) {
  52054. var tokens = url.split('/');
  52055. var keywordIndexes = [];
  52056. for (var i = 0; i < tokens.length; i++) {
  52057. if (i !== 0 && (tokens[i] === 'nav' || tokens[i] === 'tabs')) {
  52058. keywordIndexes.push(i);
  52059. }
  52060. }
  52061. // append the last index + 1 to the list no matter what
  52062. keywordIndexes.push(tokens.length);
  52063. var groupings = [];
  52064. var activeKeywordIndex = 0;
  52065. var tmpArray = [];
  52066. for (var i = 0; i < tokens.length; i++) {
  52067. if (i >= keywordIndexes[activeKeywordIndex]) {
  52068. groupings.push(tmpArray.join('/'));
  52069. tmpArray = [];
  52070. activeKeywordIndex++;
  52071. }
  52072. tmpArray.push(tokens[i]);
  52073. }
  52074. // okay, after the loop we've gotta push one more time just to be safe
  52075. groupings.push(tmpArray.join('/'));
  52076. return groupings;
  52077. }
  52078. function convertUrlToSegments(app, url, navLinks) {
  52079. var pairs = convertUrlToDehydratedSegments(url, navLinks);
  52080. return hydrateSegmentsWithNav(app, pairs);
  52081. }
  52082. function convertUrlToDehydratedSegments(url, navLinks) {
  52083. var navGroupStrings = urlToNavGroupStrings(url);
  52084. var navGroups = navGroupStringtoObjects(navGroupStrings);
  52085. return getSegmentsFromNavGroups(navGroups, navLinks);
  52086. }
  52087. function hydrateSegmentsWithNav(app, dehydratedSegmentPairs) {
  52088. var segments = [];
  52089. for (var i = 0; i < dehydratedSegmentPairs.length; i++) {
  52090. var navs = getNavFromNavGroup(dehydratedSegmentPairs[i].navGroup, app);
  52091. // okay, cool, let's walk through the segments and hydrate them
  52092. for (var _i = 0, _a = dehydratedSegmentPairs[i].segments; _i < _a.length; _i++) {
  52093. var dehydratedSegment = _a[_i];
  52094. if (navs.length === 1) {
  52095. segments.push(hydrateSegment(dehydratedSegment, navs[0]));
  52096. navs = navs[0].getActiveChildNavs();
  52097. }
  52098. else if (navs.length > 1) {
  52099. // this is almost certainly an async race condition bug in userland
  52100. // if you're in this state, it would be nice to just bail here
  52101. // but alas we must perservere and handle the issue
  52102. // the simple solution is to just use the last child
  52103. // because that is probably what the user wants anyway
  52104. // remember, do not harm, even if it makes our shizzle ugly
  52105. segments.push(hydrateSegment(dehydratedSegment, navs[navs.length - 1]));
  52106. navs = navs[navs.length - 1].getActiveChildNavs();
  52107. }
  52108. else {
  52109. break;
  52110. }
  52111. }
  52112. }
  52113. return segments;
  52114. }
  52115. function getNavFromNavGroup(navGroup, app) {
  52116. if (navGroup.navId) {
  52117. var rootNav = app.getNavByIdOrName(navGroup.navId);
  52118. if (rootNav) {
  52119. return [rootNav];
  52120. }
  52121. return [];
  52122. }
  52123. // we don't know what nav to use, so just use the root nav.
  52124. // if there is more than one root nav, throw an error
  52125. return app.getRootNavs();
  52126. }
  52127. /*
  52128. * Let's face the facts: Getting a dehydrated segment from the url is really hard
  52129. * because we need to do a ton of crazy looping
  52130. * the are chunks of a url that are totally irrelevant at this stage, such as the secondary identifier
  52131. * stating which tab is selected, etc.
  52132. * but is necessary.
  52133. * We look at segment pieces in reverse order to try to build segments
  52134. * as in, if you had an array like this
  52135. * ['my', 'super', 'cool', 'url']
  52136. * we want to look at the pieces in reverse order:
  52137. * url
  52138. * cool url
  52139. * super cool url
  52140. * my super cool url
  52141. * cool
  52142. * super cool
  52143. * my super cool
  52144. * super
  52145. * my super
  52146. * my
  52147. **/
  52148. function getSegmentsFromNavGroups(navGroups, navLinks) {
  52149. var pairs = [];
  52150. var usedNavLinks = new Set();
  52151. for (var _i = 0, navGroups_1 = navGroups; _i < navGroups_1.length; _i++) {
  52152. var navGroup = navGroups_1[_i];
  52153. var segments = [];
  52154. var segmentPieces = navGroup.segmentPieces.concat([]);
  52155. for (var i = segmentPieces.length; i >= 0; i--) {
  52156. var created = false;
  52157. for (var j = 0; j < i; j++) {
  52158. var startIndex = i - j - 1;
  52159. var endIndex = i;
  52160. var subsetOfUrl = segmentPieces.slice(startIndex, endIndex);
  52161. for (var _a = 0, navLinks_1 = navLinks; _a < navLinks_1.length; _a++) {
  52162. var navLink = navLinks_1[_a];
  52163. if (!usedNavLinks.has(navLink.name)) {
  52164. var segment = getSegmentsFromUrlPieces(subsetOfUrl, navLink);
  52165. if (segment) {
  52166. i = startIndex + 1;
  52167. usedNavLinks.add(navLink.name);
  52168. created = true;
  52169. // sweet, we found a segment
  52170. segments.push(segment);
  52171. // now we want to null out the url subsection in the segmentPieces
  52172. for (var k = startIndex; k < endIndex; k++) {
  52173. segmentPieces[k] = null;
  52174. }
  52175. break;
  52176. }
  52177. }
  52178. }
  52179. if (created) {
  52180. break;
  52181. }
  52182. }
  52183. if (!created && segmentPieces[i - 1]) {
  52184. // this is very likely a tab's secondary identifier
  52185. segments.push({
  52186. id: null,
  52187. name: null,
  52188. secondaryId: segmentPieces[i - 1],
  52189. component: null,
  52190. loadChildren: null,
  52191. data: null,
  52192. defaultHistory: null
  52193. });
  52194. }
  52195. }
  52196. // since we're getting segments in from right-to-left in the url, reverse them
  52197. // so they're in the correct order. Also filter out and bogus segments
  52198. var orderedSegments = segments.reverse();
  52199. // okay, this is the lazy persons approach here.
  52200. // so here's the deal! Right now if section of the url is not a part of a segment
  52201. // it is almost certainly the secondaryId for a tabs component
  52202. // basically, knowing the segment for the `tab` itself is good, but we also need to know
  52203. // which tab is selected, so we have an identifer in the url that is associated with the tabs component
  52204. // telling us which tab is selected. With that in mind, we are going to go through and find the segments with only secondary identifiers,
  52205. // and simply add the secondaryId to the next segment, and then remove the empty segment from the list
  52206. for (var i = 0; i < orderedSegments.length; i++) {
  52207. if (orderedSegments[i].secondaryId && !orderedSegments[i].id && ((i + 1) <= orderedSegments.length - 1)) {
  52208. orderedSegments[i + 1].secondaryId = orderedSegments[i].secondaryId;
  52209. orderedSegments[i] = null;
  52210. }
  52211. }
  52212. var cleanedSegments = segments.filter(function (segment) { return !!segment; });
  52213. // if the nav group has a secondary id, make sure the first segment also has it set
  52214. if (navGroup.secondaryId && segments.length) {
  52215. cleanedSegments[0].secondaryId = navGroup.secondaryId;
  52216. }
  52217. pairs.push({
  52218. navGroup: navGroup,
  52219. segments: cleanedSegments
  52220. });
  52221. }
  52222. return pairs;
  52223. }
  52224. function getSegmentsFromUrlPieces(urlSections, navLink) {
  52225. if (navLink.segmentPartsLen !== urlSections.length) {
  52226. return null;
  52227. }
  52228. for (var i = 0; i < urlSections.length; i++) {
  52229. if (!isPartMatch(urlSections[i], navLink.segmentParts[i])) {
  52230. // just return an empty array if the part doesn't match
  52231. return null;
  52232. }
  52233. }
  52234. return {
  52235. id: urlSections.join('/'),
  52236. name: navLink.name,
  52237. component: navLink.component,
  52238. loadChildren: navLink.loadChildren,
  52239. data: createMatchedData(urlSections, navLink),
  52240. defaultHistory: navLink.defaultHistory
  52241. };
  52242. }
  52243. function hydrateSegment(segment, nav) {
  52244. var hydratedSegment = Object.assign({}, segment);
  52245. hydratedSegment.type = nav.getType();
  52246. hydratedSegment.navId = nav.name || nav.id;
  52247. // secondaryId is set on an empty dehydrated segment in the case of tabs to identify which tab is selected
  52248. hydratedSegment.secondaryId = segment.secondaryId;
  52249. return hydratedSegment;
  52250. }
  52251. function getNonHydratedSegmentIfLinkAndUrlMatch(urlChunks, navLink) {
  52252. var allSegmentsMatch = true;
  52253. for (var i = 0; i < urlChunks.length; i++) {
  52254. if (!isPartMatch(urlChunks[i], navLink.segmentParts[i])) {
  52255. allSegmentsMatch = false;
  52256. break;
  52257. }
  52258. }
  52259. if (allSegmentsMatch) {
  52260. return {
  52261. id: navLink.segmentParts.join('/'),
  52262. name: navLink.name,
  52263. component: navLink.component,
  52264. loadChildren: navLink.loadChildren,
  52265. data: createMatchedData(urlChunks, navLink),
  52266. defaultHistory: navLink.defaultHistory
  52267. };
  52268. }
  52269. return null;
  52270. }
  52271. //# sourceMappingURL=url-serializer.js.map
  52272. /***/ }),
  52273. /* 69 */
  52274. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  52275. "use strict";
  52276. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavControllerBase; });
  52277. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  52278. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__nav_util__ = __webpack_require__(34);
  52279. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  52280. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__view_controller__ = __webpack_require__(9);
  52281. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_ion__ = __webpack_require__(8);
  52282. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__nav_controller__ = __webpack_require__(35);
  52283. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__nav_params__ = __webpack_require__(23);
  52284. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__swipe_back__ = __webpack_require__(360);
  52285. var __extends = (this && this.__extends) || (function () {
  52286. var extendStatics = Object.setPrototypeOf ||
  52287. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  52288. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  52289. return function (d, b) {
  52290. extendStatics(d, b);
  52291. function __() { this.constructor = d; }
  52292. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  52293. };
  52294. })();
  52295. /**
  52296. * @hidden
  52297. * This class is for internal use only. It is not exported publicly.
  52298. */
  52299. var NavControllerBase = (function (_super) {
  52300. __extends(NavControllerBase, _super);
  52301. function NavControllerBase(parent, _app, config, plt, elementRef, _zone, renderer, _cfr, _gestureCtrl, _trnsCtrl, _linker, _domCtrl, _errHandler) {
  52302. var _this = _super.call(this, config, elementRef, renderer) || this;
  52303. _this.parent = parent;
  52304. _this._app = _app;
  52305. _this.config = config;
  52306. _this.plt = plt;
  52307. _this._zone = _zone;
  52308. _this._cfr = _cfr;
  52309. _this._gestureCtrl = _gestureCtrl;
  52310. _this._trnsCtrl = _trnsCtrl;
  52311. _this._linker = _linker;
  52312. _this._domCtrl = _domCtrl;
  52313. _this._errHandler = _errHandler;
  52314. _this._ids = -1;
  52315. _this._init = false;
  52316. _this._queue = [];
  52317. _this._trnsId = null;
  52318. _this._trnsTm = false;
  52319. _this._views = [];
  52320. _this._zIndexOffset = 0;
  52321. _this.viewDidLoad = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  52322. _this.viewWillEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  52323. _this.viewDidEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  52324. _this.viewWillLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  52325. _this.viewDidLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  52326. _this.viewWillUnload = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  52327. _this._sbEnabled = config.getBoolean('swipeBackEnabled');
  52328. _this._children = [];
  52329. _this.id = 'n' + (++ctrlIds);
  52330. _this._destroyed = false;
  52331. return _this;
  52332. }
  52333. Object.defineProperty(NavControllerBase.prototype, "swipeBackEnabled", {
  52334. get: function () {
  52335. return this._sbEnabled;
  52336. },
  52337. set: function (val) {
  52338. this._sbEnabled = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["o" /* isTrueProperty */])(val);
  52339. this._swipeBackCheck();
  52340. },
  52341. enumerable: true,
  52342. configurable: true
  52343. });
  52344. NavControllerBase.prototype.push = function (page, params, opts, done) {
  52345. return this._queueTrns({
  52346. insertStart: -1,
  52347. insertViews: [{ page: page, params: params }],
  52348. opts: opts,
  52349. }, done);
  52350. };
  52351. NavControllerBase.prototype.insert = function (insertIndex, page, params, opts, done) {
  52352. return this._queueTrns({
  52353. insertStart: insertIndex,
  52354. insertViews: [{ page: page, params: params }],
  52355. opts: opts,
  52356. }, done);
  52357. };
  52358. NavControllerBase.prototype.insertPages = function (insertIndex, insertPages, opts, done) {
  52359. return this._queueTrns({
  52360. insertStart: insertIndex,
  52361. insertViews: insertPages,
  52362. opts: opts,
  52363. }, done);
  52364. };
  52365. NavControllerBase.prototype.pop = function (opts, done) {
  52366. return this._queueTrns({
  52367. removeStart: -1,
  52368. removeCount: 1,
  52369. opts: opts,
  52370. }, done);
  52371. };
  52372. NavControllerBase.prototype.popTo = function (indexOrViewCtrl, opts, done) {
  52373. var config = {
  52374. removeStart: -1,
  52375. removeCount: -1,
  52376. opts: opts
  52377. };
  52378. if (Object(__WEBPACK_IMPORTED_MODULE_3__view_controller__["b" /* isViewController */])(indexOrViewCtrl)) {
  52379. config.removeView = indexOrViewCtrl;
  52380. config.removeStart = 1;
  52381. }
  52382. else if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["j" /* isNumber */])(indexOrViewCtrl)) {
  52383. config.removeStart = indexOrViewCtrl + 1;
  52384. }
  52385. return this._queueTrns(config, done);
  52386. };
  52387. NavControllerBase.prototype.popToRoot = function (opts, done) {
  52388. return this._queueTrns({
  52389. removeStart: 1,
  52390. removeCount: -1,
  52391. opts: opts,
  52392. }, done);
  52393. };
  52394. NavControllerBase.prototype.popAll = function () {
  52395. var promises = [];
  52396. for (var i = this._views.length - 1; i >= 0; i--) {
  52397. promises.push(this.pop(null));
  52398. }
  52399. return Promise.all(promises);
  52400. };
  52401. NavControllerBase.prototype.remove = function (startIndex, removeCount, opts, done) {
  52402. if (removeCount === void 0) { removeCount = 1; }
  52403. return this._queueTrns({
  52404. removeStart: startIndex,
  52405. removeCount: removeCount,
  52406. opts: opts,
  52407. }, done);
  52408. };
  52409. NavControllerBase.prototype.removeView = function (viewController, opts, done) {
  52410. return this._queueTrns({
  52411. removeView: viewController,
  52412. removeStart: 0,
  52413. removeCount: 1,
  52414. opts: opts,
  52415. }, done);
  52416. };
  52417. NavControllerBase.prototype.setRoot = function (pageOrViewCtrl, params, opts, done) {
  52418. return this.setPages([{ page: pageOrViewCtrl, params: params }], opts, done);
  52419. };
  52420. NavControllerBase.prototype.setPages = function (viewControllers, opts, done) {
  52421. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["f" /* isBlank */])(opts)) {
  52422. opts = {};
  52423. }
  52424. // if animation wasn't set to true then default it to NOT animate
  52425. if (opts.animate !== true) {
  52426. opts.animate = false;
  52427. }
  52428. return this._queueTrns({
  52429. insertStart: 0,
  52430. insertViews: viewControllers,
  52431. removeStart: 0,
  52432. removeCount: -1,
  52433. opts: opts
  52434. }, done);
  52435. };
  52436. // _queueTrns() adds a navigation stack change to the queue and schedules it to run:
  52437. // 1. _nextTrns(): consumes the next transition in the queue
  52438. // 2. _viewInit(): initializes enteringView if required
  52439. // 3. _viewTest(): ensures canLeave/canEnter returns true, so the operation can continue
  52440. // 4. _postViewInit(): add/remove the views from the navigation stack
  52441. // 5. _transitionInit(): initializes the visual transition if required and schedules it to run
  52442. // 6. _viewAttachToDOM(): attaches the enteringView to the DOM
  52443. // 7. _transitionStart(): called once the transition actually starts, it initializes the Animation underneath.
  52444. // 8. _transitionFinish(): called once the transition finishes
  52445. // 9. _cleanup(): syncs the navigation internal state with the DOM. For example it removes the pages from the DOM or hides/show them.
  52446. NavControllerBase.prototype._queueTrns = function (ti, done) {
  52447. var promise = new Promise(function (resolve, reject) {
  52448. ti.resolve = resolve;
  52449. ti.reject = reject;
  52450. });
  52451. ti.done = done;
  52452. // Normalize empty
  52453. if (ti.insertViews && ti.insertViews.length === 0) {
  52454. ti.insertViews = undefined;
  52455. }
  52456. // Enqueue transition instruction
  52457. this._queue.push(ti);
  52458. // if there isn't a transition already happening
  52459. // then this will kick off this transition
  52460. this._nextTrns();
  52461. return promise;
  52462. };
  52463. NavControllerBase.prototype._success = function (result, ti) {
  52464. if (this._queue === null) {
  52465. this._fireError('nav controller was destroyed', ti);
  52466. return;
  52467. }
  52468. this._init = true;
  52469. this._trnsId = null;
  52470. // ensure we're not transitioning here
  52471. this.setTransitioning(false);
  52472. this._swipeBackCheck();
  52473. // let's see if there's another to kick off
  52474. this._nextTrns();
  52475. if (ti.done) {
  52476. ti.done(result.hasCompleted, result.requiresTransition, result.enteringName, result.leavingName, result.direction);
  52477. }
  52478. ti.resolve(result.hasCompleted);
  52479. };
  52480. NavControllerBase.prototype._failed = function (rejectReason, ti) {
  52481. if (this._queue === null) {
  52482. this._fireError('nav controller was destroyed', ti);
  52483. return;
  52484. }
  52485. this._trnsId = null;
  52486. this._queue.length = 0;
  52487. // let's see if there's another to kick off
  52488. this.setTransitioning(false);
  52489. this._swipeBackCheck();
  52490. this._nextTrns();
  52491. this._fireError(rejectReason, ti);
  52492. };
  52493. NavControllerBase.prototype._fireError = function (rejectReason, ti) {
  52494. if (ti.done) {
  52495. ti.done(false, false, rejectReason);
  52496. }
  52497. if (ti.reject && !this._destroyed) {
  52498. ti.reject(rejectReason);
  52499. }
  52500. else {
  52501. ti.resolve(false);
  52502. }
  52503. };
  52504. NavControllerBase.prototype._nextTrns = function () {
  52505. var _this = this;
  52506. // this is the framework's bread 'n butta function
  52507. // only one transition is allowed at any given time
  52508. if (this.isTransitioning()) {
  52509. return false;
  52510. }
  52511. // there is no transition happening right now
  52512. // get the next instruction
  52513. var ti = this._queue.shift();
  52514. if (!ti) {
  52515. return false;
  52516. }
  52517. // set that this nav is actively transitioning
  52518. var enteringView;
  52519. var leavingView;
  52520. this._startTI(ti)
  52521. .then(function () { return _this._loadLazyLoading(ti); })
  52522. .then(function () {
  52523. leavingView = _this.getActive();
  52524. enteringView = _this._getEnteringView(ti, leavingView);
  52525. if (!leavingView && !enteringView) {
  52526. throw 'no views in the stack to be removed';
  52527. }
  52528. if (enteringView && enteringView._state === __WEBPACK_IMPORTED_MODULE_1__nav_util__["h" /* STATE_NEW */]) {
  52529. _this._viewInit(enteringView);
  52530. }
  52531. // Needs transition?
  52532. ti.requiresTransition = (ti.enteringRequiresTransition || ti.leavingRequiresTransition) && enteringView !== leavingView;
  52533. })
  52534. .then(function () { return _this._viewTest(enteringView, leavingView, ti); })
  52535. .then(function () { return _this._postViewInit(enteringView, leavingView, ti); })
  52536. .then(function () { return _this._transition(enteringView, leavingView, ti); })
  52537. .then(function (result) { return _this._success(result, ti); })
  52538. .catch(function (rejectReason) { return _this._failed(rejectReason, ti); });
  52539. return true;
  52540. };
  52541. NavControllerBase.prototype._startTI = function (ti) {
  52542. var viewsLength = this._views.length;
  52543. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(ti.removeView)) {
  52544. (void 0) /* assert */;
  52545. (void 0) /* assert */;
  52546. var index = this.indexOf(ti.removeView);
  52547. if (index < 0) {
  52548. return Promise.reject('removeView was not found');
  52549. }
  52550. ti.removeStart += index;
  52551. }
  52552. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(ti.removeStart)) {
  52553. if (ti.removeStart < 0) {
  52554. ti.removeStart = (viewsLength - 1);
  52555. }
  52556. if (ti.removeCount < 0) {
  52557. ti.removeCount = (viewsLength - ti.removeStart);
  52558. }
  52559. ti.leavingRequiresTransition = (ti.removeCount > 0) && ((ti.removeStart + ti.removeCount) === viewsLength);
  52560. }
  52561. if (ti.insertViews) {
  52562. // allow -1 to be passed in to auto push it on the end
  52563. // and clean up the index if it's larger then the size of the stack
  52564. if (ti.insertStart < 0 || ti.insertStart > viewsLength) {
  52565. ti.insertStart = viewsLength;
  52566. }
  52567. ti.enteringRequiresTransition = (ti.insertStart === viewsLength);
  52568. }
  52569. this.setTransitioning(true);
  52570. return Promise.resolve();
  52571. };
  52572. NavControllerBase.prototype._loadLazyLoading = function (ti) {
  52573. var _this = this;
  52574. var insertViews = ti.insertViews;
  52575. if (insertViews) {
  52576. (void 0) /* assert */;
  52577. return Object(__WEBPACK_IMPORTED_MODULE_1__nav_util__["i" /* convertToViews */])(this._linker, insertViews).then(function (viewControllers) {
  52578. (void 0) /* assert */;
  52579. viewControllers = viewControllers.filter(function (v) { return v !== null; });
  52580. if (viewControllers.length === 0) {
  52581. throw 'invalid views to insert';
  52582. }
  52583. // Check all the inserted view are correct
  52584. for (var i = 0; i < viewControllers.length; i++) {
  52585. var view = viewControllers[i];
  52586. var nav = view._nav;
  52587. if (nav && nav !== _this) {
  52588. throw 'inserted view was already inserted';
  52589. }
  52590. if (view._state === __WEBPACK_IMPORTED_MODULE_1__nav_util__["f" /* STATE_DESTROYED */]) {
  52591. throw 'inserted view was already destroyed';
  52592. }
  52593. }
  52594. ti.insertViews = viewControllers;
  52595. });
  52596. }
  52597. return Promise.resolve();
  52598. };
  52599. NavControllerBase.prototype._getEnteringView = function (ti, leavingView) {
  52600. var insertViews = ti.insertViews;
  52601. if (insertViews) {
  52602. // grab the very last view of the views to be inserted
  52603. // and initialize it as the new entering view
  52604. return insertViews[insertViews.length - 1];
  52605. }
  52606. var removeStart = ti.removeStart;
  52607. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(removeStart)) {
  52608. var views = this._views;
  52609. var removeEnd = removeStart + ti.removeCount;
  52610. var i;
  52611. var view;
  52612. for (i = views.length - 1; i >= 0; i--) {
  52613. view = views[i];
  52614. if ((i < removeStart || i >= removeEnd) && view !== leavingView) {
  52615. return view;
  52616. }
  52617. }
  52618. }
  52619. return null;
  52620. };
  52621. NavControllerBase.prototype._postViewInit = function (enteringView, leavingView, ti) {
  52622. var _this = this;
  52623. (void 0) /* assert */;
  52624. (void 0) /* assert */;
  52625. (void 0) /* assert */;
  52626. var opts = ti.opts || {};
  52627. var insertViews = ti.insertViews;
  52628. var removeStart = ti.removeStart;
  52629. var removeCount = ti.removeCount;
  52630. var view;
  52631. var i;
  52632. var destroyQueue;
  52633. // there are views to remove
  52634. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(removeStart)) {
  52635. (void 0) /* assert */;
  52636. (void 0) /* assert */;
  52637. destroyQueue = [];
  52638. for (i = 0; i < removeCount; i++) {
  52639. view = this._views[i + removeStart];
  52640. if (view && view !== enteringView && view !== leavingView) {
  52641. destroyQueue.push(view);
  52642. }
  52643. }
  52644. // default the direction to "back"
  52645. opts.direction = opts.direction || __WEBPACK_IMPORTED_MODULE_1__nav_util__["a" /* DIRECTION_BACK */];
  52646. }
  52647. var finalBalance = this._views.length + (insertViews ? insertViews.length : 0) - (removeCount ? removeCount : 0);
  52648. (void 0) /* assert */;
  52649. if (finalBalance === 0 && !this._isPortal) {
  52650. console.warn("You can't remove all the pages in the navigation stack. nav.pop() is probably called too many times.", this, this.getNativeElement());
  52651. throw 'navigation stack needs at least one root page';
  52652. }
  52653. // At this point the transition can not be rejected, any throw should be an error
  52654. // there are views to insert
  52655. if (insertViews) {
  52656. // manually set the new view's id if an id was passed in the options
  52657. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(opts.id)) {
  52658. enteringView.id = opts.id;
  52659. }
  52660. // add the views to the
  52661. for (i = 0; i < insertViews.length; i++) {
  52662. view = insertViews[i];
  52663. this._insertViewAt(view, ti.insertStart + i);
  52664. }
  52665. if (ti.enteringRequiresTransition) {
  52666. // default to forward if not already set
  52667. opts.direction = opts.direction || __WEBPACK_IMPORTED_MODULE_1__nav_util__["b" /* DIRECTION_FORWARD */];
  52668. }
  52669. }
  52670. // if the views to be removed are in the beginning or middle
  52671. // and there is not a view that needs to visually transition out
  52672. // then just destroy them and don't transition anything
  52673. // batch all of lifecycles together
  52674. // let's make sure, callbacks are zoned
  52675. if (destroyQueue && destroyQueue.length > 0) {
  52676. this._zone.run(function () {
  52677. for (i = 0; i < destroyQueue.length; i++) {
  52678. view = destroyQueue[i];
  52679. _this._willLeave(view, true);
  52680. _this._didLeave(view);
  52681. _this._willUnload(view);
  52682. }
  52683. });
  52684. // once all lifecycle events has been delivered, we can safely detroy the views
  52685. for (i = 0; i < destroyQueue.length; i++) {
  52686. this._destroyView(destroyQueue[i]);
  52687. }
  52688. }
  52689. // set which animation it should use if it wasn't set yet
  52690. if (ti.requiresTransition && !opts.animation) {
  52691. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(ti.removeStart)) {
  52692. opts.animation = (leavingView || enteringView).getTransitionName(opts.direction);
  52693. }
  52694. else {
  52695. opts.animation = (enteringView || leavingView).getTransitionName(opts.direction);
  52696. }
  52697. }
  52698. ti.opts = opts;
  52699. };
  52700. /**
  52701. * DOM WRITE
  52702. */
  52703. NavControllerBase.prototype._viewInit = function (enteringView) {
  52704. (void 0) /* assert */;
  52705. (void 0) /* assert */;
  52706. // render the entering view, and all child navs and views
  52707. // entering view has not been initialized yet
  52708. var componentProviders = __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* ReflectiveInjector */].resolve([
  52709. { provide: __WEBPACK_IMPORTED_MODULE_5__nav_controller__["a" /* NavController */], useValue: this },
  52710. { provide: __WEBPACK_IMPORTED_MODULE_3__view_controller__["a" /* ViewController */], useValue: enteringView },
  52711. { provide: __WEBPACK_IMPORTED_MODULE_6__nav_params__["a" /* NavParams */], useValue: enteringView.getNavParams() }
  52712. ]);
  52713. var componentFactory = this._linker.resolveComponent(enteringView.component);
  52714. var childInjector = __WEBPACK_IMPORTED_MODULE_0__angular_core__["U" /* ReflectiveInjector */].fromResolvedProviders(componentProviders, this._viewport.parentInjector);
  52715. // create ComponentRef and set it to the entering view
  52716. enteringView.init(componentFactory.create(childInjector, []));
  52717. enteringView._state = __WEBPACK_IMPORTED_MODULE_1__nav_util__["g" /* STATE_INITIALIZED */];
  52718. this._preLoad(enteringView);
  52719. };
  52720. NavControllerBase.prototype._viewAttachToDOM = function (view, componentRef, viewport) {
  52721. (void 0) /* assert */;
  52722. (void 0) /* assert */;
  52723. // fire willLoad before change detection runs
  52724. this._willLoad(view);
  52725. // render the component ref instance to the DOM
  52726. // ******** DOM WRITE ****************
  52727. viewport.insert(componentRef.hostView, viewport.length);
  52728. view._state = __WEBPACK_IMPORTED_MODULE_1__nav_util__["e" /* STATE_ATTACHED */];
  52729. if (view._cssClass) {
  52730. // the ElementRef of the actual ion-page created
  52731. var pageElement = componentRef.location.nativeElement;
  52732. // ******** DOM WRITE ****************
  52733. this._renderer.setElementClass(pageElement, view._cssClass, true);
  52734. }
  52735. componentRef.changeDetectorRef.detectChanges();
  52736. // successfully finished loading the entering view
  52737. // fire off the "didLoad" lifecycle events
  52738. this._zone.run(this._didLoad.bind(this, view));
  52739. };
  52740. NavControllerBase.prototype._viewTest = function (enteringView, leavingView, ti) {
  52741. // Only test canLeave/canEnter if there is transition
  52742. if (!ti.requiresTransition) {
  52743. return Promise.resolve();
  52744. }
  52745. var promises = [];
  52746. if (leavingView) {
  52747. promises.push(leavingView._lifecycleTest('Leave'));
  52748. }
  52749. if (enteringView) {
  52750. promises.push(enteringView._lifecycleTest('Enter'));
  52751. }
  52752. if (promises.length === 0) {
  52753. return Promise.resolve();
  52754. }
  52755. // darn, async promises, gotta wait for them to resolve
  52756. return Promise.all(promises).then(function (values) {
  52757. if (values.some(function (result) { return result === false; })) {
  52758. throw 'canEnter/Leave returned false';
  52759. }
  52760. }).catch(function (reason) {
  52761. // Do not
  52762. ti.reject = null;
  52763. throw reason;
  52764. });
  52765. };
  52766. NavControllerBase.prototype._transition = function (enteringView, leavingView, ti) {
  52767. var _this = this;
  52768. if (!ti.requiresTransition) {
  52769. // transition is not required, so we are already done!
  52770. // they're inserting/removing the views somewhere in the middle or
  52771. // beginning, so visually nothing needs to animate/transition
  52772. // resolve immediately because there's no animation that's happening
  52773. return Promise.resolve({
  52774. hasCompleted: true,
  52775. requiresTransition: false
  52776. });
  52777. }
  52778. var opts = ti.opts;
  52779. // figure out if this transition is the root one or a
  52780. // child of a parent nav that has the root transition
  52781. this._trnsId = this._trnsCtrl.getRootTrnsId(this);
  52782. if (this._trnsId === null) {
  52783. // this is the root transition, meaning all child navs and their views
  52784. // should be added as a child transition to this one
  52785. this._trnsId = this._trnsCtrl.nextId();
  52786. }
  52787. // create the transition options
  52788. var animationOpts = {
  52789. animation: opts.animation,
  52790. direction: opts.direction,
  52791. duration: (opts.animate === false ? 0 : opts.duration),
  52792. easing: opts.easing,
  52793. isRTL: this._config.plt.isRTL,
  52794. ev: opts.ev,
  52795. };
  52796. // create the transition animation from the TransitionController
  52797. // this will either create the root transition, or add it as a child transition
  52798. var transition = this._trnsCtrl.get(this._trnsId, enteringView, leavingView, animationOpts);
  52799. // ensure any swipeback transitions are cleared out
  52800. this._sbTrns && this._sbTrns.destroy();
  52801. this._sbTrns = null;
  52802. // swipe to go back root transition
  52803. if (transition.isRoot() && opts.progressAnimation) {
  52804. this._sbTrns = transition;
  52805. }
  52806. // transition start has to be registered before attaching the view to the DOM!
  52807. var promise = new Promise(function (resolve) { return transition.registerStart(resolve); }).then(function () {
  52808. return _this._transitionStart(transition, enteringView, leavingView, opts);
  52809. });
  52810. if (enteringView && (enteringView._state === __WEBPACK_IMPORTED_MODULE_1__nav_util__["g" /* STATE_INITIALIZED */])) {
  52811. // render the entering component in the DOM
  52812. // this would also render new child navs/views
  52813. // which may have their very own async canEnter/Leave tests
  52814. // ******** DOM WRITE ****************
  52815. this._viewAttachToDOM(enteringView, enteringView._cmp, this._viewport);
  52816. }
  52817. if (!transition.hasChildren) {
  52818. // lowest level transition, so kick it off and let it bubble up to start all of them
  52819. transition.start();
  52820. }
  52821. return promise;
  52822. };
  52823. NavControllerBase.prototype._transitionStart = function (transition, enteringView, leavingView, opts) {
  52824. var _this = this;
  52825. (void 0) /* assert */;
  52826. this._trnsId = null;
  52827. // set the correct zIndex for the entering and leaving views
  52828. // ******** DOM WRITE ****************
  52829. Object(__WEBPACK_IMPORTED_MODULE_1__nav_util__["n" /* setZIndex */])(this, enteringView, leavingView, opts.direction, this._renderer);
  52830. // always ensure the entering view is viewable
  52831. // ******** DOM WRITE ****************
  52832. enteringView && enteringView._domShow(true, this._renderer);
  52833. // always ensure the leaving view is viewable
  52834. // ******** DOM WRITE ****************
  52835. leavingView && leavingView._domShow(true, this._renderer);
  52836. // initialize the transition
  52837. transition.init();
  52838. // we should animate (duration > 0) if the pushed page is not the first one (startup)
  52839. // or if it is a portal (modal, actionsheet, etc.)
  52840. var isFirstPage = !this._init && this._views.length === 1;
  52841. var shouldNotAnimate = isFirstPage && !this._isPortal;
  52842. var canNotAnimate = this._config.get('animate') === false;
  52843. if (shouldNotAnimate || canNotAnimate) {
  52844. opts.animate = false;
  52845. }
  52846. if (opts.animate === false) {
  52847. // if it was somehow set to not animation, then make the duration zero
  52848. transition.duration(0);
  52849. }
  52850. // create a callback that needs to run within zone
  52851. // that will fire off the willEnter/Leave lifecycle events at the right time
  52852. transition.beforeAddRead(this._viewsWillLifecycles.bind(this, enteringView, leavingView));
  52853. // get the set duration of this transition
  52854. var duration = transition.getDuration();
  52855. // create a callback for when the animation is done
  52856. var promise = new Promise(function (resolve) {
  52857. transition.onFinish(resolve);
  52858. });
  52859. if (transition.isRoot()) {
  52860. // this is the top most, or only active transition, so disable the app
  52861. // add XXms to the duration the app is disabled when the keyboard is open
  52862. if (duration > DISABLE_APP_MINIMUM_DURATION && opts.disableApp !== false) {
  52863. // if this transition has a duration and this is the root transition
  52864. // then set that the app is actively disabled
  52865. this._app.setEnabled(false, duration + ACTIVE_TRANSITION_OFFSET, opts.minClickBlockDuration);
  52866. }
  52867. else {
  52868. (void 0) /* console.debug */;
  52869. }
  52870. // cool, let's do this, start the transition
  52871. if (opts.progressAnimation) {
  52872. // this is a swipe to go back, just get the transition progress ready
  52873. // kick off the swipe animation start
  52874. transition.progressStart();
  52875. }
  52876. else {
  52877. // only the top level transition should actually start "play"
  52878. // kick it off and let it play through
  52879. // ******** DOM WRITE ****************
  52880. transition.play();
  52881. }
  52882. }
  52883. return promise.then(function () { return _this._zone.run(function () {
  52884. return _this._transitionFinish(transition, opts);
  52885. }); });
  52886. };
  52887. NavControllerBase.prototype._transitionFinish = function (transition, opts) {
  52888. var hasCompleted = transition.hasCompleted;
  52889. var enteringView = transition.enteringView;
  52890. var leavingView = transition.leavingView;
  52891. // mainly for testing
  52892. var enteringName;
  52893. var leavingName;
  52894. if (hasCompleted) {
  52895. // transition has completed (went from 0 to 1)
  52896. if (enteringView) {
  52897. enteringName = enteringView.name;
  52898. this._didEnter(enteringView);
  52899. }
  52900. if (leavingView) {
  52901. leavingName = leavingView.name;
  52902. this._didLeave(leavingView);
  52903. }
  52904. this._cleanup(enteringView);
  52905. }
  52906. else {
  52907. // If transition does not complete, we have to cleanup anyway, because
  52908. // previous pages in the stack are not hidden probably.
  52909. this._cleanup(leavingView);
  52910. }
  52911. if (transition.isRoot()) {
  52912. // this is the root transition
  52913. // it's safe to destroy this transition
  52914. this._trnsCtrl.destroy(transition.trnsId);
  52915. // it's safe to enable the app again
  52916. this._app.setEnabled(true);
  52917. // mark ourselves as not transitioning - `deepLinker navchange` requires this
  52918. // TODO - probably could be resolved in a better way
  52919. this.setTransitioning(false);
  52920. if (!this.hasChildren() && opts.updateUrl !== false) {
  52921. // notify deep linker of the nav change
  52922. // if a direction was provided and should update url
  52923. this._linker.navChange(opts.direction);
  52924. }
  52925. if (opts.keyboardClose !== false) {
  52926. // the keyboard is still open!
  52927. // no problem, let's just close for them
  52928. this.plt.focusOutActiveElement();
  52929. }
  52930. }
  52931. return {
  52932. hasCompleted: hasCompleted,
  52933. requiresTransition: true,
  52934. enteringName: enteringName,
  52935. leavingName: leavingName,
  52936. direction: opts.direction
  52937. };
  52938. };
  52939. NavControllerBase.prototype._viewsWillLifecycles = function (enteringView, leavingView) {
  52940. var _this = this;
  52941. if (enteringView || leavingView) {
  52942. this._zone.run(function () {
  52943. // Here, the order is important. WillLeave must be called before WillEnter.
  52944. if (leavingView) {
  52945. var willUnload = enteringView ? leavingView.index > enteringView.index : true;
  52946. _this._willLeave(leavingView, willUnload);
  52947. }
  52948. enteringView && _this._willEnter(enteringView);
  52949. });
  52950. }
  52951. };
  52952. NavControllerBase.prototype._insertViewAt = function (view, index) {
  52953. var existingIndex = this._views.indexOf(view);
  52954. if (existingIndex > -1) {
  52955. // this view is already in the stack!!
  52956. // move it to its new location
  52957. (void 0) /* assert */;
  52958. this._views.splice(index, 0, this._views.splice(existingIndex, 1)[0]);
  52959. }
  52960. else {
  52961. (void 0) /* assert */;
  52962. // this is a new view to add to the stack
  52963. // create the new entering view
  52964. view._setNav(this);
  52965. // give this inserted view an ID
  52966. this._ids++;
  52967. if (!view.id) {
  52968. view.id = this.id + "-" + this._ids;
  52969. }
  52970. // insert the entering view into the correct index in the stack
  52971. this._views.splice(index, 0, view);
  52972. }
  52973. };
  52974. NavControllerBase.prototype._removeView = function (view) {
  52975. (void 0) /* assert */;
  52976. var views = this._views;
  52977. var index = views.indexOf(view);
  52978. (void 0) /* assert */;
  52979. if (index >= 0) {
  52980. views.splice(index, 1);
  52981. }
  52982. };
  52983. NavControllerBase.prototype._destroyView = function (view) {
  52984. view._destroy(this._renderer);
  52985. this._removeView(view);
  52986. };
  52987. /**
  52988. * DOM WRITE
  52989. */
  52990. NavControllerBase.prototype._cleanup = function (activeView) {
  52991. // ok, cleanup time!! Destroy all of the views that are
  52992. // INACTIVE and come after the active view
  52993. // only do this if the views exist, though
  52994. if (!this._destroyed) {
  52995. var activeViewIndex = this._views.indexOf(activeView);
  52996. var views = this._views;
  52997. var reorderZIndexes = false;
  52998. var view = void 0;
  52999. var i = void 0;
  53000. for (i = views.length - 1; i >= 0; i--) {
  53001. view = views[i];
  53002. if (i > activeViewIndex) {
  53003. // this view comes after the active view
  53004. // let's unload it
  53005. this._willUnload(view);
  53006. this._destroyView(view);
  53007. }
  53008. else if (i < activeViewIndex && !this._isPortal) {
  53009. // this view comes before the active view
  53010. // and it is not a portal then ensure it is hidden
  53011. view._domShow(false, this._renderer);
  53012. }
  53013. if (view._zIndex <= 0) {
  53014. reorderZIndexes = true;
  53015. }
  53016. }
  53017. if (!this._isPortal && reorderZIndexes) {
  53018. for (i = 0; i < views.length; i++) {
  53019. view = views[i];
  53020. // ******** DOM WRITE ****************
  53021. view._setZIndex(view._zIndex + __WEBPACK_IMPORTED_MODULE_1__nav_util__["d" /* INIT_ZINDEX */] + 1, this._renderer);
  53022. }
  53023. }
  53024. }
  53025. };
  53026. NavControllerBase.prototype._preLoad = function (view) {
  53027. (void 0) /* assert */;
  53028. view._preLoad();
  53029. };
  53030. NavControllerBase.prototype._willLoad = function (view) {
  53031. (void 0) /* assert */;
  53032. try {
  53033. view._willLoad();
  53034. }
  53035. catch (e) {
  53036. this._errHandler && this._errHandler.handleError(e);
  53037. }
  53038. };
  53039. NavControllerBase.prototype._didLoad = function (view) {
  53040. (void 0) /* assert */;
  53041. (void 0) /* assert */;
  53042. try {
  53043. view._didLoad();
  53044. this.viewDidLoad.emit(view);
  53045. this._app.viewDidLoad.emit(view);
  53046. }
  53047. catch (e) {
  53048. this._errHandler && this._errHandler.handleError(e);
  53049. }
  53050. };
  53051. NavControllerBase.prototype._willEnter = function (view) {
  53052. (void 0) /* assert */;
  53053. (void 0) /* assert */;
  53054. try {
  53055. view._willEnter();
  53056. this.viewWillEnter.emit(view);
  53057. this._app.viewWillEnter.emit(view);
  53058. }
  53059. catch (e) {
  53060. this._errHandler && this._errHandler.handleError(e);
  53061. }
  53062. };
  53063. NavControllerBase.prototype._didEnter = function (view) {
  53064. (void 0) /* assert */;
  53065. (void 0) /* assert */;
  53066. try {
  53067. view._didEnter();
  53068. this.viewDidEnter.emit(view);
  53069. this._app.viewDidEnter.emit(view);
  53070. }
  53071. catch (e) {
  53072. this._errHandler && this._errHandler.handleError(e);
  53073. }
  53074. };
  53075. NavControllerBase.prototype._willLeave = function (view, willUnload) {
  53076. (void 0) /* assert */;
  53077. (void 0) /* assert */;
  53078. try {
  53079. view._willLeave(willUnload);
  53080. this.viewWillLeave.emit(view);
  53081. this._app.viewWillLeave.emit(view);
  53082. }
  53083. catch (e) {
  53084. this._errHandler && this._errHandler.handleError(e);
  53085. }
  53086. };
  53087. NavControllerBase.prototype._didLeave = function (view) {
  53088. (void 0) /* assert */;
  53089. (void 0) /* assert */;
  53090. try {
  53091. view._didLeave();
  53092. this.viewDidLeave.emit(view);
  53093. this._app.viewDidLeave.emit(view);
  53094. }
  53095. catch (e) {
  53096. this._errHandler && this._errHandler.handleError(e);
  53097. }
  53098. };
  53099. NavControllerBase.prototype._willUnload = function (view) {
  53100. (void 0) /* assert */;
  53101. (void 0) /* assert */;
  53102. try {
  53103. view._willUnload();
  53104. this.viewWillUnload.emit(view);
  53105. this._app.viewWillUnload.emit(view);
  53106. }
  53107. catch (e) {
  53108. this._errHandler && this._errHandler.handleError(e);
  53109. }
  53110. };
  53111. NavControllerBase.prototype.hasChildren = function () {
  53112. return this._children && this._children.length > 0;
  53113. };
  53114. NavControllerBase.prototype.getActiveChildNavs = function () {
  53115. return this._children;
  53116. };
  53117. NavControllerBase.prototype.getAllChildNavs = function () {
  53118. return this._children;
  53119. };
  53120. NavControllerBase.prototype.registerChildNav = function (container) {
  53121. this._children.push(container);
  53122. };
  53123. NavControllerBase.prototype.unregisterChildNav = function (nav) {
  53124. this._children = this._children.filter(function (child) { return child !== nav; });
  53125. };
  53126. NavControllerBase.prototype.destroy = function () {
  53127. var views = this._views;
  53128. var view;
  53129. for (var i = 0; i < views.length; i++) {
  53130. view = views[i];
  53131. view._willUnload();
  53132. view._destroy(this._renderer);
  53133. }
  53134. // release swipe back gesture and transition
  53135. this._sbGesture && this._sbGesture.destroy();
  53136. this._sbTrns && this._sbTrns.destroy();
  53137. this._queue = this._views = this._sbGesture = this._sbTrns = null;
  53138. // Unregister navcontroller
  53139. if (this.parent && this.parent.unregisterChildNav) {
  53140. this.parent.unregisterChildNav(this);
  53141. }
  53142. else if (this._app) {
  53143. this._app.unregisterRootNav(this);
  53144. }
  53145. this._destroyed = true;
  53146. };
  53147. NavControllerBase.prototype.swipeBackStart = function () {
  53148. if (this.isTransitioning() || this._queue.length > 0) {
  53149. return;
  53150. }
  53151. // default the direction to "back";
  53152. var opts = {
  53153. direction: __WEBPACK_IMPORTED_MODULE_1__nav_util__["a" /* DIRECTION_BACK */],
  53154. progressAnimation: true
  53155. };
  53156. this._queueTrns({
  53157. removeStart: -1,
  53158. removeCount: 1,
  53159. opts: opts,
  53160. }, null);
  53161. };
  53162. NavControllerBase.prototype.swipeBackProgress = function (stepValue) {
  53163. if (this._sbTrns && this._sbGesture) {
  53164. // continue to disable the app while actively dragging
  53165. this._app.setEnabled(false, ACTIVE_TRANSITION_DEFAULT);
  53166. this.setTransitioning(true);
  53167. // set the transition animation's progress
  53168. this._sbTrns.progressStep(stepValue);
  53169. }
  53170. };
  53171. NavControllerBase.prototype.swipeBackEnd = function (shouldComplete, currentStepValue, velocity) {
  53172. if (this._sbTrns && this._sbGesture) {
  53173. // the swipe back gesture has ended
  53174. var dur = this._sbTrns.getDuration() / (Math.abs(velocity) + 1);
  53175. this._sbTrns.progressEnd(shouldComplete, currentStepValue, dur);
  53176. }
  53177. };
  53178. NavControllerBase.prototype._swipeBackCheck = function () {
  53179. if (this.canSwipeBack()) {
  53180. if (!this._sbGesture) {
  53181. this._sbGesture = new __WEBPACK_IMPORTED_MODULE_7__swipe_back__["a" /* SwipeBackGesture */](this.plt, this, this._gestureCtrl, this._domCtrl);
  53182. }
  53183. this._sbGesture.listen();
  53184. }
  53185. else if (this._sbGesture) {
  53186. this._sbGesture.unlisten();
  53187. }
  53188. };
  53189. NavControllerBase.prototype.canSwipeBack = function () {
  53190. return (this._sbEnabled &&
  53191. !this._isPortal &&
  53192. !this._children.length &&
  53193. !this.isTransitioning() &&
  53194. this._app.isEnabled() &&
  53195. this.canGoBack());
  53196. };
  53197. NavControllerBase.prototype.canGoBack = function () {
  53198. var activeView = this.getActive();
  53199. return !!(activeView && activeView.enableBack());
  53200. };
  53201. NavControllerBase.prototype.isTransitioning = function () {
  53202. return this._trnsTm;
  53203. };
  53204. NavControllerBase.prototype.setTransitioning = function (isTransitioning) {
  53205. this._trnsTm = isTransitioning;
  53206. };
  53207. NavControllerBase.prototype.getActive = function () {
  53208. return this._views[this._views.length - 1];
  53209. };
  53210. NavControllerBase.prototype.isActive = function (view) {
  53211. return (view === this.getActive());
  53212. };
  53213. NavControllerBase.prototype.getByIndex = function (index) {
  53214. return this._views[index];
  53215. };
  53216. NavControllerBase.prototype.getPrevious = function (view) {
  53217. // returns the view controller which is before the given view controller.
  53218. if (!view) {
  53219. view = this.getActive();
  53220. }
  53221. var views = this._views;
  53222. var index = views.indexOf(view);
  53223. return (index > 0) ? views[index - 1] : null;
  53224. };
  53225. NavControllerBase.prototype.first = function () {
  53226. // returns the first view controller in this nav controller's stack.
  53227. return this._views[0];
  53228. };
  53229. NavControllerBase.prototype.last = function () {
  53230. // returns the last page in this nav controller's stack.
  53231. var views = this._views;
  53232. return views[views.length - 1];
  53233. };
  53234. NavControllerBase.prototype.indexOf = function (view) {
  53235. // returns the index number of the given view controller.
  53236. return this._views.indexOf(view);
  53237. };
  53238. NavControllerBase.prototype.length = function () {
  53239. return this._views.length;
  53240. };
  53241. NavControllerBase.prototype.getViews = function () {
  53242. return this._views;
  53243. };
  53244. /**
  53245. * Return a view controller
  53246. */
  53247. NavControllerBase.prototype.getViewById = function (id) {
  53248. for (var _i = 0, _a = this._views; _i < _a.length; _i++) {
  53249. var vc = _a[_i];
  53250. if (vc && vc.id === id) {
  53251. return vc;
  53252. }
  53253. }
  53254. return null;
  53255. };
  53256. NavControllerBase.prototype.isSwipeBackEnabled = function () {
  53257. return this._sbEnabled;
  53258. };
  53259. NavControllerBase.prototype.dismissPageChangeViews = function () {
  53260. for (var _i = 0, _a = this._views; _i < _a.length; _i++) {
  53261. var view = _a[_i];
  53262. if (view.data && view.data.dismissOnPageChange) {
  53263. view.dismiss().catch(function () { });
  53264. }
  53265. }
  53266. };
  53267. NavControllerBase.prototype.setViewport = function (val) {
  53268. this._viewport = val;
  53269. };
  53270. NavControllerBase.prototype.resize = function () {
  53271. var active = this.getActive();
  53272. if (!active) {
  53273. return;
  53274. }
  53275. var content = active.getIONContent();
  53276. content && content.resize();
  53277. };
  53278. NavControllerBase.prototype.goToRoot = function (_opts) {
  53279. return Promise.reject(new Error('goToRoot needs to be implemented by child class'));
  53280. };
  53281. /*
  53282. * @private
  53283. */
  53284. NavControllerBase.prototype.getType = function () {
  53285. return 'nav';
  53286. };
  53287. /*
  53288. * @private
  53289. */
  53290. NavControllerBase.prototype.getSecondaryIdentifier = function () {
  53291. return null;
  53292. };
  53293. /**
  53294. * Returns the active child navigation.
  53295. */
  53296. NavControllerBase.prototype.getActiveChildNav = function () {
  53297. console.warn('(getActiveChildNav) is deprecated and will be removed in the next major release. Use getActiveChildNavs instead.');
  53298. return this._children[this._children.length - 1];
  53299. };
  53300. NavControllerBase.propDecorators = {
  53301. 'swipeBackEnabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  53302. };
  53303. return NavControllerBase;
  53304. }(__WEBPACK_IMPORTED_MODULE_4__components_ion__["a" /* Ion */]));
  53305. var ctrlIds = -1;
  53306. var DISABLE_APP_MINIMUM_DURATION = 64;
  53307. var ACTIVE_TRANSITION_DEFAULT = 5000;
  53308. var ACTIVE_TRANSITION_OFFSET = 2000;
  53309. //# sourceMappingURL=nav-controller-base.js.map
  53310. /***/ }),
  53311. /* 70 */
  53312. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  53313. "use strict";
  53314. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanGesture; });
  53315. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  53316. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__recognizers__ = __webpack_require__(361);
  53317. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  53318. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ui_event_manager__ = __webpack_require__(36);
  53319. /**
  53320. * @hidden
  53321. */
  53322. var PanGesture = (function () {
  53323. function PanGesture(plt, element, opts) {
  53324. if (opts === void 0) { opts = {}; }
  53325. this.plt = plt;
  53326. this.element = element;
  53327. Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["d" /* defaults */])(opts, {
  53328. threshold: 20,
  53329. maxAngle: 40,
  53330. direction: 'x',
  53331. zone: true,
  53332. capture: false,
  53333. passive: false,
  53334. });
  53335. this.events = new __WEBPACK_IMPORTED_MODULE_3__ui_event_manager__["a" /* UIEventManager */](plt);
  53336. if (opts.domController) {
  53337. this.debouncer = opts.domController.debouncer();
  53338. }
  53339. this.gestute = opts.gesture;
  53340. this.direction = opts.direction;
  53341. this.eventsConfig = {
  53342. element: this.element,
  53343. pointerDown: this.pointerDown.bind(this),
  53344. pointerMove: this.pointerMove.bind(this),
  53345. pointerUp: this.pointerUp.bind(this),
  53346. zone: opts.zone,
  53347. capture: opts.capture,
  53348. passive: opts.passive
  53349. };
  53350. if (opts.threshold > 0) {
  53351. this.detector = new __WEBPACK_IMPORTED_MODULE_1__recognizers__["a" /* PanRecognizer */](opts.direction, opts.threshold, opts.maxAngle);
  53352. }
  53353. }
  53354. PanGesture.prototype.listen = function () {
  53355. if (!this.isListening) {
  53356. this.pointerEvents = this.events.pointerEvents(this.eventsConfig);
  53357. this.isListening = true;
  53358. }
  53359. };
  53360. PanGesture.prototype.unlisten = function () {
  53361. if (this.isListening) {
  53362. this.gestute && this.gestute.release();
  53363. this.events.unlistenAll();
  53364. this.isListening = false;
  53365. }
  53366. };
  53367. PanGesture.prototype.destroy = function () {
  53368. this.gestute && this.gestute.destroy();
  53369. this.gestute = null;
  53370. this.unlisten();
  53371. this.events.destroy();
  53372. this.events = this.element = this.gestute = null;
  53373. };
  53374. PanGesture.prototype.pointerDown = function (ev) {
  53375. if (this.started) {
  53376. return;
  53377. }
  53378. if (!this.canStart(ev)) {
  53379. return false;
  53380. }
  53381. if (this.gestute) {
  53382. // Release fallback
  53383. this.gestute.release();
  53384. // Start gesture
  53385. if (!this.gestute.start()) {
  53386. return false;
  53387. }
  53388. }
  53389. this.started = true;
  53390. this.captured = false;
  53391. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  53392. if (this.detector) {
  53393. this.detector.start(coord);
  53394. }
  53395. else {
  53396. if (!this.tryToCapture(ev)) {
  53397. this.started = false;
  53398. this.captured = false;
  53399. this.gestute.release();
  53400. return false;
  53401. }
  53402. }
  53403. return true;
  53404. };
  53405. PanGesture.prototype.pointerMove = function (ev) {
  53406. var _this = this;
  53407. (void 0) /* assert */;
  53408. if (this.captured) {
  53409. this.debouncer.write(function () {
  53410. _this.onDragMove(ev);
  53411. });
  53412. return;
  53413. }
  53414. (void 0) /* assert */;
  53415. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  53416. if (this.detector.detect(coord)) {
  53417. if (this.detector.pan() !== 0) {
  53418. if (!this.tryToCapture(ev)) {
  53419. this.abort(ev);
  53420. }
  53421. }
  53422. }
  53423. };
  53424. PanGesture.prototype.pointerUp = function (ev) {
  53425. (void 0) /* assert */;
  53426. this.debouncer.cancel();
  53427. this.gestute && this.gestute.release();
  53428. if (this.captured) {
  53429. this.onDragEnd(ev);
  53430. }
  53431. else {
  53432. this.notCaptured(ev);
  53433. }
  53434. this.captured = false;
  53435. this.started = false;
  53436. };
  53437. PanGesture.prototype.tryToCapture = function (ev) {
  53438. (void 0) /* assert */;
  53439. (void 0) /* assert */;
  53440. if (this.gestute && !this.gestute.capture()) {
  53441. return false;
  53442. }
  53443. this.onDragStart(ev);
  53444. this.captured = true;
  53445. return true;
  53446. };
  53447. PanGesture.prototype.abort = function (ev) {
  53448. this.started = false;
  53449. this.captured = false;
  53450. this.gestute.release();
  53451. this.pointerEvents.stop();
  53452. this.notCaptured(ev);
  53453. };
  53454. PanGesture.prototype.getNativeElement = function () {
  53455. return this.element;
  53456. };
  53457. // Implemented in a subclass
  53458. PanGesture.prototype.canStart = function (_ev) { return true; };
  53459. PanGesture.prototype.onDragStart = function (_ev) { };
  53460. PanGesture.prototype.onDragMove = function (_ev) { };
  53461. PanGesture.prototype.onDragEnd = function (_ev) { };
  53462. PanGesture.prototype.notCaptured = function (_ev) { };
  53463. return PanGesture;
  53464. }());
  53465. //# sourceMappingURL=pan-gesture.js.map
  53466. /***/ }),
  53467. /* 71 */
  53468. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  53469. "use strict";
  53470. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TransitionController; });
  53471. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  53472. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  53473. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  53474. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_platform__ = __webpack_require__(7);
  53475. /**
  53476. * @hidden
  53477. */
  53478. var TransitionController = (function () {
  53479. function TransitionController(plt, _config) {
  53480. this.plt = plt;
  53481. this._config = _config;
  53482. this._ids = 0;
  53483. this._trns = {};
  53484. }
  53485. TransitionController.prototype.getRootTrnsId = function (nav) {
  53486. nav = nav.parent;
  53487. while (nav) {
  53488. if (Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(nav._trnsId)) {
  53489. return nav._trnsId;
  53490. }
  53491. nav = nav.parent;
  53492. }
  53493. return null;
  53494. };
  53495. TransitionController.prototype.nextId = function () {
  53496. return this._ids++;
  53497. };
  53498. TransitionController.prototype.get = function (trnsId, enteringView, leavingView, opts) {
  53499. var TransitionClass = this._config.getTransition(opts.animation);
  53500. if (!TransitionClass) {
  53501. // didn't find a transition animation, default to ios-transition
  53502. TransitionClass = this._config.getTransition('ios-transition');
  53503. }
  53504. var trns = new TransitionClass(this.plt, enteringView, leavingView, opts);
  53505. trns.trnsId = trnsId;
  53506. if (!this._trns[trnsId]) {
  53507. // we haven't created the root transition yet
  53508. this._trns[trnsId] = trns;
  53509. }
  53510. else {
  53511. // we already have a root transition created
  53512. // add this new transition as a child to the root
  53513. this._trns[trnsId].add(trns);
  53514. }
  53515. return trns;
  53516. };
  53517. TransitionController.prototype.destroy = function (trnsId) {
  53518. var trans = this._trns[trnsId];
  53519. if (trans) {
  53520. trans.destroy();
  53521. delete this._trns[trnsId];
  53522. }
  53523. };
  53524. TransitionController.decorators = [
  53525. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  53526. ];
  53527. /** @nocollapse */
  53528. TransitionController.ctorParameters = function () { return [
  53529. { type: __WEBPACK_IMPORTED_MODULE_3__platform_platform__["a" /* Platform */], },
  53530. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  53531. ]; };
  53532. return TransitionController;
  53533. }());
  53534. //# sourceMappingURL=transition-controller.js.map
  53535. /***/ }),
  53536. /* 72 */
  53537. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  53538. "use strict";
  53539. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FabButton; });
  53540. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  53541. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  53542. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  53543. var __extends = (this && this.__extends) || (function () {
  53544. var extendStatics = Object.setPrototypeOf ||
  53545. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  53546. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  53547. return function (d, b) {
  53548. extendStatics(d, b);
  53549. function __() { this.constructor = d; }
  53550. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  53551. };
  53552. })();
  53553. /**
  53554. * @name FabButton
  53555. * @module ionic
  53556. *
  53557. * @description
  53558. * FABs (Floating Action Buttons) are standard material design components. They are shaped as a circle that represents a promoted action. When pressed, it may contain more related actions.
  53559. * FABs as its name suggests are floating over the content in a fixed position. This is not achieved exclusively with `<button ion-fab>Button</button>` but it has to wrapped with the `<ion-fab>` component, like this:
  53560. *
  53561. * ```html
  53562. * <ion-content>
  53563. * <!-- Real floating action button, fixed. It will not scroll with the content -->
  53564. * <ion-fab>
  53565. * <button ion-fab>Button</button>
  53566. * </ion-fab>
  53567. *
  53568. * <!-- Button shaped as a circle that just like a normal button scrolls with the content -->
  53569. * <button ion-fab>Button</button>
  53570. * </ion-content>
  53571. *
  53572. * ```
  53573. *
  53574. * In case the button is not wrapped with `<ion-fab>`, the fab button will behave like a normal button, scrolling with the content.
  53575. *
  53576. * See [ion-fab] to learn more information about how to position the fab button.
  53577. *
  53578. * @property [mini] - Makes a fab button with a reduced size.
  53579. *
  53580. * @usage
  53581. *
  53582. * ```html
  53583. *
  53584. * <!-- Colors -->
  53585. * <ion-fab>
  53586. * <button ion-fab color="primary">Button</button>
  53587. * </ion-fab>
  53588. *
  53589. * <!-- Mini -->
  53590. * <ion-fab>
  53591. * <button ion-fab mini>Small</button>
  53592. * </ion-fab>
  53593. * ```
  53594. *
  53595. * @demo /docs/demos/src/fab/
  53596. * @see {@link /docs/components#fabs FAB Component Docs}
  53597. */
  53598. var FabButton = (function (_super) {
  53599. __extends(FabButton, _super);
  53600. function FabButton(config, elementRef, renderer) {
  53601. return _super.call(this, config, elementRef, renderer, 'fab') || this;
  53602. }
  53603. /**
  53604. * @hidden
  53605. */
  53606. FabButton.prototype.setActiveClose = function (closeVisible) {
  53607. this.setElementClass('fab-close-active', closeVisible);
  53608. };
  53609. FabButton.decorators = [
  53610. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  53611. selector: '[ion-fab]',
  53612. template: '<ion-icon name="close" class="fab-close-icon"></ion-icon>' +
  53613. '<span class="button-inner">' +
  53614. '<ng-content></ng-content>' +
  53615. '</span>' +
  53616. '<div class="button-effect"></div>',
  53617. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  53618. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  53619. },] },
  53620. ];
  53621. /** @nocollapse */
  53622. FabButton.ctorParameters = function () { return [
  53623. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  53624. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  53625. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  53626. ]; };
  53627. return FabButton;
  53628. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  53629. //# sourceMappingURL=fab.js.map
  53630. /***/ }),
  53631. /* 73 */
  53632. /***/ (function(module, exports, __webpack_require__) {
  53633. "use strict";
  53634. var __extends = (this && this.__extends) || function (d, b) {
  53635. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  53636. function __() { this.constructor = d; }
  53637. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  53638. };
  53639. var Subject_1 = __webpack_require__(12);
  53640. var Subscription_1 = __webpack_require__(14);
  53641. /**
  53642. * @class AsyncSubject<T>
  53643. */
  53644. var AsyncSubject = (function (_super) {
  53645. __extends(AsyncSubject, _super);
  53646. function AsyncSubject() {
  53647. _super.apply(this, arguments);
  53648. this.value = null;
  53649. this.hasNext = false;
  53650. this.hasCompleted = false;
  53651. }
  53652. /** @deprecated internal use only */ AsyncSubject.prototype._subscribe = function (subscriber) {
  53653. if (this.hasError) {
  53654. subscriber.error(this.thrownError);
  53655. return Subscription_1.Subscription.EMPTY;
  53656. }
  53657. else if (this.hasCompleted && this.hasNext) {
  53658. subscriber.next(this.value);
  53659. subscriber.complete();
  53660. return Subscription_1.Subscription.EMPTY;
  53661. }
  53662. return _super.prototype._subscribe.call(this, subscriber);
  53663. };
  53664. AsyncSubject.prototype.next = function (value) {
  53665. if (!this.hasCompleted) {
  53666. this.value = value;
  53667. this.hasNext = true;
  53668. }
  53669. };
  53670. AsyncSubject.prototype.error = function (error) {
  53671. if (!this.hasCompleted) {
  53672. _super.prototype.error.call(this, error);
  53673. }
  53674. };
  53675. AsyncSubject.prototype.complete = function () {
  53676. this.hasCompleted = true;
  53677. if (this.hasNext) {
  53678. _super.prototype.next.call(this, this.value);
  53679. }
  53680. _super.prototype.complete.call(this);
  53681. };
  53682. return AsyncSubject;
  53683. }(Subject_1.Subject));
  53684. exports.AsyncSubject = AsyncSubject;
  53685. //# sourceMappingURL=AsyncSubject.js.map
  53686. /***/ }),
  53687. /* 74 */
  53688. /***/ (function(module, exports, __webpack_require__) {
  53689. "use strict";
  53690. var __extends = (this && this.__extends) || function (d, b) {
  53691. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  53692. function __() { this.constructor = d; }
  53693. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  53694. };
  53695. var ArrayObservable_1 = __webpack_require__(32);
  53696. var isArray_1 = __webpack_require__(26);
  53697. var OuterSubscriber_1 = __webpack_require__(6);
  53698. var subscribeToResult_1 = __webpack_require__(5);
  53699. var none = {};
  53700. /* tslint:enable:max-line-length */
  53701. /**
  53702. * Combines multiple Observables to create an Observable whose values are
  53703. * calculated from the latest values of each of its input Observables.
  53704. *
  53705. * <span class="informal">Whenever any input Observable emits a value, it
  53706. * computes a formula using the latest values from all the inputs, then emits
  53707. * the output of that formula.</span>
  53708. *
  53709. * <img src="./img/combineLatest.png" width="100%">
  53710. *
  53711. * `combineLatest` combines the values from this Observable with values from
  53712. * Observables passed as arguments. This is done by subscribing to each
  53713. * Observable, in order, and collecting an array of each of the most recent
  53714. * values any time any of the input Observables emits, then either taking that
  53715. * array and passing it as arguments to an optional `project` function and
  53716. * emitting the return value of that, or just emitting the array of recent
  53717. * values directly if there is no `project` function.
  53718. *
  53719. * @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>
  53720. * var weight = Rx.Observable.of(70, 72, 76, 79, 75);
  53721. * var height = Rx.Observable.of(1.76, 1.77, 1.78);
  53722. * var bmi = weight.combineLatest(height, (w, h) => w / (h * h));
  53723. * bmi.subscribe(x => console.log('BMI is ' + x));
  53724. *
  53725. * // With output to console:
  53726. * // BMI is 24.212293388429753
  53727. * // BMI is 23.93948099205209
  53728. * // BMI is 23.671253629592222
  53729. *
  53730. * @see {@link combineAll}
  53731. * @see {@link merge}
  53732. * @see {@link withLatestFrom}
  53733. *
  53734. * @param {ObservableInput} other An input Observable to combine with the source
  53735. * Observable. More than one input Observables may be given as argument.
  53736. * @param {function} [project] An optional function to project the values from
  53737. * the combined latest values into a new value on the output Observable.
  53738. * @return {Observable} An Observable of projected values from the most recent
  53739. * values from each input Observable, or an array of the most recent values from
  53740. * each input Observable.
  53741. * @method combineLatest
  53742. * @owner Observable
  53743. */
  53744. function combineLatest() {
  53745. var observables = [];
  53746. for (var _i = 0; _i < arguments.length; _i++) {
  53747. observables[_i - 0] = arguments[_i];
  53748. }
  53749. var project = null;
  53750. if (typeof observables[observables.length - 1] === 'function') {
  53751. project = observables.pop();
  53752. }
  53753. // if the first and only other argument besides the resultSelector is an array
  53754. // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
  53755. if (observables.length === 1 && isArray_1.isArray(observables[0])) {
  53756. observables = observables[0].slice();
  53757. }
  53758. return function (source) { return source.lift.call(new ArrayObservable_1.ArrayObservable([source].concat(observables)), new CombineLatestOperator(project)); };
  53759. }
  53760. exports.combineLatest = combineLatest;
  53761. var CombineLatestOperator = (function () {
  53762. function CombineLatestOperator(project) {
  53763. this.project = project;
  53764. }
  53765. CombineLatestOperator.prototype.call = function (subscriber, source) {
  53766. return source.subscribe(new CombineLatestSubscriber(subscriber, this.project));
  53767. };
  53768. return CombineLatestOperator;
  53769. }());
  53770. exports.CombineLatestOperator = CombineLatestOperator;
  53771. /**
  53772. * We need this JSDoc comment for affecting ESDoc.
  53773. * @ignore
  53774. * @extends {Ignored}
  53775. */
  53776. var CombineLatestSubscriber = (function (_super) {
  53777. __extends(CombineLatestSubscriber, _super);
  53778. function CombineLatestSubscriber(destination, project) {
  53779. _super.call(this, destination);
  53780. this.project = project;
  53781. this.active = 0;
  53782. this.values = [];
  53783. this.observables = [];
  53784. }
  53785. CombineLatestSubscriber.prototype._next = function (observable) {
  53786. this.values.push(none);
  53787. this.observables.push(observable);
  53788. };
  53789. CombineLatestSubscriber.prototype._complete = function () {
  53790. var observables = this.observables;
  53791. var len = observables.length;
  53792. if (len === 0) {
  53793. this.destination.complete();
  53794. }
  53795. else {
  53796. this.active = len;
  53797. this.toRespond = len;
  53798. for (var i = 0; i < len; i++) {
  53799. var observable = observables[i];
  53800. this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));
  53801. }
  53802. }
  53803. };
  53804. CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
  53805. if ((this.active -= 1) === 0) {
  53806. this.destination.complete();
  53807. }
  53808. };
  53809. CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  53810. var values = this.values;
  53811. var oldVal = values[outerIndex];
  53812. var toRespond = !this.toRespond
  53813. ? 0
  53814. : oldVal === none ? --this.toRespond : this.toRespond;
  53815. values[outerIndex] = innerValue;
  53816. if (toRespond === 0) {
  53817. if (this.project) {
  53818. this._tryProject(values);
  53819. }
  53820. else {
  53821. this.destination.next(values.slice());
  53822. }
  53823. }
  53824. };
  53825. CombineLatestSubscriber.prototype._tryProject = function (values) {
  53826. var result;
  53827. try {
  53828. result = this.project.apply(this, values);
  53829. }
  53830. catch (err) {
  53831. this.destination.error(err);
  53832. return;
  53833. }
  53834. this.destination.next(result);
  53835. };
  53836. return CombineLatestSubscriber;
  53837. }(OuterSubscriber_1.OuterSubscriber));
  53838. exports.CombineLatestSubscriber = CombineLatestSubscriber;
  53839. //# sourceMappingURL=combineLatest.js.map
  53840. /***/ }),
  53841. /* 75 */
  53842. /***/ (function(module, exports, __webpack_require__) {
  53843. "use strict";
  53844. var __extends = (this && this.__extends) || function (d, b) {
  53845. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  53846. function __() { this.constructor = d; }
  53847. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  53848. };
  53849. var Subscriber_1 = __webpack_require__(4);
  53850. var Notification_1 = __webpack_require__(55);
  53851. /**
  53852. *
  53853. * Re-emits all notifications from source Observable with specified scheduler.
  53854. *
  53855. * <span class="informal">Ensure a specific scheduler is used, from outside of an Observable.</span>
  53856. *
  53857. * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule
  53858. * notifications emitted by the source Observable. It might be useful, if you do not have control over
  53859. * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.
  53860. *
  53861. * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,
  53862. * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal
  53863. * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits
  53864. * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.
  53865. * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split
  53866. * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source
  53867. * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a
  53868. * little bit more, to ensure that they are emitted at expected moments.
  53869. *
  53870. * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications
  53871. * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`
  53872. * will delay all notifications - including error notifications - while `delay` will pass through error
  53873. * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator
  53874. * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used
  53875. * for notification emissions in general.
  53876. *
  53877. * @example <caption>Ensure values in subscribe are called just before browser repaint.</caption>
  53878. * const intervals = Rx.Observable.interval(10); // Intervals are scheduled
  53879. * // with async scheduler by default...
  53880. *
  53881. * intervals
  53882. * .observeOn(Rx.Scheduler.animationFrame) // ...but we will observe on animationFrame
  53883. * .subscribe(val => { // scheduler to ensure smooth animation.
  53884. * someDiv.style.height = val + 'px';
  53885. * });
  53886. *
  53887. * @see {@link delay}
  53888. *
  53889. * @param {IScheduler} scheduler Scheduler that will be used to reschedule notifications from source Observable.
  53890. * @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.
  53891. * @return {Observable<T>} Observable that emits the same notifications as the source Observable,
  53892. * but with provided scheduler.
  53893. *
  53894. * @method observeOn
  53895. * @owner Observable
  53896. */
  53897. function observeOn(scheduler, delay) {
  53898. if (delay === void 0) { delay = 0; }
  53899. return function observeOnOperatorFunction(source) {
  53900. return source.lift(new ObserveOnOperator(scheduler, delay));
  53901. };
  53902. }
  53903. exports.observeOn = observeOn;
  53904. var ObserveOnOperator = (function () {
  53905. function ObserveOnOperator(scheduler, delay) {
  53906. if (delay === void 0) { delay = 0; }
  53907. this.scheduler = scheduler;
  53908. this.delay = delay;
  53909. }
  53910. ObserveOnOperator.prototype.call = function (subscriber, source) {
  53911. return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
  53912. };
  53913. return ObserveOnOperator;
  53914. }());
  53915. exports.ObserveOnOperator = ObserveOnOperator;
  53916. /**
  53917. * We need this JSDoc comment for affecting ESDoc.
  53918. * @ignore
  53919. * @extends {Ignored}
  53920. */
  53921. var ObserveOnSubscriber = (function (_super) {
  53922. __extends(ObserveOnSubscriber, _super);
  53923. function ObserveOnSubscriber(destination, scheduler, delay) {
  53924. if (delay === void 0) { delay = 0; }
  53925. _super.call(this, destination);
  53926. this.scheduler = scheduler;
  53927. this.delay = delay;
  53928. }
  53929. ObserveOnSubscriber.dispatch = function (arg) {
  53930. var notification = arg.notification, destination = arg.destination;
  53931. notification.observe(destination);
  53932. this.unsubscribe();
  53933. };
  53934. ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
  53935. this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
  53936. };
  53937. ObserveOnSubscriber.prototype._next = function (value) {
  53938. this.scheduleMessage(Notification_1.Notification.createNext(value));
  53939. };
  53940. ObserveOnSubscriber.prototype._error = function (err) {
  53941. this.scheduleMessage(Notification_1.Notification.createError(err));
  53942. };
  53943. ObserveOnSubscriber.prototype._complete = function () {
  53944. this.scheduleMessage(Notification_1.Notification.createComplete());
  53945. };
  53946. return ObserveOnSubscriber;
  53947. }(Subscriber_1.Subscriber));
  53948. exports.ObserveOnSubscriber = ObserveOnSubscriber;
  53949. var ObserveOnMessage = (function () {
  53950. function ObserveOnMessage(notification, destination) {
  53951. this.notification = notification;
  53952. this.destination = destination;
  53953. }
  53954. return ObserveOnMessage;
  53955. }());
  53956. exports.ObserveOnMessage = ObserveOnMessage;
  53957. //# sourceMappingURL=observeOn.js.map
  53958. /***/ }),
  53959. /* 76 */
  53960. /***/ (function(module, exports, __webpack_require__) {
  53961. "use strict";
  53962. function isDate(value) {
  53963. return value instanceof Date && !isNaN(+value);
  53964. }
  53965. exports.isDate = isDate;
  53966. //# sourceMappingURL=isDate.js.map
  53967. /***/ }),
  53968. /* 77 */
  53969. /***/ (function(module, exports, __webpack_require__) {
  53970. "use strict";
  53971. var __extends = (this && this.__extends) || function (d, b) {
  53972. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  53973. function __() { this.constructor = d; }
  53974. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  53975. };
  53976. var ArrayObservable_1 = __webpack_require__(32);
  53977. var isArray_1 = __webpack_require__(26);
  53978. var Subscriber_1 = __webpack_require__(4);
  53979. var OuterSubscriber_1 = __webpack_require__(6);
  53980. var subscribeToResult_1 = __webpack_require__(5);
  53981. var iterator_1 = __webpack_require__(46);
  53982. /* tslint:enable:max-line-length */
  53983. /**
  53984. * @param observables
  53985. * @return {Observable<R>}
  53986. * @method zip
  53987. * @owner Observable
  53988. */
  53989. function zip() {
  53990. var observables = [];
  53991. for (var _i = 0; _i < arguments.length; _i++) {
  53992. observables[_i - 0] = arguments[_i];
  53993. }
  53994. return function zipOperatorFunction(source) {
  53995. return source.lift.call(zipStatic.apply(void 0, [source].concat(observables)));
  53996. };
  53997. }
  53998. exports.zip = zip;
  53999. /* tslint:enable:max-line-length */
  54000. /**
  54001. * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each
  54002. * of its input Observables.
  54003. *
  54004. * If the latest parameter is a function, this function is used to compute the created value from the input values.
  54005. * Otherwise, an array of the input values is returned.
  54006. *
  54007. * @example <caption>Combine age and name from different sources</caption>
  54008. *
  54009. * let age$ = Observable.of<number>(27, 25, 29);
  54010. * let name$ = Observable.of<string>('Foo', 'Bar', 'Beer');
  54011. * let isDev$ = Observable.of<boolean>(true, true, false);
  54012. *
  54013. * Observable
  54014. * .zip(age$,
  54015. * name$,
  54016. * isDev$,
  54017. * (age: number, name: string, isDev: boolean) => ({ age, name, isDev }))
  54018. * .subscribe(x => console.log(x));
  54019. *
  54020. * // outputs
  54021. * // { age: 27, name: 'Foo', isDev: true }
  54022. * // { age: 25, name: 'Bar', isDev: true }
  54023. * // { age: 29, name: 'Beer', isDev: false }
  54024. *
  54025. * @param observables
  54026. * @return {Observable<R>}
  54027. * @static true
  54028. * @name zip
  54029. * @owner Observable
  54030. */
  54031. function zipStatic() {
  54032. var observables = [];
  54033. for (var _i = 0; _i < arguments.length; _i++) {
  54034. observables[_i - 0] = arguments[_i];
  54035. }
  54036. var project = observables[observables.length - 1];
  54037. if (typeof project === 'function') {
  54038. observables.pop();
  54039. }
  54040. return new ArrayObservable_1.ArrayObservable(observables).lift(new ZipOperator(project));
  54041. }
  54042. exports.zipStatic = zipStatic;
  54043. var ZipOperator = (function () {
  54044. function ZipOperator(project) {
  54045. this.project = project;
  54046. }
  54047. ZipOperator.prototype.call = function (subscriber, source) {
  54048. return source.subscribe(new ZipSubscriber(subscriber, this.project));
  54049. };
  54050. return ZipOperator;
  54051. }());
  54052. exports.ZipOperator = ZipOperator;
  54053. /**
  54054. * We need this JSDoc comment for affecting ESDoc.
  54055. * @ignore
  54056. * @extends {Ignored}
  54057. */
  54058. var ZipSubscriber = (function (_super) {
  54059. __extends(ZipSubscriber, _super);
  54060. function ZipSubscriber(destination, project, values) {
  54061. if (values === void 0) { values = Object.create(null); }
  54062. _super.call(this, destination);
  54063. this.iterators = [];
  54064. this.active = 0;
  54065. this.project = (typeof project === 'function') ? project : null;
  54066. this.values = values;
  54067. }
  54068. ZipSubscriber.prototype._next = function (value) {
  54069. var iterators = this.iterators;
  54070. if (isArray_1.isArray(value)) {
  54071. iterators.push(new StaticArrayIterator(value));
  54072. }
  54073. else if (typeof value[iterator_1.iterator] === 'function') {
  54074. iterators.push(new StaticIterator(value[iterator_1.iterator]()));
  54075. }
  54076. else {
  54077. iterators.push(new ZipBufferIterator(this.destination, this, value));
  54078. }
  54079. };
  54080. ZipSubscriber.prototype._complete = function () {
  54081. var iterators = this.iterators;
  54082. var len = iterators.length;
  54083. if (len === 0) {
  54084. this.destination.complete();
  54085. return;
  54086. }
  54087. this.active = len;
  54088. for (var i = 0; i < len; i++) {
  54089. var iterator = iterators[i];
  54090. if (iterator.stillUnsubscribed) {
  54091. this.add(iterator.subscribe(iterator, i));
  54092. }
  54093. else {
  54094. this.active--; // not an observable
  54095. }
  54096. }
  54097. };
  54098. ZipSubscriber.prototype.notifyInactive = function () {
  54099. this.active--;
  54100. if (this.active === 0) {
  54101. this.destination.complete();
  54102. }
  54103. };
  54104. ZipSubscriber.prototype.checkIterators = function () {
  54105. var iterators = this.iterators;
  54106. var len = iterators.length;
  54107. var destination = this.destination;
  54108. // abort if not all of them have values
  54109. for (var i = 0; i < len; i++) {
  54110. var iterator = iterators[i];
  54111. if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
  54112. return;
  54113. }
  54114. }
  54115. var shouldComplete = false;
  54116. var args = [];
  54117. for (var i = 0; i < len; i++) {
  54118. var iterator = iterators[i];
  54119. var result = iterator.next();
  54120. // check to see if it's completed now that you've gotten
  54121. // the next value.
  54122. if (iterator.hasCompleted()) {
  54123. shouldComplete = true;
  54124. }
  54125. if (result.done) {
  54126. destination.complete();
  54127. return;
  54128. }
  54129. args.push(result.value);
  54130. }
  54131. if (this.project) {
  54132. this._tryProject(args);
  54133. }
  54134. else {
  54135. destination.next(args);
  54136. }
  54137. if (shouldComplete) {
  54138. destination.complete();
  54139. }
  54140. };
  54141. ZipSubscriber.prototype._tryProject = function (args) {
  54142. var result;
  54143. try {
  54144. result = this.project.apply(this, args);
  54145. }
  54146. catch (err) {
  54147. this.destination.error(err);
  54148. return;
  54149. }
  54150. this.destination.next(result);
  54151. };
  54152. return ZipSubscriber;
  54153. }(Subscriber_1.Subscriber));
  54154. exports.ZipSubscriber = ZipSubscriber;
  54155. var StaticIterator = (function () {
  54156. function StaticIterator(iterator) {
  54157. this.iterator = iterator;
  54158. this.nextResult = iterator.next();
  54159. }
  54160. StaticIterator.prototype.hasValue = function () {
  54161. return true;
  54162. };
  54163. StaticIterator.prototype.next = function () {
  54164. var result = this.nextResult;
  54165. this.nextResult = this.iterator.next();
  54166. return result;
  54167. };
  54168. StaticIterator.prototype.hasCompleted = function () {
  54169. var nextResult = this.nextResult;
  54170. return nextResult && nextResult.done;
  54171. };
  54172. return StaticIterator;
  54173. }());
  54174. var StaticArrayIterator = (function () {
  54175. function StaticArrayIterator(array) {
  54176. this.array = array;
  54177. this.index = 0;
  54178. this.length = 0;
  54179. this.length = array.length;
  54180. }
  54181. StaticArrayIterator.prototype[iterator_1.iterator] = function () {
  54182. return this;
  54183. };
  54184. StaticArrayIterator.prototype.next = function (value) {
  54185. var i = this.index++;
  54186. var array = this.array;
  54187. return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
  54188. };
  54189. StaticArrayIterator.prototype.hasValue = function () {
  54190. return this.array.length > this.index;
  54191. };
  54192. StaticArrayIterator.prototype.hasCompleted = function () {
  54193. return this.array.length === this.index;
  54194. };
  54195. return StaticArrayIterator;
  54196. }());
  54197. /**
  54198. * We need this JSDoc comment for affecting ESDoc.
  54199. * @ignore
  54200. * @extends {Ignored}
  54201. */
  54202. var ZipBufferIterator = (function (_super) {
  54203. __extends(ZipBufferIterator, _super);
  54204. function ZipBufferIterator(destination, parent, observable) {
  54205. _super.call(this, destination);
  54206. this.parent = parent;
  54207. this.observable = observable;
  54208. this.stillUnsubscribed = true;
  54209. this.buffer = [];
  54210. this.isComplete = false;
  54211. }
  54212. ZipBufferIterator.prototype[iterator_1.iterator] = function () {
  54213. return this;
  54214. };
  54215. // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next
  54216. // this is legit because `next()` will never be called by a subscription in this case.
  54217. ZipBufferIterator.prototype.next = function () {
  54218. var buffer = this.buffer;
  54219. if (buffer.length === 0 && this.isComplete) {
  54220. return { value: null, done: true };
  54221. }
  54222. else {
  54223. return { value: buffer.shift(), done: false };
  54224. }
  54225. };
  54226. ZipBufferIterator.prototype.hasValue = function () {
  54227. return this.buffer.length > 0;
  54228. };
  54229. ZipBufferIterator.prototype.hasCompleted = function () {
  54230. return this.buffer.length === 0 && this.isComplete;
  54231. };
  54232. ZipBufferIterator.prototype.notifyComplete = function () {
  54233. if (this.buffer.length > 0) {
  54234. this.isComplete = true;
  54235. this.parent.notifyInactive();
  54236. }
  54237. else {
  54238. this.destination.complete();
  54239. }
  54240. };
  54241. ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  54242. this.buffer.push(innerValue);
  54243. this.parent.checkIterators();
  54244. };
  54245. ZipBufferIterator.prototype.subscribe = function (value, index) {
  54246. return subscribeToResult_1.subscribeToResult(this, this.observable, this, index);
  54247. };
  54248. return ZipBufferIterator;
  54249. }(OuterSubscriber_1.OuterSubscriber));
  54250. //# sourceMappingURL=zip.js.map
  54251. /***/ }),
  54252. /* 78 */
  54253. /***/ (function(module, exports, __webpack_require__) {
  54254. "use strict";
  54255. var __extends = (this && this.__extends) || function (d, b) {
  54256. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  54257. function __() { this.constructor = d; }
  54258. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  54259. };
  54260. var Subject_1 = __webpack_require__(12);
  54261. var queue_1 = __webpack_require__(218);
  54262. var Subscription_1 = __webpack_require__(14);
  54263. var observeOn_1 = __webpack_require__(75);
  54264. var ObjectUnsubscribedError_1 = __webpack_require__(66);
  54265. var SubjectSubscription_1 = __webpack_require__(163);
  54266. /**
  54267. * @class ReplaySubject<T>
  54268. */
  54269. var ReplaySubject = (function (_super) {
  54270. __extends(ReplaySubject, _super);
  54271. function ReplaySubject(bufferSize, windowTime, scheduler) {
  54272. if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; }
  54273. if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; }
  54274. _super.call(this);
  54275. this.scheduler = scheduler;
  54276. this._events = [];
  54277. this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
  54278. this._windowTime = windowTime < 1 ? 1 : windowTime;
  54279. }
  54280. ReplaySubject.prototype.next = function (value) {
  54281. var now = this._getNow();
  54282. this._events.push(new ReplayEvent(now, value));
  54283. this._trimBufferThenGetEvents();
  54284. _super.prototype.next.call(this, value);
  54285. };
  54286. /** @deprecated internal use only */ ReplaySubject.prototype._subscribe = function (subscriber) {
  54287. var _events = this._trimBufferThenGetEvents();
  54288. var scheduler = this.scheduler;
  54289. var subscription;
  54290. if (this.closed) {
  54291. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  54292. }
  54293. else if (this.hasError) {
  54294. subscription = Subscription_1.Subscription.EMPTY;
  54295. }
  54296. else if (this.isStopped) {
  54297. subscription = Subscription_1.Subscription.EMPTY;
  54298. }
  54299. else {
  54300. this.observers.push(subscriber);
  54301. subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber);
  54302. }
  54303. if (scheduler) {
  54304. subscriber.add(subscriber = new observeOn_1.ObserveOnSubscriber(subscriber, scheduler));
  54305. }
  54306. var len = _events.length;
  54307. for (var i = 0; i < len && !subscriber.closed; i++) {
  54308. subscriber.next(_events[i].value);
  54309. }
  54310. if (this.hasError) {
  54311. subscriber.error(this.thrownError);
  54312. }
  54313. else if (this.isStopped) {
  54314. subscriber.complete();
  54315. }
  54316. return subscription;
  54317. };
  54318. ReplaySubject.prototype._getNow = function () {
  54319. return (this.scheduler || queue_1.queue).now();
  54320. };
  54321. ReplaySubject.prototype._trimBufferThenGetEvents = function () {
  54322. var now = this._getNow();
  54323. var _bufferSize = this._bufferSize;
  54324. var _windowTime = this._windowTime;
  54325. var _events = this._events;
  54326. var eventsCount = _events.length;
  54327. var spliceCount = 0;
  54328. // Trim events that fall out of the time window.
  54329. // Start at the front of the list. Break early once
  54330. // we encounter an event that falls within the window.
  54331. while (spliceCount < eventsCount) {
  54332. if ((now - _events[spliceCount].time) < _windowTime) {
  54333. break;
  54334. }
  54335. spliceCount++;
  54336. }
  54337. if (eventsCount > _bufferSize) {
  54338. spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
  54339. }
  54340. if (spliceCount > 0) {
  54341. _events.splice(0, spliceCount);
  54342. }
  54343. return _events;
  54344. };
  54345. return ReplaySubject;
  54346. }(Subject_1.Subject));
  54347. exports.ReplaySubject = ReplaySubject;
  54348. var ReplayEvent = (function () {
  54349. function ReplayEvent(time, value) {
  54350. this.time = time;
  54351. this.value = value;
  54352. }
  54353. return ReplayEvent;
  54354. }());
  54355. //# sourceMappingURL=ReplaySubject.js.map
  54356. /***/ }),
  54357. /* 79 */
  54358. /***/ (function(module, exports, __webpack_require__) {
  54359. "use strict";
  54360. var __extends = (this && this.__extends) || function (d, b) {
  54361. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  54362. function __() { this.constructor = d; }
  54363. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  54364. };
  54365. /**
  54366. * An error thrown when an Observable or a sequence was queried but has no
  54367. * elements.
  54368. *
  54369. * @see {@link first}
  54370. * @see {@link last}
  54371. * @see {@link single}
  54372. *
  54373. * @class EmptyError
  54374. */
  54375. var EmptyError = (function (_super) {
  54376. __extends(EmptyError, _super);
  54377. function EmptyError() {
  54378. var err = _super.call(this, 'no elements in sequence');
  54379. this.name = err.name = 'EmptyError';
  54380. this.stack = err.stack;
  54381. this.message = err.message;
  54382. }
  54383. return EmptyError;
  54384. }(Error));
  54385. exports.EmptyError = EmptyError;
  54386. //# sourceMappingURL=EmptyError.js.map
  54387. /***/ }),
  54388. /* 80 */
  54389. /***/ (function(module, exports, __webpack_require__) {
  54390. "use strict";
  54391. var __extends = (this && this.__extends) || function (d, b) {
  54392. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  54393. function __() { this.constructor = d; }
  54394. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  54395. };
  54396. var OuterSubscriber_1 = __webpack_require__(6);
  54397. var subscribeToResult_1 = __webpack_require__(5);
  54398. exports.defaultThrottleConfig = {
  54399. leading: true,
  54400. trailing: false
  54401. };
  54402. /**
  54403. * Emits a value from the source Observable, then ignores subsequent source
  54404. * values for a duration determined by another Observable, then repeats this
  54405. * process.
  54406. *
  54407. * <span class="informal">It's like {@link throttleTime}, but the silencing
  54408. * duration is determined by a second Observable.</span>
  54409. *
  54410. * <img src="./img/throttle.png" width="100%">
  54411. *
  54412. * `throttle` emits the source Observable values on the output Observable
  54413. * when its internal timer is disabled, and ignores source values when the timer
  54414. * is enabled. Initially, the timer is disabled. As soon as the first source
  54415. * value arrives, it is forwarded to the output Observable, and then the timer
  54416. * is enabled by calling the `durationSelector` function with the source value,
  54417. * which returns the "duration" Observable. When the duration Observable emits a
  54418. * value or completes, the timer is disabled, and this process repeats for the
  54419. * next source value.
  54420. *
  54421. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  54422. * var clicks = Rx.Observable.fromEvent(document, 'click');
  54423. * var result = clicks.throttle(ev => Rx.Observable.interval(1000));
  54424. * result.subscribe(x => console.log(x));
  54425. *
  54426. * @see {@link audit}
  54427. * @see {@link debounce}
  54428. * @see {@link delayWhen}
  54429. * @see {@link sample}
  54430. * @see {@link throttleTime}
  54431. *
  54432. * @param {function(value: T): SubscribableOrPromise} durationSelector A function
  54433. * that receives a value from the source Observable, for computing the silencing
  54434. * duration for each source value, returned as an Observable or a Promise.
  54435. * @param {Object} config a configuration object to define `leading` and `trailing` behavior. Defaults
  54436. * to `{ leading: true, trailing: false }`.
  54437. * @return {Observable<T>} An Observable that performs the throttle operation to
  54438. * limit the rate of emissions from the source.
  54439. * @method throttle
  54440. * @owner Observable
  54441. */
  54442. function throttle(durationSelector, config) {
  54443. if (config === void 0) { config = exports.defaultThrottleConfig; }
  54444. return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };
  54445. }
  54446. exports.throttle = throttle;
  54447. var ThrottleOperator = (function () {
  54448. function ThrottleOperator(durationSelector, leading, trailing) {
  54449. this.durationSelector = durationSelector;
  54450. this.leading = leading;
  54451. this.trailing = trailing;
  54452. }
  54453. ThrottleOperator.prototype.call = function (subscriber, source) {
  54454. return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
  54455. };
  54456. return ThrottleOperator;
  54457. }());
  54458. /**
  54459. * We need this JSDoc comment for affecting ESDoc
  54460. * @ignore
  54461. * @extends {Ignored}
  54462. */
  54463. var ThrottleSubscriber = (function (_super) {
  54464. __extends(ThrottleSubscriber, _super);
  54465. function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
  54466. _super.call(this, destination);
  54467. this.destination = destination;
  54468. this.durationSelector = durationSelector;
  54469. this._leading = _leading;
  54470. this._trailing = _trailing;
  54471. this._hasTrailingValue = false;
  54472. }
  54473. ThrottleSubscriber.prototype._next = function (value) {
  54474. if (this.throttled) {
  54475. if (this._trailing) {
  54476. this._hasTrailingValue = true;
  54477. this._trailingValue = value;
  54478. }
  54479. }
  54480. else {
  54481. var duration = this.tryDurationSelector(value);
  54482. if (duration) {
  54483. this.add(this.throttled = subscribeToResult_1.subscribeToResult(this, duration));
  54484. }
  54485. if (this._leading) {
  54486. this.destination.next(value);
  54487. if (this._trailing) {
  54488. this._hasTrailingValue = true;
  54489. this._trailingValue = value;
  54490. }
  54491. }
  54492. }
  54493. };
  54494. ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
  54495. try {
  54496. return this.durationSelector(value);
  54497. }
  54498. catch (err) {
  54499. this.destination.error(err);
  54500. return null;
  54501. }
  54502. };
  54503. /** @deprecated internal use only */ ThrottleSubscriber.prototype._unsubscribe = function () {
  54504. var _a = this, throttled = _a.throttled, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue, _trailing = _a._trailing;
  54505. this._trailingValue = null;
  54506. this._hasTrailingValue = false;
  54507. if (throttled) {
  54508. this.remove(throttled);
  54509. this.throttled = null;
  54510. throttled.unsubscribe();
  54511. }
  54512. };
  54513. ThrottleSubscriber.prototype._sendTrailing = function () {
  54514. var _a = this, destination = _a.destination, throttled = _a.throttled, _trailing = _a._trailing, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue;
  54515. if (throttled && _trailing && _hasTrailingValue) {
  54516. destination.next(_trailingValue);
  54517. this._trailingValue = null;
  54518. this._hasTrailingValue = false;
  54519. }
  54520. };
  54521. ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  54522. this._sendTrailing();
  54523. this._unsubscribe();
  54524. };
  54525. ThrottleSubscriber.prototype.notifyComplete = function () {
  54526. this._sendTrailing();
  54527. this._unsubscribe();
  54528. };
  54529. return ThrottleSubscriber;
  54530. }(OuterSubscriber_1.OuterSubscriber));
  54531. //# sourceMappingURL=throttle.js.map
  54532. /***/ }),
  54533. /* 81 */
  54534. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  54535. "use strict";
  54536. /* harmony export (immutable) */ __webpack_exports__["d"] = initSwiper;
  54537. /* harmony export (immutable) */ __webpack_exports__["l"] = startAutoplay;
  54538. /* harmony export (immutable) */ __webpack_exports__["m"] = stopAutoplay;
  54539. /* harmony export (immutable) */ __webpack_exports__["g"] = pauseAutoplay;
  54540. /* harmony export (immutable) */ __webpack_exports__["o"] = updateAutoHeight;
  54541. /* harmony export (immutable) */ __webpack_exports__["p"] = updateContainerSize;
  54542. /* harmony export (immutable) */ __webpack_exports__["q"] = updateSlidesSize;
  54543. /* harmony export (immutable) */ __webpack_exports__["a"] = currentSlidesPerView;
  54544. /* harmony export (immutable) */ __webpack_exports__["n"] = update;
  54545. /* harmony export (immutable) */ __webpack_exports__["c"] = fixLoop;
  54546. /* harmony export (immutable) */ __webpack_exports__["k"] = slideTo;
  54547. /* harmony export (immutable) */ __webpack_exports__["f"] = onTransitionStart;
  54548. /* harmony export (immutable) */ __webpack_exports__["e"] = onTransitionEnd;
  54549. /* harmony export (immutable) */ __webpack_exports__["h"] = slideNext;
  54550. /* harmony export (immutable) */ __webpack_exports__["i"] = slidePrev;
  54551. /* harmony export (immutable) */ __webpack_exports__["j"] = slideReset;
  54552. /* unused harmony export disableTouchControl */
  54553. /* unused harmony export enableTouchControl */
  54554. /* harmony export (immutable) */ __webpack_exports__["b"] = destroySwiper;
  54555. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  54556. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper_transition__ = __webpack_require__(138);
  54557. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__swiper_progress__ = __webpack_require__(82);
  54558. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__swiper_classes__ = __webpack_require__(139);
  54559. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__swiper_parallax__ = __webpack_require__(322);
  54560. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__swiper_index__ = __webpack_require__(83);
  54561. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__swiper_effects__ = __webpack_require__(141);
  54562. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__swiper_pagination__ = __webpack_require__(140);
  54563. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__swiper_zoom__ = __webpack_require__(324);
  54564. /**
  54565. * Adopted from Swiper
  54566. * Most modern mobile touch slider and framework with hardware
  54567. * accelerated transitions.
  54568. *
  54569. * http://www.idangero.us/swiper/
  54570. *
  54571. * Copyright 2016, Vladimir Kharlampidi
  54572. * The iDangero.us
  54573. * http://www.idangero.us/
  54574. *
  54575. * Licensed under MIT
  54576. */
  54577. function initSwiper(s, plt) {
  54578. // Classname
  54579. s._classNames = [];
  54580. /*=========================
  54581. Preparation - Define Container, Wrapper and Pagination
  54582. ===========================*/
  54583. if (!s.container) {
  54584. return;
  54585. }
  54586. // Save instance in container HTML Element and in data
  54587. s.container.swiper = s;
  54588. var containerModifierClass = __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].containerModifier;
  54589. s._classNames.push(containerModifierClass + s.direction);
  54590. if (s.freeMode) {
  54591. s._classNames.push(containerModifierClass + 'free-mode');
  54592. }
  54593. if (s.autoHeight) {
  54594. s._classNames.push(containerModifierClass + 'autoheight');
  54595. }
  54596. // Enable slides progress when required
  54597. if (s.parallax || s.watchSlidesVisibility) {
  54598. s.watchSlidesProgress = true;
  54599. }
  54600. // Max resistance when touchReleaseOnEdges
  54601. if (s.touchReleaseOnEdges) {
  54602. s.resistanceRatio = 0;
  54603. }
  54604. var effect = s.effect;
  54605. // Coverflow / 3D
  54606. if (['cube', 'coverflow', 'flip'].indexOf(effect) >= 0) {
  54607. s.watchSlidesProgress = true;
  54608. s._classNames.push(containerModifierClass + '3d');
  54609. }
  54610. if (effect !== 'slide') {
  54611. s._classNames.push(containerModifierClass + effect);
  54612. }
  54613. if (effect === 'cube') {
  54614. s.resistanceRatio = 0;
  54615. s.slidesPerView = 1;
  54616. s.slidesPerColumn = 1;
  54617. s.slidesPerGroup = 1;
  54618. s.centeredSlides = false;
  54619. s.spaceBetween = 0;
  54620. s.virtualTranslate = true;
  54621. s.setWrapperSize = false;
  54622. }
  54623. if (effect === 'fade' || effect === 'flip') {
  54624. s.slidesPerView = 1;
  54625. s.slidesPerColumn = 1;
  54626. s.slidesPerGroup = 1;
  54627. s.watchSlidesProgress = true;
  54628. s.spaceBetween = 0;
  54629. s.setWrapperSize = false;
  54630. s.virtualTranslate = true;
  54631. }
  54632. // Wrapper
  54633. s._wrapper = s.container.querySelector('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].wrapper);
  54634. // Pagination
  54635. if (s.paginationType) {
  54636. s._paginationContainer = s.container.querySelector('.swiper-pagination');
  54637. if (s.paginationType === 'bullets') {
  54638. s._paginationContainer.classList.add(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationModifier + 'clickable');
  54639. }
  54640. s._paginationContainer.classList.add(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationModifier + s.paginationType);
  54641. }
  54642. // Next/Prev Buttons
  54643. // if (s.nextButton || s.prevButton) {
  54644. // if (s.nextButton) {
  54645. // s.nextButton = <any>s.container.closest('ion-content').querySelector(s.nextButton);
  54646. // }
  54647. // if (s.prevButton) {
  54648. // s.prevButton = <any>s.container.closest('ion-content').querySelector(s.prevButton);
  54649. // }
  54650. // }
  54651. // RTL
  54652. s._rtl = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && (s.container.dir.toLowerCase() === 'rtl' || s.container.style.direction === 'rtl');
  54653. if (s._rtl) {
  54654. s._classNames.push(containerModifierClass + 'rtl');
  54655. }
  54656. // Columns
  54657. if (s.slidesPerColumn > 1) {
  54658. s._classNames.push(containerModifierClass + 'multirow');
  54659. }
  54660. // Check for Android
  54661. if (plt.is('android')) {
  54662. s._classNames.push(containerModifierClass + 'android');
  54663. }
  54664. // Add classes
  54665. s._classNames.forEach(function (clsName) {
  54666. s.container.classList.add(clsName);
  54667. });
  54668. // Translate
  54669. s._translate = 0;
  54670. // Progress
  54671. s.progress = 0;
  54672. // Velocity
  54673. s.velocity = 0;
  54674. /*=========================
  54675. Autoplay
  54676. ===========================*/
  54677. s._autoplayTimeoutId = undefined;
  54678. s._autoplaying = false;
  54679. s._autoplayPaused = false;
  54680. s._allowClick = true;
  54681. // Animating Flag
  54682. s._animating = false;
  54683. // Touches information
  54684. s._touches = {
  54685. startX: 0,
  54686. startY: 0,
  54687. currentX: 0,
  54688. currentY: 0,
  54689. diff: 0
  54690. };
  54691. if (s.loop) {
  54692. createLoop(s);
  54693. }
  54694. updateContainerSize(s, plt);
  54695. updateSlidesSize(s, plt);
  54696. Object(__WEBPACK_IMPORTED_MODULE_7__swiper_pagination__["a" /* updatePagination */])(s);
  54697. if (effect !== 'slide' && __WEBPACK_IMPORTED_MODULE_6__swiper_effects__["a" /* SWIPER_EFFECTS */][effect]) {
  54698. if (!s.loop) {
  54699. Object(__WEBPACK_IMPORTED_MODULE_2__swiper_progress__["a" /* updateProgress */])(s);
  54700. }
  54701. __WEBPACK_IMPORTED_MODULE_6__swiper_effects__["a" /* SWIPER_EFFECTS */][effect].setTranslate(s, plt);
  54702. }
  54703. if (s.loop) {
  54704. slideTo(s, plt, s.initialSlide + s.loopedSlides, 0, s.runCallbacksOnInit);
  54705. }
  54706. else {
  54707. slideTo(s, plt, s.initialSlide, 0, s.runCallbacksOnInit);
  54708. if (s.initialSlide === 0) {
  54709. Object(__WEBPACK_IMPORTED_MODULE_4__swiper_parallax__["b" /* parallaxSetTranslate */])(s);
  54710. }
  54711. }
  54712. if (s.autoplay) {
  54713. startAutoplay(s, plt);
  54714. }
  54715. }
  54716. /*=========================
  54717. Autoplay
  54718. ===========================*/
  54719. function autoplay(s, plt) {
  54720. var autoplayDelay = s.autoplay;
  54721. var activeSlide = s._slides[s._activeIndex];
  54722. if (activeSlide.hasAttribute('data-swiper-autoplay')) {
  54723. autoplayDelay = (activeSlide.getAttribute('data-swiper-autoplay') || s.autoplay);
  54724. }
  54725. s._autoplayTimeoutId = plt.timeout(function () {
  54726. s._zone.run(function () {
  54727. if (s.loop) {
  54728. fixLoop(s, plt);
  54729. slideNext(s, plt, true, undefined, true);
  54730. s.ionSlideAutoplay.emit(s);
  54731. }
  54732. else {
  54733. if (!s._isEnd) {
  54734. slideNext(s, plt, true, undefined, true);
  54735. s.ionSlideAutoplay.emit(s);
  54736. }
  54737. else {
  54738. if (!s.autoplayStopOnLast) {
  54739. slideTo(s, plt, 0);
  54740. s.ionSlideAutoplay.emit(s);
  54741. }
  54742. else {
  54743. stopAutoplay(s);
  54744. }
  54745. }
  54746. }
  54747. });
  54748. }, autoplayDelay);
  54749. }
  54750. function startAutoplay(s, plt) {
  54751. if (typeof s._autoplayTimeoutId !== 'undefined')
  54752. return false;
  54753. if (!s.autoplay || s._autoplaying) {
  54754. return false;
  54755. }
  54756. s._autoplaying = true;
  54757. s._zone.run(function () {
  54758. s.ionSlideAutoplayStart.emit(s);
  54759. });
  54760. autoplay(s, plt);
  54761. }
  54762. function stopAutoplay(s) {
  54763. if (!s._autoplayTimeoutId)
  54764. return;
  54765. if (s._autoplayTimeoutId)
  54766. clearTimeout(s._autoplayTimeoutId);
  54767. s._autoplaying = false;
  54768. s._autoplayTimeoutId = undefined;
  54769. s._zone.run(function () {
  54770. s.ionSlideAutoplayStop.emit(s);
  54771. });
  54772. }
  54773. function pauseAutoplay(s, plt, speed) {
  54774. if (s._autoplayPaused)
  54775. return;
  54776. if (s._autoplayTimeoutId)
  54777. clearTimeout(s._autoplayTimeoutId);
  54778. s._autoplayPaused = true;
  54779. if (speed === 0) {
  54780. s._autoplayPaused = false;
  54781. autoplay(s, plt);
  54782. }
  54783. else {
  54784. plt.transitionEnd(s._wrapper, function () {
  54785. if (!s)
  54786. return;
  54787. s._autoplayPaused = false;
  54788. if (!s._autoplaying) {
  54789. stopAutoplay(s);
  54790. }
  54791. else {
  54792. autoplay(s, plt);
  54793. }
  54794. });
  54795. }
  54796. }
  54797. /*=========================
  54798. Slider/slides sizes
  54799. ===========================*/
  54800. function updateAutoHeight(s) {
  54801. var activeSlides = [];
  54802. var newHeight = 0;
  54803. var i;
  54804. // Find slides currently in view
  54805. if (s.slidesPerView !== 'auto' && s.slidesPerView > 1) {
  54806. for (i = 0; i < Math.ceil(s.slidesPerView); i++) {
  54807. var index = s._activeIndex + i;
  54808. if (index > s._slides.length)
  54809. break;
  54810. activeSlides.push(s._slides[index]);
  54811. }
  54812. }
  54813. else {
  54814. activeSlides.push(s._slides[s._activeIndex]);
  54815. }
  54816. // Find new height from heighest slide in view
  54817. for (i = 0; i < activeSlides.length; i++) {
  54818. if (typeof activeSlides[i] !== 'undefined') {
  54819. var height = activeSlides[i].offsetHeight;
  54820. newHeight = height > newHeight ? height : newHeight;
  54821. }
  54822. }
  54823. // Update Height
  54824. if (newHeight) {
  54825. s._wrapper.style.height = newHeight + 'px';
  54826. }
  54827. }
  54828. function updateContainerSize(s, plt) {
  54829. var container = s.container;
  54830. var width;
  54831. var height;
  54832. if (typeof s.width !== 'undefined') {
  54833. // manually assign user width
  54834. width = s.width;
  54835. }
  54836. else {
  54837. width = container.clientWidth;
  54838. }
  54839. if (typeof s.renderedHeight !== 'undefined') {
  54840. // manually assign user height
  54841. height = s.renderedHeight;
  54842. }
  54843. else {
  54844. height = container.clientHeight;
  54845. }
  54846. if (width === 0 && Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) || height === 0 && !Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  54847. return;
  54848. }
  54849. // Subtract paddings
  54850. var containerStyles = plt.getElementComputedStyle(container);
  54851. width = width - parseInt(containerStyles.paddingLeft, 10) - parseInt(containerStyles.paddingRight, 10);
  54852. height = height - parseInt(containerStyles.paddingTop, 10) - parseInt(containerStyles.paddingBottom, 10);
  54853. // Store values
  54854. s.renderedWidth = width;
  54855. s.renderedHeight = height;
  54856. s._renderedSize = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? width : height;
  54857. }
  54858. function updateSlidesSize(s, plt) {
  54859. s._slides = s._wrapper.querySelectorAll('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide);
  54860. s._snapGrid = [];
  54861. s._slidesGrid = [];
  54862. s._slidesSizesGrid = [];
  54863. var spaceBetween = s.spaceBetween;
  54864. var slidePosition = -s.slidesOffsetBefore;
  54865. var i;
  54866. var prevSlideSize = 0;
  54867. var index = 0;
  54868. if (typeof s._renderedSize === 'undefined')
  54869. return;
  54870. if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
  54871. spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s._renderedSize;
  54872. }
  54873. s._virtualSize = -spaceBetween;
  54874. // reset margins
  54875. if (s._rtl) {
  54876. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._slides, { marginLeft: '', marginTop: '' });
  54877. }
  54878. else {
  54879. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._slides, { marginRight: '', marginBottom: '' });
  54880. }
  54881. var slidesNumberEvenToRows;
  54882. if (s.slidesPerColumn > 1) {
  54883. if (Math.floor(s._slides.length / s.slidesPerColumn) === s._slides.length / s.slidesPerColumn) {
  54884. slidesNumberEvenToRows = s._slides.length;
  54885. }
  54886. else {
  54887. slidesNumberEvenToRows = Math.ceil(s._slides.length / s.slidesPerColumn) * s.slidesPerColumn;
  54888. }
  54889. if (s.slidesPerView !== 'auto' && s.slidesPerColumnFill === 'row') {
  54890. slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.slidesPerView * s.slidesPerColumn);
  54891. }
  54892. }
  54893. // Calc slides
  54894. var slideSize;
  54895. var slidesPerColumn = s.slidesPerColumn;
  54896. var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
  54897. var numFullColumns = slidesPerRow - (s.slidesPerColumn * slidesPerRow - s._slides.length);
  54898. for (i = 0; i < s._slides.length; i++) {
  54899. slideSize = 0;
  54900. var slide = s._slides[i];
  54901. if (s.slidesPerColumn > 1) {
  54902. // Set slides order
  54903. var newSlideOrderIndex;
  54904. var column;
  54905. var row;
  54906. if (s.slidesPerColumnFill === 'column') {
  54907. column = Math.floor(i / slidesPerColumn);
  54908. row = i - column * slidesPerColumn;
  54909. if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
  54910. if (++row >= slidesPerColumn) {
  54911. row = 0;
  54912. column++;
  54913. }
  54914. }
  54915. newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
  54916. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(slide, {
  54917. '-webkit-box-ordinal-group': newSlideOrderIndex,
  54918. '-moz-box-ordinal-group': newSlideOrderIndex,
  54919. '-ms-flex-order': newSlideOrderIndex,
  54920. '-webkit-order': newSlideOrderIndex,
  54921. 'order': newSlideOrderIndex
  54922. });
  54923. }
  54924. else {
  54925. row = Math.floor(i / slidesPerRow);
  54926. column = i - row * slidesPerRow;
  54927. }
  54928. var cssVal = (row !== 0 && s.spaceBetween) && (s.spaceBetween + 'px');
  54929. var cssObj = {};
  54930. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  54931. cssObj['marginTop'] = cssVal;
  54932. }
  54933. else {
  54934. cssObj['marginLeft'] = cssVal;
  54935. }
  54936. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(slide, cssObj);
  54937. slide.setAttribute('data-swiper-column', column);
  54938. slide.setAttribute('data-swiper-row', row);
  54939. }
  54940. if (slide.style.display === 'none') {
  54941. continue;
  54942. }
  54943. if (s.slidesPerView === 'auto') {
  54944. var styles = plt.getElementComputedStyle(slide);
  54945. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  54946. slideSize = slide.offsetWidth + parseFloat(styles.marginRight) + parseFloat(styles.marginLeft);
  54947. }
  54948. else {
  54949. slideSize = slide.offsetHeight + parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
  54950. }
  54951. if (s.roundLengths)
  54952. slideSize = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["m" /* round */])(slideSize);
  54953. }
  54954. else {
  54955. slideSize = (s._renderedSize - (s.slidesPerView - 1) * spaceBetween) / s.slidesPerView;
  54956. if (s.roundLengths)
  54957. slideSize = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["m" /* round */])(slideSize);
  54958. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  54959. s._slides[i].style.width = slideSize + 'px';
  54960. }
  54961. else {
  54962. s._slides[i].style.height = slideSize + 'px';
  54963. }
  54964. }
  54965. s._slides[i].swiperSlideSize = slideSize;
  54966. s._slidesSizesGrid.push(slideSize);
  54967. if (s.centeredSlides) {
  54968. slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
  54969. if (i === 0)
  54970. slidePosition = slidePosition - s._renderedSize / 2 - spaceBetween;
  54971. if (Math.abs(slidePosition) < 1 / 1000)
  54972. slidePosition = 0;
  54973. if ((index) % s.slidesPerGroup === 0)
  54974. s._snapGrid.push(slidePosition);
  54975. s._slidesGrid.push(slidePosition);
  54976. }
  54977. else {
  54978. if ((index) % s.slidesPerGroup === 0)
  54979. s._snapGrid.push(slidePosition);
  54980. s._slidesGrid.push(slidePosition);
  54981. slidePosition = slidePosition + slideSize + spaceBetween;
  54982. }
  54983. s._virtualSize += slideSize + spaceBetween;
  54984. prevSlideSize = slideSize;
  54985. index++;
  54986. }
  54987. s._virtualSize = Math.max(s._virtualSize, s._renderedSize) + s.slidesOffsetAfter;
  54988. var newSlidesGrid;
  54989. if (s._rtl && (s.effect === 'slide' || s.effect === 'coverflow')) {
  54990. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._wrapper, { width: s._virtualSize + s.spaceBetween + 'px' });
  54991. }
  54992. if (s.setWrapperSize) {
  54993. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  54994. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._wrapper, { width: s._virtualSize + s.spaceBetween + 'px' });
  54995. }
  54996. else {
  54997. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._wrapper, { height: s._virtualSize + s.spaceBetween + 'px' });
  54998. }
  54999. }
  55000. if (s.slidesPerColumn > 1) {
  55001. s._virtualSize = (slideSize + s.spaceBetween) * slidesNumberEvenToRows;
  55002. s._virtualSize = Math.ceil(s._virtualSize / s.slidesPerColumn) - s.spaceBetween;
  55003. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  55004. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._wrapper, { width: s._virtualSize + s.spaceBetween + 'px' });
  55005. }
  55006. else {
  55007. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._wrapper, { height: s._virtualSize + s.spaceBetween + 'px' });
  55008. }
  55009. if (s.centeredSlides) {
  55010. newSlidesGrid = [];
  55011. for (i = 0; i < s._snapGrid.length; i++) {
  55012. if (s._snapGrid[i] < s._virtualSize + s._snapGrid[0])
  55013. newSlidesGrid.push(s._snapGrid[i]);
  55014. }
  55015. s._snapGrid = newSlidesGrid;
  55016. }
  55017. }
  55018. // Remove last grid elements depending on width
  55019. if (!s.centeredSlides) {
  55020. newSlidesGrid = [];
  55021. for (i = 0; i < s._snapGrid.length; i++) {
  55022. if (s._snapGrid[i] <= s._virtualSize - s._renderedSize) {
  55023. newSlidesGrid.push(s._snapGrid[i]);
  55024. }
  55025. }
  55026. s._snapGrid = newSlidesGrid;
  55027. if (Math.floor(s._virtualSize - s._renderedSize) - Math.floor(s._snapGrid[s._snapGrid.length - 1]) > 1) {
  55028. s._snapGrid.push(s._virtualSize - s._renderedSize);
  55029. }
  55030. }
  55031. if (s._snapGrid.length === 0)
  55032. s._snapGrid = [0];
  55033. if (s.spaceBetween !== 0) {
  55034. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  55035. if (s._rtl) {
  55036. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._slides, { marginLeft: spaceBetween + 'px' });
  55037. }
  55038. else {
  55039. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._slides, { marginRight: spaceBetween + 'px' });
  55040. }
  55041. }
  55042. else {
  55043. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["e" /* inlineStyle */])(s._slides, { marginBottom: spaceBetween + 'px' });
  55044. }
  55045. }
  55046. if (s.watchSlidesProgress) {
  55047. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["q" /* updateSlidesOffset */])(s);
  55048. }
  55049. }
  55050. /*=========================
  55051. Dynamic Slides Per View
  55052. ===========================*/
  55053. function currentSlidesPerView(s) {
  55054. var spv = 1;
  55055. var i;
  55056. var j;
  55057. if (s.centeredSlides) {
  55058. var size = s._slides[s._activeIndex].swiperSlideSize;
  55059. var breakLoop;
  55060. for (i = s._activeIndex + 1; i < s._slides.length; i++) {
  55061. if (s._slides[i] && !breakLoop) {
  55062. size += s._slides[i].swiperSlideSize;
  55063. spv++;
  55064. if (size > s._renderedSize)
  55065. breakLoop = true;
  55066. }
  55067. }
  55068. for (j = s._activeIndex - 1; j >= 0; j--) {
  55069. if (s._slides[j] && !breakLoop) {
  55070. size += s._slides[j].swiperSlideSize;
  55071. spv++;
  55072. if (size > s._renderedSize)
  55073. breakLoop = true;
  55074. }
  55075. }
  55076. }
  55077. else {
  55078. for (i = s._activeIndex + 1; i < s._slides.length; i++) {
  55079. if (s._slidesGrid[i] - s._slidesGrid[s._activeIndex] < s._renderedSize) {
  55080. spv++;
  55081. }
  55082. }
  55083. }
  55084. return spv;
  55085. }
  55086. /*=========================
  55087. Common update method
  55088. ===========================*/
  55089. function update(s, plt, updateTranslate) {
  55090. if (!s)
  55091. return;
  55092. updateContainerSize(s, plt);
  55093. updateSlidesSize(s, plt);
  55094. Object(__WEBPACK_IMPORTED_MODULE_2__swiper_progress__["a" /* updateProgress */])(s);
  55095. Object(__WEBPACK_IMPORTED_MODULE_7__swiper_pagination__["a" /* updatePagination */])(s);
  55096. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_classes__["a" /* updateClasses */])(s);
  55097. if (s.zoom) {
  55098. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_zoom__["b" /* resetZoomEvents */])(s, plt);
  55099. }
  55100. var translated;
  55101. var newTranslate;
  55102. function forceSetTranslate() {
  55103. newTranslate = Math.min(Math.max(s._translate, Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)), Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s));
  55104. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, newTranslate);
  55105. Object(__WEBPACK_IMPORTED_MODULE_5__swiper_index__["a" /* updateActiveIndex */])(s);
  55106. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_classes__["a" /* updateClasses */])(s);
  55107. }
  55108. if (updateTranslate) {
  55109. if (s._spline) {
  55110. s._spline = undefined;
  55111. }
  55112. if (s.freeMode) {
  55113. forceSetTranslate();
  55114. if (s.autoHeight) {
  55115. updateAutoHeight(s);
  55116. }
  55117. }
  55118. else {
  55119. if ((s.slidesPerView === 'auto' || s.slidesPerView > 1) && s._isEnd && !s.centeredSlides) {
  55120. translated = slideTo(s, plt, s._slides.length - 1, 0, false, true);
  55121. }
  55122. else {
  55123. translated = slideTo(s, plt, s._activeIndex, 0, false, true);
  55124. }
  55125. if (!translated) {
  55126. forceSetTranslate();
  55127. }
  55128. }
  55129. }
  55130. else if (s.autoHeight) {
  55131. updateAutoHeight(s);
  55132. }
  55133. }
  55134. /*=========================
  55135. Loop
  55136. ===========================*/
  55137. // Create looped slides
  55138. function createLoop(s) {
  55139. // Remove duplicated slides
  55140. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide + '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideDuplicate, function (ele) {
  55141. ele.parentElement.removeChild(ele);
  55142. });
  55143. var slides = s._wrapper.querySelectorAll('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide);
  55144. if (s.slidesPerView === 'auto' && !s.loopedSlides) {
  55145. s.loopedSlides = slides.length;
  55146. }
  55147. s.loopedSlides = parseInt((s.loopedSlides || s.slidesPerView), 10);
  55148. s.loopedSlides = s.loopedSlides + s.loopAdditionalSlides;
  55149. if (s.loopedSlides > slides.length) {
  55150. s.loopedSlides = slides.length;
  55151. }
  55152. var prependSlides = [];
  55153. var appendSlides = [];
  55154. for (var i = 0; i < slides.length; i++) {
  55155. var slide = slides[i];
  55156. if (i < s.loopedSlides)
  55157. appendSlides.push(slide);
  55158. if (i < slides.length && i >= slides.length - s.loopedSlides)
  55159. prependSlides.push(slide);
  55160. slide.setAttribute('data-swiper-slide-index', i);
  55161. }
  55162. for (i = 0; i < appendSlides.length; i++) {
  55163. var appendClone = appendSlides[i].cloneNode(true);
  55164. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["b" /* addClass */])(appendClone, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideDuplicate);
  55165. s._wrapper.appendChild(appendClone);
  55166. }
  55167. for (i = prependSlides.length - 1; i >= 0; i--) {
  55168. var prependClone = prependSlides[i].cloneNode(true);
  55169. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["b" /* addClass */])(prependClone, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideDuplicate);
  55170. s._wrapper.insertBefore(prependClone, s._wrapper.firstElementChild);
  55171. }
  55172. }
  55173. function destroyLoop(s) {
  55174. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide + '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideDuplicate, function (ele) {
  55175. ele.parentElement.removeChild(ele);
  55176. });
  55177. if (s._slides) {
  55178. for (var i = 0; i < s._slides.length; i++) {
  55179. s._slides[i].removeAttribute('data-swiper-slide-index');
  55180. }
  55181. }
  55182. }
  55183. function fixLoop(s, plt) {
  55184. var newIndex;
  55185. if (s._activeIndex < s.loopedSlides) {
  55186. // Fix For Negative Oversliding
  55187. newIndex = s._slides.length - s.loopedSlides * 3 + s._activeIndex;
  55188. newIndex = newIndex + s.loopedSlides;
  55189. slideTo(s, plt, newIndex, 0, false, true);
  55190. }
  55191. else if ((s.slidesPerView === 'auto' && s._activeIndex >= s.loopedSlides * 2) || (s._activeIndex > s._slides.length - s.slidesPerView * 2)) {
  55192. // Fix For Positive Oversliding
  55193. newIndex = -s._slides.length + s._activeIndex + s.loopedSlides;
  55194. newIndex = newIndex + s.loopedSlides;
  55195. slideTo(s, plt, newIndex, 0, false, true);
  55196. }
  55197. }
  55198. /*=========================
  55199. Transitions
  55200. ===========================*/
  55201. function slideTo(s, plt, slideIndex, speed, runCallbacks, internal) {
  55202. if (runCallbacks === void 0) { runCallbacks = true; }
  55203. if (typeof slideIndex === 'undefined')
  55204. slideIndex = 0;
  55205. if (slideIndex < 0)
  55206. slideIndex = 0;
  55207. s._snapIndex = Math.floor(slideIndex / s.slidesPerGroup);
  55208. if (s._snapIndex >= s._snapGrid.length)
  55209. s._snapIndex = s._snapGrid.length - 1;
  55210. var translate = -s._snapGrid[s._snapIndex];
  55211. // Stop autoplay
  55212. if (s.autoplay && s._autoplaying) {
  55213. if (internal || !s.autoplayDisableOnInteraction) {
  55214. pauseAutoplay(s, plt, speed);
  55215. }
  55216. else {
  55217. stopAutoplay(s);
  55218. }
  55219. }
  55220. // Update progress
  55221. Object(__WEBPACK_IMPORTED_MODULE_2__swiper_progress__["a" /* updateProgress */])(s, translate);
  55222. // Directions locks
  55223. if (!s._allowSwipeToNext && translate < s._translate && translate < Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s)) {
  55224. return false;
  55225. }
  55226. if (!s._allowSwipeToPrev && translate > s._translate && translate > Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)) {
  55227. if ((s._activeIndex || 0) !== slideIndex)
  55228. return false;
  55229. }
  55230. // Update Index
  55231. if (typeof speed === 'undefined')
  55232. speed = s.speed;
  55233. s._previousIndex = s._activeIndex || 0;
  55234. s._activeIndex = slideIndex;
  55235. Object(__WEBPACK_IMPORTED_MODULE_5__swiper_index__["b" /* updateRealIndex */])(s);
  55236. if ((s._rtl && -translate === s._translate) || (!s._rtl && translate === s._translate)) {
  55237. // Update Height
  55238. if (s.autoHeight) {
  55239. updateAutoHeight(s);
  55240. }
  55241. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_classes__["a" /* updateClasses */])(s);
  55242. if (s.effect !== 'slide') {
  55243. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, translate);
  55244. }
  55245. return false;
  55246. }
  55247. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_classes__["a" /* updateClasses */])(s);
  55248. onTransitionStart(s, runCallbacks);
  55249. if (speed === 0) {
  55250. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, translate);
  55251. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, 0);
  55252. onTransitionEnd(s, plt, runCallbacks);
  55253. }
  55254. else {
  55255. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, translate);
  55256. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, speed);
  55257. if (!s._animating) {
  55258. s._animating = true;
  55259. plt.transitionEnd(s._wrapper, function () {
  55260. if (!s)
  55261. return;
  55262. onTransitionEnd(s, plt, runCallbacks);
  55263. });
  55264. }
  55265. }
  55266. return true;
  55267. }
  55268. function onTransitionStart(s, runCallbacks) {
  55269. if (runCallbacks === void 0) { runCallbacks = true; }
  55270. if (s.autoHeight) {
  55271. updateAutoHeight(s);
  55272. }
  55273. if (runCallbacks) {
  55274. s._zone.run(function () {
  55275. s.ionSlideTransitionStart.emit(s);
  55276. if (s._activeIndex !== s._previousIndex) {
  55277. s.ionSlideWillChange.emit(s);
  55278. if (s._activeIndex > s._previousIndex) {
  55279. s.ionSlideNextStart.emit(s);
  55280. }
  55281. else {
  55282. s.ionSlidePrevStart.emit(s);
  55283. }
  55284. }
  55285. });
  55286. }
  55287. }
  55288. function onTransitionEnd(s, plt, runCallbacks) {
  55289. if (runCallbacks === void 0) { runCallbacks = true; }
  55290. s._animating = false;
  55291. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, 0);
  55292. if (runCallbacks) {
  55293. s._zone.run(function () {
  55294. s.ionSlideTransitionEnd.emit(s);
  55295. if (s._activeIndex !== s._previousIndex) {
  55296. s.ionSlideDidChange.emit(s);
  55297. if (s._activeIndex > s._previousIndex) {
  55298. s.ionSlideNextEnd.emit(s);
  55299. }
  55300. else {
  55301. s.ionSlidePrevEnd.emit(s);
  55302. }
  55303. }
  55304. });
  55305. }
  55306. }
  55307. function slideNext(s, plt, runCallbacks, speed, internal) {
  55308. if (s.loop) {
  55309. if (s._animating)
  55310. return false;
  55311. fixLoop(s, plt);
  55312. s.container.clientLeft;
  55313. return slideTo(s, plt, s._activeIndex + s.slidesPerGroup, speed, runCallbacks, internal);
  55314. }
  55315. var nextSlide = s._activeIndex + s.slidesPerGroup;
  55316. if (nextSlide < s._slides.length) {
  55317. return slideTo(s, plt, nextSlide, speed, runCallbacks, internal);
  55318. }
  55319. return false;
  55320. }
  55321. function slidePrev(s, plt, runCallbacks, speed, internal) {
  55322. if (s.loop) {
  55323. if (s._animating)
  55324. return false;
  55325. fixLoop(s, plt);
  55326. s.container.clientLeft;
  55327. return slideTo(s, plt, s._activeIndex - 1, speed, runCallbacks, internal);
  55328. }
  55329. var previousSlide = s._activeIndex - 1;
  55330. if (previousSlide >= 0) {
  55331. return slideTo(s, plt, s._activeIndex - 1, speed, runCallbacks, internal);
  55332. }
  55333. return false;
  55334. }
  55335. function slideReset(s, plt, runCallbacks, speed) {
  55336. return slideTo(s, plt, s._activeIndex, speed, runCallbacks, true);
  55337. }
  55338. function disableTouchControl(s) {
  55339. s.onlyExternal = true;
  55340. return true;
  55341. }
  55342. function enableTouchControl(s) {
  55343. s.onlyExternal = false;
  55344. return true;
  55345. }
  55346. /*=========================
  55347. Translate/transition helpers
  55348. ===========================*/
  55349. // Cleanup dynamic styles
  55350. function cleanupStyles(s) {
  55351. if (!s.container || !s._wrapper) {
  55352. // fix #10830
  55353. return;
  55354. }
  55355. // Container
  55356. if (s.container) {
  55357. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s.container, s._classNames);
  55358. s.container.removeAttribute('style');
  55359. }
  55360. // Wrapper
  55361. s._wrapper.removeAttribute('style');
  55362. // Slides
  55363. if (s._slides && s._slides.length) {
  55364. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s._slides, [
  55365. __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideVisible,
  55366. __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideActive,
  55367. __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideNext,
  55368. __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slidePrev
  55369. ]);
  55370. for (var i = 0; i < s._slides.length; i++) {
  55371. var slide = s._slides[i];
  55372. slide.removeAttribute('style');
  55373. slide.removeAttribute('data-swiper-column');
  55374. slide.removeAttribute('data-swiper-row');
  55375. }
  55376. }
  55377. // Pagination/Bullets
  55378. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s._bullets, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bulletActive);
  55379. // Buttons
  55380. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s.prevButton, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].buttonDisabled);
  55381. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s.nextButton, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].buttonDisabled);
  55382. }
  55383. // Destroy
  55384. function destroySwiper(s) {
  55385. // Stop autoplay
  55386. stopAutoplay(s);
  55387. // Destroy loop
  55388. if (s.loop) {
  55389. destroyLoop(s);
  55390. }
  55391. // Cleanup styles
  55392. cleanupStyles(s);
  55393. }
  55394. //# sourceMappingURL=swiper.js.map
  55395. /***/ }),
  55396. /* 82 */
  55397. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  55398. "use strict";
  55399. /* harmony export (immutable) */ __webpack_exports__["a"] = updateProgress;
  55400. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  55401. function updateProgress(s, translate) {
  55402. if (typeof translate === 'undefined') {
  55403. translate = s._translate || 0;
  55404. }
  55405. var translatesDiff = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s) - Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s);
  55406. var wasBeginning = s._isBeginning;
  55407. var wasEnd = s._isEnd;
  55408. if (translatesDiff === 0) {
  55409. s.progress = 0;
  55410. s._isBeginning = s._isEnd = true;
  55411. }
  55412. else {
  55413. s.progress = (translate - Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s)) / (translatesDiff);
  55414. s._isBeginning = s.progress <= 0;
  55415. s._isEnd = s.progress >= 1;
  55416. }
  55417. s._zone.run(function () {
  55418. if (s._isBeginning && !wasBeginning) {
  55419. s.ionSlideReachStart.emit();
  55420. }
  55421. if (s._isEnd && !wasEnd) {
  55422. s.ionSlideReachEnd.emit();
  55423. }
  55424. if (s.watchSlidesProgress) {
  55425. updateSlidesProgress(s, translate);
  55426. }
  55427. s.ionSlideProgress.emit(s.progress);
  55428. });
  55429. }
  55430. function updateSlidesProgress(s, translate) {
  55431. if (typeof translate === 'undefined') {
  55432. translate = s._translate || 0;
  55433. }
  55434. if (s._slides.length === 0)
  55435. return;
  55436. if (typeof s._slides[0].swiperSlideOffset === 'undefined') {
  55437. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["q" /* updateSlidesOffset */])(s);
  55438. }
  55439. var offsetCenter = -translate;
  55440. if (s._rtl)
  55441. offsetCenter = translate;
  55442. // Visible Slides
  55443. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s._slides, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideVisible);
  55444. for (var i = 0; i < s._slides.length; i++) {
  55445. var slide = s._slides[i];
  55446. var slideProgress = (offsetCenter + (s.centeredSlides ? Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s) : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.spaceBetween);
  55447. if (s.watchSlidesVisibility) {
  55448. var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
  55449. var slideAfter = slideBefore + s._slidesSizesGrid[i];
  55450. var isVisible = (slideBefore >= 0 && slideBefore < s._renderedSize) ||
  55451. (slideAfter > 0 && slideAfter <= s._renderedSize) ||
  55452. (slideBefore <= 0 && slideAfter >= s._renderedSize);
  55453. if (isVisible) {
  55454. s._slides[i].classList.add(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideVisible);
  55455. }
  55456. }
  55457. slide.progress = s._rtl ? -slideProgress : slideProgress;
  55458. }
  55459. }
  55460. //# sourceMappingURL=swiper-progress.js.map
  55461. /***/ }),
  55462. /* 83 */
  55463. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  55464. "use strict";
  55465. /* harmony export (immutable) */ __webpack_exports__["a"] = updateActiveIndex;
  55466. /* harmony export (immutable) */ __webpack_exports__["b"] = updateRealIndex;
  55467. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_classes__ = __webpack_require__(139);
  55468. function updateActiveIndex(s) {
  55469. var translate = s._rtl ? s._translate : -s._translate;
  55470. var newActiveIndex;
  55471. var i;
  55472. var snapIndex;
  55473. for (i = 0; i < s._slidesGrid.length; i++) {
  55474. if (typeof s._slidesGrid[i + 1] !== 'undefined') {
  55475. if (translate >= s._slidesGrid[i] && translate < s._slidesGrid[i + 1] - (s._slidesGrid[i + 1] - s._slidesGrid[i]) / 2) {
  55476. newActiveIndex = i;
  55477. }
  55478. else if (translate >= s._slidesGrid[i] && translate < s._slidesGrid[i + 1]) {
  55479. newActiveIndex = i + 1;
  55480. }
  55481. }
  55482. else {
  55483. if (translate >= s._slidesGrid[i]) {
  55484. newActiveIndex = i;
  55485. }
  55486. }
  55487. }
  55488. snapIndex = Math.floor(newActiveIndex / s.slidesPerGroup);
  55489. if (snapIndex >= s._snapGrid.length)
  55490. snapIndex = s._snapGrid.length - 1;
  55491. if (newActiveIndex === s._activeIndex) {
  55492. return;
  55493. }
  55494. s._snapIndex = snapIndex;
  55495. s._previousIndex = s._activeIndex;
  55496. s._activeIndex = newActiveIndex;
  55497. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_classes__["a" /* updateClasses */])(s);
  55498. updateRealIndex(s);
  55499. }
  55500. function updateRealIndex(s) {
  55501. var activeSlide = s._slides[s._activeIndex];
  55502. if (activeSlide) {
  55503. s.realIndex = parseInt(activeSlide.getAttribute('data-swiper-slide-index') || s._activeIndex, 10);
  55504. }
  55505. }
  55506. //# sourceMappingURL=swiper-index.js.map
  55507. /***/ }),
  55508. /* 84 */
  55509. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  55510. "use strict";
  55511. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Toolbar; });
  55512. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  55513. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  55514. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__toolbar_base__ = __webpack_require__(205);
  55515. var __extends = (this && this.__extends) || (function () {
  55516. var extendStatics = Object.setPrototypeOf ||
  55517. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  55518. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  55519. return function (d, b) {
  55520. extendStatics(d, b);
  55521. function __() { this.constructor = d; }
  55522. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  55523. };
  55524. })();
  55525. /**
  55526. * @name Toolbar
  55527. * @description
  55528. * A Toolbar is a generic bar that is positioned above or below content.
  55529. * Unlike a [Navbar](../Navbar/), a toolbar can be used as a subheader.
  55530. * When toolbars are placed within an `<ion-header>` or `<ion-footer>`,
  55531. * the toolbars stay fixed in their respective location. When placed within
  55532. * `<ion-content>`, toolbars will scroll with the content.
  55533. *
  55534. *
  55535. * ### Buttons in a Toolbar
  55536. * Buttons placed in a toolbar should be placed inside of the `<ion-buttons>`
  55537. * element. An exception to this is a [menuToggle](../../menu/MenuToggle) button.
  55538. * It should not be placed inside of the `<ion-buttons>` element. Both the
  55539. * `<ion-buttons>` element and the `menuToggle` can be positioned inside of the
  55540. * toolbar using different properties. The below chart has a description of each
  55541. * property.
  55542. *
  55543. * | Property | Description |
  55544. * |-------------|-----------------------------------------------------------------------------------------------------------------------|
  55545. * | `start` | Positions element to the left of the content in `ios` mode, and directly to the right in `md` and `wp` mode. |
  55546. * | `end` | Positions element to the right of the content in `ios` mode, and to the far right in `md` and `wp` mode. |
  55547. * | `left` | Positions element to the left of all other elements. |
  55548. * | `right` | Positions element to the right of all other elements. |
  55549. *
  55550. *
  55551. * ### Header / Footer Box Shadow and Border
  55552. * In `md` mode, the `<ion-header>` will receive a box-shadow on the bottom, and the
  55553. * `<ion-footer>` will receive a box-shadow on the top. In `ios` mode, the `<ion-header>`
  55554. * will receive a border on the bottom, and the `<ion-footer>` will receive a border on the
  55555. * top. Both the `md` box-shadow and the `ios` border can be removed by adding the `no-border`
  55556. * attribute to the element.
  55557. *
  55558. * ```html
  55559. * <ion-header no-border>
  55560. * <ion-toolbar>
  55561. * <ion-title>Header</ion-title>
  55562. * </ion-toolbar>
  55563. * </ion-header>
  55564. *
  55565. * <ion-content>
  55566. * </ion-content>
  55567. *
  55568. * <ion-footer no-border>
  55569. * <ion-toolbar>
  55570. * <ion-title>Footer</ion-title>
  55571. * </ion-toolbar>
  55572. * </ion-footer>
  55573. * ```
  55574. *
  55575. * @usage
  55576. *
  55577. * ```html
  55578. *
  55579. * <ion-header no-border>
  55580. *
  55581. * <ion-toolbar>
  55582. * <ion-title>My Toolbar Title</ion-title>
  55583. * </ion-toolbar>
  55584. *
  55585. * <ion-toolbar>
  55586. * <ion-title>I'm a subheader</ion-title>
  55587. * </ion-toolbar>
  55588. *
  55589. * <ion-header>
  55590. *
  55591. *
  55592. * <ion-content>
  55593. *
  55594. * <ion-toolbar>
  55595. * <ion-title>Scrolls with the content</ion-title>
  55596. * </ion-toolbar>
  55597. *
  55598. * </ion-content>
  55599. *
  55600. *
  55601. * <ion-footer no-border>
  55602. *
  55603. * <ion-toolbar>
  55604. * <ion-title>I'm a footer</ion-title>
  55605. * </ion-toolbar>
  55606. *
  55607. * </ion-footer>
  55608. * ```
  55609. *
  55610. * @demo /docs/demos/src/toolbar/
  55611. * @see {@link ../Navbar/ Navbar API Docs}
  55612. */
  55613. var Toolbar = (function (_super) {
  55614. __extends(Toolbar, _super);
  55615. function Toolbar(config, elementRef, renderer) {
  55616. var _this = _super.call(this, config, elementRef, renderer) || this;
  55617. _this._sbPadding = config.getBoolean('statusbarPadding');
  55618. return _this;
  55619. }
  55620. Toolbar.decorators = [
  55621. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  55622. selector: 'ion-toolbar',
  55623. template: '<div class="toolbar-background" [ngClass]="\'toolbar-background-\' + _mode"></div>' +
  55624. '<ng-content select="[menuToggle],ion-buttons[left]"></ng-content>' +
  55625. '<ng-content select="ion-buttons[start]"></ng-content>' +
  55626. '<ng-content select="ion-buttons[end],ion-buttons[right]"></ng-content>' +
  55627. '<div class="toolbar-content" [ngClass]="\'toolbar-content-\' + _mode">' +
  55628. '<ng-content></ng-content>' +
  55629. '</div>',
  55630. host: {
  55631. 'class': 'toolbar',
  55632. '[class.statusbar-padding]': '_sbPadding'
  55633. },
  55634. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  55635. },] },
  55636. ];
  55637. /** @nocollapse */
  55638. Toolbar.ctorParameters = function () { return [
  55639. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  55640. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  55641. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  55642. ]; };
  55643. return Toolbar;
  55644. }(__WEBPACK_IMPORTED_MODULE_2__toolbar_base__["a" /* ToolbarBase */]));
  55645. //# sourceMappingURL=toolbar.js.map
  55646. /***/ }),
  55647. /* 85 */,
  55648. /* 86 */,
  55649. /* 87 */
  55650. /***/ (function(module, exports, __webpack_require__) {
  55651. "use strict";
  55652. var noop_1 = __webpack_require__(88);
  55653. /* tslint:enable:max-line-length */
  55654. function pipe() {
  55655. var fns = [];
  55656. for (var _i = 0; _i < arguments.length; _i++) {
  55657. fns[_i - 0] = arguments[_i];
  55658. }
  55659. return pipeFromArray(fns);
  55660. }
  55661. exports.pipe = pipe;
  55662. /* @internal */
  55663. function pipeFromArray(fns) {
  55664. if (!fns) {
  55665. return noop_1.noop;
  55666. }
  55667. if (fns.length === 1) {
  55668. return fns[0];
  55669. }
  55670. return function piped(input) {
  55671. return fns.reduce(function (prev, fn) { return fn(prev); }, input);
  55672. };
  55673. }
  55674. exports.pipeFromArray = pipeFromArray;
  55675. //# sourceMappingURL=pipe.js.map
  55676. /***/ }),
  55677. /* 88 */
  55678. /***/ (function(module, exports, __webpack_require__) {
  55679. "use strict";
  55680. /* tslint:disable:no-empty */
  55681. function noop() { }
  55682. exports.noop = noop;
  55683. //# sourceMappingURL=noop.js.map
  55684. /***/ }),
  55685. /* 89 */
  55686. /***/ (function(module, exports, __webpack_require__) {
  55687. "use strict";
  55688. var __extends = (this && this.__extends) || function (d, b) {
  55689. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  55690. function __() { this.constructor = d; }
  55691. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  55692. };
  55693. var Observable_1 = __webpack_require__(0);
  55694. /**
  55695. * We need this JSDoc comment for affecting ESDoc.
  55696. * @extends {Ignored}
  55697. * @hide true
  55698. */
  55699. var ScalarObservable = (function (_super) {
  55700. __extends(ScalarObservable, _super);
  55701. function ScalarObservable(value, scheduler) {
  55702. _super.call(this);
  55703. this.value = value;
  55704. this.scheduler = scheduler;
  55705. this._isScalar = true;
  55706. if (scheduler) {
  55707. this._isScalar = false;
  55708. }
  55709. }
  55710. ScalarObservable.create = function (value, scheduler) {
  55711. return new ScalarObservable(value, scheduler);
  55712. };
  55713. ScalarObservable.dispatch = function (state) {
  55714. var done = state.done, value = state.value, subscriber = state.subscriber;
  55715. if (done) {
  55716. subscriber.complete();
  55717. return;
  55718. }
  55719. subscriber.next(value);
  55720. if (subscriber.closed) {
  55721. return;
  55722. }
  55723. state.done = true;
  55724. this.schedule(state);
  55725. };
  55726. /** @deprecated internal use only */ ScalarObservable.prototype._subscribe = function (subscriber) {
  55727. var value = this.value;
  55728. var scheduler = this.scheduler;
  55729. if (scheduler) {
  55730. return scheduler.schedule(ScalarObservable.dispatch, 0, {
  55731. done: false, value: value, subscriber: subscriber
  55732. });
  55733. }
  55734. else {
  55735. subscriber.next(value);
  55736. if (!subscriber.closed) {
  55737. subscriber.complete();
  55738. }
  55739. }
  55740. };
  55741. return ScalarObservable;
  55742. }(Observable_1.Observable));
  55743. exports.ScalarObservable = ScalarObservable;
  55744. //# sourceMappingURL=ScalarObservable.js.map
  55745. /***/ }),
  55746. /* 90 */
  55747. /***/ (function(module, exports, __webpack_require__) {
  55748. "use strict";
  55749. var __extends = (this && this.__extends) || function (d, b) {
  55750. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  55751. function __() { this.constructor = d; }
  55752. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  55753. };
  55754. var Subscriber_1 = __webpack_require__(4);
  55755. function refCount() {
  55756. return function refCountOperatorFunction(source) {
  55757. return source.lift(new RefCountOperator(source));
  55758. };
  55759. }
  55760. exports.refCount = refCount;
  55761. var RefCountOperator = (function () {
  55762. function RefCountOperator(connectable) {
  55763. this.connectable = connectable;
  55764. }
  55765. RefCountOperator.prototype.call = function (subscriber, source) {
  55766. var connectable = this.connectable;
  55767. connectable._refCount++;
  55768. var refCounter = new RefCountSubscriber(subscriber, connectable);
  55769. var subscription = source.subscribe(refCounter);
  55770. if (!refCounter.closed) {
  55771. refCounter.connection = connectable.connect();
  55772. }
  55773. return subscription;
  55774. };
  55775. return RefCountOperator;
  55776. }());
  55777. var RefCountSubscriber = (function (_super) {
  55778. __extends(RefCountSubscriber, _super);
  55779. function RefCountSubscriber(destination, connectable) {
  55780. _super.call(this, destination);
  55781. this.connectable = connectable;
  55782. }
  55783. /** @deprecated internal use only */ RefCountSubscriber.prototype._unsubscribe = function () {
  55784. var connectable = this.connectable;
  55785. if (!connectable) {
  55786. this.connection = null;
  55787. return;
  55788. }
  55789. this.connectable = null;
  55790. var refCount = connectable._refCount;
  55791. if (refCount <= 0) {
  55792. this.connection = null;
  55793. return;
  55794. }
  55795. connectable._refCount = refCount - 1;
  55796. if (refCount > 1) {
  55797. this.connection = null;
  55798. return;
  55799. }
  55800. ///
  55801. // Compare the local RefCountSubscriber's connection Subscription to the
  55802. // connection Subscription on the shared ConnectableObservable. In cases
  55803. // where the ConnectableObservable source synchronously emits values, and
  55804. // the RefCountSubscriber's downstream Observers synchronously unsubscribe,
  55805. // execution continues to here before the RefCountOperator has a chance to
  55806. // supply the RefCountSubscriber with the shared connection Subscription.
  55807. // For example:
  55808. // ```
  55809. // Observable.range(0, 10)
  55810. // .publish()
  55811. // .refCount()
  55812. // .take(5)
  55813. // .subscribe();
  55814. // ```
  55815. // In order to account for this case, RefCountSubscriber should only dispose
  55816. // the ConnectableObservable's shared connection Subscription if the
  55817. // connection Subscription exists, *and* either:
  55818. // a. RefCountSubscriber doesn't have a reference to the shared connection
  55819. // Subscription yet, or,
  55820. // b. RefCountSubscriber's connection Subscription reference is identical
  55821. // to the shared connection Subscription
  55822. ///
  55823. var connection = this.connection;
  55824. var sharedConnection = connectable._connection;
  55825. this.connection = null;
  55826. if (sharedConnection && (!connection || sharedConnection === connection)) {
  55827. sharedConnection.unsubscribe();
  55828. }
  55829. };
  55830. return RefCountSubscriber;
  55831. }(Subscriber_1.Subscriber));
  55832. //# sourceMappingURL=refCount.js.map
  55833. /***/ }),
  55834. /* 91 */
  55835. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  55836. "use strict";
  55837. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AppRootToken; });
  55838. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return IonicApp; });
  55839. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  55840. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app__ = __webpack_require__(11);
  55841. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  55842. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ion__ = __webpack_require__(8);
  55843. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__overlay_portal__ = __webpack_require__(165);
  55844. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__platform_platform__ = __webpack_require__(7);
  55845. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__app_constants__ = __webpack_require__(47);
  55846. var __extends = (this && this.__extends) || (function () {
  55847. var extendStatics = Object.setPrototypeOf ||
  55848. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  55849. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  55850. return function (d, b) {
  55851. extendStatics(d, b);
  55852. function __() { this.constructor = d; }
  55853. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  55854. };
  55855. })();
  55856. var AppRootToken = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('USERROOT');
  55857. /**
  55858. * @hidden
  55859. */
  55860. var IonicApp = (function (_super) {
  55861. __extends(IonicApp, _super);
  55862. function IonicApp(_userCmp, _cfr, elementRef, renderer, config, _plt, app) {
  55863. var _this = _super.call(this, config, elementRef, renderer, 'app-root') || this;
  55864. _this._userCmp = _userCmp;
  55865. _this._cfr = _cfr;
  55866. _this._plt = _plt;
  55867. // register with App that this is Ionic's appRoot component. tada!
  55868. app._appRoot = _this;
  55869. _this._stopScrollPlugin = window['IonicStopScroll'];
  55870. return _this;
  55871. }
  55872. IonicApp.prototype.ngOnInit = function () {
  55873. var _this = this;
  55874. // load the user root component
  55875. // into Ionic's root component
  55876. var factory = this._cfr.resolveComponentFactory(this._userCmp);
  55877. var componentRef = this._viewport.createComponent(factory);
  55878. this._renderer.setElementClass(componentRef.location.nativeElement, 'app-root', true);
  55879. componentRef.changeDetectorRef.detectChanges();
  55880. // set the mode class name
  55881. // ios/md/wp
  55882. this.setElementClass(this._config.get('mode'), true);
  55883. var versions = this._plt.versions();
  55884. this._plt.platforms().forEach(function (platformName) {
  55885. // platform-ios
  55886. var platformClass = 'platform-' + platformName;
  55887. _this.setElementClass(platformClass, true);
  55888. var platformVersion = versions[platformName];
  55889. if (platformVersion) {
  55890. // platform-ios9
  55891. platformClass += platformVersion.major;
  55892. _this.setElementClass(platformClass, true);
  55893. // platform-ios9_3
  55894. _this.setElementClass(platformClass + '_' + platformVersion.minor, true);
  55895. }
  55896. });
  55897. // touch devices should not use :hover CSS pseudo
  55898. // enable :hover CSS when the "hoverCSS" setting is not false
  55899. if (this._config.getBoolean('hoverCSS', true)) {
  55900. this.setElementClass('enable-hover', true);
  55901. }
  55902. // sweet, the app root has loaded!
  55903. // which means angular and ionic has fully loaded!
  55904. // fire off the platform prepare ready, which could
  55905. // have been switched out by any of the platform engines
  55906. this._plt.prepareReady();
  55907. };
  55908. /**
  55909. * @hidden
  55910. */
  55911. IonicApp.prototype._getPortal = function (portal) {
  55912. if (portal === __WEBPACK_IMPORTED_MODULE_6__app_constants__["b" /* PORTAL_LOADING */]) {
  55913. return this._loadingPortal;
  55914. }
  55915. if (portal === __WEBPACK_IMPORTED_MODULE_6__app_constants__["d" /* PORTAL_TOAST */]) {
  55916. return this._toastPortal;
  55917. }
  55918. // Modals need their own overlay becuase we don't want an ActionSheet
  55919. // or Alert to trigger lifecycle events inside a modal
  55920. if (portal === __WEBPACK_IMPORTED_MODULE_6__app_constants__["c" /* PORTAL_MODAL */]) {
  55921. return this._modalPortal;
  55922. }
  55923. return this._overlayPortal;
  55924. };
  55925. IonicApp.prototype._getActivePortal = function () {
  55926. var defaultPortal = this._overlayPortal;
  55927. var modalPortal = this._modalPortal;
  55928. var hasModal = modalPortal.length() > 0;
  55929. var hasDefault = defaultPortal.length() > 0;
  55930. if (!hasModal && !hasDefault) {
  55931. return null;
  55932. }
  55933. else if (hasModal && hasDefault) {
  55934. var defaultIndex = defaultPortal.getActive().getZIndex();
  55935. var modalIndex = modalPortal.getActive().getZIndex();
  55936. if (defaultIndex > modalIndex) {
  55937. return defaultPortal;
  55938. }
  55939. else {
  55940. (void 0) /* assert */;
  55941. return modalPortal;
  55942. }
  55943. }
  55944. if (hasModal) {
  55945. return modalPortal;
  55946. }
  55947. else if (hasDefault) {
  55948. return defaultPortal;
  55949. }
  55950. };
  55951. IonicApp.prototype._disableScroll = function (shouldDisableScroll) {
  55952. var _this = this;
  55953. if (shouldDisableScroll) {
  55954. this.stopScroll().then(function () {
  55955. _this._tmr = _this._plt.timeout(function () {
  55956. (void 0) /* console.debug */;
  55957. _this.setElementClass('disable-scroll', true);
  55958. }, 32);
  55959. });
  55960. }
  55961. else {
  55962. var plugin = this._stopScrollPlugin;
  55963. if (plugin && plugin.cancel) {
  55964. plugin.cancel();
  55965. }
  55966. clearTimeout(this._tmr);
  55967. (void 0) /* console.debug */;
  55968. this.setElementClass('disable-scroll', false);
  55969. }
  55970. };
  55971. IonicApp.prototype.stopScroll = function () {
  55972. var _this = this;
  55973. if (this._stopScrollPlugin) {
  55974. return new Promise(function (resolve) {
  55975. _this._stopScrollPlugin.stop(function () { return resolve(true); });
  55976. });
  55977. }
  55978. else {
  55979. return Promise.resolve(false);
  55980. }
  55981. };
  55982. IonicApp.decorators = [
  55983. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  55984. selector: 'ion-app',
  55985. template: '<div #viewport app-viewport></div>' +
  55986. '<div #modalPortal overlay-portal></div>' +
  55987. '<div #overlayPortal overlay-portal></div>' +
  55988. '<div #loadingPortal class="loading-portal" overlay-portal></div>' +
  55989. '<div #toastPortal class="toast-portal" [overlay-portal]="10000"></div>' +
  55990. '<div class="click-block"></div>'
  55991. },] },
  55992. ];
  55993. /** @nocollapse */
  55994. IonicApp.ctorParameters = function () { return [
  55995. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [AppRootToken,] },] },
  55996. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */], },
  55997. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  55998. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  55999. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  56000. { type: __WEBPACK_IMPORTED_MODULE_5__platform_platform__["a" /* Platform */], },
  56001. { type: __WEBPACK_IMPORTED_MODULE_1__app__["a" /* App */], },
  56002. ]; };
  56003. IonicApp.propDecorators = {
  56004. '_viewport': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['viewport', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */] },] },],
  56005. '_modalPortal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['modalPortal', { read: __WEBPACK_IMPORTED_MODULE_4__overlay_portal__["a" /* OverlayPortal */] },] },],
  56006. '_overlayPortal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['overlayPortal', { read: __WEBPACK_IMPORTED_MODULE_4__overlay_portal__["a" /* OverlayPortal */] },] },],
  56007. '_loadingPortal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['loadingPortal', { read: __WEBPACK_IMPORTED_MODULE_4__overlay_portal__["a" /* OverlayPortal */] },] },],
  56008. '_toastPortal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['toastPortal', { read: __WEBPACK_IMPORTED_MODULE_4__overlay_portal__["a" /* OverlayPortal */] },] },],
  56009. };
  56010. return IonicApp;
  56011. }(__WEBPACK_IMPORTED_MODULE_3__ion__["a" /* Ion */]));
  56012. //# sourceMappingURL=app-root.js.map
  56013. /***/ }),
  56014. /* 92 */
  56015. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56016. "use strict";
  56017. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SlideEdgeGesture; });
  56018. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__slide_gesture__ = __webpack_require__(166);
  56019. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  56020. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  56021. var __extends = (this && this.__extends) || (function () {
  56022. var extendStatics = Object.setPrototypeOf ||
  56023. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  56024. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  56025. return function (d, b) {
  56026. extendStatics(d, b);
  56027. function __() { this.constructor = d; }
  56028. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  56029. };
  56030. })();
  56031. /**
  56032. * @hidden
  56033. */
  56034. var SlideEdgeGesture = (function (_super) {
  56035. __extends(SlideEdgeGesture, _super);
  56036. function SlideEdgeGesture(plt, element, opts) {
  56037. if (opts === void 0) { opts = {}; }
  56038. var _this = this;
  56039. Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["d" /* defaults */])(opts, {
  56040. edge: 'start',
  56041. maxEdgeStart: 50
  56042. });
  56043. _this = _super.call(this, plt, element, opts) || this;
  56044. // Can check corners through use of eg 'left top'
  56045. _this.setEdges(opts.edge);
  56046. _this.maxEdgeStart = opts.maxEdgeStart;
  56047. return _this;
  56048. }
  56049. SlideEdgeGesture.prototype.setEdges = function (edges) {
  56050. var isRTL = this.plt.isRTL;
  56051. this.edges = edges.split(' ').map(function (value) {
  56052. switch (value) {
  56053. case 'start': return isRTL ? 'right' : 'left';
  56054. case 'end': return isRTL ? 'left' : 'right';
  56055. default: return value;
  56056. }
  56057. });
  56058. };
  56059. SlideEdgeGesture.prototype.canStart = function (ev) {
  56060. var _this = this;
  56061. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  56062. this._d = this.getContainerDimensions();
  56063. return this.edges.every(function (edge) { return _this._checkEdge(edge, coord); });
  56064. };
  56065. SlideEdgeGesture.prototype.getContainerDimensions = function () {
  56066. var plt = this.plt;
  56067. return {
  56068. left: 0,
  56069. top: 0,
  56070. width: plt.width(),
  56071. height: plt.height()
  56072. };
  56073. };
  56074. SlideEdgeGesture.prototype._checkEdge = function (edge, pos) {
  56075. var data = this._d;
  56076. var maxEdgeStart = this.maxEdgeStart;
  56077. switch (edge) {
  56078. case 'left': return pos.x <= data.left + maxEdgeStart;
  56079. case 'right': return pos.x >= data.width - maxEdgeStart;
  56080. case 'top': return pos.y <= data.top + maxEdgeStart;
  56081. case 'bottom': return pos.y >= data.height - maxEdgeStart;
  56082. }
  56083. return false;
  56084. };
  56085. return SlideEdgeGesture;
  56086. }(__WEBPACK_IMPORTED_MODULE_0__slide_gesture__["a" /* SlideGesture */]));
  56087. //# sourceMappingURL=slide-edge-gesture.js.map
  56088. /***/ }),
  56089. /* 93 */
  56090. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56091. "use strict";
  56092. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionSheet; });
  56093. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__action_sheet_component__ = __webpack_require__(94);
  56094. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__ = __webpack_require__(362);
  56095. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  56096. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  56097. var __extends = (this && this.__extends) || (function () {
  56098. var extendStatics = Object.setPrototypeOf ||
  56099. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  56100. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  56101. return function (d, b) {
  56102. extendStatics(d, b);
  56103. function __() { this.constructor = d; }
  56104. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  56105. };
  56106. })();
  56107. /**
  56108. * @hidden
  56109. */
  56110. var ActionSheet = (function (_super) {
  56111. __extends(ActionSheet, _super);
  56112. function ActionSheet(app, opts, config) {
  56113. var _this = this;
  56114. opts.buttons = opts.buttons || [];
  56115. opts.enableBackdropDismiss = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : true;
  56116. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_0__action_sheet_component__["a" /* ActionSheetCmp */], opts, null) || this;
  56117. _this._app = app;
  56118. _this.isOverlay = true;
  56119. config.setTransition('action-sheet-slide-in', __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__["c" /* ActionSheetSlideIn */]);
  56120. config.setTransition('action-sheet-slide-out', __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__["d" /* ActionSheetSlideOut */]);
  56121. config.setTransition('action-sheet-md-slide-in', __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__["a" /* ActionSheetMdSlideIn */]);
  56122. config.setTransition('action-sheet-md-slide-out', __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__["b" /* ActionSheetMdSlideOut */]);
  56123. config.setTransition('action-sheet-wp-slide-in', __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__["e" /* ActionSheetWpSlideIn */]);
  56124. config.setTransition('action-sheet-wp-slide-out', __WEBPACK_IMPORTED_MODULE_1__action_sheet_transitions__["f" /* ActionSheetWpSlideOut */]);
  56125. return _this;
  56126. }
  56127. /**
  56128. * @hidden
  56129. */
  56130. ActionSheet.prototype.getTransitionName = function (direction) {
  56131. var key = 'actionSheet' + (direction === 'back' ? 'Leave' : 'Enter');
  56132. return this._nav && this._nav.config.get(key);
  56133. };
  56134. /**
  56135. * @param {string} title Action sheet title
  56136. */
  56137. ActionSheet.prototype.setTitle = function (title) {
  56138. this.data.title = title;
  56139. return this;
  56140. };
  56141. /**
  56142. * @param {string} subTitle Action sheet subtitle
  56143. */
  56144. ActionSheet.prototype.setSubTitle = function (subTitle) {
  56145. this.data.subTitle = subTitle;
  56146. return this;
  56147. };
  56148. /**
  56149. * @param {object} button Action sheet button
  56150. */
  56151. ActionSheet.prototype.addButton = function (button) {
  56152. this.data.buttons.push(button);
  56153. return this;
  56154. };
  56155. /**
  56156. * Present the action sheet instance.
  56157. *
  56158. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  56159. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  56160. */
  56161. ActionSheet.prototype.present = function (navOptions) {
  56162. if (navOptions === void 0) { navOptions = {}; }
  56163. navOptions.minClickBlockDuration = navOptions.minClickBlockDuration || 400;
  56164. return this._app.present(this, navOptions);
  56165. };
  56166. return ActionSheet;
  56167. }(__WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */]));
  56168. //# sourceMappingURL=action-sheet.js.map
  56169. /***/ }),
  56170. /* 94 */
  56171. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56172. "use strict";
  56173. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionSheetCmp; });
  56174. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  56175. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__gestures_gesture_controller__ = __webpack_require__(13);
  56176. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  56177. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_key__ = __webpack_require__(30);
  56178. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_nav_params__ = __webpack_require__(23);
  56179. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__navigation_view_controller__ = __webpack_require__(9);
  56180. /**
  56181. * @hidden
  56182. */
  56183. var ActionSheetCmp = (function () {
  56184. function ActionSheetCmp(_viewCtrl, config, _elementRef, gestureCtrl, params, renderer) {
  56185. this._viewCtrl = _viewCtrl;
  56186. this._elementRef = _elementRef;
  56187. this.gestureBlocker = gestureCtrl.createBlocker(__WEBPACK_IMPORTED_MODULE_1__gestures_gesture_controller__["a" /* BLOCK_ALL */]);
  56188. this.d = params.data;
  56189. this.mode = config.get('mode');
  56190. renderer.setElementClass(_elementRef.nativeElement, "action-sheet-" + this.mode, true);
  56191. if (this.d.cssClass) {
  56192. this.d.cssClass.split(' ').forEach(function (cssClass) {
  56193. // Make sure the class isn't whitespace, otherwise it throws exceptions
  56194. if (cssClass.trim() !== '')
  56195. renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  56196. });
  56197. }
  56198. this.id = (++actionSheetIds);
  56199. if (this.d.title) {
  56200. this.hdrId = 'acst-hdr-' + this.id;
  56201. }
  56202. if (this.d.subTitle) {
  56203. this.descId = 'acst-subhdr-' + this.id;
  56204. }
  56205. }
  56206. ActionSheetCmp.prototype.ionViewDidLoad = function () {
  56207. var _this = this;
  56208. // normalize the data
  56209. this.d.buttons = this.d.buttons.map(function (button) {
  56210. if (typeof button === 'string') {
  56211. button = { text: button };
  56212. }
  56213. if (!button.cssClass) {
  56214. button.cssClass = '';
  56215. }
  56216. switch (button.role) {
  56217. case 'cancel':
  56218. _this.cancelButton = button;
  56219. return null;
  56220. case 'destructive':
  56221. button.cssClass = (button.cssClass + ' ' || '') + 'action-sheet-destructive';
  56222. break;
  56223. case 'selected':
  56224. button.cssClass = (button.cssClass + ' ' || '') + 'action-sheet-selected';
  56225. break;
  56226. }
  56227. return button;
  56228. }).filter(function (button) { return button !== null; });
  56229. };
  56230. ActionSheetCmp.prototype.ionViewWillEnter = function () {
  56231. this.gestureBlocker.block();
  56232. };
  56233. ActionSheetCmp.prototype.ionViewDidLeave = function () {
  56234. this.gestureBlocker.unblock();
  56235. };
  56236. ActionSheetCmp.prototype.ionViewDidEnter = function () {
  56237. var focusableEle = this._elementRef.nativeElement.querySelector('button');
  56238. if (focusableEle) {
  56239. focusableEle.focus();
  56240. }
  56241. this.enabled = true;
  56242. };
  56243. ActionSheetCmp.prototype.keyUp = function (ev) {
  56244. if (this.enabled && ev.keyCode === __WEBPACK_IMPORTED_MODULE_3__platform_key__["c" /* KEY_ESCAPE */] && this._viewCtrl.isLast()) {
  56245. (void 0) /* console.debug */;
  56246. this.bdClick();
  56247. }
  56248. };
  56249. ActionSheetCmp.prototype.click = function (button) {
  56250. if (!this.enabled) {
  56251. return;
  56252. }
  56253. var shouldDismiss = true;
  56254. if (button.handler) {
  56255. // a handler has been provided, execute it
  56256. if (button.handler() === false) {
  56257. // if the return value of the handler is false then do not dismiss
  56258. shouldDismiss = false;
  56259. }
  56260. }
  56261. if (shouldDismiss) {
  56262. this.dismiss(button.role);
  56263. }
  56264. };
  56265. ActionSheetCmp.prototype.bdClick = function () {
  56266. if (this.enabled && this.d.enableBackdropDismiss) {
  56267. if (this.cancelButton) {
  56268. this.click(this.cancelButton);
  56269. }
  56270. else {
  56271. this.dismiss('backdrop');
  56272. }
  56273. }
  56274. };
  56275. ActionSheetCmp.prototype.dismiss = function (role) {
  56276. var opts = {
  56277. minClickBlockDuration: 400
  56278. };
  56279. return this._viewCtrl.dismiss(null, role, opts);
  56280. };
  56281. ActionSheetCmp.prototype.ngOnDestroy = function () {
  56282. (void 0) /* assert */;
  56283. this.d = this.cancelButton = null;
  56284. this.gestureBlocker.destroy();
  56285. };
  56286. ActionSheetCmp.decorators = [
  56287. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  56288. selector: 'ion-action-sheet',
  56289. template: '<ion-backdrop (click)="bdClick()" [class.backdrop-no-tappable]="!d.enableBackdropDismiss"></ion-backdrop>' +
  56290. '<div class="action-sheet-wrapper">' +
  56291. '<div class="action-sheet-container">' +
  56292. '<div class="action-sheet-group">' +
  56293. '<div class="action-sheet-title" id="{{hdrId}}" *ngIf="d.title">{{d.title}}</div>' +
  56294. '<div class="action-sheet-sub-title" id="{{descId}}" *ngIf="d.subTitle">{{d.subTitle}}</div>' +
  56295. '<button ion-button="action-sheet-button" (click)="click(b)" *ngFor="let b of d.buttons" class="disable-hover" [attr.icon-start]="b.icon ? \'\' : null" [ngClass]="b.cssClass">' +
  56296. '<ion-icon [name]="b.icon" *ngIf="b.icon" class="action-sheet-icon"></ion-icon>' +
  56297. '{{b.text}}' +
  56298. '</button>' +
  56299. '</div>' +
  56300. '<div class="action-sheet-group action-sheet-group-cancel" *ngIf="cancelButton">' +
  56301. '<button ion-button="action-sheet-button" (click)="click(cancelButton)" class="action-sheet-cancel disable-hover" [attr.icon-start]="cancelButton.icon ? \'\' : null" [ngClass]="cancelButton.cssClass">' +
  56302. '<ion-icon [name]="cancelButton.icon" *ngIf="cancelButton.icon" class="action-sheet-icon"></ion-icon>' +
  56303. '{{cancelButton.text}}' +
  56304. '</button>' +
  56305. '</div>' +
  56306. '</div>' +
  56307. '</div>',
  56308. host: {
  56309. 'role': 'dialog',
  56310. '[attr.aria-labelledby]': 'hdrId',
  56311. '[attr.aria-describedby]': 'descId'
  56312. },
  56313. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  56314. },] },
  56315. ];
  56316. /** @nocollapse */
  56317. ActionSheetCmp.ctorParameters = function () { return [
  56318. { type: __WEBPACK_IMPORTED_MODULE_5__navigation_view_controller__["a" /* ViewController */], },
  56319. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  56320. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  56321. { type: __WEBPACK_IMPORTED_MODULE_1__gestures_gesture_controller__["l" /* GestureController */], },
  56322. { type: __WEBPACK_IMPORTED_MODULE_4__navigation_nav_params__["a" /* NavParams */], },
  56323. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  56324. ]; };
  56325. ActionSheetCmp.propDecorators = {
  56326. 'keyUp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['body:keyup', ['$event'],] },],
  56327. };
  56328. return ActionSheetCmp;
  56329. }());
  56330. var actionSheetIds = -1;
  56331. //# sourceMappingURL=action-sheet-component.js.map
  56332. /***/ }),
  56333. /* 95 */
  56334. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56335. "use strict";
  56336. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Alert; });
  56337. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__alert_component__ = __webpack_require__(96);
  56338. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__alert_transitions__ = __webpack_require__(363);
  56339. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  56340. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  56341. var __extends = (this && this.__extends) || (function () {
  56342. var extendStatics = Object.setPrototypeOf ||
  56343. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  56344. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  56345. return function (d, b) {
  56346. extendStatics(d, b);
  56347. function __() { this.constructor = d; }
  56348. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  56349. };
  56350. })();
  56351. /**
  56352. * @hidden
  56353. */
  56354. var Alert = (function (_super) {
  56355. __extends(Alert, _super);
  56356. function Alert(app, opts, config) {
  56357. if (opts === void 0) { opts = {}; }
  56358. var _this = this;
  56359. opts.inputs = opts.inputs || [];
  56360. opts.buttons = opts.buttons || [];
  56361. opts.enableBackdropDismiss = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["l" /* isPresent */])(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : true;
  56362. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_0__alert_component__["a" /* AlertCmp */], opts, null) || this;
  56363. _this._app = app;
  56364. _this.isOverlay = true;
  56365. config.setTransition('alert-pop-in', __WEBPACK_IMPORTED_MODULE_1__alert_transitions__["c" /* AlertPopIn */]);
  56366. config.setTransition('alert-pop-out', __WEBPACK_IMPORTED_MODULE_1__alert_transitions__["d" /* AlertPopOut */]);
  56367. config.setTransition('alert-md-pop-in', __WEBPACK_IMPORTED_MODULE_1__alert_transitions__["a" /* AlertMdPopIn */]);
  56368. config.setTransition('alert-md-pop-out', __WEBPACK_IMPORTED_MODULE_1__alert_transitions__["b" /* AlertMdPopOut */]);
  56369. config.setTransition('alert-wp-pop-in', __WEBPACK_IMPORTED_MODULE_1__alert_transitions__["e" /* AlertWpPopIn */]);
  56370. config.setTransition('alert-wp-pop-out', __WEBPACK_IMPORTED_MODULE_1__alert_transitions__["f" /* AlertWpPopOut */]);
  56371. return _this;
  56372. }
  56373. /**
  56374. * @hidden
  56375. */
  56376. Alert.prototype.getTransitionName = function (direction) {
  56377. var key = (direction === 'back' ? 'alertLeave' : 'alertEnter');
  56378. return this._nav && this._nav.config.get(key);
  56379. };
  56380. /**
  56381. * @param {string} title Alert title
  56382. */
  56383. Alert.prototype.setTitle = function (title) {
  56384. this.data.title = title;
  56385. return this;
  56386. };
  56387. /**
  56388. * @param {string} subTitle Alert subtitle
  56389. */
  56390. Alert.prototype.setSubTitle = function (subTitle) {
  56391. this.data.subTitle = subTitle;
  56392. return this;
  56393. };
  56394. /**
  56395. * @param {string} message Alert message content
  56396. */
  56397. Alert.prototype.setMessage = function (message) {
  56398. this.data.message = message;
  56399. return this;
  56400. };
  56401. /**
  56402. * @param {object} input Alert input
  56403. */
  56404. Alert.prototype.addInput = function (input) {
  56405. this.data.inputs.push(input);
  56406. return this;
  56407. };
  56408. /**
  56409. * @param {any} button Alert button
  56410. */
  56411. Alert.prototype.addButton = function (button) {
  56412. this.data.buttons.push(button);
  56413. return this;
  56414. };
  56415. /**
  56416. * @param {string} cssClass Set the CSS class names on the alert's outer wrapper.
  56417. */
  56418. Alert.prototype.setCssClass = function (cssClass) {
  56419. this.data.cssClass = cssClass;
  56420. return this;
  56421. };
  56422. /**
  56423. * @param {string} mode Set the mode of the alert (ios, md, wp).
  56424. */
  56425. Alert.prototype.setMode = function (mode) {
  56426. this.data.mode = mode;
  56427. };
  56428. /**
  56429. * Present the alert instance.
  56430. *
  56431. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  56432. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  56433. */
  56434. Alert.prototype.present = function (navOptions) {
  56435. if (navOptions === void 0) { navOptions = {}; }
  56436. navOptions.minClickBlockDuration = navOptions.minClickBlockDuration || 400;
  56437. return this._app.present(this, navOptions);
  56438. };
  56439. return Alert;
  56440. }(__WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */]));
  56441. //# sourceMappingURL=alert.js.map
  56442. /***/ }),
  56443. /* 96 */
  56444. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56445. "use strict";
  56446. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AlertCmp; });
  56447. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  56448. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  56449. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  56450. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__ = __webpack_require__(13);
  56451. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_util__ = __webpack_require__(3);
  56452. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__platform_key__ = __webpack_require__(30);
  56453. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__navigation_nav_params__ = __webpack_require__(23);
  56454. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__platform_platform__ = __webpack_require__(7);
  56455. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__navigation_view_controller__ = __webpack_require__(9);
  56456. /**
  56457. * @hidden
  56458. */
  56459. var AlertCmp = (function () {
  56460. function AlertCmp(_viewCtrl, _elementRef, config, gestureCtrl, params, _renderer, _plt) {
  56461. this._viewCtrl = _viewCtrl;
  56462. this._elementRef = _elementRef;
  56463. this._renderer = _renderer;
  56464. this._plt = _plt;
  56465. // gesture blocker is used to disable gestures dynamically
  56466. this.gestureBlocker = gestureCtrl.createBlocker(__WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__["a" /* BLOCK_ALL */]);
  56467. this.d = params.data;
  56468. this.mode = this.d.mode || config.get('mode');
  56469. this.keyboardResizes = config.getBoolean('keyboardResizes', false);
  56470. _renderer.setElementClass(_elementRef.nativeElement, "alert-" + this.mode, true);
  56471. if (this.d.cssClass) {
  56472. this.d.cssClass.split(' ').forEach(function (cssClass) {
  56473. // Make sure the class isn't whitespace, otherwise it throws exceptions
  56474. if (cssClass.trim() !== '')
  56475. _renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  56476. });
  56477. }
  56478. this.id = (++alertIds);
  56479. this.descId = '';
  56480. this.hdrId = 'alert-hdr-' + this.id;
  56481. this.subHdrId = 'alert-subhdr-' + this.id;
  56482. this.msgId = 'alert-msg-' + this.id;
  56483. this.activeId = '';
  56484. this.lastClick = 0;
  56485. if (this.d.message) {
  56486. this.descId = this.msgId;
  56487. }
  56488. else if (this.d.subTitle) {
  56489. this.descId = this.subHdrId;
  56490. }
  56491. if (!this.d.message) {
  56492. this.d.message = '';
  56493. }
  56494. }
  56495. AlertCmp.prototype.ionViewDidLoad = function () {
  56496. var _this = this;
  56497. // normalize the data
  56498. var data = this.d;
  56499. data.buttons = data.buttons.map(function (button) {
  56500. if (typeof button === 'string') {
  56501. return { text: button };
  56502. }
  56503. return button;
  56504. });
  56505. data.inputs = data.inputs.map(function (input, index) {
  56506. var r = {
  56507. type: input.type || 'text',
  56508. name: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.name) ? input.name : index + '',
  56509. placeholder: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.placeholder) ? input.placeholder : '',
  56510. value: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.value) ? input.value : '',
  56511. label: input.label,
  56512. checked: !!input.checked,
  56513. disabled: !!input.disabled,
  56514. id: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.id) ? input.id : "alert-input-" + _this.id + "-" + index,
  56515. handler: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.handler) ? input.handler : null,
  56516. min: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.min) ? input.min : null,
  56517. max: Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(input.max) ? input.max : null
  56518. };
  56519. return r;
  56520. });
  56521. // An alert can be created with several different inputs. Radios,
  56522. // checkboxes and inputs are all accepted, but they cannot be mixed.
  56523. var inputTypes = [];
  56524. data.inputs.forEach(function (input) {
  56525. if (inputTypes.indexOf(input.type) < 0) {
  56526. inputTypes.push(input.type);
  56527. }
  56528. });
  56529. if (inputTypes.length > 1 && (inputTypes.indexOf('checkbox') > -1 || inputTypes.indexOf('radio') > -1)) {
  56530. console.warn("Alert cannot mix input types: " + (inputTypes.join('/')) + ". Please see alert docs for more info.");
  56531. }
  56532. this.inputType = inputTypes.length ? inputTypes[0] : null;
  56533. var checkedInput = this.d.inputs.find(function (input) { return input.checked; });
  56534. if (checkedInput) {
  56535. this.activeId = checkedInput.id;
  56536. }
  56537. var hasTextInput = (this.d.inputs.length && this.d.inputs.some(function (i) { return !(__WEBPACK_IMPORTED_MODULE_2__util_dom__["a" /* NON_TEXT_INPUT_REGEX */].test(i.type)); }));
  56538. if (!this.keyboardResizes && hasTextInput && this._plt.is('mobile')) {
  56539. // this alert has a text input and it's on a mobile device so we should align
  56540. // the alert up high because we need to leave space for the virtual keboard
  56541. // this also helps prevent the layout getting all messed up from
  56542. // the browser trying to scroll the input into a safe area
  56543. this._renderer.setElementClass(this._elementRef.nativeElement, 'alert-top', true);
  56544. }
  56545. };
  56546. AlertCmp.prototype.ionViewWillEnter = function () {
  56547. this.gestureBlocker.block();
  56548. };
  56549. AlertCmp.prototype.ionViewDidLeave = function () {
  56550. this.gestureBlocker.unblock();
  56551. };
  56552. AlertCmp.prototype.ionViewDidEnter = function () {
  56553. // set focus on the first input or button in the alert
  56554. // note that this does not always work and bring up the keyboard on
  56555. // devices since the focus command must come from the user's touch event
  56556. // and ionViewDidEnter is not in the same callstack as the touch event :(
  56557. var focusableEle = this._elementRef.nativeElement.querySelector('input,button');
  56558. if (focusableEle) {
  56559. setTimeout(function () { return focusableEle.focus(); });
  56560. }
  56561. this.enabled = true;
  56562. };
  56563. AlertCmp.prototype.keyUp = function (ev) {
  56564. if (this.enabled && this._viewCtrl.isLast()) {
  56565. if (ev.keyCode === __WEBPACK_IMPORTED_MODULE_5__platform_key__["b" /* KEY_ENTER */]) {
  56566. if (this.lastClick + 1000 < Date.now()) {
  56567. // do not fire this click if there recently was already a click
  56568. // this can happen when the button has focus and used the enter
  56569. // key to click the button. However, both the click handler and
  56570. // this keyup event will fire, so only allow one of them to go.
  56571. (void 0) /* console.debug */;
  56572. var button = this.d.buttons[this.d.buttons.length - 1];
  56573. this.btnClick(button);
  56574. }
  56575. }
  56576. else if (ev.keyCode === __WEBPACK_IMPORTED_MODULE_5__platform_key__["c" /* KEY_ESCAPE */]) {
  56577. (void 0) /* console.debug */;
  56578. this.bdClick();
  56579. }
  56580. }
  56581. };
  56582. AlertCmp.prototype.btnClick = function (button) {
  56583. if (!this.enabled) {
  56584. return;
  56585. }
  56586. // keep the time of the most recent button click
  56587. this.lastClick = Date.now();
  56588. var shouldDismiss = true;
  56589. if (button.handler) {
  56590. // a handler has been provided, execute it
  56591. // pass the handler the values from the inputs
  56592. if (button.handler(this.getValues()) === false) {
  56593. // if the return value of the handler is false then do not dismiss
  56594. shouldDismiss = false;
  56595. }
  56596. }
  56597. if (shouldDismiss) {
  56598. this.dismiss(button.role);
  56599. }
  56600. };
  56601. AlertCmp.prototype.rbClick = function (checkedInput) {
  56602. if (this.enabled) {
  56603. this.d.inputs.forEach(function (input) {
  56604. input.checked = (checkedInput === input);
  56605. });
  56606. this.activeId = checkedInput.id;
  56607. if (checkedInput.handler) {
  56608. checkedInput.handler(checkedInput);
  56609. }
  56610. }
  56611. };
  56612. AlertCmp.prototype.cbClick = function (checkedInput) {
  56613. if (this.enabled) {
  56614. checkedInput.checked = !checkedInput.checked;
  56615. if (checkedInput.handler) {
  56616. checkedInput.handler(checkedInput);
  56617. }
  56618. }
  56619. };
  56620. AlertCmp.prototype.bdClick = function () {
  56621. if (this.enabled && this.d.enableBackdropDismiss) {
  56622. var cancelBtn = this.d.buttons.find(function (b) { return b.role === 'cancel'; });
  56623. if (cancelBtn) {
  56624. this.btnClick(cancelBtn);
  56625. }
  56626. else {
  56627. this.dismiss('backdrop');
  56628. }
  56629. }
  56630. };
  56631. AlertCmp.prototype.dismiss = function (role) {
  56632. var opts = {
  56633. minClickBlockDuration: 400
  56634. };
  56635. return this._viewCtrl.dismiss(this.getValues(), role, opts);
  56636. };
  56637. AlertCmp.prototype.getValues = function () {
  56638. if (this.inputType === 'radio') {
  56639. // this is an alert with radio buttons (single value select)
  56640. // return the one value which is checked, otherwise undefined
  56641. var checkedInput = this.d.inputs.find(function (i) { return i.checked; });
  56642. return checkedInput ? checkedInput.value : undefined;
  56643. }
  56644. if (this.inputType === 'checkbox') {
  56645. // this is an alert with checkboxes (multiple value select)
  56646. // return an array of all the checked values
  56647. return this.d.inputs.filter(function (i) { return i.checked; }).map(function (i) { return i.value; });
  56648. }
  56649. if (this.d.inputs.length === 0) {
  56650. // this is an alert without any options/inputs at all
  56651. return undefined;
  56652. }
  56653. // this is an alert with text inputs
  56654. // return an object of all the values with the input name as the key
  56655. var values = {};
  56656. this.d.inputs.forEach(function (i) {
  56657. values[i.name] = i.value;
  56658. });
  56659. return values;
  56660. };
  56661. AlertCmp.prototype.ngOnDestroy = function () {
  56662. (void 0) /* assert */;
  56663. this.gestureBlocker.destroy();
  56664. };
  56665. AlertCmp.decorators = [
  56666. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  56667. selector: 'ion-alert',
  56668. template: '<ion-backdrop (click)="bdClick()" [class.backdrop-no-tappable]="!d.enableBackdropDismiss"></ion-backdrop>' +
  56669. '<div class="alert-wrapper">' +
  56670. '<div class="alert-head">' +
  56671. '<h2 id="{{hdrId}}" class="alert-title" *ngIf="d.title" [innerHTML]="d.title"></h2>' +
  56672. '<h3 id="{{subHdrId}}" class="alert-sub-title" *ngIf="d.subTitle" [innerHTML]="d.subTitle"></h3>' +
  56673. '</div>' +
  56674. '<div id="{{msgId}}" class="alert-message" [innerHTML]="d.message"></div>' +
  56675. '<div *ngIf="d.inputs.length" [ngSwitch]="inputType">' +
  56676. '<ng-template ngSwitchCase="radio">' +
  56677. '<div class="alert-radio-group" role="radiogroup" [attr.aria-labelledby]="hdrId" [attr.aria-activedescendant]="activeId">' +
  56678. '<button ion-button="alert-radio-button" *ngFor="let i of d.inputs" (click)="rbClick(i)" [attr.aria-checked]="i.checked" [disabled]="i.disabled" [attr.id]="i.id" class="alert-tappable alert-radio" role="radio">' +
  56679. '<div class="alert-radio-icon"><div class="alert-radio-inner"></div></div>' +
  56680. '<div class="alert-radio-label">' +
  56681. '{{i.label}}' +
  56682. '</div>' +
  56683. '</button>' +
  56684. '</div>' +
  56685. '</ng-template>' +
  56686. '<ng-template ngSwitchCase="checkbox">' +
  56687. '<div class="alert-checkbox-group">' +
  56688. '<button ion-button="alert-checkbox-button" *ngFor="let i of d.inputs" (click)="cbClick(i)" [attr.aria-checked]="i.checked" [attr.id]="i.id" [disabled]="i.disabled" class="alert-tappable alert-checkbox" role="checkbox">' +
  56689. '<div class="alert-checkbox-icon"><div class="alert-checkbox-inner"></div></div>' +
  56690. '<div class="alert-checkbox-label">' +
  56691. '{{i.label}}' +
  56692. '</div>' +
  56693. '</button>' +
  56694. '</div>' +
  56695. '</ng-template>' +
  56696. '<ng-template ngSwitchDefault>' +
  56697. '<div class="alert-input-group">' +
  56698. '<div *ngFor="let i of d.inputs" class="alert-input-wrapper">' +
  56699. '<input [placeholder]="i.placeholder" [(ngModel)]="i.value" [type]="i.type" dir="auto" [min]="i.min" [max]="i.max" [attr.id]="i.id" class="alert-input">' +
  56700. '</div>' +
  56701. '</div>' +
  56702. '</ng-template>' +
  56703. '</div>' +
  56704. '<div class="alert-button-group" [ngClass]="{\'alert-button-group-vertical\':d.buttons.length>2}">' +
  56705. '<button ion-button="alert-button" *ngFor="let b of d.buttons" (click)="btnClick(b)" [ngClass]="b.cssClass">' +
  56706. '{{b.text}}' +
  56707. '</button>' +
  56708. '</div>' +
  56709. '</div>',
  56710. host: {
  56711. 'role': 'dialog',
  56712. '[attr.aria-labelledby]': 'hdrId',
  56713. '[attr.aria-describedby]': 'descId'
  56714. },
  56715. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  56716. },] },
  56717. ];
  56718. /** @nocollapse */
  56719. AlertCmp.ctorParameters = function () { return [
  56720. { type: __WEBPACK_IMPORTED_MODULE_8__navigation_view_controller__["a" /* ViewController */], },
  56721. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  56722. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  56723. { type: __WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__["l" /* GestureController */], },
  56724. { type: __WEBPACK_IMPORTED_MODULE_6__navigation_nav_params__["a" /* NavParams */], },
  56725. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  56726. { type: __WEBPACK_IMPORTED_MODULE_7__platform_platform__["a" /* Platform */], },
  56727. ]; };
  56728. AlertCmp.propDecorators = {
  56729. 'keyUp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['body:keyup', ['$event'],] },],
  56730. };
  56731. return AlertCmp;
  56732. }());
  56733. var alertIds = -1;
  56734. //# sourceMappingURL=alert-component.js.map
  56735. /***/ }),
  56736. /* 97 */
  56737. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56738. "use strict";
  56739. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Backdrop; });
  56740. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  56741. /**
  56742. * @hidden
  56743. */
  56744. var Backdrop = (function () {
  56745. function Backdrop(_elementRef, _renderer) {
  56746. this._elementRef = _elementRef;
  56747. this._renderer = _renderer;
  56748. }
  56749. Backdrop.prototype.getNativeElement = function () {
  56750. return this._elementRef.nativeElement;
  56751. };
  56752. Backdrop.prototype.setElementClass = function (className, add) {
  56753. this._renderer.setElementClass(this._elementRef.nativeElement, className, add);
  56754. };
  56755. Backdrop.decorators = [
  56756. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  56757. selector: 'ion-backdrop',
  56758. host: {
  56759. 'role': 'presentation',
  56760. 'tappable': '',
  56761. 'disable-activated': ''
  56762. },
  56763. },] },
  56764. ];
  56765. /** @nocollapse */
  56766. Backdrop.ctorParameters = function () { return [
  56767. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  56768. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  56769. ]; };
  56770. return Backdrop;
  56771. }());
  56772. //# sourceMappingURL=backdrop.js.map
  56773. /***/ }),
  56774. /* 98 */
  56775. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56776. "use strict";
  56777. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Icon; });
  56778. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  56779. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  56780. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  56781. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ion__ = __webpack_require__(8);
  56782. var __extends = (this && this.__extends) || (function () {
  56783. var extendStatics = Object.setPrototypeOf ||
  56784. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  56785. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  56786. return function (d, b) {
  56787. extendStatics(d, b);
  56788. function __() { this.constructor = d; }
  56789. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  56790. };
  56791. })();
  56792. /**
  56793. * @name Icon
  56794. * @description
  56795. * Icons can be used on their own, or inside of a number of Ionic components.
  56796. * For a full list of available icons, check out the
  56797. * [Ionicons docs](../../../../ionicons).
  56798. *
  56799. * One feature of Ionicons in Ionic is when icon names are set, the actual icon
  56800. * which is rendered can change slightly depending on the mode the app is
  56801. * running from. For example, by setting the icon name of `alarm`, on iOS the
  56802. * icon will automatically apply `ios-alarm`, and on Material Design it will
  56803. * automatically apply `md-alarm`. This allows the developer to write the
  56804. * markup once while Ionic applies the appropriate icon based on the mode.
  56805. *
  56806. * @usage
  56807. * ```html
  56808. * <!-- automatically uses the correct "star" icon depending on the mode -->
  56809. * <ion-icon name="star"></ion-icon>
  56810. *
  56811. * <!-- explicity set the icon for each mode -->
  56812. * <ion-icon ios="ios-home" md="md-home"></ion-icon>
  56813. *
  56814. * <!-- always use the same icon, no matter what the mode -->
  56815. * <ion-icon name="ios-clock"></ion-icon>
  56816. * <ion-icon name="logo-twitter"></ion-icon>
  56817. * ```
  56818. *
  56819. * @demo /docs/demos/src/icon/
  56820. * @see {@link /docs/components#icons Icon Component Docs}
  56821. *
  56822. */
  56823. var Icon = (function (_super) {
  56824. __extends(Icon, _super);
  56825. function Icon(config, elementRef, renderer) {
  56826. var _this = _super.call(this, config, elementRef, renderer, 'icon') || this;
  56827. /** @hidden */
  56828. _this._isActive = true;
  56829. /** @hidden */
  56830. _this._name = '';
  56831. /** @hidden */
  56832. _this._ios = '';
  56833. /** @hidden */
  56834. _this._md = '';
  56835. /** @hidden */
  56836. _this._css = '';
  56837. /**
  56838. * @hidden
  56839. */
  56840. _this._hidden = false;
  56841. _this._iconMode = config.get('iconMode');
  56842. return _this;
  56843. }
  56844. /**
  56845. * @hidden
  56846. */
  56847. Icon.prototype.ngOnDestroy = function () {
  56848. if (this._css) {
  56849. this.setElementClass(this._css, false);
  56850. }
  56851. };
  56852. Object.defineProperty(Icon.prototype, "name", {
  56853. /**
  56854. * @input {string} Specifies which icon to use. The appropriate icon will be used based on the mode.
  56855. * For more information, see [Ionicons](/docs/ionicons/).
  56856. */
  56857. get: function () {
  56858. return this._name;
  56859. },
  56860. set: function (val) {
  56861. if (!(/^md-|^ios-|^logo-/.test(val))) {
  56862. // this does not have one of the defaults
  56863. // so lets auto add in the mode prefix for them
  56864. this._name = this._iconMode + '-' + val;
  56865. }
  56866. else {
  56867. this._name = val;
  56868. }
  56869. this.update();
  56870. },
  56871. enumerable: true,
  56872. configurable: true
  56873. });
  56874. Object.defineProperty(Icon.prototype, "ios", {
  56875. /**
  56876. * @input {string} Specifies which icon to use on `ios` mode.
  56877. */
  56878. get: function () {
  56879. return this._ios;
  56880. },
  56881. set: function (val) {
  56882. this._ios = val;
  56883. this.update();
  56884. },
  56885. enumerable: true,
  56886. configurable: true
  56887. });
  56888. Object.defineProperty(Icon.prototype, "md", {
  56889. /**
  56890. * @input {string} Specifies which icon to use on `md` mode.
  56891. */
  56892. get: function () {
  56893. return this._md;
  56894. },
  56895. set: function (val) {
  56896. this._md = val;
  56897. this.update();
  56898. },
  56899. enumerable: true,
  56900. configurable: true
  56901. });
  56902. Object.defineProperty(Icon.prototype, "isActive", {
  56903. /**
  56904. * @input {boolean} If true, the icon is styled with an "active" appearance.
  56905. * An active icon is filled in, and an inactive icon is the outline of the icon.
  56906. * The `isActive` property is largely used by the tabbar. Only affects `ios` icons.
  56907. */
  56908. get: function () {
  56909. return this._isActive;
  56910. },
  56911. set: function (val) {
  56912. this._isActive = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  56913. this.update();
  56914. },
  56915. enumerable: true,
  56916. configurable: true
  56917. });
  56918. /**
  56919. * @hidden
  56920. */
  56921. Icon.prototype.update = function () {
  56922. var iconName;
  56923. if (this._ios && this._iconMode === 'ios') {
  56924. iconName = this._ios;
  56925. }
  56926. else if (this._md && this._iconMode === 'md') {
  56927. iconName = this._md;
  56928. }
  56929. else {
  56930. iconName = this._name;
  56931. }
  56932. var hidden = this._hidden = (iconName === null);
  56933. if (hidden) {
  56934. return;
  56935. }
  56936. var iconMode = iconName.split('-', 2)[0];
  56937. if (iconMode === 'ios' &&
  56938. !this._isActive &&
  56939. iconName.indexOf('logo-') < 0 &&
  56940. iconName.indexOf('-outline') < 0) {
  56941. iconName += '-outline';
  56942. }
  56943. var css = 'ion-' + iconName;
  56944. if (this._css === css) {
  56945. return;
  56946. }
  56947. if (this._css) {
  56948. this.setElementClass(this._css, false);
  56949. }
  56950. this._css = css;
  56951. this.setElementClass(css, true);
  56952. var label = iconName
  56953. .replace('ios-', '')
  56954. .replace('md-', '')
  56955. .replace('-', ' ');
  56956. this.setElementAttribute('aria-label', label);
  56957. };
  56958. Icon.decorators = [
  56959. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  56960. selector: 'ion-icon',
  56961. host: {
  56962. 'role': 'img'
  56963. }
  56964. },] },
  56965. ];
  56966. /** @nocollapse */
  56967. Icon.ctorParameters = function () { return [
  56968. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  56969. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  56970. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  56971. ]; };
  56972. Icon.propDecorators = {
  56973. 'name': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  56974. 'ios': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  56975. 'md': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  56976. 'isActive': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  56977. '_hidden': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["x" /* HostBinding */], args: ['class.hide',] },],
  56978. };
  56979. return Icon;
  56980. }(__WEBPACK_IMPORTED_MODULE_3__ion__["a" /* Ion */]));
  56981. //# sourceMappingURL=icon.js.map
  56982. /***/ }),
  56983. /* 99 */
  56984. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  56985. "use strict";
  56986. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Label; });
  56987. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  56988. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  56989. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  56990. var __extends = (this && this.__extends) || (function () {
  56991. var extendStatics = Object.setPrototypeOf ||
  56992. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  56993. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  56994. return function (d, b) {
  56995. extendStatics(d, b);
  56996. function __() { this.constructor = d; }
  56997. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  56998. };
  56999. })();
  57000. /**
  57001. * @name Label
  57002. * @description
  57003. * Labels are placed inside of an `ion-item` element and can be used
  57004. * to describe an `ion-input`, `ion-toggle`, `ion-checkbox`, and more.
  57005. *
  57006. * @property [fixed] - A persistent label that sits next the input.
  57007. * @property [floating] - A label that will float above the input if the input is empty or loses focus.
  57008. * @property [stacked] - A stacked label will always appear on top of the input.
  57009. *
  57010. * @usage
  57011. * ```html
  57012. * <ion-item>
  57013. * <ion-label>Username</ion-label>
  57014. * <ion-input></ion-input>
  57015. * </ion-item>
  57016. *
  57017. * <ion-item>
  57018. * <ion-label fixed>Website</ion-label>
  57019. * <ion-input type="url"></ion-input>
  57020. * </ion-item>
  57021. *
  57022. * <ion-item>
  57023. * <ion-label floating>Email</ion-label>
  57024. * <ion-input type="email"></ion-input>
  57025. * </ion-item>
  57026. *
  57027. * <ion-item>
  57028. * <ion-label stacked>Phone</ion-label>
  57029. * <ion-input type="tel"></ion-input>
  57030. * </ion-item>
  57031. *
  57032. * <ion-item>
  57033. * <ion-label>Toggle</ion-label>
  57034. * <ion-toggle></ion-toggle>
  57035. * </ion-item>
  57036. *
  57037. * <ion-item>
  57038. * <ion-label>Checkbox</ion-label>
  57039. * <ion-checkbox></ion-checkbox>
  57040. * </ion-item>
  57041. * ```
  57042. *
  57043. * @demo /docs/demos/src/label/
  57044. * @see {@link ../../../../components#inputs Input Component Docs}
  57045. * @see {@link ../../input/Input Input API Docs}
  57046. *
  57047. */
  57048. var Label = (function (_super) {
  57049. __extends(Label, _super);
  57050. function Label(config, elementRef, renderer, isFloating, isStacked, isFixed, isInset) {
  57051. var _this = _super.call(this, config, elementRef, renderer, 'label') || this;
  57052. _this.type = (isFloating === '' ? 'floating' : (isStacked === '' ? 'stacked' : (isFixed === '' ? 'fixed' : (isInset === '' ? 'inset' : null))));
  57053. return _this;
  57054. }
  57055. Object.defineProperty(Label.prototype, "id", {
  57056. /**
  57057. * @hidden
  57058. */
  57059. get: function () {
  57060. return this._id;
  57061. },
  57062. set: function (val) {
  57063. this._id = val;
  57064. if (val) {
  57065. this.setElementAttribute('id', val);
  57066. }
  57067. },
  57068. enumerable: true,
  57069. configurable: true
  57070. });
  57071. Object.defineProperty(Label.prototype, "text", {
  57072. /**
  57073. * @hidden
  57074. */
  57075. get: function () {
  57076. return this.getNativeElement().textContent || '';
  57077. },
  57078. enumerable: true,
  57079. configurable: true
  57080. });
  57081. Label.decorators = [
  57082. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  57083. selector: 'ion-label'
  57084. },] },
  57085. ];
  57086. /** @nocollapse */
  57087. Label.ctorParameters = function () { return [
  57088. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  57089. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  57090. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  57091. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['floating',] },] },
  57092. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['stacked',] },] },
  57093. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['fixed',] },] },
  57094. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['inset',] },] },
  57095. ]; };
  57096. Label.propDecorators = {
  57097. 'id': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  57098. };
  57099. return Label;
  57100. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  57101. //# sourceMappingURL=label.js.map
  57102. /***/ }),
  57103. /* 100 */
  57104. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  57105. "use strict";
  57106. /* unused harmony export ReorderIndexes */
  57107. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemReorder; });
  57108. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  57109. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__content_content__ = __webpack_require__(31);
  57110. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__ = __webpack_require__(15);
  57111. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  57112. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__item_reorder_gesture__ = __webpack_require__(365);
  57113. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__platform_platform__ = __webpack_require__(7);
  57114. var ReorderIndexes = (function () {
  57115. function ReorderIndexes(from, to) {
  57116. this.from = from;
  57117. this.to = to;
  57118. }
  57119. ReorderIndexes.prototype.applyTo = function (array) {
  57120. Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["r" /* reorderArray */])(array, this);
  57121. };
  57122. return ReorderIndexes;
  57123. }());
  57124. /**
  57125. * @name ItemReorder
  57126. * @description
  57127. * Item reorder adds the ability to change an item's order in a group.
  57128. * It can be used within an `ion-list` or `ion-item-group` to provide a
  57129. * visual drag and drop interface.
  57130. *
  57131. * ## Grouping Items
  57132. *
  57133. * All reorderable items must be grouped in the same element. If an item
  57134. * should not be reordered, it shouldn't be included in this group. For
  57135. * example, the following code works because the items are grouped in the
  57136. * `<ion-list>`:
  57137. *
  57138. * ```html
  57139. * <ion-list reorder="true">
  57140. * <ion-item *ngFor="let item of items">{% raw %}{{ item }}{% endraw %}</ion-item>
  57141. * </ion-list>
  57142. * ```
  57143. *
  57144. * However, the below list includes a header that shouldn't be reordered:
  57145. *
  57146. * ```html
  57147. * <ion-list reorder="true">
  57148. * <ion-list-header>Header</ion-list-header>
  57149. * <ion-item *ngFor="let item of items">{% raw %}{{ item }}{% endraw %}</ion-item>
  57150. * </ion-list>
  57151. * ```
  57152. *
  57153. * In order to mix different sets of items, `ion-item-group` should be used to
  57154. * group the reorderable items:
  57155. *
  57156. * ```html
  57157. * <ion-list>
  57158. * <ion-list-header>Header</ion-list-header>
  57159. * <ion-item-group reorder="true">
  57160. * <ion-item *ngFor="let item of items">{% raw %}{{ item }}{% endraw %}</ion-item>
  57161. * </ion-item-group>
  57162. * </ion-list>
  57163. * ```
  57164. *
  57165. * It's important to note that in this example, the `[reorder]` directive is applied to
  57166. * the `<ion-item-group>` instead of the `<ion-list>`. This way makes it possible to
  57167. * mix items that should and shouldn't be reordered.
  57168. *
  57169. *
  57170. * ## Implementing the Reorder Function
  57171. *
  57172. * When the item is dragged and dropped into the new position, the `(ionItemReorder)` event is
  57173. * emitted. This event provides the initial index (from) and the new index (to) of the reordered
  57174. * item. For example, if the first item is dragged to the fifth position, the event will emit
  57175. * `{from: 0, to: 4}`. Note that the index starts at zero.
  57176. *
  57177. * A function should be called when the event is emitted that handles the reordering of the items.
  57178. * See [usage](#usage) below for some examples.
  57179. *
  57180. *
  57181. * @usage
  57182. *
  57183. * ```html
  57184. * <ion-list>
  57185. * <ion-list-header>Header</ion-list-header>
  57186. * <ion-item-group reorder="true" (ionItemReorder)="reorderItems($event)">
  57187. * <ion-item *ngFor="let item of items">{% raw %}{{ item }}{% endraw %}</ion-item>
  57188. * </ion-item-group>
  57189. * </ion-list>
  57190. * ```
  57191. *
  57192. * ```ts
  57193. * class MyComponent {
  57194. * items = [];
  57195. *
  57196. * constructor() {
  57197. * for (let x = 0; x < 5; x++) {
  57198. * this.items.push(x);
  57199. * }
  57200. * }
  57201. *
  57202. * reorderItems(indexes) {
  57203. * let element = this.items[indexes.from];
  57204. * this.items.splice(indexes.from, 1);
  57205. * this.items.splice(indexes.to, 0, element);
  57206. * }
  57207. * }
  57208. * ```
  57209. *
  57210. * Ionic also provides a helper function called `reorderArray` to
  57211. * reorder the array of items. This can be used instead:
  57212. *
  57213. * ```ts
  57214. * import { reorderArray } from 'ionic-angular';
  57215. *
  57216. * class MyComponent {
  57217. * items = [];
  57218. *
  57219. * constructor() {
  57220. * for (let x = 0; x < 5; x++) {
  57221. * this.items.push(x);
  57222. * }
  57223. * }
  57224. *
  57225. * reorderItems(indexes) {
  57226. * this.items = reorderArray(this.items, indexes);
  57227. * }
  57228. * }
  57229. * ```
  57230. * Alternatevely you can execute helper function inside template:
  57231. *
  57232. * ```html
  57233. * <ion-list>
  57234. * <ion-list-header>Header</ion-list-header>
  57235. * <ion-item-group reorder="true" (ionItemReorder)="$event.applyTo(items)">
  57236. * <ion-item *ngFor="let item of items">{% raw %}{{ item }}{% endraw %}</ion-item>
  57237. * </ion-item-group>
  57238. * </ion-list>
  57239. * ```
  57240. *
  57241. * @demo /docs/demos/src/item-reorder/
  57242. * @see {@link /docs/components#lists List Component Docs}
  57243. * @see {@link ../../list/List List API Docs}
  57244. * @see {@link ../Item Item API Docs}
  57245. */
  57246. var ItemReorder = (function () {
  57247. function ItemReorder(_plt, _dom, elementRef, _rendered, _zone, _content) {
  57248. this._plt = _plt;
  57249. this._dom = _dom;
  57250. this._rendered = _rendered;
  57251. this._zone = _zone;
  57252. this._content = _content;
  57253. this._enableReorder = false;
  57254. this._visibleReorder = false;
  57255. this._isStart = false;
  57256. this._lastToIndex = -1;
  57257. /**
  57258. * @output {object} Emitted when the item is reordered. Emits an object
  57259. * with `from` and `to` properties.
  57260. */
  57261. this.ionItemReorder = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  57262. this._element = elementRef.nativeElement;
  57263. }
  57264. Object.defineProperty(ItemReorder.prototype, "side", {
  57265. /**
  57266. * @input {string} Which side of the view the ion-reorder should be placed. Default `"end"`.
  57267. */
  57268. set: function (side) {
  57269. this._isStart = side === 'start';
  57270. },
  57271. enumerable: true,
  57272. configurable: true
  57273. });
  57274. /**
  57275. * @hidden
  57276. */
  57277. ItemReorder.prototype.ngOnDestroy = function () {
  57278. this._element = null;
  57279. this._reorderGesture && this._reorderGesture.destroy();
  57280. };
  57281. Object.defineProperty(ItemReorder.prototype, "reorder", {
  57282. /**
  57283. * @hidden
  57284. */
  57285. get: function () {
  57286. return this._enableReorder;
  57287. },
  57288. set: function (val) {
  57289. var _this = this;
  57290. var enabled = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  57291. if (!enabled && this._reorderGesture) {
  57292. this._reorderGesture.destroy();
  57293. this._reorderGesture = null;
  57294. this._visibleReorder = false;
  57295. setTimeout(function () { return _this._enableReorder = false; }, 400);
  57296. }
  57297. else if (enabled && !this._reorderGesture) {
  57298. (void 0) /* console.debug */;
  57299. this._reorderGesture = new __WEBPACK_IMPORTED_MODULE_4__item_reorder_gesture__["a" /* ItemReorderGesture */](this._plt, this);
  57300. this._enableReorder = true;
  57301. this._dom.write(function () {
  57302. _this._zone.run(function () {
  57303. _this._visibleReorder = true;
  57304. });
  57305. }, 16);
  57306. }
  57307. },
  57308. enumerable: true,
  57309. configurable: true
  57310. });
  57311. ItemReorder.prototype._reorderPrepare = function () {
  57312. var ele = this._element;
  57313. var children = ele.children;
  57314. for (var i = 0, ilen = children.length; i < ilen; i++) {
  57315. var child = children[i];
  57316. child.$ionIndex = i;
  57317. child.$ionReorderList = ele;
  57318. }
  57319. };
  57320. ItemReorder.prototype._reorderStart = function () {
  57321. this.setElementClass('reorder-list-active', true);
  57322. };
  57323. ItemReorder.prototype._reorderEmit = function (fromIndex, toIndex) {
  57324. var _this = this;
  57325. this._reorderReset();
  57326. if (fromIndex !== toIndex) {
  57327. this._zone.run(function () {
  57328. var indexes = new ReorderIndexes(fromIndex, toIndex);
  57329. _this.ionItemReorder.emit(indexes);
  57330. });
  57331. }
  57332. };
  57333. ItemReorder.prototype._scrollContent = function (scroll) {
  57334. var scrollTop = this._content.scrollTop + scroll;
  57335. if (scroll !== 0) {
  57336. this._content.scrollTo(0, scrollTop, 0);
  57337. }
  57338. return scrollTop;
  57339. };
  57340. ItemReorder.prototype._reorderReset = function () {
  57341. var children = this._element.children;
  57342. var len = children.length;
  57343. this.setElementClass('reorder-list-active', false);
  57344. var transform = this._plt.Css.transform;
  57345. for (var i = 0; i < len; i++) {
  57346. children[i].style[transform] = '';
  57347. }
  57348. this._lastToIndex = -1;
  57349. };
  57350. ItemReorder.prototype._reorderMove = function (fromIndex, toIndex, itemHeight) {
  57351. if (this._lastToIndex === -1) {
  57352. this._lastToIndex = fromIndex;
  57353. }
  57354. var lastToIndex = this._lastToIndex;
  57355. this._lastToIndex = toIndex;
  57356. // TODO: I think both loops can be merged into a single one
  57357. // but I had no luck last time I tried
  57358. /********* DOM READ ********** */
  57359. var children = this._element.children;
  57360. /********* DOM WRITE ********* */
  57361. var transform = this._plt.Css.transform;
  57362. if (toIndex >= lastToIndex) {
  57363. for (var i = lastToIndex; i <= toIndex; i++) {
  57364. if (i !== fromIndex) {
  57365. children[i].style[transform] = (i > fromIndex)
  57366. ? "translateY(" + -itemHeight + "px)" : '';
  57367. }
  57368. }
  57369. }
  57370. if (toIndex <= lastToIndex) {
  57371. for (var i = toIndex; i <= lastToIndex; i++) {
  57372. if (i !== fromIndex) {
  57373. children[i].style[transform] = (i < fromIndex)
  57374. ? "translateY(" + itemHeight + "px)" : '';
  57375. }
  57376. }
  57377. }
  57378. };
  57379. /**
  57380. * @hidden
  57381. */
  57382. ItemReorder.prototype.setElementClass = function (classname, add) {
  57383. this._rendered.setElementClass(this._element, classname, add);
  57384. };
  57385. /**
  57386. * @hidden
  57387. */
  57388. ItemReorder.prototype.getNativeElement = function () {
  57389. return this._element;
  57390. };
  57391. ItemReorder.decorators = [
  57392. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  57393. selector: 'ion-list[reorder],ion-item-group[reorder]',
  57394. host: {
  57395. '[class.reorder-enabled]': '_enableReorder',
  57396. '[class.reorder-visible]': '_visibleReorder',
  57397. '[class.reorder-side-start]': '_isStart'
  57398. }
  57399. },] },
  57400. ];
  57401. /** @nocollapse */
  57402. ItemReorder.ctorParameters = function () { return [
  57403. { type: __WEBPACK_IMPORTED_MODULE_5__platform_platform__["a" /* Platform */], },
  57404. { type: __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__["a" /* DomController */], },
  57405. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  57406. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  57407. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  57408. { type: __WEBPACK_IMPORTED_MODULE_1__content_content__["a" /* Content */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  57409. ]; };
  57410. ItemReorder.propDecorators = {
  57411. 'ionItemReorder': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  57412. 'side': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */], args: ['side',] },],
  57413. 'reorder': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  57414. };
  57415. return ItemReorder;
  57416. }());
  57417. //# sourceMappingURL=item-reorder.js.map
  57418. /***/ }),
  57419. /* 101 */
  57420. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  57421. "use strict";
  57422. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PickerController; });
  57423. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  57424. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  57425. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  57426. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__picker__ = __webpack_require__(186);
  57427. /**
  57428. * @hidden
  57429. * @name PickerController
  57430. * @description
  57431. *
  57432. */
  57433. var PickerController = (function () {
  57434. function PickerController(_app, config) {
  57435. this._app = _app;
  57436. this.config = config;
  57437. }
  57438. /**
  57439. * Open a picker.
  57440. */
  57441. PickerController.prototype.create = function (opts) {
  57442. if (opts === void 0) { opts = {}; }
  57443. return new __WEBPACK_IMPORTED_MODULE_3__picker__["a" /* Picker */](this._app, opts, this.config);
  57444. };
  57445. PickerController.decorators = [
  57446. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  57447. ];
  57448. /** @nocollapse */
  57449. PickerController.ctorParameters = function () { return [
  57450. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  57451. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  57452. ]; };
  57453. return PickerController;
  57454. }());
  57455. //# sourceMappingURL=picker-controller.js.map
  57456. /***/ }),
  57457. /* 102 */
  57458. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  57459. "use strict";
  57460. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PickerCmp; });
  57461. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  57462. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  57463. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  57464. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__ = __webpack_require__(13);
  57465. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_key__ = __webpack_require__(30);
  57466. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__navigation_nav_params__ = __webpack_require__(23);
  57467. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__navigation_view_controller__ = __webpack_require__(9);
  57468. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__picker_column__ = __webpack_require__(103);
  57469. /**
  57470. * @hidden
  57471. */
  57472. var PickerCmp = (function () {
  57473. function PickerCmp(_viewCtrl, _elementRef, config, gestureCtrl, params, renderer) {
  57474. this._viewCtrl = _viewCtrl;
  57475. this._elementRef = _elementRef;
  57476. this._gestureBlocker = gestureCtrl.createBlocker(__WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__["a" /* BLOCK_ALL */]);
  57477. this.d = params.data;
  57478. this.mode = config.get('mode');
  57479. renderer.setElementClass(_elementRef.nativeElement, "picker-" + this.mode, true);
  57480. if (this.d.cssClass) {
  57481. this.d.cssClass.split(' ').forEach(function (cssClass) {
  57482. renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  57483. });
  57484. }
  57485. this.id = (++pickerIds);
  57486. this.lastClick = 0;
  57487. }
  57488. PickerCmp.prototype.ionViewWillLoad = function () {
  57489. // normalize the data
  57490. var data = this.d;
  57491. data.buttons = data.buttons.map(function (button) {
  57492. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["n" /* isString */])(button)) {
  57493. return { text: button };
  57494. }
  57495. if (button.role) {
  57496. button.cssRole = "picker-toolbar-" + button.role;
  57497. }
  57498. return button;
  57499. });
  57500. // clean up dat data
  57501. data.columns = data.columns.map(function (column) {
  57502. if (!Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(column.options)) {
  57503. column.options = [];
  57504. }
  57505. column.selectedIndex = column.selectedIndex || 0;
  57506. column.options = column.options.map(function (inputOpt) {
  57507. var opt = {
  57508. text: '',
  57509. value: '',
  57510. disabled: inputOpt.disabled,
  57511. };
  57512. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(inputOpt)) {
  57513. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["n" /* isString */])(inputOpt) || Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["j" /* isNumber */])(inputOpt)) {
  57514. opt.text = inputOpt.toString();
  57515. opt.value = inputOpt;
  57516. }
  57517. else {
  57518. opt.text = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(inputOpt.text) ? inputOpt.text : inputOpt.value;
  57519. opt.value = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(inputOpt.value) ? inputOpt.value : inputOpt.text;
  57520. }
  57521. }
  57522. return opt;
  57523. });
  57524. return column;
  57525. });
  57526. };
  57527. PickerCmp.prototype.ionViewDidLoad = function () {
  57528. this.refresh();
  57529. };
  57530. PickerCmp.prototype.ionViewWillEnter = function () {
  57531. this._gestureBlocker.block();
  57532. };
  57533. PickerCmp.prototype.ionViewDidLeave = function () {
  57534. this._gestureBlocker.unblock();
  57535. };
  57536. PickerCmp.prototype.refresh = function () {
  57537. this._cols.forEach(function (column) { return column.refresh(); });
  57538. };
  57539. PickerCmp.prototype._colChange = function () {
  57540. // one of the columns has changed its selected index
  57541. var picker = this._viewCtrl;
  57542. picker.ionChange.emit(this.getSelected());
  57543. };
  57544. PickerCmp.prototype._keyUp = function (ev) {
  57545. if (this.enabled && this._viewCtrl.isLast()) {
  57546. if (ev.keyCode === __WEBPACK_IMPORTED_MODULE_4__platform_key__["b" /* KEY_ENTER */]) {
  57547. if (this.lastClick + 1000 < Date.now()) {
  57548. // do not fire this click if there recently was already a click
  57549. // this can happen when the button has focus and used the enter
  57550. // key to click the button. However, both the click handler and
  57551. // this keyup event will fire, so only allow one of them to go.
  57552. (void 0) /* console.debug */;
  57553. var button = this.d.buttons[this.d.buttons.length - 1];
  57554. this.btnClick(button);
  57555. }
  57556. }
  57557. else if (ev.keyCode === __WEBPACK_IMPORTED_MODULE_4__platform_key__["c" /* KEY_ESCAPE */]) {
  57558. (void 0) /* console.debug */;
  57559. this.bdClick();
  57560. }
  57561. }
  57562. };
  57563. PickerCmp.prototype.ionViewDidEnter = function () {
  57564. var focusableEle = this._elementRef.nativeElement.querySelector('button');
  57565. if (focusableEle) {
  57566. focusableEle.focus();
  57567. }
  57568. this.enabled = true;
  57569. };
  57570. PickerCmp.prototype.btnClick = function (button) {
  57571. if (!this.enabled) {
  57572. return;
  57573. }
  57574. // keep the time of the most recent button click
  57575. this.lastClick = Date.now();
  57576. var shouldDismiss = true;
  57577. if (button.handler) {
  57578. // a handler has been provided, execute it
  57579. // pass the handler the values from the inputs
  57580. if (button.handler(this.getSelected()) === false) {
  57581. // if the return value of the handler is false then do not dismiss
  57582. shouldDismiss = false;
  57583. }
  57584. }
  57585. if (shouldDismiss) {
  57586. this.dismiss(button.role);
  57587. }
  57588. };
  57589. PickerCmp.prototype.bdClick = function () {
  57590. if (this.enabled && this.d.enableBackdropDismiss) {
  57591. var cancelBtn = this.d.buttons.find(function (b) { return b.role === 'cancel'; });
  57592. if (cancelBtn) {
  57593. this.btnClick(cancelBtn);
  57594. }
  57595. else {
  57596. this.dismiss('backdrop');
  57597. }
  57598. }
  57599. };
  57600. PickerCmp.prototype.dismiss = function (role) {
  57601. return this._viewCtrl.dismiss(this.getSelected(), role);
  57602. };
  57603. PickerCmp.prototype.getSelected = function () {
  57604. var selected = {};
  57605. this.d.columns.forEach(function (col, index) {
  57606. var selectedColumn = col.options[col.selectedIndex];
  57607. selected[col.name] = {
  57608. text: selectedColumn ? selectedColumn.text : null,
  57609. value: selectedColumn ? selectedColumn.value : null,
  57610. columnIndex: index,
  57611. };
  57612. });
  57613. return selected;
  57614. };
  57615. PickerCmp.prototype.ngOnDestroy = function () {
  57616. (void 0) /* assert */;
  57617. this._gestureBlocker.destroy();
  57618. };
  57619. PickerCmp.decorators = [
  57620. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  57621. selector: 'ion-picker-cmp',
  57622. template: "\n <ion-backdrop (click)=\"bdClick()\"></ion-backdrop>\n <div class=\"picker-wrapper\">\n <div class=\"picker-toolbar\">\n <div *ngFor=\"let b of d.buttons\" class=\"picker-toolbar-button\" [ngClass]=\"b.cssRole\">\n <button ion-button (click)=\"btnClick(b)\" [ngClass]=\"b.cssClass\" class=\"picker-button\" clear>\n {{b.text}}\n </button>\n </div>\n </div>\n <div class=\"picker-columns\">\n <div class=\"picker-above-highlight\"></div>\n <div *ngFor=\"let c of d.columns\" [col]=\"c\" class=\"picker-col\" (ionChange)=\"_colChange($event)\"></div>\n <div class=\"picker-below-highlight\"></div>\n </div>\n </div>\n ",
  57623. host: {
  57624. 'role': 'dialog'
  57625. },
  57626. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  57627. },] },
  57628. ];
  57629. /** @nocollapse */
  57630. PickerCmp.ctorParameters = function () { return [
  57631. { type: __WEBPACK_IMPORTED_MODULE_6__navigation_view_controller__["a" /* ViewController */], },
  57632. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  57633. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  57634. { type: __WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__["l" /* GestureController */], },
  57635. { type: __WEBPACK_IMPORTED_MODULE_5__navigation_nav_params__["a" /* NavParams */], },
  57636. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  57637. ]; };
  57638. PickerCmp.propDecorators = {
  57639. '_cols': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_9" /* ViewChildren */], args: [__WEBPACK_IMPORTED_MODULE_7__picker_column__["a" /* PickerColumnCmp */],] },],
  57640. '_keyUp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['body:keyup', ['$event'],] },],
  57641. };
  57642. return PickerCmp;
  57643. }());
  57644. var pickerIds = -1;
  57645. //# sourceMappingURL=picker-component.js.map
  57646. /***/ }),
  57647. /* 103 */
  57648. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  57649. "use strict";
  57650. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PickerColumnCmp; });
  57651. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  57652. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  57653. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  57654. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_dom_controller__ = __webpack_require__(15);
  57655. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__tap_click_haptic__ = __webpack_require__(51);
  57656. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__picker_options__ = __webpack_require__(366);
  57657. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__platform_platform__ = __webpack_require__(7);
  57658. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_dom__ = __webpack_require__(18);
  57659. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__gestures_ui_event_manager__ = __webpack_require__(36);
  57660. /**
  57661. * @hidden
  57662. */
  57663. var PickerColumnCmp = (function () {
  57664. function PickerColumnCmp(config, _plt, elementRef, _zone, _haptic, plt, domCtrl) {
  57665. this._plt = _plt;
  57666. this.elementRef = elementRef;
  57667. this._zone = _zone;
  57668. this._haptic = _haptic;
  57669. this.y = 0;
  57670. this.pos = [];
  57671. this.startY = null;
  57672. this.ionChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  57673. this.events = new __WEBPACK_IMPORTED_MODULE_8__gestures_ui_event_manager__["a" /* UIEventManager */](plt);
  57674. this.rotateFactor = config.getNumber('pickerRotateFactor', 0);
  57675. this.scaleFactor = config.getNumber('pickerScaleFactor', 1);
  57676. this.decelerateFunc = this.decelerate.bind(this);
  57677. this.debouncer = domCtrl.debouncer();
  57678. }
  57679. PickerColumnCmp.prototype.ngAfterViewInit = function () {
  57680. // get the scrollable element within the column
  57681. var colEle = this.colEle.nativeElement;
  57682. this.colHeight = colEle.clientHeight;
  57683. // get the height of one option
  57684. this.optHeight = (colEle.firstElementChild ? colEle.firstElementChild.clientHeight : 0);
  57685. // Listening for pointer events
  57686. this.events.pointerEvents({
  57687. element: this.elementRef.nativeElement,
  57688. pointerDown: this.pointerStart.bind(this),
  57689. pointerMove: this.pointerMove.bind(this),
  57690. pointerUp: this.pointerEnd.bind(this),
  57691. capture: true,
  57692. zone: false
  57693. });
  57694. };
  57695. PickerColumnCmp.prototype.ngOnDestroy = function () {
  57696. this._plt.cancelRaf(this.rafId);
  57697. this.events.destroy();
  57698. };
  57699. PickerColumnCmp.prototype.pointerStart = function (ev) {
  57700. (void 0) /* console.debug */;
  57701. this._haptic.gestureSelectionStart();
  57702. // We have to prevent default in order to block scrolling under the picker
  57703. // but we DO NOT have to stop propagation, since we still want
  57704. // some "click" events to capture
  57705. ev.preventDefault();
  57706. // cancel any previous raf's that haven't fired yet
  57707. this._plt.cancelRaf(this.rafId);
  57708. // remember where the pointer started from`
  57709. this.startY = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev).y;
  57710. // reset everything
  57711. this.velocity = 0;
  57712. this.pos.length = 0;
  57713. this.pos.push(this.startY, Date.now());
  57714. var options = this.col.options;
  57715. var minY = (options.length - 1);
  57716. var maxY = 0;
  57717. for (var i = 0; i < options.length; i++) {
  57718. if (!options[i].disabled) {
  57719. minY = Math.min(minY, i);
  57720. maxY = Math.max(maxY, i);
  57721. }
  57722. }
  57723. this.minY = (minY * this.optHeight * -1);
  57724. this.maxY = (maxY * this.optHeight * -1);
  57725. return true;
  57726. };
  57727. PickerColumnCmp.prototype.pointerMove = function (ev) {
  57728. var _this = this;
  57729. ev.preventDefault();
  57730. ev.stopPropagation();
  57731. var currentY = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev).y;
  57732. this.pos.push(currentY, Date.now());
  57733. this.debouncer.write(function () {
  57734. if (_this.startY === null) {
  57735. return;
  57736. }
  57737. // update the scroll position relative to pointer start position
  57738. var y = _this.y + (currentY - _this.startY);
  57739. if (y > _this.minY) {
  57740. // scrolling up higher than scroll area
  57741. y = Math.pow(y, 0.8);
  57742. _this.bounceFrom = y;
  57743. }
  57744. else if (y < _this.maxY) {
  57745. // scrolling down below scroll area
  57746. y += Math.pow(_this.maxY - y, 0.9);
  57747. _this.bounceFrom = y;
  57748. }
  57749. else {
  57750. _this.bounceFrom = 0;
  57751. }
  57752. _this.update(y, 0, false, false);
  57753. var currentIndex = Math.max(Math.abs(Math.round(y / _this.optHeight)), 0);
  57754. if (currentIndex !== _this.lastTempIndex) {
  57755. // Trigger a haptic event for physical feedback that the index has changed
  57756. _this._haptic.gestureSelectionChanged();
  57757. _this.lastTempIndex = currentIndex;
  57758. }
  57759. });
  57760. };
  57761. PickerColumnCmp.prototype.pointerEnd = function (ev) {
  57762. ev.preventDefault();
  57763. this.debouncer.cancel();
  57764. if (this.startY === null) {
  57765. return;
  57766. }
  57767. (void 0) /* console.debug */;
  57768. this.velocity = 0;
  57769. if (this.bounceFrom > 0) {
  57770. // bounce back up
  57771. this.update(this.minY, 100, true, true);
  57772. return;
  57773. }
  57774. else if (this.bounceFrom < 0) {
  57775. // bounce back down
  57776. this.update(this.maxY, 100, true, true);
  57777. return;
  57778. }
  57779. var endY = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev).y;
  57780. this.pos.push(endY, Date.now());
  57781. var endPos = (this.pos.length - 1);
  57782. var startPos = endPos;
  57783. var timeRange = (Date.now() - 100);
  57784. // move pointer to position measured 100ms ago
  57785. for (var i = endPos; i > 0 && this.pos[i] > timeRange; i -= 2) {
  57786. startPos = i;
  57787. }
  57788. if (startPos !== endPos) {
  57789. // compute relative movement between these two points
  57790. var timeOffset = (this.pos[endPos] - this.pos[startPos]);
  57791. var movedTop = (this.pos[startPos - 1] - this.pos[endPos - 1]);
  57792. // based on XXms compute the movement to apply for each render step
  57793. var velocity = ((movedTop / timeOffset) * __WEBPACK_IMPORTED_MODULE_5__picker_options__["b" /* FRAME_MS */]);
  57794. this.velocity = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["a" /* clamp */])(-__WEBPACK_IMPORTED_MODULE_5__picker_options__["c" /* MAX_PICKER_SPEED */], velocity, __WEBPACK_IMPORTED_MODULE_5__picker_options__["c" /* MAX_PICKER_SPEED */]);
  57795. }
  57796. if (Math.abs(endY - this.startY) > 3) {
  57797. var y = this.y + (endY - this.startY);
  57798. this.update(y, 0, true, true);
  57799. }
  57800. this.startY = null;
  57801. this.decelerate();
  57802. };
  57803. PickerColumnCmp.prototype.decelerate = function () {
  57804. var y = 0;
  57805. if (isNaN(this.y) || !this.optHeight) {
  57806. // fallback in case numbers get outta wack
  57807. this.update(y, 0, true, true);
  57808. this._haptic.gestureSelectionEnd();
  57809. }
  57810. else if (Math.abs(this.velocity) > 0) {
  57811. // still decelerating
  57812. this.velocity *= __WEBPACK_IMPORTED_MODULE_5__picker_options__["a" /* DECELERATION_FRICTION */];
  57813. // do not let it go slower than a velocity of 1
  57814. this.velocity = (this.velocity > 0)
  57815. ? Math.max(this.velocity, 1)
  57816. : Math.min(this.velocity, -1);
  57817. y = Math.round(this.y - this.velocity);
  57818. if (y > this.minY) {
  57819. // whoops, it's trying to scroll up farther than the options we have!
  57820. y = this.minY;
  57821. this.velocity = 0;
  57822. }
  57823. else if (y < this.maxY) {
  57824. // gahh, it's trying to scroll down farther than we can!
  57825. y = this.maxY;
  57826. this.velocity = 0;
  57827. }
  57828. var notLockedIn = (y % this.optHeight !== 0 || Math.abs(this.velocity) > 1);
  57829. this.update(y, 0, true, !notLockedIn);
  57830. if (notLockedIn) {
  57831. // isn't locked in yet, keep decelerating until it is
  57832. this.rafId = this._plt.raf(this.decelerateFunc);
  57833. }
  57834. }
  57835. else if (this.y % this.optHeight !== 0) {
  57836. // needs to still get locked into a position so options line up
  57837. var currentPos = Math.abs(this.y % this.optHeight);
  57838. // create a velocity in the direction it needs to scroll
  57839. this.velocity = (currentPos > (this.optHeight / 2) ? 1 : -1);
  57840. this._haptic.gestureSelectionEnd();
  57841. this.decelerate();
  57842. }
  57843. var currentIndex = Math.max(Math.abs(Math.round(y / this.optHeight)), 0);
  57844. if (currentIndex !== this.lastTempIndex) {
  57845. // Trigger a haptic event for physical feedback that the index has changed
  57846. this._haptic.gestureSelectionChanged();
  57847. }
  57848. this.lastTempIndex = currentIndex;
  57849. };
  57850. PickerColumnCmp.prototype.optClick = function (ev, index) {
  57851. if (!this.velocity) {
  57852. ev.preventDefault();
  57853. ev.stopPropagation();
  57854. this.setSelected(index, 150);
  57855. }
  57856. };
  57857. PickerColumnCmp.prototype.setSelected = function (selectedIndex, duration) {
  57858. // if there is a selected index, then figure out it's y position
  57859. // if there isn't a selected index, then just use the top y position
  57860. var y = (selectedIndex > -1) ? ((selectedIndex * this.optHeight) * -1) : 0;
  57861. this._plt.cancelRaf(this.rafId);
  57862. this.velocity = 0;
  57863. // so what y position we're at
  57864. this.update(y, duration, true, true);
  57865. };
  57866. PickerColumnCmp.prototype.update = function (y, duration, saveY, emitChange) {
  57867. // ensure we've got a good round number :)
  57868. y = Math.round(y);
  57869. var i;
  57870. var button;
  57871. var opt;
  57872. var optOffset;
  57873. var visible;
  57874. var translateX;
  57875. var translateY;
  57876. var translateZ;
  57877. var rotateX;
  57878. var transform;
  57879. var selected;
  57880. var parent = this.colEle.nativeElement;
  57881. var children = parent.children;
  57882. var length = children.length;
  57883. var selectedIndex = this.col.selectedIndex = Math.min(Math.max(Math.round(-y / this.optHeight), 0), length - 1);
  57884. var durationStr = (duration === 0) ? null : duration + 'ms';
  57885. var scaleStr = "scale(" + this.scaleFactor + ")";
  57886. for (i = 0; i < length; i++) {
  57887. button = children[i];
  57888. opt = this.col.options[i];
  57889. optOffset = (i * this.optHeight) + y;
  57890. visible = true;
  57891. transform = '';
  57892. if (this.rotateFactor !== 0) {
  57893. rotateX = optOffset * this.rotateFactor;
  57894. if (Math.abs(rotateX) > 90) {
  57895. visible = false;
  57896. }
  57897. else {
  57898. translateX = 0;
  57899. translateY = 0;
  57900. translateZ = 90;
  57901. transform = "rotateX(" + rotateX + "deg) ";
  57902. }
  57903. }
  57904. else {
  57905. translateX = 0;
  57906. translateZ = 0;
  57907. translateY = optOffset;
  57908. if (Math.abs(translateY) > 170) {
  57909. visible = false;
  57910. }
  57911. }
  57912. selected = selectedIndex === i;
  57913. if (visible) {
  57914. transform += "translate3d(0px," + translateY + "px," + translateZ + "px) ";
  57915. if (this.scaleFactor !== 1 && !selected) {
  57916. transform += scaleStr;
  57917. }
  57918. }
  57919. else {
  57920. transform = 'translate3d(-9999px,0px,0px)';
  57921. }
  57922. // Update transition duration
  57923. if (duration !== opt._dur) {
  57924. opt._dur = duration;
  57925. button.style[this._plt.Css.transitionDuration] = durationStr;
  57926. }
  57927. // Update transform
  57928. if (transform !== opt._trans) {
  57929. opt._trans = transform;
  57930. button.style[this._plt.Css.transform] = transform;
  57931. }
  57932. // Update selected item
  57933. if (selected !== opt._selected) {
  57934. opt._selected = selected;
  57935. if (selected) {
  57936. button.classList.add(__WEBPACK_IMPORTED_MODULE_5__picker_options__["d" /* PICKER_OPT_SELECTED */]);
  57937. }
  57938. else {
  57939. button.classList.remove(__WEBPACK_IMPORTED_MODULE_5__picker_options__["d" /* PICKER_OPT_SELECTED */]);
  57940. }
  57941. }
  57942. }
  57943. this.col.prevSelected = selectedIndex;
  57944. if (saveY) {
  57945. this.y = y;
  57946. }
  57947. if (emitChange) {
  57948. if (this.lastIndex === undefined) {
  57949. // have not set a last index yet
  57950. this.lastIndex = this.col.selectedIndex;
  57951. }
  57952. else if (this.lastIndex !== this.col.selectedIndex) {
  57953. // new selected index has changed from the last index
  57954. // update the lastIndex and emit that it has changed
  57955. this.lastIndex = this.col.selectedIndex;
  57956. var ionChange = this.ionChange;
  57957. if (ionChange.observers.length > 0) {
  57958. this._zone.run(ionChange.emit.bind(ionChange, this.col.options[this.col.selectedIndex]));
  57959. }
  57960. }
  57961. }
  57962. };
  57963. PickerColumnCmp.prototype.refresh = function () {
  57964. var min = this.col.options.length - 1;
  57965. var max = 0;
  57966. var options = this.col.options;
  57967. for (var i = 0; i < options.length; i++) {
  57968. if (!options[i].disabled) {
  57969. min = Math.min(min, i);
  57970. max = Math.max(max, i);
  57971. }
  57972. }
  57973. var selectedIndex = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["a" /* clamp */])(min, this.col.selectedIndex, max);
  57974. if (this.col.prevSelected !== selectedIndex) {
  57975. var y = (selectedIndex * this.optHeight) * -1;
  57976. this._plt.cancelRaf(this.rafId);
  57977. this.velocity = 0;
  57978. this.update(y, 150, true, false);
  57979. }
  57980. };
  57981. PickerColumnCmp.decorators = [
  57982. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  57983. selector: '.picker-col',
  57984. template: '<div *ngIf="col.prefix" class="picker-prefix" [style.width]="col.prefixWidth">{{col.prefix}}</div>' +
  57985. '<div class="picker-opts" #colEle [style.max-width]="col.optionsWidth">' +
  57986. '<button *ngFor="let o of col.options; let i=index"' +
  57987. '[class.picker-opt-disabled]="o.disabled" ' +
  57988. 'class="picker-opt" disable-activated (click)="optClick($event, i)">' +
  57989. '{{o.text}}' +
  57990. '</button>' +
  57991. '</div>' +
  57992. '<div *ngIf="col.suffix" class="picker-suffix" [style.width]="col.suffixWidth">{{col.suffix}}</div>',
  57993. host: {
  57994. '[style.max-width]': 'col.columnWidth',
  57995. '[class.picker-opts-left]': 'col.align=="left"',
  57996. '[class.picker-opts-right]': 'col.align=="right"',
  57997. }
  57998. },] },
  57999. ];
  58000. /** @nocollapse */
  58001. PickerColumnCmp.ctorParameters = function () { return [
  58002. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  58003. { type: __WEBPACK_IMPORTED_MODULE_6__platform_platform__["a" /* Platform */], },
  58004. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58005. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  58006. { type: __WEBPACK_IMPORTED_MODULE_4__tap_click_haptic__["a" /* Haptic */], },
  58007. { type: __WEBPACK_IMPORTED_MODULE_6__platform_platform__["a" /* Platform */], },
  58008. { type: __WEBPACK_IMPORTED_MODULE_3__platform_dom_controller__["a" /* DomController */], },
  58009. ]; };
  58010. PickerColumnCmp.propDecorators = {
  58011. 'colEle': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['colEle',] },],
  58012. 'col': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  58013. 'ionChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  58014. };
  58015. return PickerColumnCmp;
  58016. }());
  58017. //# sourceMappingURL=picker-column.js.map
  58018. /***/ }),
  58019. /* 104 */
  58020. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58021. "use strict";
  58022. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FabList; });
  58023. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58024. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  58025. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  58026. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_platform__ = __webpack_require__(7);
  58027. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__fab__ = __webpack_require__(72);
  58028. /**
  58029. * @name FabList
  58030. * @description
  58031. * `ion-fab-list` is a container for multiple FAB buttons. They are components of `ion-fab` and allow you to specificy the buttons position, left, right, top, bottom.
  58032. * @usage
  58033. *
  58034. * ```html
  58035. * <ion-fab bottom right >
  58036. * <button ion-fab>Share</button>
  58037. * <ion-fab-list side="top">
  58038. * <button ion-fab>Facebook</button>
  58039. * <button ion-fab>Twitter</button>
  58040. * <button ion-fab>Youtube</button>
  58041. * </ion-fab-list>
  58042. * <ion-fab-list side="left">
  58043. * <button ion-fab>Vimeo</button>
  58044. * </ion-fab-list>
  58045. * </ion-fab>
  58046. * ```
  58047. * @module ionic
  58048. *
  58049. * @demo /docs/demos/src/fab/
  58050. * @see {@link /docs/components#fab Fab Component Docs}
  58051. */
  58052. var FabList = (function () {
  58053. function FabList(_elementRef, _renderer, config, _plt) {
  58054. this._elementRef = _elementRef;
  58055. this._renderer = _renderer;
  58056. this._plt = _plt;
  58057. this._visible = false;
  58058. this._fabs = [];
  58059. this._mode = config.get('mode');
  58060. }
  58061. Object.defineProperty(FabList.prototype, "_setbuttons", {
  58062. set: function (query) {
  58063. var fabs = this._fabs = query.toArray();
  58064. var className = "fab-" + this._mode + "-in-list";
  58065. for (var _i = 0, fabs_1 = fabs; _i < fabs_1.length; _i++) {
  58066. var fab = fabs_1[_i];
  58067. fab.setElementClass('fab-in-list', true);
  58068. fab.setElementClass(className, true);
  58069. }
  58070. },
  58071. enumerable: true,
  58072. configurable: true
  58073. });
  58074. /**
  58075. * @hidden
  58076. */
  58077. FabList.prototype.setVisible = function (val) {
  58078. var _this = this;
  58079. var visible = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["o" /* isTrueProperty */])(val);
  58080. if (visible === this._visible) {
  58081. return;
  58082. }
  58083. this._visible = visible;
  58084. var fabs = this._fabs;
  58085. var i = 1;
  58086. if (visible) {
  58087. fabs.forEach(function (fab) {
  58088. _this._plt.timeout(function () { return fab.setElementClass('show', true); }, i * 30);
  58089. i++;
  58090. });
  58091. }
  58092. else {
  58093. fabs.forEach(function (fab) { return fab.setElementClass('show', false); });
  58094. }
  58095. this.setElementClass('fab-list-active', visible);
  58096. };
  58097. /**
  58098. * @internal
  58099. */
  58100. FabList.prototype.setElementClass = function (className, add) {
  58101. this._renderer.setElementClass(this._elementRef.nativeElement, className, add);
  58102. };
  58103. FabList.decorators = [
  58104. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  58105. selector: 'ion-fab-list',
  58106. },] },
  58107. ];
  58108. /** @nocollapse */
  58109. FabList.ctorParameters = function () { return [
  58110. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58111. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  58112. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  58113. { type: __WEBPACK_IMPORTED_MODULE_3__platform_platform__["a" /* Platform */], },
  58114. ]; };
  58115. FabList.propDecorators = {
  58116. '_setbuttons': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_4__fab__["a" /* FabButton */],] },],
  58117. };
  58118. return FabList;
  58119. }());
  58120. //# sourceMappingURL=fab-list.js.map
  58121. /***/ }),
  58122. /* 105 */
  58123. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58124. "use strict";
  58125. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return InfiniteScroll; });
  58126. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58127. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__content_content__ = __webpack_require__(31);
  58128. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__ = __webpack_require__(15);
  58129. /**
  58130. * @name InfiniteScroll
  58131. * @description
  58132. * The Infinite Scroll allows you to perform an action when the user
  58133. * scrolls a specified distance from the bottom or top of the page.
  58134. *
  58135. * The expression assigned to the `infinite` event is called when
  58136. * the user scrolls to the specified distance. When this expression
  58137. * has finished its tasks, it should call the `complete()` method
  58138. * on the infinite scroll instance.
  58139. *
  58140. * @usage
  58141. * ```html
  58142. * <ion-content>
  58143. *
  58144. * <ion-list>
  58145. * <ion-item *ngFor="let i of items">{% raw %}{{i}}{% endraw %}</ion-item>
  58146. * </ion-list>
  58147. *
  58148. * <ion-infinite-scroll (ionInfinite)="doInfinite($event)">
  58149. * <ion-infinite-scroll-content></ion-infinite-scroll-content>
  58150. * </ion-infinite-scroll>
  58151. *
  58152. * </ion-content>
  58153. * ```
  58154. *
  58155. * ```ts
  58156. * @Component({...})
  58157. * export class NewsFeedPage {
  58158. * items = [];
  58159. *
  58160. * constructor() {
  58161. * for (let i = 0; i < 30; i++) {
  58162. * this.items.push( this.items.length );
  58163. * }
  58164. * }
  58165. *
  58166. * doInfinite(infiniteScroll) {
  58167. * console.log('Begin async operation');
  58168. *
  58169. * setTimeout(() => {
  58170. * for (let i = 0; i < 30; i++) {
  58171. * this.items.push( this.items.length );
  58172. * }
  58173. *
  58174. * console.log('Async operation has ended');
  58175. * infiniteScroll.complete();
  58176. * }, 500);
  58177. * }
  58178. *
  58179. * }
  58180. * ```
  58181. *
  58182. * ## `waitFor` method of InfiniteScroll
  58183. *
  58184. * In case if your async operation returns promise you can utilize
  58185. * `waitFor` method inside your template.
  58186. *
  58187. * ```html
  58188. * <ion-content>
  58189. *
  58190. * <ion-list>
  58191. * <ion-item *ngFor="let item of items">{{item}}</ion-item>
  58192. * </ion-list>
  58193. *
  58194. * <ion-infinite-scroll (ionInfinite)="$event.waitFor(doInfinite())">
  58195. * <ion-infinite-scroll-content></ion-infinite-scroll-content>
  58196. * </ion-infinite-scroll>
  58197. *
  58198. * </ion-content>
  58199. * ```
  58200. *
  58201. * ```ts
  58202. * @Component({...})
  58203. * export class NewsFeedPage {
  58204. * items = [];
  58205. *
  58206. * constructor() {
  58207. * for (var i = 0; i < 30; i++) {
  58208. * this.items.push( this.items.length );
  58209. * }
  58210. * }
  58211. *
  58212. * doInfinite(): Promise<any> {
  58213. * console.log('Begin async operation');
  58214. *
  58215. * return new Promise((resolve) => {
  58216. * setTimeout(() => {
  58217. * for (var i = 0; i < 30; i++) {
  58218. * this.items.push( this.items.length );
  58219. * }
  58220. *
  58221. * console.log('Async operation has ended');
  58222. * resolve();
  58223. * }, 500);
  58224. * })
  58225. * }
  58226. * }
  58227. * ```
  58228. *
  58229. * ## Infinite Scroll Content
  58230. *
  58231. * By default, Ionic uses the infinite scroll spinner that looks
  58232. * best for the platform the user is on. However, you can change the
  58233. * default spinner or add text by adding properties to the
  58234. * `ion-infinite-scroll-content` component.
  58235. *
  58236. * ```html
  58237. * <ion-content>
  58238. *
  58239. * <ion-infinite-scroll (ionInfinite)="doInfinite($event)">
  58240. * <ion-infinite-scroll-content
  58241. * loadingSpinner="bubbles"
  58242. * loadingText="Loading more data...">
  58243. * </ion-infinite-scroll-content>
  58244. * </ion-infinite-scroll>
  58245. *
  58246. * </ion-content>
  58247. * ```
  58248. *
  58249. *
  58250. * ## Further Customizing Infinite Scroll Content
  58251. *
  58252. * The `ion-infinite-scroll` component holds the infinite scroll logic.
  58253. * It requires a child component in order to display the content.
  58254. * Ionic uses `ion-infinite-scroll-content` by default. This component
  58255. * displays the infinite scroll and changes the look depending
  58256. * on the infinite scroll's state. Separating these components allows
  58257. * developers to create their own infinite scroll content components.
  58258. * You could replace our default content with custom SVG or CSS animations.
  58259. *
  58260. * @demo /docs/demos/src/infinite-scroll/
  58261. *
  58262. */
  58263. var InfiniteScroll = (function () {
  58264. function InfiniteScroll(_content, _zone, _elementRef, _dom) {
  58265. this._content = _content;
  58266. this._zone = _zone;
  58267. this._elementRef = _elementRef;
  58268. this._dom = _dom;
  58269. this._lastCheck = 0;
  58270. this._highestY = 0;
  58271. this._thr = '15%';
  58272. this._thrPx = 0;
  58273. this._thrPc = 0.15;
  58274. this._position = POSITION_BOTTOM;
  58275. this._init = false;
  58276. /**
  58277. * @internal
  58278. */
  58279. this.state = STATE_ENABLED;
  58280. /**
  58281. * @output {event} Emitted when the scroll reaches
  58282. * the threshold distance. From within your infinite handler,
  58283. * you must call the infinite scroll's `complete()` method when
  58284. * your async operation has completed.
  58285. */
  58286. this.ionInfinite = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  58287. _content.setElementClass('has-infinite-scroll', true);
  58288. }
  58289. Object.defineProperty(InfiniteScroll.prototype, "threshold", {
  58290. /**
  58291. * @input {string} The threshold distance from the bottom
  58292. * of the content to call the `infinite` output event when scrolled.
  58293. * The threshold value can be either a percent, or
  58294. * in pixels. For example, use the value of `10%` for the `infinite`
  58295. * output event to get called when the user has scrolled 10%
  58296. * from the bottom of the page. Use the value `100px` when the
  58297. * scroll is within 100 pixels from the bottom of the page.
  58298. * Default is `15%`.
  58299. */
  58300. get: function () {
  58301. return this._thr;
  58302. },
  58303. set: function (val) {
  58304. this._thr = val;
  58305. if (val.indexOf('%') > -1) {
  58306. this._thrPx = 0;
  58307. this._thrPc = (parseFloat(val) / 100);
  58308. }
  58309. else {
  58310. this._thrPx = parseFloat(val);
  58311. this._thrPc = 0;
  58312. }
  58313. },
  58314. enumerable: true,
  58315. configurable: true
  58316. });
  58317. Object.defineProperty(InfiniteScroll.prototype, "enabled", {
  58318. /**
  58319. * @input {boolean} If true, Whether or not the infinite scroll should be
  58320. * enabled or not. Setting to `false` will remove scroll event listeners
  58321. * and hide the display.
  58322. */
  58323. set: function (shouldEnable) {
  58324. this.enable(shouldEnable);
  58325. },
  58326. enumerable: true,
  58327. configurable: true
  58328. });
  58329. Object.defineProperty(InfiniteScroll.prototype, "position", {
  58330. /**
  58331. * @input {string} The position of the infinite scroll element.
  58332. * The value can be either `top` or `bottom`.
  58333. * Default is `bottom`.
  58334. */
  58335. get: function () {
  58336. return this._position;
  58337. },
  58338. set: function (val) {
  58339. if (val === POSITION_TOP || val === POSITION_BOTTOM) {
  58340. this._position = val;
  58341. }
  58342. else {
  58343. console.error("Invalid value for ion-infinite-scroll's position input. Its value should be '" + POSITION_BOTTOM + "' or '" + POSITION_TOP + "'.");
  58344. }
  58345. },
  58346. enumerable: true,
  58347. configurable: true
  58348. });
  58349. InfiniteScroll.prototype._onScroll = function (ev) {
  58350. var _this = this;
  58351. if (this.state === STATE_LOADING || this.state === STATE_DISABLED) {
  58352. return 1;
  58353. }
  58354. if (this._lastCheck + 32 > ev.timeStamp) {
  58355. // no need to check less than every XXms
  58356. return 2;
  58357. }
  58358. this._lastCheck = ev.timeStamp;
  58359. // ******** DOM READ ****************
  58360. var infiniteHeight = this._elementRef.nativeElement.scrollHeight;
  58361. if (!infiniteHeight) {
  58362. // if there is no height of this element then do nothing
  58363. return 3;
  58364. }
  58365. // ******** DOM READ ****************
  58366. var d = this._content.getContentDimensions();
  58367. var height = d.contentHeight;
  58368. var threshold = this._thrPc ? (height * this._thrPc) : this._thrPx;
  58369. // ******** DOM READS ABOVE / DOM WRITES BELOW ****************
  58370. var distanceFromInfinite;
  58371. if (this._position === POSITION_BOTTOM) {
  58372. distanceFromInfinite = d.scrollHeight - infiniteHeight - d.scrollTop - height - threshold;
  58373. }
  58374. else {
  58375. (void 0) /* assert */;
  58376. distanceFromInfinite = d.scrollTop - infiniteHeight - threshold;
  58377. }
  58378. if (distanceFromInfinite < 0) {
  58379. // ******** DOM WRITE ****************
  58380. this._dom.write(function () {
  58381. _this._zone.run(function () {
  58382. if (_this.state !== STATE_LOADING && _this.state !== STATE_DISABLED) {
  58383. _this.state = STATE_LOADING;
  58384. _this.ionInfinite.emit(_this);
  58385. }
  58386. });
  58387. });
  58388. return 5;
  58389. }
  58390. return 6;
  58391. };
  58392. /**
  58393. * Call `complete()` within the `infinite` output event handler when
  58394. * your async operation has completed. For example, the `loading`
  58395. * state is while the app is performing an asynchronous operation,
  58396. * such as receiving more data from an AJAX request to add more items
  58397. * to a data list. Once the data has been received and UI updated, you
  58398. * then call this method to signify that the loading has completed.
  58399. * This method will change the infinite scroll's state from `loading`
  58400. * to `enabled`.
  58401. */
  58402. InfiniteScroll.prototype.complete = function () {
  58403. var _this = this;
  58404. if (this.state !== STATE_LOADING) {
  58405. return;
  58406. }
  58407. if (this._position === POSITION_BOTTOM) {
  58408. this.state = STATE_ENABLED;
  58409. return;
  58410. }
  58411. (void 0) /* assert */;
  58412. /* New content is being added at the top, but the scrollTop position stays the same,
  58413. which causes a scroll jump visually. This algorithm makes sure to prevent this.
  58414. (Frame 1)
  58415. complete() is called, but the UI hasn't had time to update yet.
  58416. Save the current content dimensions.
  58417. Wait for the next frame using _dom.read, so the UI will be updated.
  58418. (Frame 2)
  58419. Read the new content dimensions.
  58420. Calculate the height difference and the new scroll position.
  58421. Delay the scroll position change until other possible dom reads are done using _dom.write to be performant.
  58422. (Still frame 2, if I'm correct)
  58423. Change the scroll position (= visually maintain the scroll position).
  58424. Change the state to re-enable the InfiniteScroll. This should be after changing the scroll position, or it could cause the InfiniteScroll to be triggered again immediately.
  58425. (Frame 3)
  58426. Done.
  58427. */
  58428. // ******** DOM READ ****************
  58429. // Save the current content dimensions before the UI updates
  58430. var prevDim = this._content.getContentDimensions();
  58431. // ******** DOM READ ****************
  58432. this._dom.read(function () {
  58433. // UI has updated, save the new content dimensions
  58434. var newDim = _this._content.getContentDimensions();
  58435. // New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
  58436. var newScrollTop = newDim.scrollHeight - (prevDim.scrollHeight - prevDim.scrollTop);
  58437. // ******** DOM WRITE ****************
  58438. _this._dom.write(function () {
  58439. _this._content.scrollTop = newScrollTop;
  58440. _this.state = STATE_ENABLED;
  58441. });
  58442. });
  58443. };
  58444. /**
  58445. * Pass a promise inside `waitFor()` within the `infinite` output event handler in order to
  58446. * change state of infiniteScroll to "complete"
  58447. */
  58448. InfiniteScroll.prototype.waitFor = function (action) {
  58449. var enable = this.complete.bind(this);
  58450. action.then(enable, enable);
  58451. };
  58452. /**
  58453. * Call `enable(false)` to disable the infinite scroll from actively
  58454. * trying to receive new data while scrolling. This method is useful
  58455. * when it is known that there is no more data that can be added, and
  58456. * the infinite scroll is no longer needed.
  58457. * @param {boolean} shouldEnable If the infinite scroll should be
  58458. * enabled or not. Setting to `false` will remove scroll event listeners
  58459. * and hide the display.
  58460. */
  58461. InfiniteScroll.prototype.enable = function (shouldEnable) {
  58462. this.state = (shouldEnable ? STATE_ENABLED : STATE_DISABLED);
  58463. this._setListeners(shouldEnable);
  58464. };
  58465. /**
  58466. * @hidden
  58467. */
  58468. InfiniteScroll.prototype._setListeners = function (shouldListen) {
  58469. if (this._init) {
  58470. if (shouldListen) {
  58471. if (!this._scLsn) {
  58472. this._scLsn = this._content.ionScroll.subscribe(this._onScroll.bind(this));
  58473. }
  58474. }
  58475. else {
  58476. this._scLsn && this._scLsn.unsubscribe();
  58477. this._scLsn = null;
  58478. }
  58479. }
  58480. };
  58481. /**
  58482. * @hidden
  58483. */
  58484. InfiniteScroll.prototype.ngAfterContentInit = function () {
  58485. this._init = true;
  58486. this._setListeners(this.state !== STATE_DISABLED);
  58487. if (this._position === POSITION_TOP) {
  58488. this._content.scrollDownOnLoad = true;
  58489. }
  58490. };
  58491. /**
  58492. * @hidden
  58493. */
  58494. InfiniteScroll.prototype.ngOnDestroy = function () {
  58495. this._setListeners(false);
  58496. };
  58497. InfiniteScroll.decorators = [
  58498. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  58499. selector: 'ion-infinite-scroll'
  58500. },] },
  58501. ];
  58502. /** @nocollapse */
  58503. InfiniteScroll.ctorParameters = function () { return [
  58504. { type: __WEBPACK_IMPORTED_MODULE_1__content_content__["a" /* Content */], },
  58505. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  58506. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58507. { type: __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__["a" /* DomController */], },
  58508. ]; };
  58509. InfiniteScroll.propDecorators = {
  58510. 'threshold': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  58511. 'enabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  58512. 'position': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  58513. 'ionInfinite': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  58514. };
  58515. return InfiniteScroll;
  58516. }());
  58517. var STATE_ENABLED = 'enabled';
  58518. var STATE_DISABLED = 'disabled';
  58519. var STATE_LOADING = 'loading';
  58520. var POSITION_TOP = 'top';
  58521. var POSITION_BOTTOM = 'bottom';
  58522. //# sourceMappingURL=infinite-scroll.js.map
  58523. /***/ }),
  58524. /* 106 */
  58525. /***/ (function(module, exports, __webpack_require__) {
  58526. "use strict";
  58527. var Observable_1 = __webpack_require__(0);
  58528. var takeUntil_1 = __webpack_require__(369);
  58529. Observable_1.Observable.prototype.takeUntil = takeUntil_1.takeUntil;
  58530. //# sourceMappingURL=takeUntil.js.map
  58531. /***/ }),
  58532. /* 107 */
  58533. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58534. "use strict";
  58535. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemOptions; });
  58536. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58537. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_platform__ = __webpack_require__(7);
  58538. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  58539. /**
  58540. * @name ItemOptions
  58541. * @description
  58542. * The option buttons for an `ion-item-sliding`. These buttons can be placed either on the left or right side.
  58543. * You can combine the `(ionSwipe)` event plus the `expandable` directive to create a full swipe action for the item.
  58544. *
  58545. * @usage
  58546. *
  58547. * ```html
  58548. * <ion-item-sliding>
  58549. * <ion-item>
  58550. * Item 1
  58551. * </ion-item>
  58552. * <ion-item-options side="right" (ionSwipe)="saveItem(item)">
  58553. * <button ion-button expandable (click)="saveItem(item)">
  58554. * <ion-icon name="star"></ion-icon>
  58555. * </button>
  58556. * </ion-item-options>
  58557. * </ion-item-sliding>
  58558. *```
  58559. */
  58560. var ItemOptions = (function () {
  58561. function ItemOptions(_elementRef, _plt) {
  58562. this._elementRef = _elementRef;
  58563. this._plt = _plt;
  58564. /**
  58565. * @output {event} Emitted when the item has been fully swiped.
  58566. */
  58567. this.ionSwipe = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  58568. }
  58569. /**
  58570. * @hidden
  58571. */
  58572. ItemOptions.prototype.isRightSide = function () {
  58573. return Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["m" /* isRightSide */])(this.side, this._plt.isRTL, true);
  58574. };
  58575. /**
  58576. * @hidden
  58577. */
  58578. ItemOptions.prototype.width = function () {
  58579. return this._elementRef.nativeElement.offsetWidth;
  58580. };
  58581. ItemOptions.decorators = [
  58582. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  58583. selector: 'ion-item-options',
  58584. },] },
  58585. ];
  58586. /** @nocollapse */
  58587. ItemOptions.ctorParameters = function () { return [
  58588. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58589. { type: __WEBPACK_IMPORTED_MODULE_1__platform_platform__["a" /* Platform */], },
  58590. ]; };
  58591. ItemOptions.propDecorators = {
  58592. 'side': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  58593. 'ionSwipe': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  58594. };
  58595. return ItemOptions;
  58596. }());
  58597. //# sourceMappingURL=item-options.js.map
  58598. /***/ }),
  58599. /* 108 */
  58600. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58601. "use strict";
  58602. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return List; });
  58603. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58604. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  58605. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__ = __webpack_require__(15);
  58606. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__ = __webpack_require__(13);
  58607. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__ion__ = __webpack_require__(8);
  58608. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_util__ = __webpack_require__(3);
  58609. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__item_item_sliding_gesture__ = __webpack_require__(370);
  58610. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__platform_platform__ = __webpack_require__(7);
  58611. var __extends = (this && this.__extends) || (function () {
  58612. var extendStatics = Object.setPrototypeOf ||
  58613. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  58614. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  58615. return function (d, b) {
  58616. extendStatics(d, b);
  58617. function __() { this.constructor = d; }
  58618. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  58619. };
  58620. })();
  58621. /**
  58622. * The List is a widely used interface element in almost any mobile app,
  58623. * and can include content ranging from basic text all the way to
  58624. * buttons, toggles, icons, and thumbnails.
  58625. *
  58626. * Both the list, which contains items, and the list items themselves
  58627. * can be any HTML element.
  58628. *
  58629. * Using the List and Item components make it easy to support various
  58630. * interaction modes such as swipe to edit, drag to reorder, and
  58631. * removing items.
  58632. *
  58633. * @demo /docs/demos/src/list/
  58634. * @see {@link /docs/components#lists List Component Docs}
  58635. * @advanced
  58636. *
  58637. * Enable the sliding items.
  58638. *
  58639. * ```ts
  58640. * import { Component, ViewChild } from '@angular/core';
  58641. * import { List } from 'ionic-angular';
  58642. *
  58643. * @Component({...})
  58644. * export class MyClass {
  58645. * @ViewChild(List) list: List;
  58646. *
  58647. * constructor() { }
  58648. *
  58649. * stopSliding() {
  58650. * this.list.enableSlidingItems(false);
  58651. * }
  58652. * }
  58653. * ```
  58654. *
  58655. */
  58656. var List = (function (_super) {
  58657. __extends(List, _super);
  58658. function List(config, elementRef, renderer, _plt, _gestureCtrl, _domCtrl) {
  58659. var _this = _super.call(this, config, elementRef, renderer, 'list') || this;
  58660. _this._plt = _plt;
  58661. _this._gestureCtrl = _gestureCtrl;
  58662. _this._domCtrl = _domCtrl;
  58663. _this._enableSliding = true;
  58664. _this._containsSlidingItems = false;
  58665. return _this;
  58666. }
  58667. Object.defineProperty(List.prototype, "sliding", {
  58668. /**
  58669. * @input {boolean} If true, the sliding items will be enabled.
  58670. */
  58671. get: function () {
  58672. return this._enableSliding;
  58673. },
  58674. set: function (val) {
  58675. this._enableSliding = Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["o" /* isTrueProperty */])(val);
  58676. this._updateSlidingState();
  58677. },
  58678. enumerable: true,
  58679. configurable: true
  58680. });
  58681. /**
  58682. * @hidden
  58683. */
  58684. List.prototype.containsSlidingItem = function (contains) {
  58685. this._containsSlidingItems = contains;
  58686. this._updateSlidingState();
  58687. };
  58688. List.prototype._updateSlidingState = function () {
  58689. var shouldSlide = this._enableSliding && this._containsSlidingItems;
  58690. if (!shouldSlide) {
  58691. this._slidingGesture && this._slidingGesture.destroy();
  58692. this._slidingGesture = null;
  58693. }
  58694. else if (!this._slidingGesture) {
  58695. (void 0) /* console.debug */;
  58696. this._slidingGesture = new __WEBPACK_IMPORTED_MODULE_6__item_item_sliding_gesture__["a" /* ItemSlidingGesture */](this._plt, this, this._gestureCtrl, this._domCtrl);
  58697. this._slidingGesture.listen();
  58698. }
  58699. };
  58700. /**
  58701. * Close any sliding items that are open.
  58702. */
  58703. List.prototype.closeSlidingItems = function () {
  58704. this._slidingGesture && this._slidingGesture.closeOpened();
  58705. };
  58706. /**
  58707. * @hidden
  58708. */
  58709. List.prototype.destroy = function () {
  58710. this._slidingGesture && this._slidingGesture.destroy();
  58711. };
  58712. List.decorators = [
  58713. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  58714. selector: 'ion-list',
  58715. },] },
  58716. ];
  58717. /** @nocollapse */
  58718. List.ctorParameters = function () { return [
  58719. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  58720. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58721. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  58722. { type: __WEBPACK_IMPORTED_MODULE_7__platform_platform__["a" /* Platform */], },
  58723. { type: __WEBPACK_IMPORTED_MODULE_3__gestures_gesture_controller__["l" /* GestureController */], },
  58724. { type: __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__["a" /* DomController */], },
  58725. ]; };
  58726. List.propDecorators = {
  58727. 'sliding': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  58728. };
  58729. return List;
  58730. }(__WEBPACK_IMPORTED_MODULE_4__ion__["a" /* Ion */]));
  58731. //# sourceMappingURL=list.js.map
  58732. /***/ }),
  58733. /* 109 */
  58734. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58735. "use strict";
  58736. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ListHeader; });
  58737. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58738. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  58739. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  58740. var __extends = (this && this.__extends) || (function () {
  58741. var extendStatics = Object.setPrototypeOf ||
  58742. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  58743. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  58744. return function (d, b) {
  58745. extendStatics(d, b);
  58746. function __() { this.constructor = d; }
  58747. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  58748. };
  58749. })();
  58750. /**
  58751. * @hidden
  58752. */
  58753. var ListHeader = (function (_super) {
  58754. __extends(ListHeader, _super);
  58755. function ListHeader(config, renderer, elementRef, _id) {
  58756. var _this = _super.call(this, config, elementRef, renderer, 'list-header') || this;
  58757. _this._id = _id;
  58758. return _this;
  58759. }
  58760. Object.defineProperty(ListHeader.prototype, "id", {
  58761. get: function () {
  58762. return this._id;
  58763. },
  58764. set: function (val) {
  58765. this._id = val;
  58766. this.setElementAttribute('id', val);
  58767. },
  58768. enumerable: true,
  58769. configurable: true
  58770. });
  58771. ListHeader.decorators = [
  58772. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  58773. selector: 'ion-list-header'
  58774. },] },
  58775. ];
  58776. /** @nocollapse */
  58777. ListHeader.ctorParameters = function () { return [
  58778. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  58779. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  58780. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58781. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['id',] },] },
  58782. ]; };
  58783. return ListHeader;
  58784. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  58785. //# sourceMappingURL=list-header.js.map
  58786. /***/ }),
  58787. /* 110 */
  58788. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58789. "use strict";
  58790. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoadingCmp; });
  58791. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58792. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  58793. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__ = __webpack_require__(13);
  58794. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  58795. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_key__ = __webpack_require__(30);
  58796. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__navigation_nav_params__ = __webpack_require__(23);
  58797. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__navigation_view_controller__ = __webpack_require__(9);
  58798. /**
  58799. * @hidden
  58800. */
  58801. var LoadingCmp = (function () {
  58802. function LoadingCmp(_viewCtrl, _config, _elementRef, gestureCtrl, params, renderer) {
  58803. this._viewCtrl = _viewCtrl;
  58804. this._config = _config;
  58805. (void 0) /* assert */;
  58806. this.gestureBlocker = gestureCtrl.createBlocker(__WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__["a" /* BLOCK_ALL */]);
  58807. this.d = params.data;
  58808. renderer.setElementClass(_elementRef.nativeElement, "loading-" + _config.get('mode'), true);
  58809. if (this.d.cssClass) {
  58810. this.d.cssClass.split(' ').forEach(function (cssClass) {
  58811. // Make sure the class isn't whitespace, otherwise it throws exceptions
  58812. if (cssClass.trim() !== '')
  58813. renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  58814. });
  58815. }
  58816. this.id = (++loadingIds);
  58817. }
  58818. LoadingCmp.prototype.ngOnInit = function () {
  58819. // If no spinner was passed in loading options we need to fall back
  58820. // to the loadingSpinner in the app's config, then the mode spinner
  58821. if (Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["p" /* isUndefined */])(this.d.spinner)) {
  58822. this.d.spinner = this._config.get('loadingSpinner', this._config.get('spinner', 'ios'));
  58823. }
  58824. // If the user passed hide to the spinner we don't want to show it
  58825. this.showSpinner = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["h" /* isDefined */])(this.d.spinner) && this.d.spinner !== 'hide';
  58826. };
  58827. LoadingCmp.prototype.ionViewWillEnter = function () {
  58828. this.gestureBlocker.block();
  58829. };
  58830. LoadingCmp.prototype.ionViewDidLeave = function () {
  58831. this.gestureBlocker.unblock();
  58832. };
  58833. LoadingCmp.prototype.ionViewDidEnter = function () {
  58834. var _this = this;
  58835. // If there is a duration, dismiss after that amount of time
  58836. if (this.d && this.d.duration) {
  58837. this.durationTimeout = setTimeout(function () { return _this.dismiss('backdrop'); }, this.d.duration);
  58838. }
  58839. };
  58840. LoadingCmp.prototype.keyUp = function (ev) {
  58841. if (this._viewCtrl.isLast() && ev.keyCode === __WEBPACK_IMPORTED_MODULE_4__platform_key__["c" /* KEY_ESCAPE */]) {
  58842. this.bdClick();
  58843. }
  58844. };
  58845. LoadingCmp.prototype.bdClick = function () {
  58846. if (this.d.enableBackdropDismiss) {
  58847. this.dismiss('backdrop');
  58848. }
  58849. };
  58850. LoadingCmp.prototype.dismiss = function (role) {
  58851. if (this.durationTimeout) {
  58852. clearTimeout(this.durationTimeout);
  58853. }
  58854. return this._viewCtrl.dismiss(null, role);
  58855. };
  58856. LoadingCmp.prototype.ngOnDestroy = function () {
  58857. (void 0) /* assert */;
  58858. this.gestureBlocker.destroy();
  58859. };
  58860. LoadingCmp.decorators = [
  58861. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  58862. selector: 'ion-loading',
  58863. template: '<ion-backdrop [hidden]="!d.showBackdrop" (click)="bdClick()" [class.backdrop-no-tappable]="!d.enableBackdropDismiss"></ion-backdrop>' +
  58864. '<div class="loading-wrapper">' +
  58865. '<div *ngIf="showSpinner" class="loading-spinner">' +
  58866. '<ion-spinner [name]="d.spinner"></ion-spinner>' +
  58867. '</div>' +
  58868. '<div *ngIf="d.content" [innerHTML]="d.content" class="loading-content"></div>' +
  58869. '</div>',
  58870. host: {
  58871. 'role': 'dialog'
  58872. },
  58873. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  58874. },] },
  58875. ];
  58876. /** @nocollapse */
  58877. LoadingCmp.ctorParameters = function () { return [
  58878. { type: __WEBPACK_IMPORTED_MODULE_6__navigation_view_controller__["a" /* ViewController */], },
  58879. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  58880. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  58881. { type: __WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__["l" /* GestureController */], },
  58882. { type: __WEBPACK_IMPORTED_MODULE_5__navigation_nav_params__["a" /* NavParams */], },
  58883. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  58884. ]; };
  58885. LoadingCmp.propDecorators = {
  58886. 'keyUp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['body:keyup', ['$event'],] },],
  58887. };
  58888. return LoadingCmp;
  58889. }());
  58890. var loadingIds = -1;
  58891. //# sourceMappingURL=loading-component.js.map
  58892. /***/ }),
  58893. /* 111 */
  58894. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  58895. "use strict";
  58896. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Nav; });
  58897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  58898. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  58899. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  58900. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_deep_linker__ = __webpack_require__(24);
  58901. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__ = __webpack_require__(15);
  58902. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__ = __webpack_require__(13);
  58903. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__navigation_nav_controller__ = __webpack_require__(35);
  58904. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__navigation_nav_controller_base__ = __webpack_require__(69);
  58905. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__platform_platform__ = __webpack_require__(7);
  58906. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__transitions_transition_controller__ = __webpack_require__(71);
  58907. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__navigation_view_controller__ = __webpack_require__(9);
  58908. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__split_pane_split_pane__ = __webpack_require__(52);
  58909. var __extends = (this && this.__extends) || (function () {
  58910. var extendStatics = Object.setPrototypeOf ||
  58911. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  58912. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  58913. return function (d, b) {
  58914. extendStatics(d, b);
  58915. function __() { this.constructor = d; }
  58916. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  58917. };
  58918. })();
  58919. /**
  58920. * @name Nav
  58921. * @description
  58922. *
  58923. * `ion-nav` is the declarative component for a [NavController](../../../navigation/NavController/).
  58924. *
  58925. * For more information on using nav controllers like Nav or [Tab](../../Tabs/Tab/),
  58926. * take a look at the [NavController API Docs](../../../navigation/NavController/).
  58927. *
  58928. *
  58929. * @usage
  58930. * You must set a root page to be loaded initially by any Nav you create, using
  58931. * the 'root' property:
  58932. *
  58933. * ```ts
  58934. * import { Component } from '@angular/core';
  58935. * import { GettingStartedPage } from './getting-started';
  58936. *
  58937. * @Component({
  58938. * template: `<ion-nav [root]="root"></ion-nav>`
  58939. * })
  58940. * class MyApp {
  58941. * root = GettingStartedPage;
  58942. *
  58943. * constructor(){
  58944. * }
  58945. * }
  58946. * ```
  58947. *
  58948. * @demo /docs/demos/src/navigation/
  58949. * @see {@link /docs/components#navigation Navigation Component Docs}
  58950. */
  58951. var Nav = (function (_super) {
  58952. __extends(Nav, _super);
  58953. function Nav(viewCtrl, parent, app, config, plt, elementRef, zone, renderer, cfr, gestureCtrl, transCtrl, linker, domCtrl, errHandler) {
  58954. var _this = _super.call(this, parent, app, config, plt, elementRef, zone, renderer, cfr, gestureCtrl, transCtrl, linker, domCtrl, errHandler) || this;
  58955. _this._hasInit = false;
  58956. if (viewCtrl) {
  58957. // an ion-nav can also act as an ion-page within a parent ion-nav
  58958. // this would happen when an ion-nav nests a child ion-nav.
  58959. viewCtrl._setContent(_this);
  58960. }
  58961. if (parent) {
  58962. // this Nav has a parent Nav
  58963. parent.registerChildNav(_this);
  58964. }
  58965. else if (viewCtrl && viewCtrl.getNav()) {
  58966. // this Nav was opened from a modal
  58967. _this.parent = viewCtrl.getNav();
  58968. _this.parent.registerChildNav(_this);
  58969. }
  58970. else if (app && !app.getRootNavById(_this.id)) {
  58971. // a root nav has not been registered yet with the app
  58972. // this is the root navcontroller for the entire app
  58973. app.registerRootNav(_this);
  58974. }
  58975. return _this;
  58976. }
  58977. Object.defineProperty(Nav.prototype, "_vp", {
  58978. /**
  58979. * @hidden
  58980. */
  58981. set: function (val) {
  58982. this.setViewport(val);
  58983. },
  58984. enumerable: true,
  58985. configurable: true
  58986. });
  58987. Nav.prototype.ngAfterViewInit = function () {
  58988. var _this = this;
  58989. this._hasInit = true;
  58990. var segment = this._linker.getSegmentByNavIdOrName(this.id, this.name);
  58991. if (segment && (segment.component || segment.loadChildren)) {
  58992. return this._linker.initViews(segment).then(function (views) {
  58993. return _this.setPages(views, null, null);
  58994. });
  58995. }
  58996. else if (this._root) {
  58997. // no segment match, so use the root property but don't set the url I guess
  58998. var setUrl = segment ? false : true;
  58999. return this.push(this._root, this.rootParams, {
  59000. isNavRoot: (this._app.getRootNavById(this.id) === this),
  59001. updateUrl: setUrl
  59002. }, null);
  59003. }
  59004. };
  59005. Object.defineProperty(Nav.prototype, "root", {
  59006. /**
  59007. * @input {Page} The Page component to load as the root page within this nav.
  59008. */
  59009. get: function () {
  59010. return this._root;
  59011. },
  59012. set: function (page) {
  59013. this._root = page;
  59014. if (this._hasInit) {
  59015. this.setRoot(page);
  59016. }
  59017. },
  59018. enumerable: true,
  59019. configurable: true
  59020. });
  59021. /**
  59022. * @hidden
  59023. */
  59024. Nav.prototype.ngOnDestroy = function () {
  59025. this.destroy();
  59026. };
  59027. Nav.prototype.initPane = function () {
  59028. var isMain = this._elementRef.nativeElement.hasAttribute('main');
  59029. return isMain;
  59030. };
  59031. Nav.prototype.paneChanged = function (isPane) {
  59032. if (isPane) {
  59033. this.resize();
  59034. }
  59035. };
  59036. Nav.prototype.goToRoot = function (opts) {
  59037. return this.setRoot(this._root, this.rootParams, opts, null);
  59038. };
  59039. /*
  59040. * @private
  59041. */
  59042. Nav.prototype.getType = function () {
  59043. return 'nav';
  59044. };
  59045. /*
  59046. * @private
  59047. */
  59048. Nav.prototype.getSecondaryIdentifier = function () {
  59049. return null;
  59050. };
  59051. Nav.decorators = [
  59052. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  59053. selector: 'ion-nav',
  59054. template: '<div #viewport nav-viewport></div>' +
  59055. '<div class="nav-decor"></div>',
  59056. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  59057. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_11__split_pane_split_pane__["a" /* RootNode */], useExisting: Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return Nav; }) }]
  59058. },] },
  59059. ];
  59060. /** @nocollapse */
  59061. Nav.ctorParameters = function () { return [
  59062. { type: __WEBPACK_IMPORTED_MODULE_10__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  59063. { type: __WEBPACK_IMPORTED_MODULE_6__navigation_nav_controller__["a" /* NavController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  59064. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  59065. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  59066. { type: __WEBPACK_IMPORTED_MODULE_8__platform_platform__["a" /* Platform */], },
  59067. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  59068. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  59069. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  59070. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */], },
  59071. { type: __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["l" /* GestureController */], },
  59072. { type: __WEBPACK_IMPORTED_MODULE_9__transitions_transition_controller__["a" /* TransitionController */], },
  59073. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_deep_linker__["a" /* DeepLinker */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  59074. { type: __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__["a" /* DomController */], },
  59075. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* ErrorHandler */], },
  59076. ]; };
  59077. Nav.propDecorators = {
  59078. '_vp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['viewport', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */] },] },],
  59079. 'root': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  59080. 'rootParams': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  59081. 'name': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  59082. };
  59083. return Nav;
  59084. }(__WEBPACK_IMPORTED_MODULE_7__navigation_nav_controller_base__["a" /* NavControllerBase */]));
  59085. //# sourceMappingURL=nav.js.map
  59086. /***/ }),
  59087. /* 112 */
  59088. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  59089. "use strict";
  59090. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ModalCmp; });
  59091. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  59092. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_key__ = __webpack_require__(30);
  59093. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__navigation_nav_params__ = __webpack_require__(23);
  59094. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  59095. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__gestures_gesture_controller__ = __webpack_require__(13);
  59096. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_module_loader__ = __webpack_require__(113);
  59097. /**
  59098. * @hidden
  59099. */
  59100. var ModalCmp = (function () {
  59101. function ModalCmp(_cfr, _renderer, _elementRef, _navParams, _viewCtrl, gestureCtrl, moduleLoader) {
  59102. this._cfr = _cfr;
  59103. this._renderer = _renderer;
  59104. this._elementRef = _elementRef;
  59105. this._navParams = _navParams;
  59106. this._viewCtrl = _viewCtrl;
  59107. this.moduleLoader = moduleLoader;
  59108. var opts = _navParams.get('opts');
  59109. (void 0) /* assert */;
  59110. this._gestureBlocker = gestureCtrl.createBlocker({
  59111. disable: [__WEBPACK_IMPORTED_MODULE_4__gestures_gesture_controller__["d" /* GESTURE_MENU_SWIPE */], __WEBPACK_IMPORTED_MODULE_4__gestures_gesture_controller__["b" /* GESTURE_GO_BACK_SWIPE */]]
  59112. });
  59113. this._bdDismiss = opts.enableBackdropDismiss;
  59114. if (opts.cssClass) {
  59115. opts.cssClass.split(' ').forEach(function (cssClass) {
  59116. // Make sure the class isn't whitespace, otherwise it throws exceptions
  59117. if (cssClass.trim() !== '')
  59118. _renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  59119. });
  59120. }
  59121. }
  59122. ModalCmp.prototype.ionViewPreLoad = function () {
  59123. var component = this._navParams.data.component;
  59124. if (!component) {
  59125. console.warn('modal\'s page was not defined');
  59126. return;
  59127. }
  59128. var cfr = this.moduleLoader.getComponentFactoryResolver(component);
  59129. if (!cfr) {
  59130. cfr = this._cfr;
  59131. }
  59132. var componentFactory = cfr.resolveComponentFactory(component);
  59133. // ******** DOM WRITE ****************
  59134. var componentRef = this._viewport.createComponent(componentFactory, this._viewport.length, this._viewport.parentInjector, []);
  59135. this._setCssClass(componentRef, 'ion-page');
  59136. this._setCssClass(componentRef, 'show-page');
  59137. // Change the viewcontroller's instance to point the user provided page
  59138. // Lifecycle events will be sent to the new instance, instead of the modal's component
  59139. // we need to manually subscribe to them
  59140. this._viewCtrl._setInstance(componentRef.instance);
  59141. this._viewCtrl.willEnter.subscribe(this._viewWillEnter.bind(this));
  59142. this._viewCtrl.didLeave.subscribe(this._viewDidLeave.bind(this));
  59143. this._enabled = true;
  59144. };
  59145. ModalCmp.prototype._viewWillEnter = function () {
  59146. this._gestureBlocker.block();
  59147. };
  59148. ModalCmp.prototype._viewDidLeave = function () {
  59149. this._gestureBlocker.unblock();
  59150. };
  59151. ModalCmp.prototype._setCssClass = function (componentRef, className) {
  59152. this._renderer.setElementClass(componentRef.location.nativeElement, className, true);
  59153. };
  59154. ModalCmp.prototype._bdClick = function () {
  59155. if (this._enabled && this._bdDismiss) {
  59156. var opts = {
  59157. minClickBlockDuration: 400
  59158. };
  59159. return this._viewCtrl.dismiss(null, 'backdrop', opts);
  59160. }
  59161. };
  59162. ModalCmp.prototype._keyUp = function (ev) {
  59163. if (this._enabled && this._viewCtrl.isLast() && ev.keyCode === __WEBPACK_IMPORTED_MODULE_1__platform_key__["c" /* KEY_ESCAPE */]) {
  59164. this._bdClick();
  59165. }
  59166. };
  59167. ModalCmp.prototype.ngOnDestroy = function () {
  59168. (void 0) /* assert */;
  59169. this._gestureBlocker.destroy();
  59170. };
  59171. ModalCmp.decorators = [
  59172. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  59173. selector: 'ion-modal',
  59174. template: '<ion-backdrop (click)="_bdClick()" [class.backdrop-no-tappable]="!_bdDismiss"></ion-backdrop>' +
  59175. '<div class="modal-wrapper">' +
  59176. '<div #viewport nav-viewport></div>' +
  59177. '</div>'
  59178. },] },
  59179. ];
  59180. /** @nocollapse */
  59181. ModalCmp.ctorParameters = function () { return [
  59182. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */], },
  59183. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  59184. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  59185. { type: __WEBPACK_IMPORTED_MODULE_2__navigation_nav_params__["a" /* NavParams */], },
  59186. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */], },
  59187. { type: __WEBPACK_IMPORTED_MODULE_4__gestures_gesture_controller__["l" /* GestureController */], },
  59188. { type: __WEBPACK_IMPORTED_MODULE_5__util_module_loader__["b" /* ModuleLoader */], },
  59189. ]; };
  59190. ModalCmp.propDecorators = {
  59191. '_viewport': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['viewport', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */] },] },],
  59192. '_keyUp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['body:keyup', ['$event'],] },],
  59193. };
  59194. return ModalCmp;
  59195. }());
  59196. //# sourceMappingURL=modal-component.js.map
  59197. /***/ }),
  59198. /* 113 */
  59199. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  59200. "use strict";
  59201. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LAZY_LOADED_TOKEN; });
  59202. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ModuleLoader; });
  59203. /* harmony export (immutable) */ __webpack_exports__["c"] = provideModuleLoader;
  59204. /* unused harmony export setupPreloadingImplementation */
  59205. /* harmony export (immutable) */ __webpack_exports__["d"] = setupPreloading;
  59206. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  59207. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ng_module_loader__ = __webpack_require__(208);
  59208. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util__ = __webpack_require__(3);
  59209. var LAZY_LOADED_TOKEN = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('LZYCMP');
  59210. /**
  59211. * @hidden
  59212. */
  59213. var ModuleLoader = (function () {
  59214. function ModuleLoader(_ngModuleLoader, _injector) {
  59215. this._ngModuleLoader = _ngModuleLoader;
  59216. this._injector = _injector;
  59217. /** @internal */
  59218. this._cfrMap = new Map();
  59219. this._promiseMap = new Map();
  59220. }
  59221. ModuleLoader.prototype.load = function (modulePath) {
  59222. var _this = this;
  59223. (void 0) /* console.time */;
  59224. var splitString = modulePath.split(SPLITTER);
  59225. var promise = this._promiseMap.get(modulePath);
  59226. if (!promise) {
  59227. promise = this._ngModuleLoader.load(splitString[0], splitString[1]);
  59228. this._promiseMap.set(modulePath, promise);
  59229. }
  59230. return promise.then(function (loadedModule) {
  59231. (void 0) /* console.timeEnd */;
  59232. var ref = loadedModule.create(_this._injector);
  59233. var component = ref.injector.get(LAZY_LOADED_TOKEN);
  59234. _this._cfrMap.set(component, ref.componentFactoryResolver);
  59235. return {
  59236. componentFactoryResolver: ref.componentFactoryResolver,
  59237. component: component
  59238. };
  59239. });
  59240. };
  59241. ModuleLoader.prototype.getComponentFactoryResolver = function (component) {
  59242. return this._cfrMap.get(component);
  59243. };
  59244. ModuleLoader.decorators = [
  59245. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  59246. ];
  59247. /** @nocollapse */
  59248. ModuleLoader.ctorParameters = function () { return [
  59249. { type: __WEBPACK_IMPORTED_MODULE_1__ng_module_loader__["a" /* NgModuleLoader */], },
  59250. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["C" /* Injector */], },
  59251. ]; };
  59252. return ModuleLoader;
  59253. }());
  59254. var SPLITTER = '#';
  59255. /**
  59256. * @hidden
  59257. */
  59258. function provideModuleLoader(ngModuleLoader, injector) {
  59259. return new ModuleLoader(ngModuleLoader, injector);
  59260. }
  59261. /**
  59262. * @hidden
  59263. */
  59264. function setupPreloadingImplementation(config, deepLinkConfig, moduleLoader) {
  59265. if (!deepLinkConfig || !deepLinkConfig.links || !config.getBoolean('preloadModules')) {
  59266. return Promise.resolve();
  59267. }
  59268. var linksToLoad = deepLinkConfig.links.filter(function (link) { return !!link.loadChildren && link.priority !== 'off'; });
  59269. // Load the high priority modules first
  59270. var highPriorityPromises = linksToLoad
  59271. .filter(function (link) { return link.priority === 'high'; })
  59272. .map(function (link) { return moduleLoader.load(link.loadChildren); });
  59273. return Promise.all(highPriorityPromises).then(function () {
  59274. // Load the low priority modules after the high priority are done
  59275. var lowPriorityPromises = linksToLoad
  59276. .filter(function (link) { return link.priority === 'low'; })
  59277. .map(function (link) { return moduleLoader.load(link.loadChildren); });
  59278. return Promise.all(lowPriorityPromises);
  59279. }).catch(function (err) {
  59280. console.error(err.message);
  59281. });
  59282. }
  59283. /**
  59284. * @hidden
  59285. */
  59286. function setupPreloading(config, deepLinkConfig, moduleLoader, ngZone) {
  59287. return function () {
  59288. Object(__WEBPACK_IMPORTED_MODULE_2__util__["s" /* requestIonicCallback */])(function () {
  59289. ngZone.runOutsideAngular(function () {
  59290. setupPreloadingImplementation(config, deepLinkConfig, moduleLoader);
  59291. });
  59292. });
  59293. };
  59294. }
  59295. //# sourceMappingURL=module-loader.js.map
  59296. /***/ }),
  59297. /* 114 */
  59298. /***/ (function(module, exports, __webpack_require__) {
  59299. "use strict";
  59300. var mergeAll_1 = __webpack_require__(65);
  59301. /**
  59302. * Converts a higher-order Observable into a first-order Observable by
  59303. * concatenating the inner Observables in order.
  59304. *
  59305. * <span class="informal">Flattens an Observable-of-Observables by putting one
  59306. * inner Observable after the other.</span>
  59307. *
  59308. * <img src="./img/concatAll.png" width="100%">
  59309. *
  59310. * Joins every Observable emitted by the source (a higher-order Observable), in
  59311. * a serial fashion. It subscribes to each inner Observable only after the
  59312. * previous inner Observable has completed, and merges all of their values into
  59313. * the returned observable.
  59314. *
  59315. * __Warning:__ If the source Observable emits Observables quickly and
  59316. * endlessly, and the inner Observables it emits generally complete slower than
  59317. * the source emits, you can run into memory issues as the incoming Observables
  59318. * collect in an unbounded buffer.
  59319. *
  59320. * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set
  59321. * to `1`.
  59322. *
  59323. * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
  59324. * var clicks = Rx.Observable.fromEvent(document, 'click');
  59325. * var higherOrder = clicks.map(ev => Rx.Observable.interval(1000).take(4));
  59326. * var firstOrder = higherOrder.concatAll();
  59327. * firstOrder.subscribe(x => console.log(x));
  59328. *
  59329. * // Results in the following:
  59330. * // (results are not concurrent)
  59331. * // For every click on the "document" it will emit values 0 to 3 spaced
  59332. * // on a 1000ms interval
  59333. * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
  59334. *
  59335. * @see {@link combineAll}
  59336. * @see {@link concat}
  59337. * @see {@link concatMap}
  59338. * @see {@link concatMapTo}
  59339. * @see {@link exhaust}
  59340. * @see {@link mergeAll}
  59341. * @see {@link switch}
  59342. * @see {@link zipAll}
  59343. *
  59344. * @return {Observable} An Observable emitting values from all the inner
  59345. * Observables concatenated.
  59346. * @method concatAll
  59347. * @owner Observable
  59348. */
  59349. function concatAll() {
  59350. return mergeAll_1.mergeAll(1);
  59351. }
  59352. exports.concatAll = concatAll;
  59353. //# sourceMappingURL=concatAll.js.map
  59354. /***/ }),
  59355. /* 115 */
  59356. /***/ (function(module, exports, __webpack_require__) {
  59357. "use strict";
  59358. var __extends = (this && this.__extends) || function (d, b) {
  59359. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  59360. function __() { this.constructor = d; }
  59361. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  59362. };
  59363. var isArray_1 = __webpack_require__(26);
  59364. var ArrayObservable_1 = __webpack_require__(32);
  59365. var OuterSubscriber_1 = __webpack_require__(6);
  59366. var subscribeToResult_1 = __webpack_require__(5);
  59367. function race() {
  59368. var observables = [];
  59369. for (var _i = 0; _i < arguments.length; _i++) {
  59370. observables[_i - 0] = arguments[_i];
  59371. }
  59372. // if the only argument is an array, it was most likely called with
  59373. // `race([obs1, obs2, ...])`
  59374. if (observables.length === 1) {
  59375. if (isArray_1.isArray(observables[0])) {
  59376. observables = observables[0];
  59377. }
  59378. else {
  59379. return observables[0];
  59380. }
  59381. }
  59382. return new ArrayObservable_1.ArrayObservable(observables).lift(new RaceOperator());
  59383. }
  59384. exports.race = race;
  59385. var RaceOperator = (function () {
  59386. function RaceOperator() {
  59387. }
  59388. RaceOperator.prototype.call = function (subscriber, source) {
  59389. return source.subscribe(new RaceSubscriber(subscriber));
  59390. };
  59391. return RaceOperator;
  59392. }());
  59393. exports.RaceOperator = RaceOperator;
  59394. /**
  59395. * We need this JSDoc comment for affecting ESDoc.
  59396. * @ignore
  59397. * @extends {Ignored}
  59398. */
  59399. var RaceSubscriber = (function (_super) {
  59400. __extends(RaceSubscriber, _super);
  59401. function RaceSubscriber(destination) {
  59402. _super.call(this, destination);
  59403. this.hasFirst = false;
  59404. this.observables = [];
  59405. this.subscriptions = [];
  59406. }
  59407. RaceSubscriber.prototype._next = function (observable) {
  59408. this.observables.push(observable);
  59409. };
  59410. RaceSubscriber.prototype._complete = function () {
  59411. var observables = this.observables;
  59412. var len = observables.length;
  59413. if (len === 0) {
  59414. this.destination.complete();
  59415. }
  59416. else {
  59417. for (var i = 0; i < len && !this.hasFirst; i++) {
  59418. var observable = observables[i];
  59419. var subscription = subscribeToResult_1.subscribeToResult(this, observable, observable, i);
  59420. if (this.subscriptions) {
  59421. this.subscriptions.push(subscription);
  59422. }
  59423. this.add(subscription);
  59424. }
  59425. this.observables = null;
  59426. }
  59427. };
  59428. RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  59429. if (!this.hasFirst) {
  59430. this.hasFirst = true;
  59431. for (var i = 0; i < this.subscriptions.length; i++) {
  59432. if (i !== outerIndex) {
  59433. var subscription = this.subscriptions[i];
  59434. subscription.unsubscribe();
  59435. this.remove(subscription);
  59436. }
  59437. }
  59438. this.subscriptions = null;
  59439. }
  59440. this.destination.next(innerValue);
  59441. };
  59442. return RaceSubscriber;
  59443. }(OuterSubscriber_1.OuterSubscriber));
  59444. exports.RaceSubscriber = RaceSubscriber;
  59445. //# sourceMappingURL=race.js.map
  59446. /***/ }),
  59447. /* 116 */
  59448. /***/ (function(module, exports, __webpack_require__) {
  59449. "use strict";
  59450. var __extends = (this && this.__extends) || function (d, b) {
  59451. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  59452. function __() { this.constructor = d; }
  59453. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  59454. };
  59455. var FromObservable_1 = __webpack_require__(213);
  59456. var isArray_1 = __webpack_require__(26);
  59457. var OuterSubscriber_1 = __webpack_require__(6);
  59458. var subscribeToResult_1 = __webpack_require__(5);
  59459. /* tslint:enable:max-line-length */
  59460. /**
  59461. * When any of the provided Observable emits an complete or error notification, it immediately subscribes to the next one
  59462. * that was passed.
  59463. *
  59464. * <span class="informal">Execute series of Observables no matter what, even if it means swallowing errors.</span>
  59465. *
  59466. * <img src="./img/onErrorResumeNext.png" width="100%">
  59467. *
  59468. * `onErrorResumeNext` is an operator that accepts a series of Observables, provided either directly as
  59469. * arguments or as an array. If no single Observable is provided, returned Observable will simply behave the same
  59470. * as the source.
  59471. *
  59472. * `onErrorResumeNext` returns an Observable that starts by subscribing and re-emitting values from the source Observable.
  59473. * When its stream of values ends - no matter if Observable completed or emitted an error - `onErrorResumeNext`
  59474. * will subscribe to the first Observable that was passed as an argument to the method. It will start re-emitting
  59475. * its values as well and - again - when that stream ends, `onErrorResumeNext` will proceed to subscribing yet another
  59476. * Observable in provided series, no matter if previous Observable completed or ended with an error. This will
  59477. * be happening until there is no more Observables left in the series, at which point returned Observable will
  59478. * complete - even if the last subscribed stream ended with an error.
  59479. *
  59480. * `onErrorResumeNext` can be therefore thought of as version of {@link concat} operator, which is more permissive
  59481. * when it comes to the errors emitted by its input Observables. While `concat` subscribes to the next Observable
  59482. * in series only if previous one successfully completed, `onErrorResumeNext` subscribes even if it ended with
  59483. * an error.
  59484. *
  59485. * Note that you do not get any access to errors emitted by the Observables. In particular do not
  59486. * expect these errors to appear in error callback passed to {@link subscribe}. If you want to take
  59487. * specific actions based on what error was emitted by an Observable, you should try out {@link catch} instead.
  59488. *
  59489. *
  59490. * @example <caption>Subscribe to the next Observable after map fails</caption>
  59491. * Rx.Observable.of(1, 2, 3, 0)
  59492. * .map(x => {
  59493. * if (x === 0) { throw Error(); }
  59494. return 10 / x;
  59495. * })
  59496. * .onErrorResumeNext(Rx.Observable.of(1, 2, 3))
  59497. * .subscribe(
  59498. * val => console.log(val),
  59499. * err => console.log(err), // Will never be called.
  59500. * () => console.log('that\'s it!')
  59501. * );
  59502. *
  59503. * // Logs:
  59504. * // 10
  59505. * // 5
  59506. * // 3.3333333333333335
  59507. * // 1
  59508. * // 2
  59509. * // 3
  59510. * // "that's it!"
  59511. *
  59512. * @see {@link concat}
  59513. * @see {@link catch}
  59514. *
  59515. * @param {...ObservableInput} observables Observables passed either directly or as an array.
  59516. * @return {Observable} An Observable that emits values from source Observable, but - if it errors - subscribes
  59517. * to the next passed Observable and so on, until it completes or runs out of Observables.
  59518. * @method onErrorResumeNext
  59519. * @owner Observable
  59520. */
  59521. function onErrorResumeNext() {
  59522. var nextSources = [];
  59523. for (var _i = 0; _i < arguments.length; _i++) {
  59524. nextSources[_i - 0] = arguments[_i];
  59525. }
  59526. if (nextSources.length === 1 && isArray_1.isArray(nextSources[0])) {
  59527. nextSources = nextSources[0];
  59528. }
  59529. return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
  59530. }
  59531. exports.onErrorResumeNext = onErrorResumeNext;
  59532. /* tslint:enable:max-line-length */
  59533. function onErrorResumeNextStatic() {
  59534. var nextSources = [];
  59535. for (var _i = 0; _i < arguments.length; _i++) {
  59536. nextSources[_i - 0] = arguments[_i];
  59537. }
  59538. var source = null;
  59539. if (nextSources.length === 1 && isArray_1.isArray(nextSources[0])) {
  59540. nextSources = nextSources[0];
  59541. }
  59542. source = nextSources.shift();
  59543. return new FromObservable_1.FromObservable(source, null).lift(new OnErrorResumeNextOperator(nextSources));
  59544. }
  59545. exports.onErrorResumeNextStatic = onErrorResumeNextStatic;
  59546. var OnErrorResumeNextOperator = (function () {
  59547. function OnErrorResumeNextOperator(nextSources) {
  59548. this.nextSources = nextSources;
  59549. }
  59550. OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
  59551. return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
  59552. };
  59553. return OnErrorResumeNextOperator;
  59554. }());
  59555. var OnErrorResumeNextSubscriber = (function (_super) {
  59556. __extends(OnErrorResumeNextSubscriber, _super);
  59557. function OnErrorResumeNextSubscriber(destination, nextSources) {
  59558. _super.call(this, destination);
  59559. this.destination = destination;
  59560. this.nextSources = nextSources;
  59561. }
  59562. OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) {
  59563. this.subscribeToNextSource();
  59564. };
  59565. OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) {
  59566. this.subscribeToNextSource();
  59567. };
  59568. OnErrorResumeNextSubscriber.prototype._error = function (err) {
  59569. this.subscribeToNextSource();
  59570. };
  59571. OnErrorResumeNextSubscriber.prototype._complete = function () {
  59572. this.subscribeToNextSource();
  59573. };
  59574. OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
  59575. var next = this.nextSources.shift();
  59576. if (next) {
  59577. this.add(subscribeToResult_1.subscribeToResult(this, next));
  59578. }
  59579. else {
  59580. this.destination.complete();
  59581. }
  59582. };
  59583. return OnErrorResumeNextSubscriber;
  59584. }(OuterSubscriber_1.OuterSubscriber));
  59585. //# sourceMappingURL=onErrorResumeNext.js.map
  59586. /***/ }),
  59587. /* 117 */
  59588. /***/ (function(module, exports, __webpack_require__) {
  59589. "use strict";
  59590. var mergeMap_1 = __webpack_require__(45);
  59591. /* tslint:enable:max-line-length */
  59592. /**
  59593. * Projects each source value to an Observable which is merged in the output
  59594. * Observable, in a serialized fashion waiting for each one to complete before
  59595. * merging the next.
  59596. *
  59597. * <span class="informal">Maps each value to an Observable, then flattens all of
  59598. * these inner Observables using {@link concatAll}.</span>
  59599. *
  59600. * <img src="./img/concatMap.png" width="100%">
  59601. *
  59602. * Returns an Observable that emits items based on applying a function that you
  59603. * supply to each item emitted by the source Observable, where that function
  59604. * returns an (so-called "inner") Observable. Each new inner Observable is
  59605. * concatenated with the previous inner Observable.
  59606. *
  59607. * __Warning:__ if source values arrive endlessly and faster than their
  59608. * corresponding inner Observables can complete, it will result in memory issues
  59609. * as inner Observables amass in an unbounded buffer waiting for their turn to
  59610. * be subscribed to.
  59611. *
  59612. * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set
  59613. * to `1`.
  59614. *
  59615. * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
  59616. * var clicks = Rx.Observable.fromEvent(document, 'click');
  59617. * var result = clicks.concatMap(ev => Rx.Observable.interval(1000).take(4));
  59618. * result.subscribe(x => console.log(x));
  59619. *
  59620. * // Results in the following:
  59621. * // (results are not concurrent)
  59622. * // For every click on the "document" it will emit values 0 to 3 spaced
  59623. * // on a 1000ms interval
  59624. * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
  59625. *
  59626. * @see {@link concat}
  59627. * @see {@link concatAll}
  59628. * @see {@link concatMapTo}
  59629. * @see {@link exhaustMap}
  59630. * @see {@link mergeMap}
  59631. * @see {@link switchMap}
  59632. *
  59633. * @param {function(value: T, ?index: number): ObservableInput} project A function
  59634. * that, when applied to an item emitted by the source Observable, returns an
  59635. * Observable.
  59636. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  59637. * A function to produce the value on the output Observable based on the values
  59638. * and the indices of the source (outer) emission and the inner Observable
  59639. * emission. The arguments passed to this function are:
  59640. * - `outerValue`: the value that came from the source
  59641. * - `innerValue`: the value that came from the projected Observable
  59642. * - `outerIndex`: the "index" of the value that came from the source
  59643. * - `innerIndex`: the "index" of the value from the projected Observable
  59644. * @return {Observable} An Observable that emits the result of applying the
  59645. * projection function (and the optional `resultSelector`) to each item emitted
  59646. * by the source Observable and taking values from each projected inner
  59647. * Observable sequentially.
  59648. * @method concatMap
  59649. * @owner Observable
  59650. */
  59651. function concatMap(project, resultSelector) {
  59652. return mergeMap_1.mergeMap(project, resultSelector, 1);
  59653. }
  59654. exports.concatMap = concatMap;
  59655. //# sourceMappingURL=concatMap.js.map
  59656. /***/ }),
  59657. /* 118 */
  59658. /***/ (function(module, exports, __webpack_require__) {
  59659. "use strict";
  59660. var __extends = (this && this.__extends) || function (d, b) {
  59661. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  59662. function __() { this.constructor = d; }
  59663. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  59664. };
  59665. var Subscriber_1 = __webpack_require__(4);
  59666. /* tslint:enable:max-line-length */
  59667. /**
  59668. * Emits a given value if the source Observable completes without emitting any
  59669. * `next` value, otherwise mirrors the source Observable.
  59670. *
  59671. * <span class="informal">If the source Observable turns out to be empty, then
  59672. * this operator will emit a default value.</span>
  59673. *
  59674. * <img src="./img/defaultIfEmpty.png" width="100%">
  59675. *
  59676. * `defaultIfEmpty` emits the values emitted by the source Observable or a
  59677. * specified default value if the source Observable is empty (completes without
  59678. * having emitted any `next` value).
  59679. *
  59680. * @example <caption>If no clicks happen in 5 seconds, then emit "no clicks"</caption>
  59681. * var clicks = Rx.Observable.fromEvent(document, 'click');
  59682. * var clicksBeforeFive = clicks.takeUntil(Rx.Observable.interval(5000));
  59683. * var result = clicksBeforeFive.defaultIfEmpty('no clicks');
  59684. * result.subscribe(x => console.log(x));
  59685. *
  59686. * @see {@link empty}
  59687. * @see {@link last}
  59688. *
  59689. * @param {any} [defaultValue=null] The default value used if the source
  59690. * Observable is empty.
  59691. * @return {Observable} An Observable that emits either the specified
  59692. * `defaultValue` if the source Observable emits no items, or the values emitted
  59693. * by the source Observable.
  59694. * @method defaultIfEmpty
  59695. * @owner Observable
  59696. */
  59697. function defaultIfEmpty(defaultValue) {
  59698. if (defaultValue === void 0) { defaultValue = null; }
  59699. return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
  59700. }
  59701. exports.defaultIfEmpty = defaultIfEmpty;
  59702. var DefaultIfEmptyOperator = (function () {
  59703. function DefaultIfEmptyOperator(defaultValue) {
  59704. this.defaultValue = defaultValue;
  59705. }
  59706. DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
  59707. return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
  59708. };
  59709. return DefaultIfEmptyOperator;
  59710. }());
  59711. /**
  59712. * We need this JSDoc comment for affecting ESDoc.
  59713. * @ignore
  59714. * @extends {Ignored}
  59715. */
  59716. var DefaultIfEmptySubscriber = (function (_super) {
  59717. __extends(DefaultIfEmptySubscriber, _super);
  59718. function DefaultIfEmptySubscriber(destination, defaultValue) {
  59719. _super.call(this, destination);
  59720. this.defaultValue = defaultValue;
  59721. this.isEmpty = true;
  59722. }
  59723. DefaultIfEmptySubscriber.prototype._next = function (value) {
  59724. this.isEmpty = false;
  59725. this.destination.next(value);
  59726. };
  59727. DefaultIfEmptySubscriber.prototype._complete = function () {
  59728. if (this.isEmpty) {
  59729. this.destination.next(this.defaultValue);
  59730. }
  59731. this.destination.complete();
  59732. };
  59733. return DefaultIfEmptySubscriber;
  59734. }(Subscriber_1.Subscriber));
  59735. //# sourceMappingURL=defaultIfEmpty.js.map
  59736. /***/ }),
  59737. /* 119 */
  59738. /***/ (function(module, exports, __webpack_require__) {
  59739. "use strict";
  59740. var __extends = (this && this.__extends) || function (d, b) {
  59741. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  59742. function __() { this.constructor = d; }
  59743. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  59744. };
  59745. var Subscriber_1 = __webpack_require__(4);
  59746. var tryCatch_1 = __webpack_require__(17);
  59747. var errorObject_1 = __webpack_require__(16);
  59748. /* tslint:enable:max-line-length */
  59749. /**
  59750. * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.
  59751. *
  59752. * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
  59753. *
  59754. * If a comparator function is not provided, an equality check is used by default.
  59755. *
  59756. * @example <caption>A simple example with numbers</caption>
  59757. * Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)
  59758. * .distinctUntilChanged()
  59759. * .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4
  59760. *
  59761. * @example <caption>An example using a compare function</caption>
  59762. * interface Person {
  59763. * age: number,
  59764. * name: string
  59765. * }
  59766. *
  59767. * Observable.of<Person>(
  59768. * { age: 4, name: 'Foo'},
  59769. * { age: 7, name: 'Bar'},
  59770. * { age: 5, name: 'Foo'})
  59771. * { age: 6, name: 'Foo'})
  59772. * .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)
  59773. * .subscribe(x => console.log(x));
  59774. *
  59775. * // displays:
  59776. * // { age: 4, name: 'Foo' }
  59777. * // { age: 7, name: 'Bar' }
  59778. * // { age: 5, name: 'Foo' }
  59779. *
  59780. * @see {@link distinct}
  59781. * @see {@link distinctUntilKeyChanged}
  59782. *
  59783. * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
  59784. * @return {Observable} An Observable that emits items from the source Observable with distinct values.
  59785. * @method distinctUntilChanged
  59786. * @owner Observable
  59787. */
  59788. function distinctUntilChanged(compare, keySelector) {
  59789. return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
  59790. }
  59791. exports.distinctUntilChanged = distinctUntilChanged;
  59792. var DistinctUntilChangedOperator = (function () {
  59793. function DistinctUntilChangedOperator(compare, keySelector) {
  59794. this.compare = compare;
  59795. this.keySelector = keySelector;
  59796. }
  59797. DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
  59798. return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
  59799. };
  59800. return DistinctUntilChangedOperator;
  59801. }());
  59802. /**
  59803. * We need this JSDoc comment for affecting ESDoc.
  59804. * @ignore
  59805. * @extends {Ignored}
  59806. */
  59807. var DistinctUntilChangedSubscriber = (function (_super) {
  59808. __extends(DistinctUntilChangedSubscriber, _super);
  59809. function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
  59810. _super.call(this, destination);
  59811. this.keySelector = keySelector;
  59812. this.hasKey = false;
  59813. if (typeof compare === 'function') {
  59814. this.compare = compare;
  59815. }
  59816. }
  59817. DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
  59818. return x === y;
  59819. };
  59820. DistinctUntilChangedSubscriber.prototype._next = function (value) {
  59821. var keySelector = this.keySelector;
  59822. var key = value;
  59823. if (keySelector) {
  59824. key = tryCatch_1.tryCatch(this.keySelector)(value);
  59825. if (key === errorObject_1.errorObject) {
  59826. return this.destination.error(errorObject_1.errorObject.e);
  59827. }
  59828. }
  59829. var result = false;
  59830. if (this.hasKey) {
  59831. result = tryCatch_1.tryCatch(this.compare)(this.key, key);
  59832. if (result === errorObject_1.errorObject) {
  59833. return this.destination.error(errorObject_1.errorObject.e);
  59834. }
  59835. }
  59836. else {
  59837. this.hasKey = true;
  59838. }
  59839. if (Boolean(result) === false) {
  59840. this.key = key;
  59841. this.destination.next(value);
  59842. }
  59843. };
  59844. return DistinctUntilChangedSubscriber;
  59845. }(Subscriber_1.Subscriber));
  59846. //# sourceMappingURL=distinctUntilChanged.js.map
  59847. /***/ }),
  59848. /* 120 */
  59849. /***/ (function(module, exports, __webpack_require__) {
  59850. "use strict";
  59851. var __extends = (this && this.__extends) || function (d, b) {
  59852. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  59853. function __() { this.constructor = d; }
  59854. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  59855. };
  59856. var Subscriber_1 = __webpack_require__(4);
  59857. /* tslint:enable:max-line-length */
  59858. /**
  59859. * Filter items emitted by the source Observable by only emitting those that
  59860. * satisfy a specified predicate.
  59861. *
  59862. * <span class="informal">Like
  59863. * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),
  59864. * it only emits a value from the source if it passes a criterion function.</span>
  59865. *
  59866. * <img src="./img/filter.png" width="100%">
  59867. *
  59868. * Similar to the well-known `Array.prototype.filter` method, this operator
  59869. * takes values from the source Observable, passes them through a `predicate`
  59870. * function and only emits those values that yielded `true`.
  59871. *
  59872. * @example <caption>Emit only click events whose target was a DIV element</caption>
  59873. * var clicks = Rx.Observable.fromEvent(document, 'click');
  59874. * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');
  59875. * clicksOnDivs.subscribe(x => console.log(x));
  59876. *
  59877. * @see {@link distinct}
  59878. * @see {@link distinctUntilChanged}
  59879. * @see {@link distinctUntilKeyChanged}
  59880. * @see {@link ignoreElements}
  59881. * @see {@link partition}
  59882. * @see {@link skip}
  59883. *
  59884. * @param {function(value: T, index: number): boolean} predicate A function that
  59885. * evaluates each value emitted by the source Observable. If it returns `true`,
  59886. * the value is emitted, if `false` the value is not passed to the output
  59887. * Observable. The `index` parameter is the number `i` for the i-th source
  59888. * emission that has happened since the subscription, starting from the number
  59889. * `0`.
  59890. * @param {any} [thisArg] An optional argument to determine the value of `this`
  59891. * in the `predicate` function.
  59892. * @return {Observable} An Observable of values from the source that were
  59893. * allowed by the `predicate` function.
  59894. * @method filter
  59895. * @owner Observable
  59896. */
  59897. function filter(predicate, thisArg) {
  59898. return function filterOperatorFunction(source) {
  59899. return source.lift(new FilterOperator(predicate, thisArg));
  59900. };
  59901. }
  59902. exports.filter = filter;
  59903. var FilterOperator = (function () {
  59904. function FilterOperator(predicate, thisArg) {
  59905. this.predicate = predicate;
  59906. this.thisArg = thisArg;
  59907. }
  59908. FilterOperator.prototype.call = function (subscriber, source) {
  59909. return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
  59910. };
  59911. return FilterOperator;
  59912. }());
  59913. /**
  59914. * We need this JSDoc comment for affecting ESDoc.
  59915. * @ignore
  59916. * @extends {Ignored}
  59917. */
  59918. var FilterSubscriber = (function (_super) {
  59919. __extends(FilterSubscriber, _super);
  59920. function FilterSubscriber(destination, predicate, thisArg) {
  59921. _super.call(this, destination);
  59922. this.predicate = predicate;
  59923. this.thisArg = thisArg;
  59924. this.count = 0;
  59925. }
  59926. // the try catch block below is left specifically for
  59927. // optimization and perf reasons. a tryCatcher is not necessary here.
  59928. FilterSubscriber.prototype._next = function (value) {
  59929. var result;
  59930. try {
  59931. result = this.predicate.call(this.thisArg, value, this.count++);
  59932. }
  59933. catch (err) {
  59934. this.destination.error(err);
  59935. return;
  59936. }
  59937. if (result) {
  59938. this.destination.next(value);
  59939. }
  59940. };
  59941. return FilterSubscriber;
  59942. }(Subscriber_1.Subscriber));
  59943. //# sourceMappingURL=filter.js.map
  59944. /***/ }),
  59945. /* 121 */
  59946. /***/ (function(module, exports, __webpack_require__) {
  59947. "use strict";
  59948. var __extends = (this && this.__extends) || function (d, b) {
  59949. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  59950. function __() { this.constructor = d; }
  59951. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  59952. };
  59953. var Subscriber_1 = __webpack_require__(4);
  59954. /**
  59955. * Emits only the first value emitted by the source Observable that meets some
  59956. * condition.
  59957. *
  59958. * <span class="informal">Finds the first value that passes some test and emits
  59959. * that.</span>
  59960. *
  59961. * <img src="./img/find.png" width="100%">
  59962. *
  59963. * `find` searches for the first item in the source Observable that matches the
  59964. * specified condition embodied by the `predicate`, and returns the first
  59965. * occurrence in the source. Unlike {@link first}, the `predicate` is required
  59966. * in `find`, and does not emit an error if a valid value is not found.
  59967. *
  59968. * @example <caption>Find and emit the first click that happens on a DIV element</caption>
  59969. * var clicks = Rx.Observable.fromEvent(document, 'click');
  59970. * var result = clicks.find(ev => ev.target.tagName === 'DIV');
  59971. * result.subscribe(x => console.log(x));
  59972. *
  59973. * @see {@link filter}
  59974. * @see {@link first}
  59975. * @see {@link findIndex}
  59976. * @see {@link take}
  59977. *
  59978. * @param {function(value: T, index: number, source: Observable<T>): boolean} predicate
  59979. * A function called with each item to test for condition matching.
  59980. * @param {any} [thisArg] An optional argument to determine the value of `this`
  59981. * in the `predicate` function.
  59982. * @return {Observable<T>} An Observable of the first item that matches the
  59983. * condition.
  59984. * @method find
  59985. * @owner Observable
  59986. */
  59987. function find(predicate, thisArg) {
  59988. if (typeof predicate !== 'function') {
  59989. throw new TypeError('predicate is not a function');
  59990. }
  59991. return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
  59992. }
  59993. exports.find = find;
  59994. var FindValueOperator = (function () {
  59995. function FindValueOperator(predicate, source, yieldIndex, thisArg) {
  59996. this.predicate = predicate;
  59997. this.source = source;
  59998. this.yieldIndex = yieldIndex;
  59999. this.thisArg = thisArg;
  60000. }
  60001. FindValueOperator.prototype.call = function (observer, source) {
  60002. return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
  60003. };
  60004. return FindValueOperator;
  60005. }());
  60006. exports.FindValueOperator = FindValueOperator;
  60007. /**
  60008. * We need this JSDoc comment for affecting ESDoc.
  60009. * @ignore
  60010. * @extends {Ignored}
  60011. */
  60012. var FindValueSubscriber = (function (_super) {
  60013. __extends(FindValueSubscriber, _super);
  60014. function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
  60015. _super.call(this, destination);
  60016. this.predicate = predicate;
  60017. this.source = source;
  60018. this.yieldIndex = yieldIndex;
  60019. this.thisArg = thisArg;
  60020. this.index = 0;
  60021. }
  60022. FindValueSubscriber.prototype.notifyComplete = function (value) {
  60023. var destination = this.destination;
  60024. destination.next(value);
  60025. destination.complete();
  60026. };
  60027. FindValueSubscriber.prototype._next = function (value) {
  60028. var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
  60029. var index = this.index++;
  60030. try {
  60031. var result = predicate.call(thisArg || this, value, index, this.source);
  60032. if (result) {
  60033. this.notifyComplete(this.yieldIndex ? index : value);
  60034. }
  60035. }
  60036. catch (err) {
  60037. this.destination.error(err);
  60038. }
  60039. };
  60040. FindValueSubscriber.prototype._complete = function () {
  60041. this.notifyComplete(this.yieldIndex ? -1 : undefined);
  60042. };
  60043. return FindValueSubscriber;
  60044. }(Subscriber_1.Subscriber));
  60045. exports.FindValueSubscriber = FindValueSubscriber;
  60046. //# sourceMappingURL=find.js.map
  60047. /***/ }),
  60048. /* 122 */
  60049. /***/ (function(module, exports, __webpack_require__) {
  60050. "use strict";
  60051. var __extends = (this && this.__extends) || function (d, b) {
  60052. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  60053. function __() { this.constructor = d; }
  60054. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  60055. };
  60056. var tryCatch_1 = __webpack_require__(17);
  60057. var errorObject_1 = __webpack_require__(16);
  60058. var OuterSubscriber_1 = __webpack_require__(6);
  60059. var subscribeToResult_1 = __webpack_require__(5);
  60060. /**
  60061. * Ignores source values for a duration determined by another Observable, then
  60062. * emits the most recent value from the source Observable, then repeats this
  60063. * process.
  60064. *
  60065. * <span class="informal">It's like {@link auditTime}, but the silencing
  60066. * duration is determined by a second Observable.</span>
  60067. *
  60068. * <img src="./img/audit.png" width="100%">
  60069. *
  60070. * `audit` is similar to `throttle`, but emits the last value from the silenced
  60071. * time window, instead of the first value. `audit` emits the most recent value
  60072. * from the source Observable on the output Observable as soon as its internal
  60073. * timer becomes disabled, and ignores source values while the timer is enabled.
  60074. * Initially, the timer is disabled. As soon as the first source value arrives,
  60075. * the timer is enabled by calling the `durationSelector` function with the
  60076. * source value, which returns the "duration" Observable. When the duration
  60077. * Observable emits a value or completes, the timer is disabled, then the most
  60078. * recent source value is emitted on the output Observable, and this process
  60079. * repeats for the next source value.
  60080. *
  60081. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  60082. * var clicks = Rx.Observable.fromEvent(document, 'click');
  60083. * var result = clicks.audit(ev => Rx.Observable.interval(1000));
  60084. * result.subscribe(x => console.log(x));
  60085. *
  60086. * @see {@link auditTime}
  60087. * @see {@link debounce}
  60088. * @see {@link delayWhen}
  60089. * @see {@link sample}
  60090. * @see {@link throttle}
  60091. *
  60092. * @param {function(value: T): SubscribableOrPromise} durationSelector A function
  60093. * that receives a value from the source Observable, for computing the silencing
  60094. * duration, returned as an Observable or a Promise.
  60095. * @return {Observable<T>} An Observable that performs rate-limiting of
  60096. * emissions from the source Observable.
  60097. * @method audit
  60098. * @owner Observable
  60099. */
  60100. function audit(durationSelector) {
  60101. return function auditOperatorFunction(source) {
  60102. return source.lift(new AuditOperator(durationSelector));
  60103. };
  60104. }
  60105. exports.audit = audit;
  60106. var AuditOperator = (function () {
  60107. function AuditOperator(durationSelector) {
  60108. this.durationSelector = durationSelector;
  60109. }
  60110. AuditOperator.prototype.call = function (subscriber, source) {
  60111. return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
  60112. };
  60113. return AuditOperator;
  60114. }());
  60115. /**
  60116. * We need this JSDoc comment for affecting ESDoc.
  60117. * @ignore
  60118. * @extends {Ignored}
  60119. */
  60120. var AuditSubscriber = (function (_super) {
  60121. __extends(AuditSubscriber, _super);
  60122. function AuditSubscriber(destination, durationSelector) {
  60123. _super.call(this, destination);
  60124. this.durationSelector = durationSelector;
  60125. this.hasValue = false;
  60126. }
  60127. AuditSubscriber.prototype._next = function (value) {
  60128. this.value = value;
  60129. this.hasValue = true;
  60130. if (!this.throttled) {
  60131. var duration = tryCatch_1.tryCatch(this.durationSelector)(value);
  60132. if (duration === errorObject_1.errorObject) {
  60133. this.destination.error(errorObject_1.errorObject.e);
  60134. }
  60135. else {
  60136. var innerSubscription = subscribeToResult_1.subscribeToResult(this, duration);
  60137. if (innerSubscription.closed) {
  60138. this.clearThrottle();
  60139. }
  60140. else {
  60141. this.add(this.throttled = innerSubscription);
  60142. }
  60143. }
  60144. }
  60145. };
  60146. AuditSubscriber.prototype.clearThrottle = function () {
  60147. var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
  60148. if (throttled) {
  60149. this.remove(throttled);
  60150. this.throttled = null;
  60151. throttled.unsubscribe();
  60152. }
  60153. if (hasValue) {
  60154. this.value = null;
  60155. this.hasValue = false;
  60156. this.destination.next(value);
  60157. }
  60158. };
  60159. AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
  60160. this.clearThrottle();
  60161. };
  60162. AuditSubscriber.prototype.notifyComplete = function () {
  60163. this.clearThrottle();
  60164. };
  60165. return AuditSubscriber;
  60166. }(OuterSubscriber_1.OuterSubscriber));
  60167. //# sourceMappingURL=audit.js.map
  60168. /***/ }),
  60169. /* 123 */
  60170. /***/ (function(module, exports, __webpack_require__) {
  60171. "use strict";
  60172. var __extends = (this && this.__extends) || function (d, b) {
  60173. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  60174. function __() { this.constructor = d; }
  60175. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  60176. };
  60177. var Subscriber_1 = __webpack_require__(4);
  60178. /* tslint:enable:max-line-length */
  60179. /**
  60180. * Applies an accumulator function over the source Observable, and returns each
  60181. * intermediate result, with an optional seed value.
  60182. *
  60183. * <span class="informal">It's like {@link reduce}, but emits the current
  60184. * accumulation whenever the source emits a value.</span>
  60185. *
  60186. * <img src="./img/scan.png" width="100%">
  60187. *
  60188. * Combines together all values emitted on the source, using an accumulator
  60189. * function that knows how to join a new source value into the accumulation from
  60190. * the past. Is similar to {@link reduce}, but emits the intermediate
  60191. * accumulations.
  60192. *
  60193. * Returns an Observable that applies a specified `accumulator` function to each
  60194. * item emitted by the source Observable. If a `seed` value is specified, then
  60195. * that value will be used as the initial value for the accumulator. If no seed
  60196. * value is specified, the first item of the source is used as the seed.
  60197. *
  60198. * @example <caption>Count the number of click events</caption>
  60199. * var clicks = Rx.Observable.fromEvent(document, 'click');
  60200. * var ones = clicks.mapTo(1);
  60201. * var seed = 0;
  60202. * var count = ones.scan((acc, one) => acc + one, seed);
  60203. * count.subscribe(x => console.log(x));
  60204. *
  60205. * @see {@link expand}
  60206. * @see {@link mergeScan}
  60207. * @see {@link reduce}
  60208. *
  60209. * @param {function(acc: R, value: T, index: number): R} accumulator
  60210. * The accumulator function called on each source value.
  60211. * @param {T|R} [seed] The initial accumulation value.
  60212. * @return {Observable<R>} An observable of the accumulated values.
  60213. * @method scan
  60214. * @owner Observable
  60215. */
  60216. function scan(accumulator, seed) {
  60217. var hasSeed = false;
  60218. // providing a seed of `undefined` *should* be valid and trigger
  60219. // hasSeed! so don't use `seed !== undefined` checks!
  60220. // For this reason, we have to check it here at the original call site
  60221. // otherwise inside Operator/Subscriber we won't know if `undefined`
  60222. // means they didn't provide anything or if they literally provided `undefined`
  60223. if (arguments.length >= 2) {
  60224. hasSeed = true;
  60225. }
  60226. return function scanOperatorFunction(source) {
  60227. return source.lift(new ScanOperator(accumulator, seed, hasSeed));
  60228. };
  60229. }
  60230. exports.scan = scan;
  60231. var ScanOperator = (function () {
  60232. function ScanOperator(accumulator, seed, hasSeed) {
  60233. if (hasSeed === void 0) { hasSeed = false; }
  60234. this.accumulator = accumulator;
  60235. this.seed = seed;
  60236. this.hasSeed = hasSeed;
  60237. }
  60238. ScanOperator.prototype.call = function (subscriber, source) {
  60239. return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
  60240. };
  60241. return ScanOperator;
  60242. }());
  60243. /**
  60244. * We need this JSDoc comment for affecting ESDoc.
  60245. * @ignore
  60246. * @extends {Ignored}
  60247. */
  60248. var ScanSubscriber = (function (_super) {
  60249. __extends(ScanSubscriber, _super);
  60250. function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
  60251. _super.call(this, destination);
  60252. this.accumulator = accumulator;
  60253. this._seed = _seed;
  60254. this.hasSeed = hasSeed;
  60255. this.index = 0;
  60256. }
  60257. Object.defineProperty(ScanSubscriber.prototype, "seed", {
  60258. get: function () {
  60259. return this._seed;
  60260. },
  60261. set: function (value) {
  60262. this.hasSeed = true;
  60263. this._seed = value;
  60264. },
  60265. enumerable: true,
  60266. configurable: true
  60267. });
  60268. ScanSubscriber.prototype._next = function (value) {
  60269. if (!this.hasSeed) {
  60270. this.seed = value;
  60271. this.destination.next(value);
  60272. }
  60273. else {
  60274. return this._tryNext(value);
  60275. }
  60276. };
  60277. ScanSubscriber.prototype._tryNext = function (value) {
  60278. var index = this.index++;
  60279. var result;
  60280. try {
  60281. result = this.accumulator(this.seed, value, index);
  60282. }
  60283. catch (err) {
  60284. this.destination.error(err);
  60285. }
  60286. this.seed = result;
  60287. this.destination.next(result);
  60288. };
  60289. return ScanSubscriber;
  60290. }(Subscriber_1.Subscriber));
  60291. //# sourceMappingURL=scan.js.map
  60292. /***/ }),
  60293. /* 124 */
  60294. /***/ (function(module, exports, __webpack_require__) {
  60295. "use strict";
  60296. var __extends = (this && this.__extends) || function (d, b) {
  60297. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  60298. function __() { this.constructor = d; }
  60299. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  60300. };
  60301. var Subscriber_1 = __webpack_require__(4);
  60302. var ArgumentOutOfRangeError_1 = __webpack_require__(59);
  60303. var EmptyObservable_1 = __webpack_require__(33);
  60304. /**
  60305. * Emits only the last `count` values emitted by the source Observable.
  60306. *
  60307. * <span class="informal">Remembers the latest `count` values, then emits those
  60308. * only when the source completes.</span>
  60309. *
  60310. * <img src="./img/takeLast.png" width="100%">
  60311. *
  60312. * `takeLast` returns an Observable that emits at most the last `count` values
  60313. * emitted by the source Observable. If the source emits fewer than `count`
  60314. * values then all of its values are emitted. This operator must wait until the
  60315. * `complete` notification emission from the source in order to emit the `next`
  60316. * values on the output Observable, because otherwise it is impossible to know
  60317. * whether or not more values will be emitted on the source. For this reason,
  60318. * all values are emitted synchronously, followed by the complete notification.
  60319. *
  60320. * @example <caption>Take the last 3 values of an Observable with many values</caption>
  60321. * var many = Rx.Observable.range(1, 100);
  60322. * var lastThree = many.takeLast(3);
  60323. * lastThree.subscribe(x => console.log(x));
  60324. *
  60325. * @see {@link take}
  60326. * @see {@link takeUntil}
  60327. * @see {@link takeWhile}
  60328. * @see {@link skip}
  60329. *
  60330. * @throws {ArgumentOutOfRangeError} When using `takeLast(i)`, it delivers an
  60331. * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.
  60332. *
  60333. * @param {number} count The maximum number of values to emit from the end of
  60334. * the sequence of values emitted by the source Observable.
  60335. * @return {Observable<T>} An Observable that emits at most the last count
  60336. * values emitted by the source Observable.
  60337. * @method takeLast
  60338. * @owner Observable
  60339. */
  60340. function takeLast(count) {
  60341. return function takeLastOperatorFunction(source) {
  60342. if (count === 0) {
  60343. return new EmptyObservable_1.EmptyObservable();
  60344. }
  60345. else {
  60346. return source.lift(new TakeLastOperator(count));
  60347. }
  60348. };
  60349. }
  60350. exports.takeLast = takeLast;
  60351. var TakeLastOperator = (function () {
  60352. function TakeLastOperator(total) {
  60353. this.total = total;
  60354. if (this.total < 0) {
  60355. throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
  60356. }
  60357. }
  60358. TakeLastOperator.prototype.call = function (subscriber, source) {
  60359. return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
  60360. };
  60361. return TakeLastOperator;
  60362. }());
  60363. /**
  60364. * We need this JSDoc comment for affecting ESDoc.
  60365. * @ignore
  60366. * @extends {Ignored}
  60367. */
  60368. var TakeLastSubscriber = (function (_super) {
  60369. __extends(TakeLastSubscriber, _super);
  60370. function TakeLastSubscriber(destination, total) {
  60371. _super.call(this, destination);
  60372. this.total = total;
  60373. this.ring = new Array();
  60374. this.count = 0;
  60375. }
  60376. TakeLastSubscriber.prototype._next = function (value) {
  60377. var ring = this.ring;
  60378. var total = this.total;
  60379. var count = this.count++;
  60380. if (ring.length < total) {
  60381. ring.push(value);
  60382. }
  60383. else {
  60384. var index = count % total;
  60385. ring[index] = value;
  60386. }
  60387. };
  60388. TakeLastSubscriber.prototype._complete = function () {
  60389. var destination = this.destination;
  60390. var count = this.count;
  60391. if (count > 0) {
  60392. var total = this.count >= this.total ? this.total : this.count;
  60393. var ring = this.ring;
  60394. for (var i = 0; i < total; i++) {
  60395. var idx = (count++) % total;
  60396. destination.next(ring[idx]);
  60397. }
  60398. }
  60399. destination.complete();
  60400. };
  60401. return TakeLastSubscriber;
  60402. }(Subscriber_1.Subscriber));
  60403. //# sourceMappingURL=takeLast.js.map
  60404. /***/ }),
  60405. /* 125 */
  60406. /***/ (function(module, exports, __webpack_require__) {
  60407. "use strict";
  60408. var __extends = (this && this.__extends) || function (d, b) {
  60409. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  60410. function __() { this.constructor = d; }
  60411. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  60412. };
  60413. var OuterSubscriber_1 = __webpack_require__(6);
  60414. var subscribeToResult_1 = __webpack_require__(5);
  60415. /* tslint:enable:max-line-length */
  60416. /**
  60417. * Projects each source value to an Observable which is merged in the output
  60418. * Observable, emitting values only from the most recently projected Observable.
  60419. *
  60420. * <span class="informal">Maps each value to an Observable, then flattens all of
  60421. * these inner Observables using {@link switch}.</span>
  60422. *
  60423. * <img src="./img/switchMap.png" width="100%">
  60424. *
  60425. * Returns an Observable that emits items based on applying a function that you
  60426. * supply to each item emitted by the source Observable, where that function
  60427. * returns an (so-called "inner") Observable. Each time it observes one of these
  60428. * inner Observables, the output Observable begins emitting the items emitted by
  60429. * that inner Observable. When a new inner Observable is emitted, `switchMap`
  60430. * stops emitting items from the earlier-emitted inner Observable and begins
  60431. * emitting items from the new one. It continues to behave like this for
  60432. * subsequent inner Observables.
  60433. *
  60434. * @example <caption>Rerun an interval Observable on every click event</caption>
  60435. * var clicks = Rx.Observable.fromEvent(document, 'click');
  60436. * var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));
  60437. * result.subscribe(x => console.log(x));
  60438. *
  60439. * @see {@link concatMap}
  60440. * @see {@link exhaustMap}
  60441. * @see {@link mergeMap}
  60442. * @see {@link switch}
  60443. * @see {@link switchMapTo}
  60444. *
  60445. * @param {function(value: T, ?index: number): ObservableInput} project A function
  60446. * that, when applied to an item emitted by the source Observable, returns an
  60447. * Observable.
  60448. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  60449. * A function to produce the value on the output Observable based on the values
  60450. * and the indices of the source (outer) emission and the inner Observable
  60451. * emission. The arguments passed to this function are:
  60452. * - `outerValue`: the value that came from the source
  60453. * - `innerValue`: the value that came from the projected Observable
  60454. * - `outerIndex`: the "index" of the value that came from the source
  60455. * - `innerIndex`: the "index" of the value from the projected Observable
  60456. * @return {Observable} An Observable that emits the result of applying the
  60457. * projection function (and the optional `resultSelector`) to each item emitted
  60458. * by the source Observable and taking only the values from the most recently
  60459. * projected inner Observable.
  60460. * @method switchMap
  60461. * @owner Observable
  60462. */
  60463. function switchMap(project, resultSelector) {
  60464. return function switchMapOperatorFunction(source) {
  60465. return source.lift(new SwitchMapOperator(project, resultSelector));
  60466. };
  60467. }
  60468. exports.switchMap = switchMap;
  60469. var SwitchMapOperator = (function () {
  60470. function SwitchMapOperator(project, resultSelector) {
  60471. this.project = project;
  60472. this.resultSelector = resultSelector;
  60473. }
  60474. SwitchMapOperator.prototype.call = function (subscriber, source) {
  60475. return source.subscribe(new SwitchMapSubscriber(subscriber, this.project, this.resultSelector));
  60476. };
  60477. return SwitchMapOperator;
  60478. }());
  60479. /**
  60480. * We need this JSDoc comment for affecting ESDoc.
  60481. * @ignore
  60482. * @extends {Ignored}
  60483. */
  60484. var SwitchMapSubscriber = (function (_super) {
  60485. __extends(SwitchMapSubscriber, _super);
  60486. function SwitchMapSubscriber(destination, project, resultSelector) {
  60487. _super.call(this, destination);
  60488. this.project = project;
  60489. this.resultSelector = resultSelector;
  60490. this.index = 0;
  60491. }
  60492. SwitchMapSubscriber.prototype._next = function (value) {
  60493. var result;
  60494. var index = this.index++;
  60495. try {
  60496. result = this.project(value, index);
  60497. }
  60498. catch (error) {
  60499. this.destination.error(error);
  60500. return;
  60501. }
  60502. this._innerSub(result, value, index);
  60503. };
  60504. SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
  60505. var innerSubscription = this.innerSubscription;
  60506. if (innerSubscription) {
  60507. innerSubscription.unsubscribe();
  60508. }
  60509. this.add(this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index));
  60510. };
  60511. SwitchMapSubscriber.prototype._complete = function () {
  60512. var innerSubscription = this.innerSubscription;
  60513. if (!innerSubscription || innerSubscription.closed) {
  60514. _super.prototype._complete.call(this);
  60515. }
  60516. };
  60517. /** @deprecated internal use only */ SwitchMapSubscriber.prototype._unsubscribe = function () {
  60518. this.innerSubscription = null;
  60519. };
  60520. SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
  60521. this.remove(innerSub);
  60522. this.innerSubscription = null;
  60523. if (this.isStopped) {
  60524. _super.prototype._complete.call(this);
  60525. }
  60526. };
  60527. SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  60528. if (this.resultSelector) {
  60529. this._tryNotifyNext(outerValue, innerValue, outerIndex, innerIndex);
  60530. }
  60531. else {
  60532. this.destination.next(innerValue);
  60533. }
  60534. };
  60535. SwitchMapSubscriber.prototype._tryNotifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
  60536. var result;
  60537. try {
  60538. result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);
  60539. }
  60540. catch (err) {
  60541. this.destination.error(err);
  60542. return;
  60543. }
  60544. this.destination.next(result);
  60545. };
  60546. return SwitchMapSubscriber;
  60547. }(OuterSubscriber_1.OuterSubscriber));
  60548. //# sourceMappingURL=switchMap.js.map
  60549. /***/ }),
  60550. /* 126 */
  60551. /***/ (function(module, exports, __webpack_require__) {
  60552. "use strict";
  60553. var async_1 = __webpack_require__(10);
  60554. var map_1 = __webpack_require__(49);
  60555. /**
  60556. * @param scheduler
  60557. * @return {Observable<Timestamp<any>>|WebSocketSubject<T>|Observable<T>}
  60558. * @method timestamp
  60559. * @owner Observable
  60560. */
  60561. function timestamp(scheduler) {
  60562. if (scheduler === void 0) { scheduler = async_1.async; }
  60563. return map_1.map(function (value) { return new Timestamp(value, scheduler.now()); });
  60564. // return (source: Observable<T>) => source.lift(new TimestampOperator(scheduler));
  60565. }
  60566. exports.timestamp = timestamp;
  60567. var Timestamp = (function () {
  60568. function Timestamp(value, timestamp) {
  60569. this.value = value;
  60570. this.timestamp = timestamp;
  60571. }
  60572. return Timestamp;
  60573. }());
  60574. exports.Timestamp = Timestamp;
  60575. ;
  60576. //# sourceMappingURL=timestamp.js.map
  60577. /***/ }),
  60578. /* 127 */
  60579. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  60580. "use strict";
  60581. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavPop; });
  60582. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  60583. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__navigation_nav_controller__ = __webpack_require__(35);
  60584. /**
  60585. * @name NavPop
  60586. * @description
  60587. * Directive to declaratively pop the current page off from the
  60588. * navigation stack.
  60589. *
  60590. * @usage
  60591. * ```html
  60592. * <ion-content>
  60593. *
  60594. * <button ion-button navPop>Go Back</button>
  60595. *
  60596. * </ion-content>
  60597. * ```
  60598. *
  60599. * Similar to {@link /docs/api/components/nav/NavPush/ `NavPush` }
  60600. * @demo /docs/demos/src/navigation/
  60601. * @see {@link /docs/components#navigation Navigation Component Docs}
  60602. * @see {@link ../NavPush NavPush API Docs}
  60603. */
  60604. var NavPop = (function () {
  60605. function NavPop(_nav) {
  60606. this._nav = _nav;
  60607. if (!_nav) {
  60608. console.error('navPop must be within a NavController');
  60609. }
  60610. }
  60611. /**
  60612. * @hidden
  60613. */
  60614. NavPop.prototype.onClick = function () {
  60615. // If no target, or if target is _self, prevent default browser behavior
  60616. if (this._nav) {
  60617. this._nav.pop().catch(function () {
  60618. (void 0) /* console.debug */;
  60619. });
  60620. return false;
  60621. }
  60622. return true;
  60623. };
  60624. NavPop.decorators = [
  60625. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  60626. selector: '[navPop]'
  60627. },] },
  60628. ];
  60629. /** @nocollapse */
  60630. NavPop.ctorParameters = function () { return [
  60631. { type: __WEBPACK_IMPORTED_MODULE_1__navigation_nav_controller__["a" /* NavController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  60632. ]; };
  60633. NavPop.propDecorators = {
  60634. 'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click',] },],
  60635. };
  60636. return NavPop;
  60637. }());
  60638. //# sourceMappingURL=nav-pop.js.map
  60639. /***/ }),
  60640. /* 128 */
  60641. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  60642. "use strict";
  60643. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavPush; });
  60644. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  60645. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__navigation_nav_controller__ = __webpack_require__(35);
  60646. /**
  60647. * @name NavPush
  60648. * @description
  60649. * Directive to declaratively push a new page to the current nav
  60650. * stack.
  60651. *
  60652. * @usage
  60653. * ```html
  60654. * <button ion-button [navPush]="pushPage"></button>
  60655. * ```
  60656. *
  60657. * To specify parameters you can use array syntax or the `navParams`
  60658. * property:
  60659. *
  60660. * ```html
  60661. * <button ion-button [navPush]="pushPage" [navParams]="params">Go</button>
  60662. * ```
  60663. *
  60664. * Where `pushPage` and `params` are specified in your component,
  60665. * and `pushPage` contains a reference to a
  60666. * component you would like to push:
  60667. *
  60668. * ```ts
  60669. * import { LoginPage } from './login';
  60670. *
  60671. * @Component({
  60672. * template: `<button ion-button [navPush]="pushPage" [navParams]="params">Go</button>`
  60673. * })
  60674. * class MyPage {
  60675. * pushPage: any;
  60676. * params: Object;
  60677. * constructor(){
  60678. * this.pushPage = LoginPage;
  60679. * this.params = { id: 42 };
  60680. * }
  60681. * }
  60682. * ```
  60683. *
  60684. * @demo /docs/demos/src/navigation/
  60685. * @see {@link /docs/components#navigation Navigation Component Docs}
  60686. * @see {@link ../NavPop NavPop API Docs}
  60687. *
  60688. */
  60689. var NavPush = (function () {
  60690. function NavPush(_nav) {
  60691. this._nav = _nav;
  60692. if (!_nav) {
  60693. console.error('navPush must be within a NavController');
  60694. }
  60695. }
  60696. /**
  60697. * @hidden
  60698. */
  60699. NavPush.prototype.onClick = function () {
  60700. if (this._nav && this.navPush) {
  60701. this._nav.push(this.navPush, this.navParams);
  60702. return false;
  60703. }
  60704. return true;
  60705. };
  60706. NavPush.decorators = [
  60707. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  60708. selector: '[navPush]'
  60709. },] },
  60710. ];
  60711. /** @nocollapse */
  60712. NavPush.ctorParameters = function () { return [
  60713. { type: __WEBPACK_IMPORTED_MODULE_1__navigation_nav_controller__["a" /* NavController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  60714. ]; };
  60715. NavPush.propDecorators = {
  60716. 'navPush': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  60717. 'navParams': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  60718. 'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click',] },],
  60719. };
  60720. return NavPush;
  60721. }());
  60722. //# sourceMappingURL=nav-push.js.map
  60723. /***/ }),
  60724. /* 129 */
  60725. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  60726. "use strict";
  60727. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Option; });
  60728. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  60729. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  60730. /**
  60731. * @name Option
  60732. * @description
  60733. * `ion-option` is a child component of `ion-select`. Similar to the native option element, `ion-option` can take a value and a selected property.
  60734. *
  60735. * @demo /docs/demos/src/select/
  60736. */
  60737. var Option = (function () {
  60738. function Option(_elementRef) {
  60739. this._elementRef = _elementRef;
  60740. this._selected = false;
  60741. this._disabled = false;
  60742. /**
  60743. * @output {any} Event to evaluate when option is selected.
  60744. */
  60745. this.ionSelect = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  60746. }
  60747. Object.defineProperty(Option.prototype, "disabled", {
  60748. /**
  60749. * @input {boolean} If true, the user cannot interact with this element.
  60750. */
  60751. get: function () {
  60752. return this._disabled;
  60753. },
  60754. set: function (val) {
  60755. this._disabled = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  60756. },
  60757. enumerable: true,
  60758. configurable: true
  60759. });
  60760. Object.defineProperty(Option.prototype, "selected", {
  60761. /**
  60762. * @input {boolean} If true, the element is selected.
  60763. */
  60764. get: function () {
  60765. return this._selected;
  60766. },
  60767. set: function (val) {
  60768. this._selected = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  60769. },
  60770. enumerable: true,
  60771. configurable: true
  60772. });
  60773. Object.defineProperty(Option.prototype, "value", {
  60774. /**
  60775. * @input {any} The value of the option.
  60776. */
  60777. get: function () {
  60778. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(this._value)) {
  60779. return this._value;
  60780. }
  60781. return this.text;
  60782. },
  60783. set: function (val) {
  60784. this._value = val;
  60785. },
  60786. enumerable: true,
  60787. configurable: true
  60788. });
  60789. Object.defineProperty(Option.prototype, "text", {
  60790. /**
  60791. * @hidden
  60792. */
  60793. get: function () {
  60794. return this._elementRef.nativeElement.textContent;
  60795. },
  60796. enumerable: true,
  60797. configurable: true
  60798. });
  60799. Option.decorators = [
  60800. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  60801. selector: 'ion-option'
  60802. },] },
  60803. ];
  60804. /** @nocollapse */
  60805. Option.ctorParameters = function () { return [
  60806. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  60807. ]; };
  60808. Option.propDecorators = {
  60809. 'disabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  60810. 'selected': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  60811. 'value': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  60812. 'ionSelect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  60813. };
  60814. return Option;
  60815. }());
  60816. //# sourceMappingURL=option.js.map
  60817. /***/ }),
  60818. /* 130 */
  60819. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  60820. "use strict";
  60821. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Popover; });
  60822. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__navigation_overlay_proxy__ = __webpack_require__(207);
  60823. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__popover_impl__ = __webpack_require__(659);
  60824. var __extends = (this && this.__extends) || (function () {
  60825. var extendStatics = Object.setPrototypeOf ||
  60826. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  60827. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  60828. return function (d, b) {
  60829. extendStatics(d, b);
  60830. function __() { this.constructor = d; }
  60831. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  60832. };
  60833. })();
  60834. /**
  60835. * @hidden
  60836. */
  60837. var Popover = (function (_super) {
  60838. __extends(Popover, _super);
  60839. function Popover(app, component, data, opts, config, deepLinker) {
  60840. if (opts === void 0) { opts = {}; }
  60841. var _this = _super.call(this, app, component, config, deepLinker) || this;
  60842. _this.data = data;
  60843. _this.opts = opts;
  60844. _this.isOverlay = true;
  60845. return _this;
  60846. }
  60847. Popover.prototype.getImplementation = function () {
  60848. return new __WEBPACK_IMPORTED_MODULE_1__popover_impl__["a" /* PopoverImpl */](this._app, this._component, this.data, this.opts, this._config);
  60849. };
  60850. return Popover;
  60851. }(__WEBPACK_IMPORTED_MODULE_0__navigation_overlay_proxy__["a" /* OverlayProxy */]));
  60852. //# sourceMappingURL=popover.js.map
  60853. /***/ }),
  60854. /* 131 */
  60855. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  60856. "use strict";
  60857. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PopoverCmp; });
  60858. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  60859. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  60860. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__platform_key__ = __webpack_require__(30);
  60861. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_nav_params__ = __webpack_require__(23);
  60862. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__ = __webpack_require__(9);
  60863. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__ = __webpack_require__(13);
  60864. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_module_loader__ = __webpack_require__(113);
  60865. /**
  60866. * @hidden
  60867. */
  60868. var PopoverCmp = (function () {
  60869. function PopoverCmp(_cfr, _elementRef, _renderer, _config, _navParams, _viewCtrl, gestureCtrl, moduleLoader) {
  60870. this._cfr = _cfr;
  60871. this._elementRef = _elementRef;
  60872. this._renderer = _renderer;
  60873. this._config = _config;
  60874. this._navParams = _navParams;
  60875. this._viewCtrl = _viewCtrl;
  60876. this.moduleLoader = moduleLoader;
  60877. this._gestureBlocker = gestureCtrl.createBlocker(__WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["a" /* BLOCK_ALL */]);
  60878. this.d = _navParams.data.opts;
  60879. _renderer.setElementClass(_elementRef.nativeElement, "popover-" + _config.get('mode'), true);
  60880. if (this.d.cssClass) {
  60881. this.d.cssClass.split(' ').forEach(function (cssClass) {
  60882. // Make sure the class isn't whitespace, otherwise it throws exceptions
  60883. if (cssClass.trim() !== '')
  60884. _renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  60885. });
  60886. }
  60887. this.id = (++popoverIds);
  60888. }
  60889. PopoverCmp.prototype.ionViewPreLoad = function () {
  60890. this._load(this._navParams.data.component);
  60891. };
  60892. PopoverCmp.prototype._load = function (component) {
  60893. if (component) {
  60894. var cfr = this.moduleLoader.getComponentFactoryResolver(component);
  60895. if (!cfr) {
  60896. cfr = this._cfr;
  60897. }
  60898. var componentFactory = cfr.resolveComponentFactory(component);
  60899. // ******** DOM WRITE ****************
  60900. var componentRef = this._viewport.createComponent(componentFactory, this._viewport.length, this._viewport.parentInjector, []);
  60901. this._viewCtrl._setInstance(componentRef.instance);
  60902. this._enabled = true;
  60903. // Subscribe to events in order to block gestures
  60904. // TODO, should we unsubscribe? memory leak?
  60905. this._viewCtrl.willEnter.subscribe(this._viewWillEnter.bind(this));
  60906. this._viewCtrl.didLeave.subscribe(this._viewDidLeave.bind(this));
  60907. }
  60908. };
  60909. PopoverCmp.prototype._viewWillEnter = function () {
  60910. this._gestureBlocker.block();
  60911. };
  60912. PopoverCmp.prototype._viewDidLeave = function () {
  60913. this._gestureBlocker.unblock();
  60914. };
  60915. PopoverCmp.prototype._setCssClass = function (componentRef, className) {
  60916. this._renderer.setElementClass(componentRef.location.nativeElement, className, true);
  60917. };
  60918. PopoverCmp.prototype._bdClick = function () {
  60919. if (this._enabled && this.d.enableBackdropDismiss) {
  60920. return this._viewCtrl.dismiss(null, 'backdrop');
  60921. }
  60922. };
  60923. PopoverCmp.prototype._keyUp = function (ev) {
  60924. if (this._enabled && ev.keyCode === __WEBPACK_IMPORTED_MODULE_2__platform_key__["c" /* KEY_ESCAPE */] && this._viewCtrl.isLast()) {
  60925. this._bdClick();
  60926. }
  60927. };
  60928. PopoverCmp.prototype.ngOnDestroy = function () {
  60929. (void 0) /* assert */;
  60930. this._gestureBlocker.destroy();
  60931. };
  60932. PopoverCmp.decorators = [
  60933. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  60934. selector: 'ion-popover',
  60935. template: '<ion-backdrop (click)="_bdClick()" [hidden]="!d.showBackdrop"></ion-backdrop>' +
  60936. '<div class="popover-wrapper">' +
  60937. '<div class="popover-arrow"></div>' +
  60938. '<div class="popover-content">' +
  60939. '<div class="popover-viewport">' +
  60940. '<div #viewport nav-viewport></div>' +
  60941. '</div>' +
  60942. '</div>' +
  60943. '</div>'
  60944. },] },
  60945. ];
  60946. /** @nocollapse */
  60947. PopoverCmp.ctorParameters = function () { return [
  60948. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */], },
  60949. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  60950. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  60951. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  60952. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_nav_params__["a" /* NavParams */], },
  60953. { type: __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__["a" /* ViewController */], },
  60954. { type: __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["l" /* GestureController */], },
  60955. { type: __WEBPACK_IMPORTED_MODULE_6__util_module_loader__["b" /* ModuleLoader */], },
  60956. ]; };
  60957. PopoverCmp.propDecorators = {
  60958. '_viewport': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['viewport', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */] },] },],
  60959. '_keyUp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['body:keyup', ['$event'],] },],
  60960. };
  60961. return PopoverCmp;
  60962. }());
  60963. var popoverIds = -1;
  60964. //# sourceMappingURL=popover-component.js.map
  60965. /***/ }),
  60966. /* 132 */
  60967. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  60968. "use strict";
  60969. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RadioGroup; });
  60970. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  60971. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  60972. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__list_list_header__ = __webpack_require__(109);
  60973. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  60974. /**
  60975. * @name RadioGroup
  60976. * @description
  60977. * A radio group is a group of [radio buttons](../RadioButton). It allows
  60978. * a user to select at most one radio button from a set. Checking one radio
  60979. * button that belongs to a radio group unchecks any previous checked
  60980. * radio button within the same group.
  60981. *
  60982. * See the [Angular Forms Docs](https://angular.io/docs/ts/latest/guide/forms.html)
  60983. * for more information on forms and inputs.
  60984. *
  60985. * @usage
  60986. * ```html
  60987. * <ion-list radio-group [(ngModel)]="autoManufacturers">
  60988. *
  60989. * <ion-list-header>
  60990. * Auto Manufacturers
  60991. * </ion-list-header>
  60992. *
  60993. * <ion-item>
  60994. * <ion-label>Cord</ion-label>
  60995. * <ion-radio value="cord"></ion-radio>
  60996. * </ion-item>
  60997. *
  60998. * <ion-item>
  60999. * <ion-label>Duesenberg</ion-label>
  61000. * <ion-radio value="duesenberg"></ion-radio>
  61001. * </ion-item>
  61002. *
  61003. * <ion-item>
  61004. * <ion-label>Hudson</ion-label>
  61005. * <ion-radio value="hudson"></ion-radio>
  61006. * </ion-item>
  61007. *
  61008. * <ion-item>
  61009. * <ion-label>Packard</ion-label>
  61010. * <ion-radio value="packard"></ion-radio>
  61011. * </ion-item>
  61012. *
  61013. * <ion-item>
  61014. * <ion-label>Studebaker</ion-label>
  61015. * <ion-radio value="studebaker"></ion-radio>
  61016. * </ion-item>
  61017. *
  61018. * </ion-list>
  61019. * ```
  61020. *
  61021. * @demo /docs/demos/src/radio/
  61022. * @see {@link /docs/components#radio Radio Component Docs}
  61023. * @see {@link ../RadioButton RadioButton API Docs}
  61024. */
  61025. var RadioGroup = (function () {
  61026. function RadioGroup(_renderer, _elementRef, _cd) {
  61027. this._renderer = _renderer;
  61028. this._elementRef = _elementRef;
  61029. this._cd = _cd;
  61030. /**
  61031. * @internal
  61032. */
  61033. this._disabled = false;
  61034. /**
  61035. * @hidden
  61036. */
  61037. this._btns = [];
  61038. /**
  61039. * @hidden
  61040. */
  61041. this._ids = -1;
  61042. /**
  61043. * @hidden
  61044. */
  61045. this._init = false;
  61046. /**
  61047. * @output {any} Emitted when the selected button has changed.
  61048. */
  61049. this.ionChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  61050. this.id = ++radioGroupIds;
  61051. }
  61052. Object.defineProperty(RadioGroup.prototype, "disabled", {
  61053. /**
  61054. * @input {boolean} If true, the user cannot interact with any of the buttons in the group.
  61055. */
  61056. get: function () {
  61057. return this._disabled;
  61058. },
  61059. set: function (val) {
  61060. this._disabled = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  61061. },
  61062. enumerable: true,
  61063. configurable: true
  61064. });
  61065. /**
  61066. * @hidden
  61067. */
  61068. RadioGroup.prototype.ngAfterContentInit = function () {
  61069. var activeButton = this._btns.find(function (b) { return b.checked; });
  61070. if (activeButton) {
  61071. this._setActive(activeButton);
  61072. }
  61073. };
  61074. /**
  61075. * @hidden
  61076. */
  61077. RadioGroup.prototype.writeValue = function (val) {
  61078. (void 0) /* console.debug */;
  61079. this.value = val;
  61080. if (this._init) {
  61081. this._update();
  61082. this.onTouched();
  61083. this.ionChange.emit(val);
  61084. }
  61085. this._init = true;
  61086. };
  61087. /**
  61088. * @hidden
  61089. */
  61090. RadioGroup.prototype.registerOnChange = function (fn) {
  61091. var _this = this;
  61092. this._fn = fn;
  61093. this.onChange = function (val) {
  61094. // onChange used when there's an formControlName
  61095. (void 0) /* console.debug */;
  61096. fn(val);
  61097. _this.value = val;
  61098. _this._update();
  61099. _this.onTouched();
  61100. _this.ionChange.emit(val);
  61101. };
  61102. };
  61103. /**
  61104. * @hidden
  61105. */
  61106. RadioGroup.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };
  61107. /**
  61108. * @hidden
  61109. */
  61110. RadioGroup.prototype._update = function () {
  61111. var _this = this;
  61112. // loop through each of the radiobuttons
  61113. var hasChecked = false;
  61114. this._btns.forEach(function (radioButton) {
  61115. // check this radiobutton if its value is
  61116. // the same as the radiogroups value
  61117. radioButton.checked = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["g" /* isCheckedProperty */])(_this.value, radioButton.value) && !hasChecked;
  61118. if (radioButton.checked) {
  61119. // if this button is checked, then set it as
  61120. // the radiogroup's active descendant
  61121. _this._setActive(radioButton);
  61122. hasChecked = true;
  61123. }
  61124. });
  61125. };
  61126. /**
  61127. * @hidden
  61128. */
  61129. RadioGroup.prototype._setActive = function (radioButton) {
  61130. this._renderer.setElementAttribute(this._elementRef.nativeElement, 'aria-activedescendant', radioButton.id);
  61131. };
  61132. /**
  61133. * @hidden
  61134. */
  61135. RadioGroup.prototype.add = function (button) {
  61136. var _this = this;
  61137. this._btns.push(button);
  61138. // listen for radiobutton select events
  61139. button.ionSelect.subscribe(function (val) {
  61140. // this radiobutton has been selected
  61141. _this.onChange(val);
  61142. });
  61143. return this.id + '-' + (++this._ids);
  61144. };
  61145. /**
  61146. * @hidden
  61147. */
  61148. RadioGroup.prototype.remove = function (button) {
  61149. var index = this._btns.indexOf(button);
  61150. if (index > -1) {
  61151. if (button.value === this.value) {
  61152. this.value = null;
  61153. }
  61154. this._btns.splice(index, 1);
  61155. }
  61156. };
  61157. Object.defineProperty(RadioGroup.prototype, "_header", {
  61158. /**
  61159. * @hidden
  61160. */
  61161. set: function (header) {
  61162. if (header) {
  61163. if (!header.id) {
  61164. header.id = 'rg-hdr-' + this.id;
  61165. }
  61166. this._renderer.setElementAttribute(this._elementRef.nativeElement, 'aria-describedby', header.id);
  61167. }
  61168. },
  61169. enumerable: true,
  61170. configurable: true
  61171. });
  61172. /**
  61173. * @hidden
  61174. */
  61175. RadioGroup.prototype.onChange = function (val) {
  61176. // onChange used when there is not an formControlName
  61177. (void 0) /* console.debug */;
  61178. this.value = val;
  61179. this._update();
  61180. this.onTouched();
  61181. this.ionChange.emit(val);
  61182. this._cd.detectChanges();
  61183. };
  61184. /**
  61185. * @hidden
  61186. */
  61187. RadioGroup.prototype.onTouched = function () { };
  61188. /**
  61189. * @hidden
  61190. */
  61191. RadioGroup.prototype.setDisabledState = function (isDisabled) {
  61192. this.disabled = isDisabled;
  61193. };
  61194. RadioGroup.decorators = [
  61195. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  61196. selector: '[radio-group]',
  61197. host: {
  61198. 'role': 'radiogroup'
  61199. },
  61200. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["c" /* NG_VALUE_ACCESSOR */], useExisting: RadioGroup, multi: true }],
  61201. },] },
  61202. ];
  61203. /** @nocollapse */
  61204. RadioGroup.ctorParameters = function () { return [
  61205. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  61206. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  61207. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["j" /* ChangeDetectorRef */], },
  61208. ]; };
  61209. RadioGroup.propDecorators = {
  61210. 'disabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61211. 'ionChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  61212. '_header': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_2__list_list_header__["a" /* ListHeader */],] },],
  61213. };
  61214. return RadioGroup;
  61215. }());
  61216. var radioGroupIds = -1;
  61217. //# sourceMappingURL=radio-group.js.map
  61218. /***/ }),
  61219. /* 133 */
  61220. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  61221. "use strict";
  61222. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Refresher; });
  61223. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  61224. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__content_content__ = __webpack_require__(31);
  61225. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__ = __webpack_require__(13);
  61226. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  61227. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_platform__ = __webpack_require__(7);
  61228. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_dom__ = __webpack_require__(18);
  61229. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__gestures_ui_event_manager__ = __webpack_require__(36);
  61230. /**
  61231. * @name Refresher
  61232. * @description
  61233. * The Refresher provides pull-to-refresh functionality on a content component.
  61234. * Place the `ion-refresher` as the first child of your `ion-content` element.
  61235. *
  61236. * Pages can then listen to the refresher's various output events. The
  61237. * `refresh` output event is fired when the user has pulled down far
  61238. * enough to kick off the refreshing process. Once the async operation
  61239. * has completed and the refreshing should end, call `complete()`.
  61240. *
  61241. * Note: Do not wrap the `ion-refresher` in a `*ngIf`. It will not render
  61242. * properly this way. Please use the `enabled` property instead to
  61243. * display or hide the refresher.
  61244. *
  61245. * @usage
  61246. * ```html
  61247. * <ion-content>
  61248. *
  61249. * <ion-refresher (ionRefresh)="doRefresh($event)">
  61250. * <ion-refresher-content></ion-refresher-content>
  61251. * </ion-refresher>
  61252. *
  61253. * </ion-content>
  61254. * ```
  61255. *
  61256. * ```ts
  61257. * @Component({...})
  61258. * export class NewsFeedPage {
  61259. *
  61260. * doRefresh(refresher) {
  61261. * console.log('Begin async operation', refresher);
  61262. *
  61263. * setTimeout(() => {
  61264. * console.log('Async operation has ended');
  61265. * refresher.complete();
  61266. * }, 2000);
  61267. * }
  61268. *
  61269. * }
  61270. * ```
  61271. *
  61272. *
  61273. * ## Refresher Content
  61274. *
  61275. * By default, Ionic provides the pulling icon and refreshing spinner that
  61276. * looks best for the platform the user is on. However, you can change the
  61277. * default icon and spinner, along with adding text for each state by
  61278. * adding properties to the child `ion-refresher-content` component.
  61279. *
  61280. * ```html
  61281. * <ion-content>
  61282. *
  61283. * <ion-refresher (ionRefresh)="doRefresh($event)">
  61284. * <ion-refresher-content
  61285. * pullingIcon="arrow-dropdown"
  61286. * pullingText="Pull to refresh"
  61287. * refreshingSpinner="circles"
  61288. * refreshingText="Refreshing...">
  61289. * </ion-refresher-content>
  61290. * </ion-refresher>
  61291. *
  61292. * </ion-content>
  61293. * ```
  61294. *
  61295. *
  61296. * ## Further Customizing Refresher Content
  61297. *
  61298. * The `ion-refresher` component holds the refresh logic.
  61299. * It requires a child component in order to display the content.
  61300. * Ionic uses `ion-refresher-content` by default. This component
  61301. * displays the refresher and changes the look depending
  61302. * on the refresher's state. Separating these components
  61303. * allows developers to create their own refresher content
  61304. * components. You could replace our default content with
  61305. * custom SVG or CSS animations.
  61306. *
  61307. * @demo /docs/demos/src/refresher/
  61308. *
  61309. */
  61310. var Refresher = (function () {
  61311. function Refresher(_plt, _content, _zone, gestureCtrl) {
  61312. this._plt = _plt;
  61313. this._content = _content;
  61314. this._zone = _zone;
  61315. this._appliedStyles = false;
  61316. this._lastCheck = 0;
  61317. this._isEnabled = true;
  61318. this._top = '';
  61319. /**
  61320. * The current state which the refresher is in. The refresher's states include:
  61321. *
  61322. * - `inactive` - The refresher is not being pulled down or refreshing and is currently hidden.
  61323. * - `pulling` - The user is actively pulling down the refresher, but has not reached the point yet that if the user lets go, it'll refresh.
  61324. * - `cancelling` - The user pulled down the refresher and let go, but did not pull down far enough to kick off the `refreshing` state. After letting go, the refresher is in the `cancelling` state while it is closing, and will go back to the `inactive` state once closed.
  61325. * - `ready` - The user has pulled down the refresher far enough that if they let go, it'll begin the `refreshing` state.
  61326. * - `refreshing` - The refresher is actively waiting on the async operation to end. Once the refresh handler calls `complete()` it will begin the `completing` state.
  61327. * - `completing` - The `refreshing` state has finished and the refresher is in the process of closing itself. Once closed, the refresher will go back to the `inactive` state.
  61328. */
  61329. this.state = STATE_INACTIVE;
  61330. /**
  61331. * The Y coordinate of where the user started to the pull down the content.
  61332. */
  61333. this.startY = null;
  61334. /**
  61335. * The current touch or mouse event's Y coordinate.
  61336. */
  61337. this.currentY = null;
  61338. /**
  61339. * The distance between the start of the pull and the current touch or
  61340. * mouse event's Y coordinate.
  61341. */
  61342. this.deltaY = null;
  61343. /**
  61344. * A number representing how far down the user has pulled.
  61345. * The number `0` represents the user hasn't pulled down at all. The
  61346. * number `1`, and anything greater than `1`, represents that the user
  61347. * has pulled far enough down that when they let go then the refresh will
  61348. * happen. If they let go and the number is less than `1`, then the
  61349. * refresh will not happen, and the content will return to it's original
  61350. * position.
  61351. */
  61352. this.progress = 0;
  61353. /**
  61354. * @input {number} The min distance the user must pull down until the
  61355. * refresher can go into the `refreshing` state. Default is `60`.
  61356. */
  61357. this.pullMin = 60;
  61358. /**
  61359. * @input {number} The maximum distance of the pull until the refresher
  61360. * will automatically go into the `refreshing` state. By default, the pull
  61361. * maximum will be the result of `pullMin + 60`.
  61362. */
  61363. this.pullMax = this.pullMin + 60;
  61364. /**
  61365. * @input {number} How many milliseconds it takes to close the refresher. Default is `280`.
  61366. */
  61367. this.closeDuration = 280;
  61368. /**
  61369. * @input {number} How many milliseconds it takes the refresher to to snap back to the `refreshing` state. Default is `280`.
  61370. */
  61371. this.snapbackDuration = 280;
  61372. /**
  61373. * @output {event} Emitted when the user lets go and has pulled down
  61374. * far enough, which would be farther than the `pullMin`, then your refresh hander if
  61375. * fired and the state is updated to `refreshing`. From within your refresh handler,
  61376. * you must call the `complete()` method when your async operation has completed.
  61377. */
  61378. this.ionRefresh = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  61379. /**
  61380. * @output {event} Emitted while the user is pulling down the content and exposing the refresher.
  61381. */
  61382. this.ionPull = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  61383. /**
  61384. * @output {event} Emitted when the user begins to start pulling down.
  61385. */
  61386. this.ionStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  61387. this._events = new __WEBPACK_IMPORTED_MODULE_6__gestures_ui_event_manager__["a" /* UIEventManager */](_plt);
  61388. _content._hasRefresher = true;
  61389. this._gesture = gestureCtrl.createGesture({
  61390. name: __WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__["j" /* GESTURE_REFRESHER */],
  61391. priority: __WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__["g" /* GESTURE_PRIORITY_REFRESHER */]
  61392. });
  61393. }
  61394. Object.defineProperty(Refresher.prototype, "enabled", {
  61395. /**
  61396. * @input {boolean} If the refresher is enabled or not. This should be used in place of an `ngIf`. Default is `true`.
  61397. */
  61398. get: function () {
  61399. return this._isEnabled;
  61400. },
  61401. set: function (val) {
  61402. this._isEnabled = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  61403. this._setListeners(this._isEnabled);
  61404. },
  61405. enumerable: true,
  61406. configurable: true
  61407. });
  61408. Refresher.prototype._onStart = function (ev) {
  61409. // if multitouch then get out immediately
  61410. if (ev.touches && ev.touches.length > 1) {
  61411. return false;
  61412. }
  61413. if (this.state !== STATE_INACTIVE) {
  61414. return false;
  61415. }
  61416. var scrollHostScrollTop = this._content.getContentDimensions().scrollTop;
  61417. // if the scrollTop is greater than zero then it's
  61418. // not possible to pull the content down yet
  61419. if (scrollHostScrollTop > 0) {
  61420. return false;
  61421. }
  61422. if (!this._gesture.canStart()) {
  61423. return false;
  61424. }
  61425. var coord = Object(__WEBPACK_IMPORTED_MODULE_5__util_dom__["f" /* pointerCoord */])(ev);
  61426. (void 0) /* console.debug */;
  61427. if (this._content.contentTop > 0) {
  61428. var newTop = this._content.contentTop + 'px';
  61429. if (this._top !== newTop) {
  61430. this._top = newTop;
  61431. }
  61432. }
  61433. this.startY = this.currentY = coord.y;
  61434. this.progress = 0;
  61435. this.state = STATE_INACTIVE;
  61436. return true;
  61437. };
  61438. Refresher.prototype._onMove = function (ev) {
  61439. // this method can get called like a bazillion times per second,
  61440. // so it's built to be as efficient as possible, and does its
  61441. // best to do any DOM read/writes only when absolutely necessary
  61442. var _this = this;
  61443. // if multitouch then get out immediately
  61444. if (ev.touches && ev.touches.length > 1) {
  61445. return 1;
  61446. }
  61447. if (!this._gesture.canStart()) {
  61448. return 0;
  61449. }
  61450. // do nothing if it's actively refreshing
  61451. // or it's in the process of closing
  61452. // or this was never a startY
  61453. if (this.startY === null || this.state === STATE_REFRESHING || this.state === STATE_CANCELLING || this.state === STATE_COMPLETING) {
  61454. return 2;
  61455. }
  61456. // if we just updated stuff less than 16ms ago
  61457. // then don't check again, just chillout plz
  61458. var now = Date.now();
  61459. if (this._lastCheck + 16 > now) {
  61460. return 3;
  61461. }
  61462. // remember the last time we checked all this
  61463. this._lastCheck = now;
  61464. // get the current pointer coordinates
  61465. var coord = Object(__WEBPACK_IMPORTED_MODULE_5__util_dom__["f" /* pointerCoord */])(ev);
  61466. this.currentY = coord.y;
  61467. // it's now possible they could be pulling down the content
  61468. // how far have they pulled so far?
  61469. this.deltaY = (coord.y - this.startY);
  61470. // don't bother if they're scrolling up
  61471. // and have not already started dragging
  61472. if (this.deltaY <= 0) {
  61473. // the current Y is higher than the starting Y
  61474. // so they scrolled up enough to be ignored
  61475. this.progress = 0;
  61476. if (this.state !== STATE_INACTIVE) {
  61477. this._zone.run(function () {
  61478. _this.state = STATE_INACTIVE;
  61479. });
  61480. }
  61481. if (this._appliedStyles) {
  61482. // reset the styles only if they were applied
  61483. this._setCss(0, '', false, '');
  61484. return 5;
  61485. }
  61486. return 6;
  61487. }
  61488. if (this.state === STATE_INACTIVE) {
  61489. // this refresh is not already actively pulling down
  61490. // get the content's scrollTop
  61491. var scrollHostScrollTop = this._content.getContentDimensions().scrollTop;
  61492. // if the scrollTop is greater than zero then it's
  61493. // not possible to pull the content down yet
  61494. if (scrollHostScrollTop > 0) {
  61495. this.progress = 0;
  61496. this.startY = null;
  61497. return 7;
  61498. }
  61499. // content scrolled all the way to the top, and dragging down
  61500. this.state = STATE_PULLING;
  61501. }
  61502. // prevent native scroll events
  61503. ev.preventDefault();
  61504. // the refresher is actively pulling at this point
  61505. // move the scroll element within the content element
  61506. this._setCss(this.deltaY, '0ms', true, '');
  61507. if (!this.deltaY) {
  61508. // don't continue if there's no delta yet
  61509. this.progress = 0;
  61510. return 8;
  61511. }
  61512. // so far so good, let's run this all back within zone now
  61513. this._zone.run(function () {
  61514. _this._onMoveInZone();
  61515. });
  61516. };
  61517. Refresher.prototype._onMoveInZone = function () {
  61518. // set pull progress
  61519. this.progress = (this.deltaY / this.pullMin);
  61520. // emit "start" if it hasn't started yet
  61521. if (!this._didStart) {
  61522. this._didStart = true;
  61523. this.ionStart.emit(this);
  61524. }
  61525. // emit "pulling" on every move
  61526. this.ionPull.emit(this);
  61527. // do nothing if the delta is less than the pull threshold
  61528. if (this.deltaY < this.pullMin) {
  61529. // ensure it stays in the pulling state, cuz its not ready yet
  61530. this.state = STATE_PULLING;
  61531. return 2;
  61532. }
  61533. if (this.deltaY > this.pullMax) {
  61534. // they pulled farther than the max, so kick off the refresh
  61535. this._beginRefresh();
  61536. return 3;
  61537. }
  61538. // pulled farther than the pull min!!
  61539. // it is now in the `ready` state!!
  61540. // if they let go then it'll refresh, kerpow!!
  61541. this.state = STATE_READY;
  61542. return 4;
  61543. };
  61544. Refresher.prototype._onEnd = function () {
  61545. // only run in a zone when absolutely necessary
  61546. var _this = this;
  61547. if (this.state === STATE_READY) {
  61548. this._zone.run(function () {
  61549. // they pulled down far enough, so it's ready to refresh
  61550. _this._beginRefresh();
  61551. });
  61552. }
  61553. else if (this.state === STATE_PULLING) {
  61554. this._zone.run(function () {
  61555. // they were pulling down, but didn't pull down far enough
  61556. // set the content back to it's original location
  61557. // and close the refresher
  61558. // set that the refresh is actively cancelling
  61559. _this.cancel();
  61560. });
  61561. }
  61562. // reset on any touchend/mouseup
  61563. this.startY = null;
  61564. };
  61565. Refresher.prototype._beginRefresh = function () {
  61566. // assumes we're already back in a zone
  61567. // they pulled down far enough, so it's ready to refresh
  61568. this.state = STATE_REFRESHING;
  61569. // place the content in a hangout position while it thinks
  61570. this._setCss(this.pullMin, (this.snapbackDuration + 'ms'), true, '');
  61571. // emit "refresh" because it was pulled down far enough
  61572. // and they let go to begin refreshing
  61573. this.ionRefresh.emit(this);
  61574. };
  61575. /**
  61576. * Call `complete()` when your async operation has completed.
  61577. * For example, the `refreshing` state is while the app is performing
  61578. * an asynchronous operation, such as receiving more data from an
  61579. * AJAX request. Once the data has been received, you then call this
  61580. * method to signify that the refreshing has completed and to close
  61581. * the refresher. This method also changes the refresher's state from
  61582. * `refreshing` to `completing`.
  61583. */
  61584. Refresher.prototype.complete = function () {
  61585. this._close(STATE_COMPLETING, '120ms');
  61586. };
  61587. /**
  61588. * Changes the refresher's state from `refreshing` to `cancelling`.
  61589. */
  61590. Refresher.prototype.cancel = function () {
  61591. this._close(STATE_CANCELLING, '');
  61592. };
  61593. Refresher.prototype._close = function (state, delay) {
  61594. var timer;
  61595. function close(ev) {
  61596. // closing is done, return to inactive state
  61597. if (ev) {
  61598. clearTimeout(timer);
  61599. }
  61600. this.state = STATE_INACTIVE;
  61601. this.progress = 0;
  61602. this._didStart = this.startY = this.currentY = this.deltaY = null;
  61603. this._setCss(0, '0ms', false, '');
  61604. }
  61605. // create fallback timer incase something goes wrong with transitionEnd event
  61606. timer = setTimeout(close.bind(this), 600);
  61607. // create transition end event on the content's scroll element
  61608. this._content.onScrollElementTransitionEnd(close.bind(this));
  61609. // reset set the styles on the scroll element
  61610. // set that the refresh is actively cancelling/completing
  61611. this.state = state;
  61612. this._setCss(0, '', true, delay);
  61613. if (this._pointerEvents) {
  61614. this._pointerEvents.stop();
  61615. }
  61616. };
  61617. Refresher.prototype._setCss = function (y, duration, overflowVisible, delay) {
  61618. this._appliedStyles = (y > 0);
  61619. var content = this._content;
  61620. var Css = this._plt.Css;
  61621. content.setScrollElementStyle(Css.transform, ((y > 0) ? 'translateY(' + y + 'px) translateZ(0px)' : 'translateZ(0px)'));
  61622. content.setScrollElementStyle(Css.transitionDuration, duration);
  61623. content.setScrollElementStyle(Css.transitionDelay, delay);
  61624. content.setScrollElementStyle('overflow', (overflowVisible ? 'hidden' : ''));
  61625. };
  61626. Refresher.prototype._setListeners = function (shouldListen) {
  61627. this._events.unlistenAll();
  61628. this._pointerEvents = null;
  61629. if (shouldListen) {
  61630. this._pointerEvents = this._events.pointerEvents({
  61631. element: this._content.getScrollElement(),
  61632. pointerDown: this._onStart.bind(this),
  61633. pointerMove: this._onMove.bind(this),
  61634. pointerUp: this._onEnd.bind(this),
  61635. zone: false
  61636. });
  61637. }
  61638. };
  61639. /**
  61640. * @hidden
  61641. */
  61642. Refresher.prototype.ngOnInit = function () {
  61643. // bind event listeners
  61644. // save the unregister listener functions to use onDestroy
  61645. this._setListeners(this._isEnabled);
  61646. };
  61647. /**
  61648. * @hidden
  61649. */
  61650. Refresher.prototype.ngOnDestroy = function () {
  61651. this._setListeners(false);
  61652. this._events.destroy();
  61653. this._gesture.destroy();
  61654. };
  61655. Refresher.decorators = [
  61656. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  61657. selector: 'ion-refresher',
  61658. host: {
  61659. '[class.refresher-active]': 'state !== "inactive"',
  61660. '[style.top]': '_top'
  61661. }
  61662. },] },
  61663. ];
  61664. /** @nocollapse */
  61665. Refresher.ctorParameters = function () { return [
  61666. { type: __WEBPACK_IMPORTED_MODULE_4__platform_platform__["a" /* Platform */], },
  61667. { type: __WEBPACK_IMPORTED_MODULE_1__content_content__["a" /* Content */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["w" /* Host */] },] },
  61668. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  61669. { type: __WEBPACK_IMPORTED_MODULE_2__gestures_gesture_controller__["l" /* GestureController */], },
  61670. ]; };
  61671. Refresher.propDecorators = {
  61672. 'pullMin': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61673. 'pullMax': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61674. 'closeDuration': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61675. 'snapbackDuration': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61676. 'enabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61677. 'ionRefresh': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  61678. 'ionPull': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  61679. 'ionStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  61680. };
  61681. return Refresher;
  61682. }());
  61683. var STATE_INACTIVE = 'inactive';
  61684. var STATE_PULLING = 'pulling';
  61685. var STATE_READY = 'ready';
  61686. var STATE_REFRESHING = 'refreshing';
  61687. var STATE_CANCELLING = 'cancelling';
  61688. var STATE_COMPLETING = 'completing';
  61689. //# sourceMappingURL=refresher.js.map
  61690. /***/ }),
  61691. /* 134 */
  61692. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  61693. "use strict";
  61694. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SegmentButton; });
  61695. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  61696. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  61697. /**
  61698. * @name SegmentButton
  61699. * @description
  61700. * The child buttons of the `ion-segment` component. Each `ion-segment-button` must have a value.
  61701. *
  61702. * @usage
  61703. *
  61704. * ```html
  61705. * <ion-content>
  61706. * <!-- Segment buttons with icons -->
  61707. * <ion-segment [(ngModel)]="icons" color="secondary">
  61708. * <ion-segment-button value="camera">
  61709. * <ion-icon name="camera"></ion-icon>
  61710. * </ion-segment-button>
  61711. * <ion-segment-button value="bookmark">
  61712. * <ion-icon name="bookmark"></ion-icon>
  61713. * </ion-segment-button>
  61714. * </ion-segment>
  61715. *
  61716. * <!-- Segment buttons with text -->
  61717. * <ion-segment [(ngModel)]="relationship" color="primary">
  61718. * <ion-segment-button value="friends" (ionSelect)="selectedFriends()">
  61719. * Friends
  61720. * </ion-segment-button>
  61721. * <ion-segment-button value="enemies" (ionSelect)="selectedEnemies()">
  61722. * Enemies
  61723. * </ion-segment-button>
  61724. * </ion-segment>
  61725. * </ion-content>
  61726. * ```
  61727. *
  61728. *
  61729. * @demo /docs/demos/src/segment/
  61730. * @see {@link /docs/components#segment Segment Component Docs}
  61731. * @see {@link /docs/api/components/segment/Segment/ Segment API Docs}
  61732. */
  61733. var SegmentButton = (function () {
  61734. function SegmentButton() {
  61735. this.isActive = false;
  61736. this._disabled = false;
  61737. /**
  61738. * @output {SegmentButton} Emitted when a segment button has been clicked.
  61739. */
  61740. this.ionSelect = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  61741. }
  61742. Object.defineProperty(SegmentButton.prototype, "disabled", {
  61743. /**
  61744. * @input {boolean} If true, the user cannot interact with this element.
  61745. */
  61746. get: function () {
  61747. return this._disabled;
  61748. },
  61749. set: function (val) {
  61750. this._disabled = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  61751. },
  61752. enumerable: true,
  61753. configurable: true
  61754. });
  61755. /**
  61756. * @hidden
  61757. * On click of a SegmentButton
  61758. */
  61759. SegmentButton.prototype.onClick = function () {
  61760. (void 0) /* console.debug */;
  61761. this.ionSelect.emit(this);
  61762. };
  61763. /**
  61764. * @hidden
  61765. */
  61766. SegmentButton.prototype.ngOnInit = function () {
  61767. if (!Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(this.value)) {
  61768. console.warn('<ion-segment-button> requires a "value" attribute');
  61769. }
  61770. };
  61771. SegmentButton.decorators = [
  61772. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  61773. selector: 'ion-segment-button',
  61774. template: '<ng-content></ng-content>' +
  61775. '<div class="button-effect"></div>',
  61776. host: {
  61777. 'tappable': '',
  61778. 'class': 'segment-button',
  61779. 'role': 'button',
  61780. '[class.segment-button-disabled]': '_disabled',
  61781. '[class.segment-activated]': 'isActive',
  61782. '[attr.aria-pressed]': 'isActive'
  61783. },
  61784. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  61785. },] },
  61786. ];
  61787. /** @nocollapse */
  61788. SegmentButton.ctorParameters = function () { return []; };
  61789. SegmentButton.propDecorators = {
  61790. 'value': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61791. 'ionSelect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  61792. 'disabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  61793. 'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click',] },],
  61794. };
  61795. return SegmentButton;
  61796. }());
  61797. //# sourceMappingURL=segment-button.js.map
  61798. /***/ }),
  61799. /* 135 */
  61800. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  61801. "use strict";
  61802. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SelectPopover; });
  61803. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  61804. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__navigation_nav_params__ = __webpack_require__(23);
  61805. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__navigation_view_controller__ = __webpack_require__(9);
  61806. /** @hidden */
  61807. var SelectPopover = (function () {
  61808. function SelectPopover(navParams, viewController) {
  61809. this.navParams = navParams;
  61810. this.viewController = viewController;
  61811. }
  61812. Object.defineProperty(SelectPopover.prototype, "value", {
  61813. get: function () {
  61814. var checkedOption = this.options.find(function (option) { return option.checked; });
  61815. return checkedOption ? checkedOption.value : undefined;
  61816. },
  61817. set: function (value) {
  61818. var checkedOption = this.options.find(function (option) { return option.value === value; });
  61819. if (checkedOption && checkedOption.handler) {
  61820. checkedOption.handler();
  61821. }
  61822. this.viewController.dismiss(value);
  61823. },
  61824. enumerable: true,
  61825. configurable: true
  61826. });
  61827. SelectPopover.prototype.ngOnInit = function () {
  61828. this.options = this.navParams.data.options;
  61829. };
  61830. SelectPopover.decorators = [
  61831. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  61832. template: "\n <ion-list radio-group [(ngModel)]=\"value\">\n <ion-item *ngFor=\"let option of options\">\n <ion-label>{{option.text}}</ion-label>\n <ion-radio [checked]=\"option.checked\" [value]=\"option.value\" [disabled]=\"option.disabled\"></ion-radio>\n </ion-item>\n </ion-list>\n "
  61833. },] },
  61834. ];
  61835. /** @nocollapse */
  61836. SelectPopover.ctorParameters = function () { return [
  61837. { type: __WEBPACK_IMPORTED_MODULE_1__navigation_nav_params__["a" /* NavParams */], },
  61838. { type: __WEBPACK_IMPORTED_MODULE_2__navigation_view_controller__["a" /* ViewController */], },
  61839. ]; };
  61840. return SelectPopover;
  61841. }());
  61842. //# sourceMappingURL=select-popover-component.js.map
  61843. /***/ }),
  61844. /* 136 */
  61845. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  61846. "use strict";
  61847. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DisplayWhen; });
  61848. /**
  61849. * @hidden
  61850. */
  61851. var DisplayWhen = (function () {
  61852. function DisplayWhen(conditions, _plt, zone) {
  61853. this._plt = _plt;
  61854. this.zone = zone;
  61855. this.isMatch = false;
  61856. if (!conditions)
  61857. return;
  61858. this.conditions = conditions.replace(/\s/g, '').split(',');
  61859. // check if its one of the matching platforms first
  61860. // a platform does not change during the life of an app
  61861. for (var i = 0; i < this.conditions.length; i++) {
  61862. if (this.conditions[i] && _plt.is(this.conditions[i])) {
  61863. this.isMatch = true;
  61864. return;
  61865. }
  61866. }
  61867. if (this.orientation()) {
  61868. // add window resize listener
  61869. this.resizeObs = _plt.resize.subscribe(this.orientation.bind(this));
  61870. }
  61871. }
  61872. DisplayWhen.prototype.orientation = function () {
  61873. for (var i = 0; i < this.conditions.length; i++) {
  61874. if (this.conditions[i] === 'portrait') {
  61875. this.isMatch = this._plt.isPortrait();
  61876. return true;
  61877. }
  61878. if (this.conditions[i] === 'landscape') {
  61879. this.isMatch = this._plt.isLandscape();
  61880. return true;
  61881. }
  61882. }
  61883. return false;
  61884. };
  61885. DisplayWhen.prototype.ngOnDestroy = function () {
  61886. this.resizeObs && this.resizeObs.unsubscribe();
  61887. this.resizeObs = null;
  61888. };
  61889. return DisplayWhen;
  61890. }());
  61891. //# sourceMappingURL=display-when.js.map
  61892. /***/ }),
  61893. /* 137 */
  61894. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  61895. "use strict";
  61896. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Slides; });
  61897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  61898. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  61899. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__swiper_swiper_keyboard__ = __webpack_require__(661);
  61900. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ion__ = __webpack_require__(8);
  61901. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_util__ = __webpack_require__(3);
  61902. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__swiper_swiper_events__ = __webpack_require__(664);
  61903. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__swiper_swiper_zoom__ = __webpack_require__(324);
  61904. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__platform_platform__ = __webpack_require__(7);
  61905. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__swiper_swiper__ = __webpack_require__(81);
  61906. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__swiper_swiper_effects__ = __webpack_require__(141);
  61907. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__navigation_view_controller__ = __webpack_require__(9);
  61908. var __extends = (this && this.__extends) || (function () {
  61909. var extendStatics = Object.setPrototypeOf ||
  61910. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  61911. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  61912. return function (d, b) {
  61913. extendStatics(d, b);
  61914. function __() { this.constructor = d; }
  61915. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  61916. };
  61917. })();
  61918. /**
  61919. * @name Slides
  61920. * @description
  61921. * The Slides component is a multi-section container. Each section can be swiped
  61922. * or dragged between. It contains any number of [Slide](../Slide) components.
  61923. *
  61924. *
  61925. * ### Creating
  61926. * You should use a template to create slides and listen to slide events. The template
  61927. * should contain the slide container, an `<ion-slides>` element, and any number of
  61928. * [Slide](../Slide) components, written as `<ion-slide>`. Basic configuration
  61929. * values can be set as input properties, which are listed below. Slides events
  61930. * can also be listened to such as the slide changing by placing the event on the
  61931. * `<ion-slides>` element. See [Usage](#usage) below for more information.
  61932. *
  61933. *
  61934. * ### Navigating
  61935. * After creating and configuring the slides, you can navigate between them
  61936. * by swiping or calling methods on the `Slides` instance. You can call `slideTo()` to
  61937. * navigate to a specific slide, or `slideNext()` to change to the slide that follows
  61938. * the active slide. All of the [methods](#instance-members) provided by the `Slides`
  61939. * instance are listed below. See [Usage](#usage) below for more information on
  61940. * navigating between slides.
  61941. *
  61942. *
  61943. * @usage
  61944. *
  61945. * You can add slides to a `@Component` using the following template:
  61946. *
  61947. * ```html
  61948. * <ion-slides>
  61949. * <ion-slide>
  61950. * <h1>Slide 1</h1>
  61951. * </ion-slide>
  61952. * <ion-slide>
  61953. * <h1>Slide 2</h1>
  61954. * </ion-slide>
  61955. * <ion-slide>
  61956. * <h1>Slide 3</h1>
  61957. * </ion-slide>
  61958. * </ion-slides>
  61959. * ```
  61960. *
  61961. * Next, we can use `ViewChild` to assign the Slides instance to
  61962. * your `slides` property. Now we can call any of the `Slides`
  61963. * [methods](#instance-members), for example we can use the Slide's
  61964. * `slideTo()` method in order to navigate to a specific slide on
  61965. * a button click. Below we call the `goToSlide()` method and it
  61966. * navigates to the 3rd slide:
  61967. *
  61968. * ```ts
  61969. * import { ViewChild } from '@angular/core';
  61970. * import { Slides } from 'ionic-angular';
  61971. *
  61972. * class MyPage {
  61973. * @ViewChild(Slides) slides: Slides;
  61974. *
  61975. * goToSlide() {
  61976. * this.slides.slideTo(2, 500);
  61977. * }
  61978. * }
  61979. * ```
  61980. *
  61981. * We can also add events to listen to on the `<ion-slides>` element.
  61982. * Let's add the `ionSlideDidChange` event and call a method when the slide changes:
  61983. *
  61984. * ```html
  61985. * <ion-slides (ionSlideDidChange)="slideChanged()">
  61986. * ```
  61987. *
  61988. * In our class, we add the `slideChanged()` method which gets the active
  61989. * index and prints it:
  61990. *
  61991. * ```ts
  61992. * class MyPage {
  61993. * ...
  61994. *
  61995. * slideChanged() {
  61996. * let currentIndex = this.slides.getActiveIndex();
  61997. * console.log('Current index is', currentIndex);
  61998. * }
  61999. * }
  62000. * ```
  62001. *
  62002. * ### Zooming
  62003. * If your slides contain images, you can enable zooming on them by setting `zoom="true" and
  62004. * wrapping each image in a `div` with the class `swiper-zoom-container`. Zoom supports
  62005. * `img`, `svg`, `canvas`, and `ion-img`.
  62006. *
  62007. * ```html
  62008. * <ion-slides zoom="true">
  62009. * <ion-slide>
  62010. * <div class="swiper-zoom-container">
  62011. * <img src="assets/img/dog.jpg">
  62012. * </div>
  62013. * <ion-label>Woof</ion-label>
  62014. * </ion-slide>
  62015. * <ion-slide>
  62016. * <div class="swiper-zoom-container">
  62017. * <img src="assets/img/cat.jpg">
  62018. * </div>
  62019. * <ion-label>Meow</ion-label>
  62020. * </ion-slide>
  62021. * <ion-slide>
  62022. * <div class="swiper-zoom-container">
  62023. * <img src="assets/img/fish.jpg">
  62024. * </div>
  62025. * <ion-label>Just keep swimming</ion-label>
  62026. * </ion-slide>
  62027. * </ion-slides>
  62028. * ```
  62029. *
  62030. * @advanced
  62031. *
  62032. * There are several options available to create customized slides. Ionic exposes
  62033. * the most commonly used options as [inputs](http://learnangular2.com/inputs/).
  62034. * In order to use an option that isn't exposed as an input the following code
  62035. * should be used, where `freeMode` is the option to change:
  62036. *
  62037. * ```ts
  62038. * import { ViewChild } from '@angular/core';
  62039. * import { Slides } from 'ionic-angular';
  62040. * class MyPage {
  62041. * @ViewChild(Slides) slides: Slides;
  62042. *
  62043. * ngAfterViewInit() {
  62044. * this.slides.freeMode = true;
  62045. * }
  62046. * }
  62047. *
  62048. * ```
  62049. *
  62050. * To see all of the available options, take a look at the
  62051. * [source for slides](https://github.com/ionic-team/ionic/blob/master/src/components/slides/slides.ts).
  62052. *
  62053. * @demo /docs/demos/src/slides/
  62054. * @see {@link /docs/components#slides Slides Component Docs}
  62055. *
  62056. * Adopted from Swiper.js:
  62057. * The most modern mobile touch slider and framework with
  62058. * hardware accelerated transitions.
  62059. *
  62060. * http://www.idangero.us/swiper/
  62061. *
  62062. * Copyright 2016, Vladimir Kharlampidi
  62063. * The iDangero.us
  62064. * http://www.idangero.us/
  62065. *
  62066. * Licensed under MIT
  62067. */
  62068. var Slides = (function (_super) {
  62069. __extends(Slides, _super);
  62070. function Slides(config, _plt, zone, viewCtrl, elementRef, renderer) {
  62071. var _this = _super.call(this, config, elementRef, renderer, 'slides') || this;
  62072. _this._plt = _plt;
  62073. _this._control = null;
  62074. _this._effectName = 'slide';
  62075. _this._direction = 'horizontal';
  62076. _this._initialSlide = 0;
  62077. _this._isLoop = false;
  62078. _this._pager = false;
  62079. _this._paginationType = 'bullets';
  62080. /** @hidden */
  62081. _this.paginationBulletRender = null;
  62082. _this._isParallax = false;
  62083. _this._speedMs = 300;
  62084. _this._isZoom = false;
  62085. /**
  62086. * @hidden
  62087. * Enabled this option and swiper will be operated as usual except it will
  62088. * not move, real translate values on wrapper will not be set. Useful when
  62089. * you may need to create custom slide transition.
  62090. */
  62091. _this.virtualTranslate = false;
  62092. /**
  62093. * @hidden
  62094. * Set to true to round values of slides width and height to prevent blurry
  62095. * texts on usual resolution screens (if you have such)
  62096. */
  62097. _this.roundLengths = false;
  62098. _this._spaceBetween = 0;
  62099. _this._slidesPerView = 1;
  62100. _this._centeredSlides = false;
  62101. /**
  62102. * @hidden
  62103. */
  62104. _this.slidesPerColumn = 1;
  62105. /**
  62106. * @hidden
  62107. */
  62108. _this.slidesPerColumnFill = 'column';
  62109. /**
  62110. * @hidden
  62111. */
  62112. _this.slidesPerGroup = 1;
  62113. /**
  62114. * @hidden
  62115. */
  62116. _this.slidesOffsetBefore = 0;
  62117. /**
  62118. * @hidden
  62119. */
  62120. _this.slidesOffsetAfter = 0;
  62121. // autoplay
  62122. /**
  62123. * @hidden
  62124. */
  62125. _this.autoplayDisableOnInteraction = true;
  62126. /**
  62127. * @hidden
  62128. */
  62129. _this.autoplayStopOnLast = false;
  62130. // Free mode
  62131. /**
  62132. * @hidden
  62133. */
  62134. _this.freeMode = false;
  62135. /**
  62136. * @hidden
  62137. */
  62138. _this.freeModeMomentum = true;
  62139. /**
  62140. * @hidden
  62141. */
  62142. _this.freeModeMomentumRatio = 1;
  62143. /**
  62144. * @hidden
  62145. */
  62146. _this.freeModeMomentumBounce = true;
  62147. /**
  62148. * @hidden
  62149. */
  62150. _this.freeModeMomentumBounceRatio = 1;
  62151. /**
  62152. * @hidden
  62153. */
  62154. _this.freeModeMomentumVelocityRatio = 1;
  62155. /**
  62156. * @hidden
  62157. */
  62158. _this.freeModeSticky = false;
  62159. /**
  62160. * @hidden
  62161. */
  62162. _this.freeModeMinimumVelocity = 0.02;
  62163. // Autoheight
  62164. /**
  62165. * @hidden
  62166. */
  62167. _this.autoHeight = false;
  62168. // Set wrapper width
  62169. /**
  62170. * @hidden
  62171. */
  62172. _this.setWrapperSize = false;
  62173. // Zoom
  62174. /**
  62175. * @hidden
  62176. */
  62177. _this.zoomMax = 3;
  62178. /**
  62179. * @hidden
  62180. */
  62181. _this.zoomMin = 1;
  62182. /**
  62183. * @hidden
  62184. */
  62185. _this.zoomToggle = true;
  62186. // Touches
  62187. /**
  62188. * @hidden
  62189. */
  62190. _this.touchRatio = 1;
  62191. /**
  62192. * @hidden
  62193. */
  62194. _this.touchAngle = 45;
  62195. /**
  62196. * @hidden
  62197. */
  62198. _this.simulateTouch = true;
  62199. /**
  62200. * @hidden
  62201. */
  62202. _this.shortSwipes = true;
  62203. /**
  62204. * @hidden
  62205. */
  62206. _this.longSwipes = true;
  62207. /**
  62208. * @hidden
  62209. */
  62210. _this.longSwipesRatio = 0.5;
  62211. /**
  62212. * @hidden
  62213. */
  62214. _this.longSwipesMs = 300;
  62215. /**
  62216. * @hidden
  62217. */
  62218. _this.followFinger = true;
  62219. /**
  62220. * @hidden
  62221. */
  62222. _this.onlyExternal = false;
  62223. /**
  62224. * @hidden
  62225. */
  62226. _this.threshold = 0;
  62227. /**
  62228. * @hidden
  62229. */
  62230. _this.touchMoveStopPropagation = true;
  62231. /**
  62232. * @hidden
  62233. */
  62234. _this.touchReleaseOnEdges = false;
  62235. // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
  62236. /**
  62237. * @hidden
  62238. */
  62239. _this.iOSEdgeSwipeDetection = false;
  62240. /**
  62241. * @hidden
  62242. */
  62243. _this.iOSEdgeSwipeThreshold = 20;
  62244. // Pagination
  62245. /**
  62246. * @hidden
  62247. */
  62248. _this.paginationClickable = false;
  62249. /**
  62250. * @hidden
  62251. */
  62252. _this.paginationHide = false;
  62253. // Resistance
  62254. /** @hidden */
  62255. _this.resistance = true;
  62256. /** @hidden */
  62257. _this.resistanceRatio = 0.85;
  62258. // Progress
  62259. /** @hidden */
  62260. _this.watchSlidesProgress = false;
  62261. /** @hidden */
  62262. _this.watchSlidesVisibility = false;
  62263. // Clicks
  62264. /**
  62265. * @hidden
  62266. */
  62267. _this.preventClicks = true;
  62268. /**
  62269. * @hidden
  62270. */
  62271. _this.preventClicksPropagation = true;
  62272. /**
  62273. * @hidden
  62274. */
  62275. _this.slideToClickedSlide = false;
  62276. // loop
  62277. /**
  62278. * @hidden
  62279. */
  62280. _this.loopAdditionalSlides = 0;
  62281. /**
  62282. * @hidden
  62283. */
  62284. _this.loopedSlides = null;
  62285. // Swiping/no swiping
  62286. /**
  62287. * @hidden
  62288. */
  62289. _this.swipeHandler = null;
  62290. /**
  62291. * @hidden
  62292. */
  62293. _this.noSwiping = true;
  62294. // Callbacks
  62295. /** @hidden */
  62296. _this.runCallbacksOnInit = true;
  62297. // Controller
  62298. _this.controlBy = 'slide';
  62299. _this.controlInverse = false;
  62300. // Keyboard
  62301. /**
  62302. * @hidden
  62303. */
  62304. _this.keyboardControl = true;
  62305. // Effects
  62306. /**
  62307. * @hidden
  62308. */
  62309. _this.coverflow = {
  62310. rotate: 50,
  62311. stretch: 0,
  62312. depth: 100,
  62313. modifier: 1,
  62314. slideShadows: true
  62315. };
  62316. /**
  62317. * @hidden
  62318. */
  62319. _this.flip = {
  62320. slideShadows: true,
  62321. limitRotation: true
  62322. };
  62323. /**
  62324. * @hidden
  62325. */
  62326. _this.cube = {
  62327. slideShadows: true,
  62328. shadow: true,
  62329. shadowOffset: 20,
  62330. shadowScale: 0.94
  62331. };
  62332. /**
  62333. * @hidden
  62334. */
  62335. _this.fade = {
  62336. crossFade: false
  62337. };
  62338. // Accessibility
  62339. /**
  62340. * @hidden
  62341. */
  62342. _this.prevSlideMessage = 'Previous slide';
  62343. /**
  62344. * @hidden
  62345. */
  62346. _this.nextSlideMessage = 'Next slide';
  62347. /**
  62348. * @hidden
  62349. */
  62350. _this.firstSlideMessage = 'This is the first slide';
  62351. /**
  62352. * @hidden
  62353. */
  62354. _this.lastSlideMessage = 'This is the last slide';
  62355. /**
  62356. * @output {Slides} Emitted when a slide change starts.
  62357. */
  62358. _this.ionSlideWillChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62359. /**
  62360. * @output {Slides} Emitted when a slide change ends.
  62361. */
  62362. _this.ionSlideDidChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62363. /**
  62364. * @output {Slides} Emitted when a slide moves.
  62365. */
  62366. _this.ionSlideDrag = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62367. /**
  62368. * @output {Slides} Emitted when slides reaches its beginning (initial position).
  62369. */
  62370. _this.ionSlideReachStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62371. /**
  62372. * @output {Slides} Emitted when slides reaches its last slide.
  62373. */
  62374. _this.ionSlideReachEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62375. /**
  62376. * @output {Slides} Emitted when a slide moves.
  62377. */
  62378. _this.ionSlideAutoplay = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62379. /**
  62380. * @output {Slides} Emitted when a autoplay starts.
  62381. */
  62382. _this.ionSlideAutoplayStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62383. /**
  62384. * @output {Slides} Emitted when a autoplay stops.
  62385. */
  62386. _this.ionSlideAutoplayStop = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62387. /**
  62388. * @output {Slides} Emitted when a slide change starts with the "forward" direction.
  62389. */
  62390. _this.ionSlideNextStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62391. /**
  62392. * @output {Slides} Emitted when a slide change starts with the "backward" direction.
  62393. */
  62394. _this.ionSlidePrevStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62395. /**
  62396. * @output {Slides} Emitted when a slide change ends with the "forward" direction.
  62397. */
  62398. _this.ionSlideNextEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62399. /**
  62400. * @output {Slides} Emitted when a slide change ends with the "backward" direction.
  62401. */
  62402. _this.ionSlidePrevEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62403. /**
  62404. * @output {Slides} Emitted when the user taps/clicks on the slide's container.
  62405. */
  62406. _this.ionSlideTap = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62407. /**
  62408. * @output {Slides} Emitted when the user double taps on the slide's container.
  62409. */
  62410. _this.ionSlideDoubleTap = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62411. /** @hidden */
  62412. _this.ionSlideProgress = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62413. /** @hidden */
  62414. _this.ionSlideTransitionStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62415. /** @hidden */
  62416. _this.ionSlideTransitionEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62417. /** @hidden */
  62418. _this.ionSlideTouchStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62419. /** @hidden */
  62420. _this.ionSlideTouchEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  62421. _this._unregs = [];
  62422. /** @internal */
  62423. _this._allowSwipeToNext = true;
  62424. /** @internal */
  62425. _this._allowSwipeToPrev = true;
  62426. _this._zone = zone;
  62427. _this.id = ++slidesId;
  62428. _this.slideId = 'slides-' + _this.id;
  62429. _this.setElementClass(_this.slideId, true);
  62430. // only initialize the slides whent the content is ready
  62431. if (viewCtrl) {
  62432. var subscription = viewCtrl.readReady.subscribe(function () {
  62433. subscription.unsubscribe();
  62434. _this._initSlides();
  62435. });
  62436. }
  62437. return _this;
  62438. }
  62439. Object.defineProperty(Slides.prototype, "autoplay", {
  62440. /**
  62441. * @input {number} Delay between transitions (in milliseconds). If this
  62442. * parameter is not passed, autoplay is disabled. Default does
  62443. * not have a value and does not autoplay.
  62444. * Default: `null`.
  62445. */
  62446. get: function () {
  62447. return this._autoplayMs;
  62448. },
  62449. set: function (val) {
  62450. this._autoplayMs = parseInt(val, 10);
  62451. },
  62452. enumerable: true,
  62453. configurable: true
  62454. });
  62455. Object.defineProperty(Slides.prototype, "control", {
  62456. /**
  62457. * @input {Slides} Pass another Slides instance or array of Slides instances
  62458. * that should be controlled by this Slides instance.
  62459. * Default: `null`.
  62460. */
  62461. get: function () {
  62462. return this._control;
  62463. },
  62464. set: function (val) {
  62465. if (val instanceof Slides || Array.isArray(val)) {
  62466. this._control = val;
  62467. }
  62468. },
  62469. enumerable: true,
  62470. configurable: true
  62471. });
  62472. Object.defineProperty(Slides.prototype, "effect", {
  62473. /**
  62474. * @input {string} The animation effect of the slides.
  62475. * Possible values are: `slide`, `fade`, `cube`, `coverflow` or `flip`.
  62476. * Default: `slide`.
  62477. */
  62478. get: function () {
  62479. return this._effectName;
  62480. },
  62481. set: function (effectName) {
  62482. if (__WEBPACK_IMPORTED_MODULE_9__swiper_swiper_effects__["a" /* SWIPER_EFFECTS */][effectName]) {
  62483. this._effectName = effectName;
  62484. }
  62485. },
  62486. enumerable: true,
  62487. configurable: true
  62488. });
  62489. Object.defineProperty(Slides.prototype, "direction", {
  62490. /**
  62491. * @input {string} Swipe direction: 'horizontal' or 'vertical'.
  62492. * Default: `horizontal`.
  62493. */
  62494. get: function () {
  62495. return this._direction;
  62496. },
  62497. set: function (val) {
  62498. if (val === 'horizontal' || val === 'vertical') {
  62499. this._direction = val;
  62500. }
  62501. },
  62502. enumerable: true,
  62503. configurable: true
  62504. });
  62505. Object.defineProperty(Slides.prototype, "initialSlide", {
  62506. /**
  62507. * @input {number} Index number of initial slide. Default: `0`.
  62508. */
  62509. get: function () {
  62510. return this._initialSlide;
  62511. },
  62512. set: function (val) {
  62513. this._initialSlide = parseInt(val, 10);
  62514. },
  62515. enumerable: true,
  62516. configurable: true
  62517. });
  62518. Object.defineProperty(Slides.prototype, "loop", {
  62519. /**
  62520. * @input {boolean} If true, continuously loop from the last slide to the
  62521. * first slide.
  62522. */
  62523. get: function () {
  62524. return this._isLoop;
  62525. },
  62526. set: function (val) {
  62527. this._isLoop = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  62528. },
  62529. enumerable: true,
  62530. configurable: true
  62531. });
  62532. Object.defineProperty(Slides.prototype, "pager", {
  62533. /**
  62534. * @input {boolean} If true, show the pager.
  62535. */
  62536. get: function () {
  62537. return this._pager;
  62538. },
  62539. set: function (val) {
  62540. this._pager = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  62541. },
  62542. enumerable: true,
  62543. configurable: true
  62544. });
  62545. Object.defineProperty(Slides.prototype, "dir", {
  62546. /**
  62547. * @input {string} If dir attribute is equal to rtl, set interal _rtl to true;
  62548. */
  62549. set: function (val) {
  62550. this._rtl = (val.toLowerCase() === 'rtl');
  62551. },
  62552. enumerable: true,
  62553. configurable: true
  62554. });
  62555. Object.defineProperty(Slides.prototype, "paginationType", {
  62556. /**
  62557. * @input {string} Type of pagination. Possible values are:
  62558. * `bullets`, `fraction`, `progress`. Default: `bullets`.
  62559. * (Note that the pager will not show unless `pager` input
  62560. * is set to true).
  62561. */
  62562. get: function () {
  62563. return this._paginationType;
  62564. },
  62565. set: function (val) {
  62566. if (val === 'bullets' || val === 'fraction' || val === 'progress') {
  62567. this._paginationType = val;
  62568. }
  62569. },
  62570. enumerable: true,
  62571. configurable: true
  62572. });
  62573. Object.defineProperty(Slides.prototype, "parallax", {
  62574. /**
  62575. * @input {boolean} If true, allows you to use "parallaxed" elements inside of
  62576. * slider.
  62577. */
  62578. get: function () {
  62579. return this._isParallax;
  62580. },
  62581. set: function (val) {
  62582. this._isParallax = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  62583. },
  62584. enumerable: true,
  62585. configurable: true
  62586. });
  62587. Object.defineProperty(Slides.prototype, "speed", {
  62588. /**
  62589. * @input {number} Duration of transition between slides
  62590. * (in milliseconds). Default: `300`.
  62591. */
  62592. get: function () {
  62593. return this._speedMs;
  62594. },
  62595. set: function (val) {
  62596. this._speedMs = parseInt(val, 10);
  62597. },
  62598. enumerable: true,
  62599. configurable: true
  62600. });
  62601. Object.defineProperty(Slides.prototype, "zoom", {
  62602. /**
  62603. * @input {boolean} If true, enables zooming functionality.
  62604. */
  62605. get: function () {
  62606. return this._isZoom;
  62607. },
  62608. set: function (val) {
  62609. this._isZoom = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  62610. },
  62611. enumerable: true,
  62612. configurable: true
  62613. });
  62614. Object.defineProperty(Slides.prototype, "spaceBetween", {
  62615. // Slides grid
  62616. /**
  62617. * @input {number} Distance between slides in px. Default: `0`.
  62618. */
  62619. get: function () {
  62620. return this._spaceBetween;
  62621. },
  62622. set: function (val) {
  62623. this._spaceBetween = parseInt(val, 10);
  62624. },
  62625. enumerable: true,
  62626. configurable: true
  62627. });
  62628. Object.defineProperty(Slides.prototype, "slidesPerView", {
  62629. /**
  62630. * @input {number} Slides per view. Slides visible at the same time. Default: `1`.
  62631. */
  62632. get: function () {
  62633. return this._slidesPerView;
  62634. },
  62635. set: function (val) {
  62636. this._slidesPerView = val === 'auto' ? 'auto' : parseFloat(val);
  62637. },
  62638. enumerable: true,
  62639. configurable: true
  62640. });
  62641. Object.defineProperty(Slides.prototype, "centeredSlides", {
  62642. /**
  62643. * @input {boolean} Center a slide in the middle of the screen.
  62644. */
  62645. get: function () {
  62646. return this._centeredSlides;
  62647. },
  62648. set: function (val) {
  62649. this._centeredSlides = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  62650. },
  62651. enumerable: true,
  62652. configurable: true
  62653. });
  62654. Slides.prototype._initSlides = function () {
  62655. if (!this._init) {
  62656. (void 0) /* console.debug */;
  62657. var s = this;
  62658. var plt = s._plt;
  62659. s.container = this.getNativeElement().children[0];
  62660. // init swiper core
  62661. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["d" /* initSwiper */])(s, plt);
  62662. // init core event listeners
  62663. this._unregs.push(Object(__WEBPACK_IMPORTED_MODULE_5__swiper_swiper_events__["a" /* initEvents */])(s, plt));
  62664. if (this.zoom) {
  62665. // init zoom event listeners
  62666. this._unregs.push(Object(__WEBPACK_IMPORTED_MODULE_6__swiper_swiper_zoom__["a" /* initZoom */])(s, plt));
  62667. }
  62668. if (this.keyboardControl) {
  62669. // init keyboard event listeners
  62670. s.enableKeyboardControl(true);
  62671. }
  62672. this._init = true;
  62673. }
  62674. };
  62675. /**
  62676. * @hidden
  62677. */
  62678. Slides.prototype.ngAfterContentInit = function () {
  62679. var _this = this;
  62680. this._plt.timeout(function () {
  62681. _this._initSlides();
  62682. }, 300);
  62683. };
  62684. /**
  62685. * Update the underlying slider implementation. Call this if you've added or removed
  62686. * child slides.
  62687. */
  62688. Slides.prototype.update = function (debounce) {
  62689. var _this = this;
  62690. if (debounce === void 0) { debounce = 300; }
  62691. if (this._init) {
  62692. this._plt.cancelTimeout(this._tmr);
  62693. this._tmr = this._plt.timeout(function () {
  62694. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["n" /* update */])(_this, _this._plt);
  62695. // Don't allow pager to show with > 10 slides
  62696. if (_this.length() > 10) {
  62697. _this.paginationType = undefined;
  62698. }
  62699. }, debounce);
  62700. }
  62701. };
  62702. Slides.prototype.resize = function () {
  62703. if (this._init) {
  62704. }
  62705. };
  62706. /**
  62707. * Transition to the specified slide.
  62708. *
  62709. * @param {number} index The index number of the slide.
  62710. * @param {number} [speed] Transition duration (in ms).
  62711. * @param {boolean} [runCallbacks] Whether or not to emit the `ionSlideWillChange`/`ionSlideDidChange` events. Default true.
  62712. */
  62713. Slides.prototype.slideTo = function (index, speed, runCallbacks) {
  62714. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["k" /* slideTo */])(this, this._plt, index, speed, runCallbacks);
  62715. };
  62716. /**
  62717. * Transition to the next slide.
  62718. *
  62719. * @param {number} [speed] Transition duration (in ms).
  62720. * @param {boolean} [runCallbacks] Whether or not to emit the `ionSlideWillChange`/`ionSlideDidChange` events. Default true.
  62721. */
  62722. Slides.prototype.slideNext = function (speed, runCallbacks) {
  62723. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["h" /* slideNext */])(this, this._plt, runCallbacks, speed, true);
  62724. };
  62725. /**
  62726. * Transition to the previous slide.
  62727. *
  62728. * @param {number} [speed] Transition duration (in ms).
  62729. * @param {boolean} [runCallbacks] Whether or not to emit the `ionSlideWillChange`/`ionSlideDidChange` events. Default true.
  62730. */
  62731. Slides.prototype.slidePrev = function (speed, runCallbacks) {
  62732. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["i" /* slidePrev */])(this, this._plt, runCallbacks, speed, true);
  62733. };
  62734. /**
  62735. * Get the index of the active slide.
  62736. *
  62737. * @returns {number} The index number of the current slide.
  62738. */
  62739. Slides.prototype.getActiveIndex = function () {
  62740. return this._activeIndex;
  62741. };
  62742. /**
  62743. * Get the index of the previous slide.
  62744. *
  62745. * @returns {number} The index number of the previous slide.
  62746. */
  62747. Slides.prototype.getPreviousIndex = function () {
  62748. return this._previousIndex;
  62749. };
  62750. /**
  62751. * Get the total number of slides.
  62752. *
  62753. * @returns {number} The total number of slides.
  62754. */
  62755. Slides.prototype.length = function () {
  62756. return this._slides.length;
  62757. };
  62758. /**
  62759. * Get whether or not the current slide is the last slide.
  62760. *
  62761. * @returns {boolean} If the slide is the last slide or not.
  62762. */
  62763. Slides.prototype.isEnd = function () {
  62764. return this._isEnd;
  62765. };
  62766. /**
  62767. * Get whether or not the current slide is the first slide.
  62768. *
  62769. * @returns {boolean} If the slide is the first slide or not.
  62770. */
  62771. Slides.prototype.isBeginning = function () {
  62772. return this._isBeginning;
  62773. };
  62774. /**
  62775. * Start auto play.
  62776. */
  62777. Slides.prototype.startAutoplay = function () {
  62778. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["l" /* startAutoplay */])(this, this._plt);
  62779. };
  62780. /**
  62781. * Stop auto play.
  62782. */
  62783. Slides.prototype.stopAutoplay = function () {
  62784. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["m" /* stopAutoplay */])(this);
  62785. };
  62786. /**
  62787. * Lock or unlock the ability to slide to the next slides.
  62788. * @param {boolean} shouldLockSwipeToNext If set to true the user will not be able to swipe to the next slide.
  62789. * Set to false to unlock this behaviour.
  62790. */
  62791. Slides.prototype.lockSwipeToNext = function (shouldLockSwipeToNext) {
  62792. this._allowSwipeToNext = !shouldLockSwipeToNext;
  62793. };
  62794. /**
  62795. * Lock or unlock the ability to slide to the previous slides.
  62796. * @param {boolean} shouldLockSwipeToPrev If set to true the user will not be able to swipe to the previous slide.
  62797. * Set to false to unlock this behaviour.
  62798. */
  62799. Slides.prototype.lockSwipeToPrev = function (shouldLockSwipeToPrev) {
  62800. this._allowSwipeToPrev = !shouldLockSwipeToPrev;
  62801. };
  62802. /**
  62803. * Lock or unlock the ability to slide to change slides.
  62804. * @param {boolean} shouldLockSwipes If set to true user can not swipe in either direction on slide.
  62805. * False allows swiping in both directions.
  62806. */
  62807. Slides.prototype.lockSwipes = function (shouldLockSwipes) {
  62808. this._allowSwipeToNext = this._allowSwipeToPrev = !shouldLockSwipes;
  62809. };
  62810. /**
  62811. * Enable or disable keyboard control.
  62812. * @param {boolean} shouldEnableKeyboard If set to true the slider can be controled by a keyboard.
  62813. */
  62814. Slides.prototype.enableKeyboardControl = function (shouldEnableKeyboard) {
  62815. Object(__WEBPACK_IMPORTED_MODULE_2__swiper_swiper_keyboard__["a" /* enableKeyboardControl */])(this, this._plt, shouldEnableKeyboard);
  62816. };
  62817. /**
  62818. * @hidden
  62819. */
  62820. Slides.prototype.ngOnDestroy = function () {
  62821. this._init = false;
  62822. this._unregs.forEach(function (unReg) {
  62823. unReg();
  62824. });
  62825. this._unregs.length = 0;
  62826. Object(__WEBPACK_IMPORTED_MODULE_8__swiper_swiper__["b" /* destroySwiper */])(this);
  62827. this.enableKeyboardControl(false);
  62828. };
  62829. Slides.decorators = [
  62830. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  62831. selector: 'ion-slides',
  62832. template: '<div class="swiper-container" [attr.dir]="_rtl? \'rtl\' : null">' +
  62833. '<div class="swiper-wrapper">' +
  62834. '<ng-content></ng-content>' +
  62835. '</div>' +
  62836. '<div [class.hide]="!pager" class="swiper-pagination"></div>' +
  62837. '</div>',
  62838. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  62839. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  62840. },] },
  62841. ];
  62842. /** @nocollapse */
  62843. Slides.ctorParameters = function () { return [
  62844. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  62845. { type: __WEBPACK_IMPORTED_MODULE_7__platform_platform__["a" /* Platform */], },
  62846. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  62847. { type: __WEBPACK_IMPORTED_MODULE_10__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  62848. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  62849. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  62850. ]; };
  62851. Slides.propDecorators = {
  62852. 'autoplay': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62853. 'control': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62854. 'effect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62855. 'direction': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62856. 'initialSlide': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62857. 'loop': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62858. 'pager': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62859. 'dir': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62860. 'paginationType': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62861. 'parallax': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62862. 'speed': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62863. 'zoom': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62864. 'spaceBetween': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62865. 'slidesPerView': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62866. 'centeredSlides': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  62867. 'ionSlideWillChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62868. 'ionSlideDidChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62869. 'ionSlideDrag': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62870. 'ionSlideReachStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62871. 'ionSlideReachEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62872. 'ionSlideAutoplay': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62873. 'ionSlideAutoplayStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62874. 'ionSlideAutoplayStop': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62875. 'ionSlideNextStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62876. 'ionSlidePrevStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62877. 'ionSlideNextEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62878. 'ionSlidePrevEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62879. 'ionSlideTap': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62880. 'ionSlideDoubleTap': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  62881. };
  62882. return Slides;
  62883. }(__WEBPACK_IMPORTED_MODULE_3__ion__["a" /* Ion */]));
  62884. var slidesId = -1;
  62885. //# sourceMappingURL=slides.js.map
  62886. /***/ }),
  62887. /* 138 */
  62888. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  62889. "use strict";
  62890. /* harmony export (immutable) */ __webpack_exports__["d"] = setWrapperTranslate;
  62891. /* harmony export (immutable) */ __webpack_exports__["a"] = getTranslate;
  62892. /* harmony export (immutable) */ __webpack_exports__["b"] = getWrapperTranslate;
  62893. /* harmony export (immutable) */ __webpack_exports__["c"] = setWrapperTransition;
  62894. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  62895. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper_parallax__ = __webpack_require__(322);
  62896. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__swiper_progress__ = __webpack_require__(82);
  62897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__swiper_index__ = __webpack_require__(83);
  62898. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__swiper_controller__ = __webpack_require__(663);
  62899. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__swiper_effects__ = __webpack_require__(141);
  62900. function setWrapperTranslate(s, plt, translate, shouldUpdateActiveIndex, byController) {
  62901. var x = 0, y = 0, z = 0;
  62902. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  62903. x = s._rtl ? -translate : translate;
  62904. }
  62905. else {
  62906. y = translate;
  62907. }
  62908. if (s.roundLengths) {
  62909. x = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["m" /* round */])(x);
  62910. y = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["m" /* round */])(y);
  62911. }
  62912. if (!s.virtualTranslate) {
  62913. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(s._wrapper, 'translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');
  62914. }
  62915. s._translate = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? x : y;
  62916. // Check if we need to update progress
  62917. var progress;
  62918. var translatesDiff = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s) - Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s);
  62919. if (translatesDiff === 0) {
  62920. progress = 0;
  62921. }
  62922. else {
  62923. progress = (translate - Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s)) / (translatesDiff);
  62924. }
  62925. if (progress !== s.progress) {
  62926. Object(__WEBPACK_IMPORTED_MODULE_2__swiper_progress__["a" /* updateProgress */])(s, translate);
  62927. }
  62928. if (shouldUpdateActiveIndex) {
  62929. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_index__["a" /* updateActiveIndex */])(s);
  62930. }
  62931. if (s.effect !== 'slide' && __WEBPACK_IMPORTED_MODULE_5__swiper_effects__["a" /* SWIPER_EFFECTS */][s.effect]) {
  62932. __WEBPACK_IMPORTED_MODULE_5__swiper_effects__["a" /* SWIPER_EFFECTS */][s.effect].setTranslate(s, plt);
  62933. }
  62934. if (s.parallax) {
  62935. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_parallax__["b" /* parallaxSetTranslate */])(s);
  62936. }
  62937. if (s.control) {
  62938. __WEBPACK_IMPORTED_MODULE_4__swiper_controller__["a" /* SWIPER_CONTROLLER */].setTranslate(s, plt, s._translate, byController, setWrapperTranslate);
  62939. }
  62940. }
  62941. function getTranslate(s, plt, el, axis) {
  62942. var win = plt.win();
  62943. var matrix;
  62944. var curTransform;
  62945. var curStyle;
  62946. var transformMatrix;
  62947. // automatic axis detection
  62948. if (typeof axis === 'undefined') {
  62949. axis = 'x';
  62950. }
  62951. if (s.virtualTranslate) {
  62952. return s._rtl ? -s._translate : s._translate;
  62953. }
  62954. curStyle = plt.getElementComputedStyle(el);
  62955. if (win.WebKitCSSMatrix) {
  62956. curTransform = curStyle.transform || curStyle.webkitTransform;
  62957. if (curTransform.split(',').length > 6) {
  62958. curTransform = curTransform.split(', ').map(function (a) {
  62959. return a.replace(',', '.');
  62960. }).join(', ');
  62961. }
  62962. // Some old versions of Webkit choke when 'none' is passed; pass
  62963. // empty string instead in this case
  62964. transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
  62965. }
  62966. else {
  62967. transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
  62968. matrix = transformMatrix.toString().split(',');
  62969. }
  62970. if (axis === 'x') {
  62971. if (win.WebKitCSSMatrix) {
  62972. // Latest Chrome and webkits Fix
  62973. curTransform = transformMatrix.m41;
  62974. }
  62975. else if (matrix.length === 16) {
  62976. // Crazy IE10 Matrix
  62977. curTransform = parseFloat(matrix[12]);
  62978. }
  62979. else {
  62980. // Normal Browsers
  62981. curTransform = parseFloat(matrix[4]);
  62982. }
  62983. }
  62984. if (axis === 'y') {
  62985. if (win.WebKitCSSMatrix) {
  62986. // Latest Chrome and webkits Fix
  62987. curTransform = transformMatrix.m42;
  62988. }
  62989. else if (matrix.length === 16) {
  62990. // Crazy IE10 Matrix
  62991. curTransform = parseFloat(matrix[13]);
  62992. }
  62993. else {
  62994. // Normal Browsers
  62995. curTransform = parseFloat(matrix[5]);
  62996. }
  62997. }
  62998. if (s._rtl && curTransform) {
  62999. curTransform = -curTransform;
  63000. }
  63001. return curTransform || 0;
  63002. }
  63003. function getWrapperTranslate(s, plt, axis) {
  63004. if (typeof axis === 'undefined') {
  63005. axis = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'x' : 'y';
  63006. }
  63007. return getTranslate(s, plt, s._wrapper, axis);
  63008. }
  63009. function setWrapperTransition(s, plt, duration, byController) {
  63010. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(s._wrapper, duration);
  63011. if (s.effect !== 'slide' && __WEBPACK_IMPORTED_MODULE_5__swiper_effects__["a" /* SWIPER_EFFECTS */][s.effect]) {
  63012. __WEBPACK_IMPORTED_MODULE_5__swiper_effects__["a" /* SWIPER_EFFECTS */][s.effect].setTransition(s, plt, duration);
  63013. }
  63014. if (s.parallax) {
  63015. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_parallax__["a" /* parallaxSetTransition */])(s, duration);
  63016. }
  63017. if (s.control) {
  63018. __WEBPACK_IMPORTED_MODULE_4__swiper_controller__["a" /* SWIPER_CONTROLLER */].setTransition(s, plt, duration, byController, setWrapperTransition);
  63019. }
  63020. }
  63021. //# sourceMappingURL=swiper-transition.js.map
  63022. /***/ }),
  63023. /* 139 */
  63024. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  63025. "use strict";
  63026. /* harmony export (immutable) */ __webpack_exports__["a"] = updateClasses;
  63027. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_a11y__ = __webpack_require__(662);
  63028. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper_utils__ = __webpack_require__(21);
  63029. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__swiper_pagination__ = __webpack_require__(140);
  63030. /*=========================
  63031. Classes
  63032. ===========================*/
  63033. function updateClasses(s) {
  63034. var childElements;
  63035. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["l" /* removeClass */])(s._slides, [__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideActive, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideNext, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slidePrev, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicateActive, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicateNext, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicatePrev]);
  63036. for (var i = 0; i < s._slides.length; i++) {
  63037. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_a11y__["b" /* ariaHidden */])(s._slides[i], true);
  63038. }
  63039. var activeSlide = s._slides[s._activeIndex];
  63040. if (!activeSlide) {
  63041. return;
  63042. }
  63043. // Active classes
  63044. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["b" /* addClass */])(activeSlide, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideActive);
  63045. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_a11y__["b" /* ariaHidden */])(activeSlide, false);
  63046. if (s.loop) {
  63047. // Duplicate to all looped slides
  63048. if (activeSlide.classList.contains(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate)) {
  63049. childElements = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["k" /* queryChildren */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slide + ':not(.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate + ')[data-swiper-slide-index="' + s.realIndex + '"]');
  63050. }
  63051. else {
  63052. childElements = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["k" /* queryChildren */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slide + '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate + '[data-swiper-slide-index="' + s.realIndex + '"]');
  63053. }
  63054. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["b" /* addClass */])(childElements, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicateActive);
  63055. }
  63056. // Next Slide
  63057. var nextSlide = activeSlide.nextElementSibling;
  63058. if (s.loop && !nextSlide) {
  63059. nextSlide = s._slides[0];
  63060. }
  63061. nextSlide && nextSlide.classList.add(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideNext);
  63062. // Prev Slide
  63063. var prevSlide = activeSlide.previousElementSibling;
  63064. if (s.loop && !prevSlide) {
  63065. prevSlide = s._slides[s._slides.length - 1];
  63066. }
  63067. prevSlide && prevSlide.classList.add(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slidePrev);
  63068. if (s.loop) {
  63069. // Duplicate to all looped slides
  63070. if (nextSlide.classList.contains(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate)) {
  63071. childElements = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["k" /* queryChildren */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slide + ':not(.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate + ')[data-swiper-slide-index="' + nextSlide.getAttribute('data-swiper-slide-index') + '"]');
  63072. }
  63073. else {
  63074. childElements = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["k" /* queryChildren */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slide + '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate + '[data-swiper-slide-index="' + nextSlide.getAttribute('data-swiper-slide-index') + '"]');
  63075. }
  63076. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["b" /* addClass */])(childElements, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicateNext);
  63077. if (prevSlide.classList.contains(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate)) {
  63078. childElements = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["k" /* queryChildren */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slide + ':not(.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate + ')[data-swiper-slide-index="' + prevSlide.getAttribute('data-swiper-slide-index') + '"]');
  63079. }
  63080. else {
  63081. childElements = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["k" /* queryChildren */])(s._wrapper, '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slide + '.' + __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicate + '[data-swiper-slide-index="' + prevSlide.getAttribute('data-swiper-slide-index') + '"]');
  63082. }
  63083. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["b" /* addClass */])(childElements, __WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].slideDuplicatePrev);
  63084. }
  63085. // Pagination
  63086. if (s._paginationContainer) {
  63087. Object(__WEBPACK_IMPORTED_MODULE_2__swiper_pagination__["b" /* updatePaginationClasses */])(s);
  63088. }
  63089. // Next/active buttons
  63090. if (!s.loop) {
  63091. if (s.prevButton) {
  63092. if (s._isBeginning) {
  63093. s.prevButton.classList.add(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].buttonDisabled);
  63094. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_a11y__["a" /* ariaDisable */])(s.prevButton, true);
  63095. }
  63096. else {
  63097. s.prevButton.classList.remove(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].buttonDisabled);
  63098. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_a11y__["a" /* ariaDisable */])(s.prevButton, false);
  63099. }
  63100. }
  63101. if (s.nextButton) {
  63102. if (s._isEnd) {
  63103. s.nextButton.classList.add(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].buttonDisabled);
  63104. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_a11y__["a" /* ariaDisable */])(s.nextButton, true);
  63105. }
  63106. else {
  63107. s.nextButton.classList.remove(__WEBPACK_IMPORTED_MODULE_1__swiper_utils__["a" /* CLS */].buttonDisabled);
  63108. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_a11y__["a" /* ariaDisable */])(s.nextButton, false);
  63109. }
  63110. }
  63111. }
  63112. }
  63113. //# sourceMappingURL=swiper-classes.js.map
  63114. /***/ }),
  63115. /* 140 */
  63116. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  63117. "use strict";
  63118. /* harmony export (immutable) */ __webpack_exports__["a"] = updatePagination;
  63119. /* harmony export (immutable) */ __webpack_exports__["b"] = updatePaginationClasses;
  63120. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  63121. /*=========================
  63122. Pagination
  63123. ===========================*/
  63124. function updatePagination(s) {
  63125. if (!s.paginationType || !s._paginationContainer)
  63126. return;
  63127. var paginationHTML = '';
  63128. if (s.paginationType === 'bullets') {
  63129. var numberOfBullets = s.loop ? Math.ceil((s._slides.length - s.loopedSlides * 2) / s.slidesPerGroup) : s._snapGrid.length;
  63130. for (var i = 0; i < numberOfBullets; i++) {
  63131. if (s.paginationBulletRender) {
  63132. paginationHTML += s.paginationBulletRender(i, __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bullet);
  63133. }
  63134. else {
  63135. paginationHTML += "<button class=\"" + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bullet + "\" aria-label=\"Go to slide " + (i + 1) + "\" data-slide-index=\"" + i + "\"></button>";
  63136. }
  63137. }
  63138. }
  63139. else if (s.paginationType === 'fraction') {
  63140. paginationHTML =
  63141. '<span class="' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationCurrent + '"></span>' +
  63142. ' / ' +
  63143. '<span class="' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationTotal + '"></span>';
  63144. }
  63145. else if (s.paginationType === 'progress') {
  63146. paginationHTML = '<span class="' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationProgressbar + '"></span>';
  63147. }
  63148. s._paginationContainer.innerHTML = paginationHTML;
  63149. s._bullets = s._paginationContainer.querySelectorAll('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bullet);
  63150. }
  63151. function updatePaginationClasses(s) {
  63152. // Current/Total
  63153. var current;
  63154. var total = s.loop ? Math.ceil((s._slides.length - s.loopedSlides * 2) / s.slidesPerGroup) : s._snapGrid.length;
  63155. if (s.loop) {
  63156. current = Math.ceil((s._activeIndex - s.loopedSlides) / s.slidesPerGroup);
  63157. if (current > s._slides.length - 1 - s.loopedSlides * 2) {
  63158. current = current - (s._slides.length - s.loopedSlides * 2);
  63159. }
  63160. if (current > total - 1) {
  63161. current = current - total;
  63162. }
  63163. if (current < 0 && s.paginationType !== 'bullets') {
  63164. current = total + current;
  63165. }
  63166. }
  63167. else {
  63168. if (typeof s._snapIndex !== 'undefined') {
  63169. current = s._snapIndex;
  63170. }
  63171. else {
  63172. current = s._activeIndex || 0;
  63173. }
  63174. }
  63175. // Types
  63176. if (s.paginationType === 'bullets' && s._bullets) {
  63177. var selector = current + (current < 0 ? s._bullets.length : 0);
  63178. for (var i = 0; i < s._bullets.length; i++) {
  63179. if (i === selector) {
  63180. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["b" /* addClass */])(s._bullets[i], __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bulletActive);
  63181. }
  63182. else {
  63183. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["l" /* removeClass */])(s._bullets[i], __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bulletActive);
  63184. }
  63185. }
  63186. }
  63187. if (s.paginationType === 'fraction') {
  63188. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s._paginationContainer, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationCurrent, function (ele) {
  63189. ele.textContent = (current + 1);
  63190. });
  63191. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s._paginationContainer, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationTotal, function (ele) {
  63192. ele.textContent = total;
  63193. });
  63194. }
  63195. if (s.paginationType === 'progress') {
  63196. var scale = (current + 1) / total, scaleX = scale, scaleY = 1;
  63197. if (!Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63198. scaleY = scale;
  63199. scaleX = 1;
  63200. }
  63201. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s._paginationContainer, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationProgressbar, function (ele) {
  63202. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(ele, 'translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')');
  63203. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(ele, s.speed);
  63204. });
  63205. }
  63206. }
  63207. //# sourceMappingURL=swiper-pagination.js.map
  63208. /***/ }),
  63209. /* 141 */
  63210. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  63211. "use strict";
  63212. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SWIPER_EFFECTS; });
  63213. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  63214. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_platform_utils__ = __webpack_require__(323);
  63215. /*=========================
  63216. Effects
  63217. ===========================*/
  63218. var SWIPER_EFFECTS = {
  63219. 'fade': {
  63220. setTranslate: function (s) {
  63221. for (var i = 0; i < s._slides.length; i++) {
  63222. var slide = s._slides[i];
  63223. var offset = slide.swiperSlideOffset;
  63224. var tx = -offset;
  63225. if (!s.virtualTranslate) {
  63226. tx = tx - s._translate;
  63227. }
  63228. var ty = 0;
  63229. if (!Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63230. ty = tx;
  63231. tx = 0;
  63232. }
  63233. var slideOpacity = s.fade.crossFade ?
  63234. Math.max(1 - Math.abs(slide.progress), 0) :
  63235. 1 + Math.min(Math.max(slide.progress, -1), 0);
  63236. slide.style.opacity = slideOpacity;
  63237. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(slide, 'translate3d(' + tx + 'px, ' + ty + 'px, 0px)');
  63238. }
  63239. },
  63240. setTransition: function (s, plt, duration) {
  63241. var slides = s._slides;
  63242. for (var i = 0; i < slides.length; i++) {
  63243. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(slides[i], duration);
  63244. }
  63245. if (s.virtualTranslate && duration !== 0) {
  63246. var eventTriggered = false;
  63247. for (var i_1 = 0; i_1 < slides.length; i_1++) {
  63248. plt.transitionEnd(slides[i_1], function () {
  63249. if (eventTriggered || !s)
  63250. return;
  63251. eventTriggered = true;
  63252. s._animating = false;
  63253. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["p" /* triggerTransitionEnd */])(plt, s._wrapper);
  63254. });
  63255. }
  63256. }
  63257. }
  63258. },
  63259. 'flip': {
  63260. setTranslate: function (s, plt) {
  63261. for (var i = 0; i < s._slides.length; i++) {
  63262. var slide = s._slides[i];
  63263. var progress = slide.progress;
  63264. if (s.flip.limitRotation) {
  63265. progress = Math.max(Math.min(slide.progress, 1), -1);
  63266. }
  63267. var offset = slide.swiperSlideOffset;
  63268. var rotate = -180 * progress, rotateY = rotate, rotateX = 0, tx = -offset, ty = 0;
  63269. if (!Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63270. ty = tx;
  63271. tx = 0;
  63272. rotateX = -rotateY;
  63273. rotateY = 0;
  63274. }
  63275. else if (s._rtl) {
  63276. rotateY = -rotateY;
  63277. }
  63278. slide.style.zIndex = -Math.abs(Math.round(progress)) + s._slides.length;
  63279. if (s.flip.slideShadows) {
  63280. // Set shadows
  63281. var shadowBefore = (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slide.querySelector('.swiper-slide-shadow-left') : slide.querySelector('.swiper-slide-shadow-top'));
  63282. var shadowAfter = (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slide.querySelector('.swiper-slide-shadow-right') : slide.querySelector('.swiper-slide-shadow-bottom'));
  63283. if (!shadowBefore) {
  63284. shadowBefore = plt.doc().createElement('div');
  63285. shadowBefore.className = 'swiper-slide-shadow-' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'left' : 'top');
  63286. slide.appendChild(shadowBefore);
  63287. }
  63288. if (!shadowAfter) {
  63289. shadowAfter = plt.doc().createElement('div');
  63290. shadowAfter.className = 'swiper-slide-shadow-' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'right' : 'bottom');
  63291. slide.appendChild(shadowAfter);
  63292. }
  63293. if (shadowBefore) {
  63294. shadowBefore.style.opacity = Math.max(-progress, 0);
  63295. }
  63296. if (shadowAfter) {
  63297. shadowAfter.style.opacity = Math.max(progress, 0);
  63298. }
  63299. }
  63300. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(slide, 'translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');
  63301. }
  63302. },
  63303. setTransition: function (s, plt, duration) {
  63304. for (var i = 0; i < s._slides.length; i++) {
  63305. var slide = s._slides[i];
  63306. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(slide, duration);
  63307. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(slide, '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left', function (el) {
  63308. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(el, duration);
  63309. });
  63310. }
  63311. if (s.virtualTranslate && duration !== 0) {
  63312. var eventTriggered = false;
  63313. plt.transitionEnd(s._slides[s._activeIndex], function (ev) {
  63314. if (eventTriggered || !s)
  63315. return;
  63316. if (!ev.target.classList.contains(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideActive)) {
  63317. return;
  63318. }
  63319. eventTriggered = true;
  63320. s._animating = false;
  63321. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["p" /* triggerTransitionEnd */])(plt, s._wrapper);
  63322. });
  63323. }
  63324. }
  63325. },
  63326. 'cube': {
  63327. setTranslate: function (s, plt) {
  63328. var wrapperRotate = 0;
  63329. var cubeShadow;
  63330. if (s.cube.shadow) {
  63331. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63332. cubeShadow = s._wrapper.querySelector('.swiper-cube-shadow');
  63333. if (!cubeShadow) {
  63334. cubeShadow = plt.doc().createElement('div');
  63335. cubeShadow.className = 'swiper-cube-shadow';
  63336. s._wrapper.appendChild(cubeShadow);
  63337. }
  63338. cubeShadow.style.height = s.renderedWidth + 'px';
  63339. }
  63340. else {
  63341. cubeShadow = s.container.querySelector('.swiper-cube-shadow');
  63342. if (!cubeShadow) {
  63343. cubeShadow = plt.doc().createElement('div');
  63344. cubeShadow.className = 'swiper-cube-shadow';
  63345. s._wrapper.appendChild(cubeShadow);
  63346. }
  63347. }
  63348. }
  63349. for (var i = 0; i < s._slides.length; i++) {
  63350. var slide = s._slides[i];
  63351. var slideAngle = i * 90;
  63352. var round = Math.floor(slideAngle / 360);
  63353. if (s._rtl) {
  63354. slideAngle = -slideAngle;
  63355. round = Math.floor(-slideAngle / 360);
  63356. }
  63357. var progress = Math.max(Math.min(slide.progress, 1), -1);
  63358. var tx = 0, ty = 0, tz = 0;
  63359. if (i % 4 === 0) {
  63360. tx = -round * 4 * s._renderedSize;
  63361. tz = 0;
  63362. }
  63363. else if ((i - 1) % 4 === 0) {
  63364. tx = 0;
  63365. tz = -round * 4 * s._renderedSize;
  63366. }
  63367. else if ((i - 2) % 4 === 0) {
  63368. tx = s._renderedSize + round * 4 * s._renderedSize;
  63369. tz = s._renderedSize;
  63370. }
  63371. else if ((i - 3) % 4 === 0) {
  63372. tx = -s._renderedSize;
  63373. tz = 3 * s._renderedSize + s._renderedSize * 4 * round;
  63374. }
  63375. if (s._rtl) {
  63376. tx = -tx;
  63377. }
  63378. if (!Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63379. ty = tx;
  63380. tx = 0;
  63381. }
  63382. var transformStr = 'rotateX(' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 0 : -slideAngle) + 'deg) rotateY(' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';
  63383. if (progress <= 1 && progress > -1) {
  63384. wrapperRotate = i * 90 + progress * 90;
  63385. if (s._rtl)
  63386. wrapperRotate = -i * 90 - progress * 90;
  63387. }
  63388. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(slide, transformStr);
  63389. if (s.cube.slideShadows) {
  63390. // Set shadows
  63391. var shadowBefore = (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slide.querySelector('.swiper-slide-shadow-left') : slide.querySelector('.swiper-slide-shadow-top'));
  63392. var shadowAfter = (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slide.querySelector('.swiper-slide-shadow-right') : slide.querySelector('.swiper-slide-shadow-bottom'));
  63393. if (!shadowBefore) {
  63394. shadowBefore = plt.doc().createElement('div');
  63395. shadowBefore.className = 'swiper-slide-shadow-' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'left' : 'top');
  63396. slide.appendChild(shadowBefore);
  63397. }
  63398. if (!shadowAfter) {
  63399. shadowAfter = plt.doc().createElement('div');
  63400. shadowAfter.className = 'swiper-slide-shadow-' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'right' : 'bottom');
  63401. slide.appendChild(shadowAfter);
  63402. }
  63403. if (shadowBefore)
  63404. shadowBefore.style.opacity = Math.max(-progress, 0);
  63405. if (shadowAfter)
  63406. shadowAfter.style.opacity = Math.max(progress, 0);
  63407. }
  63408. }
  63409. s._wrapper.style.transformOrigin = s._wrapper.style.webkitTransformOrigin = '50% 50% -' + (s._renderedSize / 2) + 'px';
  63410. if (s.cube.shadow) {
  63411. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63412. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(cubeShadow, 'translate3d(0px, ' + (s.renderedWidth / 2 + s.cube.shadowOffset) + 'px, ' + (-s.renderedWidth / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.cube.shadowScale) + ')');
  63413. }
  63414. else {
  63415. var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
  63416. var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
  63417. var scale1 = s.cube.shadowScale;
  63418. var scale2 = s.cube.shadowScale / multiplier;
  63419. var offset = s.cube.shadowOffset;
  63420. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(cubeShadow, 'scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.renderedHeight / 2 + offset) + 'px, ' + (-s.renderedHeight / 2 / scale2) + 'px) rotateX(-90deg)');
  63421. }
  63422. }
  63423. var zFactor = (Object(__WEBPACK_IMPORTED_MODULE_1__platform_platform_utils__["e" /* isSafari */])(plt) || Object(__WEBPACK_IMPORTED_MODULE_1__platform_platform_utils__["d" /* isIosUIWebView */])(plt)) ? (-s._renderedSize / 2) : 0;
  63424. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(s._wrapper, 'translate3d(0px,0,' + zFactor + 'px) rotateX(' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 0 : wrapperRotate) + 'deg) rotateY(' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? -wrapperRotate : 0) + 'deg)');
  63425. },
  63426. setTransition: function (s, _plt, duration) {
  63427. for (var i = 0; i < s._slides.length; i++) {
  63428. var slide = s._slides[i];
  63429. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(slide, duration);
  63430. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(slide, '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left', function (el) {
  63431. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(el, duration);
  63432. });
  63433. }
  63434. if (s.cube.shadow && !Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  63435. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s.container, '.swiper-cube-shadow', function (el) {
  63436. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(el, duration);
  63437. });
  63438. }
  63439. }
  63440. },
  63441. 'coverflow': {
  63442. setTranslate: function (s, plt) {
  63443. var transformStr = s._translate;
  63444. var center = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? -transformStr + s.renderedWidth / 2 : -transformStr + s.renderedHeight / 2;
  63445. var rotate = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? s.coverflow.rotate : -s.coverflow.rotate;
  63446. var translate = s.coverflow.depth;
  63447. // Each slide offset from center
  63448. for (var i = 0, length = s._slides.length; i < length; i++) {
  63449. var slide = s._slides[i];
  63450. var slideSize = s._slidesSizesGrid[i];
  63451. var slideOffset = slide.swiperSlideOffset;
  63452. var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.coverflow.modifier;
  63453. var rotateY = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? rotate * offsetMultiplier : 0;
  63454. var rotateX = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 0 : rotate * offsetMultiplier;
  63455. // var rotateZ = 0
  63456. var translateZ = -translate * Math.abs(offsetMultiplier);
  63457. var translateY = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 0 : s.coverflow.stretch * (offsetMultiplier);
  63458. var translateX = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? s.coverflow.stretch * (offsetMultiplier) : 0;
  63459. // Fix for ultra small values
  63460. if (Math.abs(translateX) < 0.001)
  63461. translateX = 0;
  63462. if (Math.abs(translateY) < 0.001)
  63463. translateY = 0;
  63464. if (Math.abs(translateZ) < 0.001)
  63465. translateZ = 0;
  63466. if (Math.abs(rotateY) < 0.001)
  63467. rotateY = 0;
  63468. if (Math.abs(rotateX) < 0.001)
  63469. rotateX = 0;
  63470. var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';
  63471. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(slide, slideTransform);
  63472. slide.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
  63473. if (s.coverflow.slideShadows) {
  63474. // Set shadows
  63475. var shadowBefore = (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slide.querySelector('.swiper-slide-shadow-left') : slide.querySelector('.swiper-slide-shadow-top'));
  63476. var shadowAfter = (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? slide.querySelector('.swiper-slide-shadow-right') : slide.querySelector('.swiper-slide-shadow-bottom'));
  63477. if (!shadowBefore) {
  63478. shadowBefore = plt.doc().createElement('div');
  63479. shadowBefore.className = 'swiper-slide-shadow-' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'left' : 'top');
  63480. slide.appendChild(shadowBefore);
  63481. }
  63482. if (!shadowAfter) {
  63483. shadowAfter = plt.doc().createElement('div');
  63484. shadowAfter.className = 'swiper-slide-shadow-' + (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'right' : 'bottom');
  63485. slide.appendChild(shadowAfter);
  63486. }
  63487. if (shadowBefore) {
  63488. shadowBefore.style.opacity = (offsetMultiplier > 0 ? offsetMultiplier : 0);
  63489. }
  63490. if (shadowAfter) {
  63491. shadowAfter.style.opacity = ((-offsetMultiplier) > 0 ? -offsetMultiplier : 0);
  63492. }
  63493. }
  63494. }
  63495. },
  63496. setTransition: function (s, _plt, duration) {
  63497. for (var i = 0; i < s._slides.length; i++) {
  63498. var slide = s._slides[i];
  63499. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(slide, duration);
  63500. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(slide, '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left', function (el) {
  63501. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(el, duration);
  63502. });
  63503. }
  63504. }
  63505. }
  63506. };
  63507. //# sourceMappingURL=swiper-effects.js.map
  63508. /***/ }),
  63509. /* 142 */
  63510. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  63511. "use strict";
  63512. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Tabs; });
  63513. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  63514. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(12);
  63515. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);
  63516. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_add_operator_takeUntil__ = __webpack_require__(106);
  63517. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_add_operator_takeUntil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_add_operator_takeUntil__);
  63518. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__app_app__ = __webpack_require__(11);
  63519. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config_config__ = __webpack_require__(2);
  63520. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__navigation_deep_linker__ = __webpack_require__(24);
  63521. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__ion__ = __webpack_require__(8);
  63522. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_util__ = __webpack_require__(3);
  63523. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__platform_keyboard__ = __webpack_require__(50);
  63524. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__navigation_nav_controller__ = __webpack_require__(35);
  63525. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__navigation_nav_util__ = __webpack_require__(34);
  63526. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__navigation_url_serializer__ = __webpack_require__(68);
  63527. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__split_pane_split_pane__ = __webpack_require__(52);
  63528. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__platform_platform__ = __webpack_require__(7);
  63529. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__tab_highlight__ = __webpack_require__(143);
  63530. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__navigation_view_controller__ = __webpack_require__(9);
  63531. var __extends = (this && this.__extends) || (function () {
  63532. var extendStatics = Object.setPrototypeOf ||
  63533. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  63534. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  63535. return function (d, b) {
  63536. extendStatics(d, b);
  63537. function __() { this.constructor = d; }
  63538. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  63539. };
  63540. })();
  63541. /**
  63542. * @name Tabs
  63543. * @description
  63544. * Tabs make it easy to navigate between different pages or functional
  63545. * aspects of an app. The Tabs component, written as `<ion-tabs>`, is
  63546. * a container of individual [Tab](../Tab/) components. Each individual `ion-tab`
  63547. * is a declarative component for a [NavController](../../../navigation/NavController/)
  63548. *
  63549. * For more information on using nav controllers like Tab or [Nav](../../nav/Nav/),
  63550. * take a look at the [NavController API Docs](../../../navigation/NavController/).
  63551. *
  63552. * ### Placement
  63553. *
  63554. * The position of the tabs relative to the content varies based on
  63555. * the mode. The tabs are placed at the bottom of the screen
  63556. * for iOS and Android, and at the top for Windows by default. The position can
  63557. * be configured using the `tabsPlacement` attribute on the `<ion-tabs>` component,
  63558. * or in an app's [config](../../config/Config/).
  63559. * See the [Input Properties](#input-properties) below for the available
  63560. * values of `tabsPlacement`.
  63561. *
  63562. * ### Layout
  63563. *
  63564. * The layout for all of the tabs can be defined using the `tabsLayout`
  63565. * property. If the individual tab has a title and icon, the icons will
  63566. * show on top of the title by default. All tabs can be changed by setting
  63567. * the value of `tabsLayout` on the `<ion-tabs>` element, or in your
  63568. * app's [config](../../config/Config/). For example, this is useful if
  63569. * you want to show tabs with a title only on Android, but show icons
  63570. * and a title for iOS. See the [Input Properties](#input-properties)
  63571. * below for the available values of `tabsLayout`.
  63572. *
  63573. * ### Selecting a Tab
  63574. *
  63575. * There are different ways you can select a specific tab from the tabs
  63576. * component. You can use the `selectedIndex` property to set the index
  63577. * on the `<ion-tabs>` element, or you can call `select()` from the `Tabs`
  63578. * instance after creation. See [usage](#usage) below for more information.
  63579. *
  63580. * @usage
  63581. *
  63582. * You can add a basic tabs template to a `@Component` using the following
  63583. * template:
  63584. *
  63585. * ```html
  63586. * <ion-tabs>
  63587. * <ion-tab [root]="tab1Root"></ion-tab>
  63588. * <ion-tab [root]="tab2Root"></ion-tab>
  63589. * <ion-tab [root]="tab3Root"></ion-tab>
  63590. * </ion-tabs>
  63591. * ```
  63592. *
  63593. * Where `tab1Root`, `tab2Root`, and `tab3Root` are each a page:
  63594. *
  63595. *```ts
  63596. * @Component({
  63597. * templateUrl: 'build/pages/tabs/tabs.html'
  63598. * })
  63599. * export class TabsPage {
  63600. * // this tells the tabs component which Pages
  63601. * // should be each tab's root Page
  63602. * tab1Root = Page1;
  63603. * tab2Root = Page2;
  63604. * tab3Root = Page3;
  63605. *
  63606. * constructor() {
  63607. *
  63608. * }
  63609. * }
  63610. *```
  63611. *
  63612. * By default, the first tab will be selected upon navigation to the
  63613. * Tabs page. We can change the selected tab by using `selectedIndex`
  63614. * on the `<ion-tabs>` element:
  63615. *
  63616. * ```html
  63617. * <ion-tabs selectedIndex="2">
  63618. * <ion-tab [root]="tab1Root"></ion-tab>
  63619. * <ion-tab [root]="tab2Root"></ion-tab>
  63620. * <ion-tab [root]="tab3Root"></ion-tab>
  63621. * </ion-tabs>
  63622. * ```
  63623. *
  63624. * Since the index starts at `0`, this will select the 3rd tab which has
  63625. * root set to `tab3Root`. If you wanted to change it dynamically from
  63626. * your class, you could use [property binding](https://angular.io/docs/ts/latest/guide/template-syntax.html#!#property-binding).
  63627. *
  63628. * Alternatively, you can grab the `Tabs` instance and call the `select()`
  63629. * method. This requires the `<ion-tabs>` element to have an `id`. For
  63630. * example, set the value of `id` to `myTabs`:
  63631. *
  63632. * ```html
  63633. * <ion-tabs #myTabs>
  63634. * <ion-tab [root]="tab1Root"></ion-tab>
  63635. * <ion-tab [root]="tab2Root"></ion-tab>
  63636. * <ion-tab [root]="tab3Root"></ion-tab>
  63637. * </ion-tabs>
  63638. * ```
  63639. *
  63640. * Then in your class you can grab the `Tabs` instance and call `select()`,
  63641. * passing the index of the tab as the argument. Here we're grabbing the tabs
  63642. * by using ViewChild.
  63643. *
  63644. *```ts
  63645. * export class TabsPage {
  63646. *
  63647. * @ViewChild('myTabs') tabRef: Tabs;
  63648. *
  63649. * ionViewDidEnter() {
  63650. * this.tabRef.select(2);
  63651. * }
  63652. *
  63653. * }
  63654. *```
  63655. *
  63656. * You can also switch tabs from a child component by calling `select()` on the
  63657. * parent view using the `NavController` instance. For example, assuming you have
  63658. * a `TabsPage` component, you could call the following from any of the child
  63659. * components to switch to `TabsRoot3`:
  63660. *
  63661. *```ts
  63662. * switchTabs() {
  63663. * this.navCtrl.parent.select(2);
  63664. * }
  63665. *```
  63666. * @demo /docs/demos/src/tabs/
  63667. *
  63668. * @see {@link /docs/components#tabs Tabs Component Docs}
  63669. * @see {@link ../Tab Tab API Docs}
  63670. * @see {@link ../../config/Config Config API Docs}
  63671. *
  63672. */
  63673. var Tabs = (function (_super) {
  63674. __extends(Tabs, _super);
  63675. function Tabs(parent, viewCtrl, _app, config, elementRef, _plt, renderer, _linker, keyboard) {
  63676. var _this = _super.call(this, config, elementRef, renderer, 'tabs') || this;
  63677. _this.viewCtrl = viewCtrl;
  63678. _this._app = _app;
  63679. _this._plt = _plt;
  63680. _this._linker = _linker;
  63681. /** @internal */
  63682. _this._ids = -1;
  63683. /** @internal */
  63684. _this._tabs = [];
  63685. /** @internal */
  63686. _this._selectHistory = [];
  63687. /** @internal */
  63688. _this._onDestroy = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__["Subject"]();
  63689. /**
  63690. * @output {any} Emitted when the tab changes.
  63691. */
  63692. _this.ionChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  63693. _this.parent = parent;
  63694. _this.id = 't' + (++tabIds);
  63695. _this._sbPadding = config.getBoolean('statusbarPadding');
  63696. _this.tabsHighlight = config.getBoolean('tabsHighlight');
  63697. if (_this.parent) {
  63698. // this Tabs has a parent Nav
  63699. _this.parent.registerChildNav(_this);
  63700. }
  63701. else if (viewCtrl && viewCtrl.getNav()) {
  63702. // this Nav was opened from a modal
  63703. _this.parent = viewCtrl.getNav();
  63704. _this.parent.registerChildNav(_this);
  63705. }
  63706. else if (_this._app) {
  63707. // this is the root navcontroller for the entire app
  63708. _this._app.registerRootNav(_this);
  63709. }
  63710. // Tabs may also be an actual ViewController which was navigated to
  63711. // if Tabs is static and not navigated to within a NavController
  63712. // then skip this and don't treat it as it's own ViewController
  63713. if (viewCtrl) {
  63714. viewCtrl._setContent(_this);
  63715. viewCtrl._setContentRef(elementRef);
  63716. }
  63717. var keyboardResizes = config.getBoolean('keyboardResizes', false);
  63718. if (keyboard && keyboardResizes) {
  63719. keyboard.willHide
  63720. .takeUntil(_this._onDestroy)
  63721. .subscribe(function () {
  63722. _this._plt.timeout(function () { return _this.setTabbarHidden(false); }, 50);
  63723. });
  63724. keyboard.willShow
  63725. .takeUntil(_this._onDestroy)
  63726. .subscribe(function () { return _this.setTabbarHidden(true); });
  63727. }
  63728. return _this;
  63729. }
  63730. /**
  63731. * @internal
  63732. */
  63733. Tabs.prototype.setTabbarHidden = function (tabbarHidden) {
  63734. this.setElementClass('tabbar-hidden', tabbarHidden);
  63735. this.resize();
  63736. };
  63737. /**
  63738. * @internal
  63739. */
  63740. Tabs.prototype.ngOnDestroy = function () {
  63741. this._onDestroy.next();
  63742. if (this.parent) {
  63743. this.parent.unregisterChildNav(this);
  63744. }
  63745. else {
  63746. this._app.unregisterRootNav(this);
  63747. }
  63748. };
  63749. /**
  63750. * @internal
  63751. */
  63752. Tabs.prototype.ngAfterViewInit = function () {
  63753. var _this = this;
  63754. this._setConfig('tabsPlacement', 'bottom');
  63755. this._setConfig('tabsLayout', 'icon-top');
  63756. this._setConfig('tabsHighlight', this.tabsHighlight);
  63757. if (this.tabsHighlight) {
  63758. this._plt.resize
  63759. .takeUntil(this._onDestroy)
  63760. .subscribe(function () { return _this._highlight.select(_this.getSelected()); });
  63761. }
  63762. this.initTabs();
  63763. };
  63764. /**
  63765. * @internal
  63766. */
  63767. Tabs.prototype.initTabs = function () {
  63768. var _this = this;
  63769. // get the selected index from the input
  63770. // otherwise default it to use the first index
  63771. var selectedIndex = (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(this.selectedIndex) ? 0 : parseInt(this.selectedIndex, 10));
  63772. // now see if the deep linker can find a tab index
  63773. var tabsSegment = this._linker.getSegmentByNavIdOrName(this.id, this.name);
  63774. if (tabsSegment) {
  63775. // we found a segment which probably represents which tab to select
  63776. selectedIndex = this._getSelectedTabIndex(tabsSegment.secondaryId, selectedIndex);
  63777. }
  63778. // get the selectedIndex and ensure it isn't hidden or disabled
  63779. var selectedTab = this._tabs.find(function (t, i) { return i === selectedIndex && t.enabled && t.show; });
  63780. if (!selectedTab) {
  63781. // wasn't able to select the tab they wanted
  63782. // try to find the first tab that's available
  63783. selectedTab = this._tabs.find(function (t) { return t.enabled && t.show; });
  63784. }
  63785. var promise = Promise.resolve();
  63786. if (selectedTab) {
  63787. selectedTab._segment = tabsSegment;
  63788. promise = this.select(selectedTab);
  63789. }
  63790. return promise.then(function () {
  63791. // set the initial href attribute values for each tab
  63792. _this._tabs.forEach(function (t) {
  63793. t.updateHref(t.root, t.rootParams);
  63794. });
  63795. });
  63796. };
  63797. /**
  63798. * @internal
  63799. */
  63800. Tabs.prototype._setConfig = function (attrKey, fallback) {
  63801. var val = this[attrKey];
  63802. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(val)) {
  63803. val = this._config.get(attrKey, fallback);
  63804. }
  63805. this.setElementAttribute(attrKey, val);
  63806. };
  63807. /**
  63808. * @hidden
  63809. */
  63810. Tabs.prototype.add = function (tab) {
  63811. this._tabs.push(tab);
  63812. return this.id + '-' + (++this._ids);
  63813. };
  63814. /**
  63815. * @param {number|Tab} tabOrIndex Index, or the Tab instance, of the tab to select.
  63816. */
  63817. Tabs.prototype.select = function (tabOrIndex, opts, fromUrl) {
  63818. var _this = this;
  63819. if (opts === void 0) { opts = {}; }
  63820. if (fromUrl === void 0) { fromUrl = false; }
  63821. var selectedTab = (typeof tabOrIndex === 'number' ? this.getByIndex(tabOrIndex) : tabOrIndex);
  63822. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(selectedTab)) {
  63823. return Promise.resolve();
  63824. }
  63825. // If the selected tab is the current selected tab, we do not switch
  63826. var currentTab = this.getSelected();
  63827. if (selectedTab === currentTab && currentTab.getActive()) {
  63828. return this._updateCurrentTab(selectedTab, fromUrl);
  63829. }
  63830. // If the selected tab does not have a root, we do not switch (#9392)
  63831. // it's possible the tab is only for opening modal's or signing out
  63832. // and doesn't actually have content. In the case there's no content
  63833. // for a tab then do nothing and leave the current view as is
  63834. if (selectedTab.root) {
  63835. // At this point we are going to perform a page switch
  63836. // Let's fire willLeave in the current tab page
  63837. var currentPage;
  63838. if (currentTab) {
  63839. currentPage = currentTab.getActive();
  63840. currentPage && currentPage._willLeave(false);
  63841. }
  63842. // Fire willEnter in the new selected tab
  63843. var selectedPage_1 = selectedTab.getActive();
  63844. selectedPage_1 && selectedPage_1._willEnter();
  63845. // Let's start the transition
  63846. opts.animate = false;
  63847. return selectedTab.load(opts).then(function () {
  63848. _this._tabSwitchEnd(selectedTab, selectedPage_1, currentPage);
  63849. if (opts.updateUrl !== false) {
  63850. _this._linker.navChange(__WEBPACK_IMPORTED_MODULE_10__navigation_nav_util__["c" /* DIRECTION_SWITCH */]);
  63851. }
  63852. (void 0) /* assert */;
  63853. _this._fireChangeEvent(selectedTab);
  63854. });
  63855. }
  63856. else {
  63857. this._fireChangeEvent(selectedTab);
  63858. return Promise.resolve();
  63859. }
  63860. };
  63861. Tabs.prototype._fireChangeEvent = function (selectedTab) {
  63862. selectedTab.ionSelect.emit(selectedTab);
  63863. this.ionChange.emit(selectedTab);
  63864. };
  63865. Tabs.prototype._tabSwitchEnd = function (selectedTab, selectedPage, currentPage) {
  63866. (void 0) /* assert */;
  63867. (void 0) /* assert */;
  63868. // Update tabs selection state
  63869. var tabs = this._tabs;
  63870. var tab;
  63871. for (var i = 0; i < tabs.length; i++) {
  63872. tab = tabs[i];
  63873. tab.setSelected(tab === selectedTab);
  63874. }
  63875. if (this.tabsHighlight) {
  63876. this._highlight.select(selectedTab);
  63877. }
  63878. // Fire didEnter/didLeave lifecycle events
  63879. if (selectedPage) {
  63880. selectedPage._didEnter();
  63881. this._app.viewDidEnter.emit(selectedPage);
  63882. }
  63883. if (currentPage) {
  63884. currentPage && currentPage._didLeave();
  63885. this._app.viewDidLeave.emit(currentPage);
  63886. }
  63887. // track the order of which tabs have been selected, by their index
  63888. // do not track if the tab index is the same as the previous
  63889. if (this._selectHistory[this._selectHistory.length - 1] !== selectedTab.id) {
  63890. this._selectHistory.push(selectedTab.id);
  63891. }
  63892. };
  63893. /**
  63894. * Get the previously selected Tab which is currently not disabled or hidden.
  63895. * @param {boolean} trimHistory If the selection history should be trimmed up to the previous tab selection or not.
  63896. * @returns {Tab}
  63897. */
  63898. Tabs.prototype.previousTab = function (trimHistory) {
  63899. var _this = this;
  63900. if (trimHistory === void 0) { trimHistory = true; }
  63901. // walk backwards through the tab selection history
  63902. // and find the first previous tab that is enabled and shown
  63903. (void 0) /* console.debug */;
  63904. for (var i = this._selectHistory.length - 2; i >= 0; i--) {
  63905. var tab = this._tabs.find(function (t) { return t.id === _this._selectHistory[i]; });
  63906. if (tab && tab.enabled && tab.show) {
  63907. if (trimHistory) {
  63908. this._selectHistory.splice(i + 1);
  63909. }
  63910. return tab;
  63911. }
  63912. }
  63913. return null;
  63914. };
  63915. /**
  63916. * @param {number} index Index of the tab you want to get
  63917. * @returns {Tab} Returns the tab who's index matches the one passed
  63918. */
  63919. Tabs.prototype.getByIndex = function (index) {
  63920. return this._tabs[index];
  63921. };
  63922. /**
  63923. * @return {Tab} Returns the currently selected tab
  63924. */
  63925. Tabs.prototype.getSelected = function () {
  63926. var tabs = this._tabs;
  63927. for (var i = 0; i < tabs.length; i++) {
  63928. if (tabs[i].isSelected) {
  63929. return tabs[i];
  63930. }
  63931. }
  63932. return null;
  63933. };
  63934. /**
  63935. * @internal
  63936. */
  63937. Tabs.prototype.getActiveChildNavs = function () {
  63938. var selected = this.getSelected();
  63939. return selected ? [selected] : [];
  63940. };
  63941. /**
  63942. * @internal
  63943. */
  63944. Tabs.prototype.getAllChildNavs = function () {
  63945. return this._tabs;
  63946. };
  63947. /**
  63948. * @internal
  63949. */
  63950. Tabs.prototype.getIndex = function (tab) {
  63951. return this._tabs.indexOf(tab);
  63952. };
  63953. /**
  63954. * @internal
  63955. */
  63956. Tabs.prototype.length = function () {
  63957. return this._tabs.length;
  63958. };
  63959. /**
  63960. * "Touch" the active tab, going back to the root view of the tab
  63961. * or optionally letting the tab handle the event
  63962. */
  63963. Tabs.prototype._updateCurrentTab = function (tab, fromUrl) {
  63964. var active = tab.getActive();
  63965. if (active) {
  63966. if (fromUrl && tab._segment) {
  63967. // see if the view controller exists
  63968. var vc = tab.getViewById(tab._segment.name);
  63969. if (vc) {
  63970. // the view is already in the stack
  63971. return tab.popTo(vc, {
  63972. animate: false,
  63973. updateUrl: false,
  63974. });
  63975. }
  63976. else if (tab._views.length === 0 && tab._segment.defaultHistory && tab._segment.defaultHistory.length) {
  63977. return this._linker.initViews(tab._segment).then(function (views) {
  63978. return tab.setPages(views, {
  63979. animate: false, updateUrl: false
  63980. });
  63981. }).then(function () {
  63982. tab._segment = null;
  63983. });
  63984. }
  63985. else {
  63986. return tab.setRoot(tab._segment.name, tab._segment.data, {
  63987. animate: false, updateUrl: false
  63988. }).then(function () {
  63989. tab._segment = null;
  63990. });
  63991. }
  63992. }
  63993. else if (active._cmp && active._cmp.instance.ionSelected) {
  63994. // if they have a custom tab selected handler, call it
  63995. active._cmp.instance.ionSelected();
  63996. return Promise.resolve();
  63997. }
  63998. else if (tab.length() > 1) {
  63999. // if we're a few pages deep, pop to root
  64000. return tab.popToRoot();
  64001. }
  64002. else {
  64003. return Object(__WEBPACK_IMPORTED_MODULE_10__navigation_nav_util__["j" /* getComponent */])(this._linker, tab.root).then(function (viewController) {
  64004. if (viewController.component !== active.component) {
  64005. // Otherwise, if the page we're on is not our real root
  64006. // reset it to our default root type
  64007. return tab.setRoot(tab.root);
  64008. }
  64009. }).catch(function () {
  64010. (void 0) /* console.debug */;
  64011. });
  64012. }
  64013. }
  64014. };
  64015. /**
  64016. * @internal
  64017. * DOM WRITE
  64018. */
  64019. Tabs.prototype.setTabbarPosition = function (top, bottom) {
  64020. if (this._top !== top || this._bottom !== bottom) {
  64021. var tabbarEle = this._tabbar.nativeElement;
  64022. tabbarEle.style.top = (top > -1 ? top + 'px' : '');
  64023. tabbarEle.style.bottom = (bottom > -1 ? bottom + 'px' : '');
  64024. tabbarEle.classList.add('show-tabbar');
  64025. this._top = top;
  64026. this._bottom = bottom;
  64027. }
  64028. };
  64029. /**
  64030. * @internal
  64031. */
  64032. Tabs.prototype.resize = function () {
  64033. var tab = this.getSelected();
  64034. tab && tab.resize();
  64035. };
  64036. /**
  64037. * @internal
  64038. */
  64039. Tabs.prototype.initPane = function () {
  64040. var isMain = this._elementRef.nativeElement.hasAttribute('main');
  64041. return isMain;
  64042. };
  64043. /**
  64044. * @internal
  64045. */
  64046. Tabs.prototype.paneChanged = function (isPane) {
  64047. if (isPane) {
  64048. this.resize();
  64049. }
  64050. };
  64051. Tabs.prototype.goToRoot = function (opts) {
  64052. if (this._tabs.length) {
  64053. return this.select(this._tabs[0], opts);
  64054. }
  64055. };
  64056. /*
  64057. * @private
  64058. */
  64059. Tabs.prototype.getType = function () {
  64060. return 'tabs';
  64061. };
  64062. /*
  64063. * @private
  64064. */
  64065. Tabs.prototype.getSecondaryIdentifier = function () {
  64066. var tabs = this.getActiveChildNavs();
  64067. if (tabs && tabs.length) {
  64068. return this._linker._getTabSelector(tabs[0]);
  64069. }
  64070. return '';
  64071. };
  64072. /**
  64073. * @private
  64074. */
  64075. Tabs.prototype._getSelectedTabIndex = function (secondaryId, fallbackIndex) {
  64076. if (secondaryId === void 0) { secondaryId = ''; }
  64077. if (fallbackIndex === void 0) { fallbackIndex = 0; }
  64078. // we found a segment which probably represents which tab to select
  64079. var indexMatch = secondaryId.match(/tab-(\d+)/);
  64080. if (indexMatch) {
  64081. // awesome, the segment name was something "tab-0", and
  64082. // the numbe represents which tab to select
  64083. return parseInt(indexMatch[1], 10);
  64084. }
  64085. // wasn't in the "tab-0" format so maybe it's using a word
  64086. var tab = this._tabs.find(function (t) {
  64087. return (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(t.tabUrlPath) && t.tabUrlPath === secondaryId) ||
  64088. (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(t.tabTitle) && Object(__WEBPACK_IMPORTED_MODULE_11__navigation_url_serializer__["c" /* formatUrlPart */])(t.tabTitle) === secondaryId);
  64089. });
  64090. return Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(tab) ? tab.index : fallbackIndex;
  64091. };
  64092. Tabs.decorators = [
  64093. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  64094. selector: 'ion-tabs',
  64095. template: '<div class="tabbar" role="tablist" #tabbar>' +
  64096. '<a *ngFor="let t of _tabs" [tab]="t" class="tab-button" role="tab" href="#" (ionSelect)="select(t)"></a>' +
  64097. '<div class="tab-highlight"></div>' +
  64098. '</div>' +
  64099. '<ng-content></ng-content>' +
  64100. '<div #portal tab-portal></div>',
  64101. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  64102. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_12__split_pane_split_pane__["a" /* RootNode */], useExisting: Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return Tabs; }) }]
  64103. },] },
  64104. ];
  64105. /** @nocollapse */
  64106. Tabs.ctorParameters = function () { return [
  64107. { type: __WEBPACK_IMPORTED_MODULE_9__navigation_nav_controller__["a" /* NavController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  64108. { type: __WEBPACK_IMPORTED_MODULE_15__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  64109. { type: __WEBPACK_IMPORTED_MODULE_3__app_app__["a" /* App */], },
  64110. { type: __WEBPACK_IMPORTED_MODULE_4__config_config__["a" /* Config */], },
  64111. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  64112. { type: __WEBPACK_IMPORTED_MODULE_13__platform_platform__["a" /* Platform */], },
  64113. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  64114. { type: __WEBPACK_IMPORTED_MODULE_5__navigation_deep_linker__["a" /* DeepLinker */], },
  64115. { type: __WEBPACK_IMPORTED_MODULE_8__platform_keyboard__["a" /* Keyboard */], },
  64116. ]; };
  64117. Tabs.propDecorators = {
  64118. 'name': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  64119. 'selectedIndex': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  64120. 'tabsLayout': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  64121. 'tabsPlacement': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  64122. 'tabsHighlight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  64123. 'ionChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  64124. '_highlight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: [__WEBPACK_IMPORTED_MODULE_14__tab_highlight__["a" /* TabHighlight */],] },],
  64125. '_tabbar': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['tabbar',] },],
  64126. 'portal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['portal', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */] },] },],
  64127. };
  64128. return Tabs;
  64129. }(__WEBPACK_IMPORTED_MODULE_6__ion__["a" /* Ion */]));
  64130. var tabIds = -1;
  64131. //# sourceMappingURL=tabs.js.map
  64132. /***/ }),
  64133. /* 143 */
  64134. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64135. "use strict";
  64136. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TabHighlight; });
  64137. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  64138. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_dom_controller__ = __webpack_require__(15);
  64139. /**
  64140. * @hidden
  64141. */
  64142. var TabHighlight = (function () {
  64143. function TabHighlight(_elementRef, _dom) {
  64144. this._elementRef = _elementRef;
  64145. this._dom = _dom;
  64146. }
  64147. TabHighlight.prototype.select = function (tab) {
  64148. var _this = this;
  64149. if (!tab) {
  64150. return;
  64151. }
  64152. var dom = this._dom;
  64153. dom.read(function () {
  64154. var btnEle = tab.btn.getNativeElement();
  64155. var transform = "translate3d(" + btnEle.offsetLeft + "px,0,0) scaleX(" + btnEle.offsetWidth + ")";
  64156. dom.write(function () {
  64157. var ele = _this._elementRef.nativeElement;
  64158. ele.style[dom.plt.Css.transform] = transform;
  64159. if (!_this._init) {
  64160. _this._init = true;
  64161. dom.write(function () {
  64162. ele.classList.add('animate');
  64163. }, 80);
  64164. }
  64165. });
  64166. }, 32);
  64167. };
  64168. TabHighlight.decorators = [
  64169. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  64170. selector: '.tab-highlight'
  64171. },] },
  64172. ];
  64173. /** @nocollapse */
  64174. TabHighlight.ctorParameters = function () { return [
  64175. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  64176. { type: __WEBPACK_IMPORTED_MODULE_1__platform_dom_controller__["a" /* DomController */], },
  64177. ]; };
  64178. return TabHighlight;
  64179. }());
  64180. //# sourceMappingURL=tab-highlight.js.map
  64181. /***/ }),
  64182. /* 144 */
  64183. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64184. "use strict";
  64185. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToastCmp; });
  64186. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  64187. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  64188. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__navigation_nav_params__ = __webpack_require__(23);
  64189. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  64190. /**
  64191. * @hidden
  64192. */
  64193. var ToastCmp = (function () {
  64194. function ToastCmp(_viewCtrl, _config, _elementRef, params, renderer) {
  64195. this._viewCtrl = _viewCtrl;
  64196. this._config = _config;
  64197. this._elementRef = _elementRef;
  64198. this.dismissTimeout = undefined;
  64199. renderer.setElementClass(_elementRef.nativeElement, "toast-" + _config.get('mode'), true);
  64200. this.d = params.data;
  64201. if (this.d.cssClass) {
  64202. this.d.cssClass.split(' ').forEach(function (cssClass) {
  64203. // Make sure the class isn't whitespace, otherwise it throws exceptions
  64204. if (cssClass.trim() !== '')
  64205. renderer.setElementClass(_elementRef.nativeElement, cssClass, true);
  64206. });
  64207. }
  64208. this.id = (++toastIds);
  64209. if (this.d.message) {
  64210. this.hdrId = 'toast-hdr-' + this.id;
  64211. }
  64212. }
  64213. ToastCmp.prototype.ngAfterViewInit = function () {
  64214. var _this = this;
  64215. // if there's a `duration` set, automatically dismiss.
  64216. if (this.d.duration) {
  64217. this.dismissTimeout = setTimeout(function () {
  64218. _this.dismiss('backdrop');
  64219. }, this.d.duration);
  64220. }
  64221. this.enabled = true;
  64222. };
  64223. ToastCmp.prototype.ionViewDidEnter = function () {
  64224. var activeElement = document.activeElement;
  64225. if (activeElement) {
  64226. activeElement.blur();
  64227. }
  64228. var focusableEle = this._elementRef.nativeElement.querySelector('button');
  64229. if (focusableEle) {
  64230. focusableEle.focus();
  64231. }
  64232. };
  64233. ToastCmp.prototype.cbClick = function () {
  64234. if (this.enabled) {
  64235. this.dismiss('close');
  64236. }
  64237. };
  64238. ToastCmp.prototype.dismiss = function (role) {
  64239. clearTimeout(this.dismissTimeout);
  64240. this.dismissTimeout = undefined;
  64241. return this._viewCtrl.dismiss(null, role, { disableApp: false });
  64242. };
  64243. ToastCmp.decorators = [
  64244. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  64245. selector: 'ion-toast',
  64246. template: '<div class="toast-wrapper" ' +
  64247. '[class.toast-bottom]="d.position === \'bottom\'" ' +
  64248. '[class.toast-middle]="d.position === \'middle\'" ' +
  64249. '[class.toast-top]="d.position === \'top\'"> ' +
  64250. '<div class="toast-container"> ' +
  64251. '<div class="toast-message" id="{{hdrId}}" *ngIf="d.message">{{d.message}}</div> ' +
  64252. '<button ion-button clear class="toast-button" *ngIf="d.showCloseButton" (click)="cbClick()"> ' +
  64253. '{{ d.closeButtonText || \'Close\' }} ' +
  64254. '</button> ' +
  64255. '</div> ' +
  64256. '</div>',
  64257. host: {
  64258. 'role': 'dialog',
  64259. '[attr.aria-labelledby]': 'hdrId',
  64260. '[attr.aria-describedby]': 'descId',
  64261. },
  64262. },] },
  64263. ];
  64264. /** @nocollapse */
  64265. ToastCmp.ctorParameters = function () { return [
  64266. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */], },
  64267. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  64268. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  64269. { type: __WEBPACK_IMPORTED_MODULE_2__navigation_nav_params__["a" /* NavParams */], },
  64270. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  64271. ]; };
  64272. return ToastCmp;
  64273. }());
  64274. var toastIds = -1;
  64275. //# sourceMappingURL=toast-component.js.map
  64276. /***/ }),
  64277. /* 145 */
  64278. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64279. "use strict";
  64280. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return VirtualFooter; });
  64281. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  64282. /**
  64283. * @hidden
  64284. */
  64285. var VirtualFooter = (function () {
  64286. function VirtualFooter(templateRef) {
  64287. this.templateRef = templateRef;
  64288. }
  64289. VirtualFooter.decorators = [
  64290. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[virtualFooter]' },] },
  64291. ];
  64292. /** @nocollapse */
  64293. VirtualFooter.ctorParameters = function () { return [
  64294. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  64295. ]; };
  64296. return VirtualFooter;
  64297. }());
  64298. //# sourceMappingURL=virtual-footer.js.map
  64299. /***/ }),
  64300. /* 146 */
  64301. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64302. "use strict";
  64303. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return VirtualHeader; });
  64304. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  64305. /**
  64306. * @hidden
  64307. */
  64308. var VirtualHeader = (function () {
  64309. function VirtualHeader(templateRef) {
  64310. this.templateRef = templateRef;
  64311. }
  64312. VirtualHeader.decorators = [
  64313. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[virtualHeader]' },] },
  64314. ];
  64315. /** @nocollapse */
  64316. VirtualHeader.ctorParameters = function () { return [
  64317. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  64318. ]; };
  64319. return VirtualHeader;
  64320. }());
  64321. //# sourceMappingURL=virtual-header.js.map
  64322. /***/ }),
  64323. /* 147 */
  64324. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64325. "use strict";
  64326. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return VirtualItem; });
  64327. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  64328. /**
  64329. * @hidden
  64330. */
  64331. var VirtualItem = (function () {
  64332. function VirtualItem(templateRef, viewContainer) {
  64333. this.templateRef = templateRef;
  64334. this.viewContainer = viewContainer;
  64335. }
  64336. VirtualItem.decorators = [
  64337. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{ selector: '[virtualItem]' },] },
  64338. ];
  64339. /** @nocollapse */
  64340. VirtualItem.ctorParameters = function () { return [
  64341. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* TemplateRef */], },
  64342. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  64343. ]; };
  64344. return VirtualItem;
  64345. }());
  64346. //# sourceMappingURL=virtual-item.js.map
  64347. /***/ }),
  64348. /* 148 */
  64349. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64350. "use strict";
  64351. /* unused harmony export get */
  64352. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getPromise; });
  64353. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getPlugin; });
  64354. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return pluginWarn; });
  64355. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return cordovaWarn; });
  64356. /**
  64357. * @private
  64358. */
  64359. var get = function (element, path) {
  64360. var paths = path.split('.');
  64361. var obj = element;
  64362. for (var i = 0; i < paths.length; i++) {
  64363. if (!obj) {
  64364. return null;
  64365. }
  64366. obj = obj[paths[i]];
  64367. }
  64368. return obj;
  64369. };
  64370. /**
  64371. * @private
  64372. */
  64373. var getPromise = function (callback) {
  64374. var tryNativePromise = function () {
  64375. if (window.Promise) {
  64376. return new Promise(function (resolve, reject) {
  64377. callback(resolve, reject);
  64378. });
  64379. }
  64380. else {
  64381. console.error('No Promise support or polyfill found. To enable Ionic Native support, please add the es6-promise polyfill before this script, or run with a library like Angular or on a recent browser.');
  64382. }
  64383. };
  64384. return tryNativePromise();
  64385. };
  64386. /**
  64387. * @private
  64388. * @param pluginRef
  64389. * @returns {null|*}
  64390. */
  64391. var getPlugin = function (pluginRef) {
  64392. return get(window, pluginRef);
  64393. };
  64394. /**
  64395. * @private
  64396. */
  64397. var pluginWarn = function (pluginName, plugin, method) {
  64398. if (method) {
  64399. console.warn('Native: tried calling ' +
  64400. pluginName +
  64401. '.' +
  64402. method +
  64403. ', but the ' +
  64404. pluginName +
  64405. ' plugin is not installed.');
  64406. }
  64407. else {
  64408. console.warn("'Native: tried accessing the " + pluginName + " plugin but it's not installed.");
  64409. }
  64410. if (plugin) {
  64411. console.warn("Install the " + pluginName + " plugin: 'ionic cordova plugin add " + plugin + "'");
  64412. }
  64413. };
  64414. /**
  64415. * @private
  64416. * @param pluginName
  64417. * @param method
  64418. */
  64419. var cordovaWarn = function (pluginName, method) {
  64420. if (method) {
  64421. console.warn('Native: tried calling ' +
  64422. pluginName +
  64423. '.' +
  64424. method +
  64425. ', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator');
  64426. }
  64427. else {
  64428. console.warn('Native: tried accessing the ' +
  64429. pluginName +
  64430. ' plugin but Cordova is not available. Make sure to include cordova.js or run in a device/simulator');
  64431. }
  64432. };
  64433. //# sourceMappingURL=util.js.map
  64434. /***/ }),
  64435. /* 149 */,
  64436. /* 150 */,
  64437. /* 151 */,
  64438. /* 152 */,
  64439. /* 153 */,
  64440. /* 154 */
  64441. /***/ (function(module, exports, __webpack_require__) {
  64442. "use strict";
  64443. function isObject(x) {
  64444. return x != null && typeof x === 'object';
  64445. }
  64446. exports.isObject = isObject;
  64447. //# sourceMappingURL=isObject.js.map
  64448. /***/ }),
  64449. /* 155 */
  64450. /***/ (function(module, exports, __webpack_require__) {
  64451. "use strict";
  64452. var __extends = (this && this.__extends) || function (d, b) {
  64453. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  64454. function __() { this.constructor = d; }
  64455. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  64456. };
  64457. /**
  64458. * An error thrown when one or more errors have occurred during the
  64459. * `unsubscribe` of a {@link Subscription}.
  64460. */
  64461. var UnsubscriptionError = (function (_super) {
  64462. __extends(UnsubscriptionError, _super);
  64463. function UnsubscriptionError(errors) {
  64464. _super.call(this);
  64465. this.errors = errors;
  64466. var err = Error.call(this, errors ?
  64467. errors.length + " errors occurred during unsubscription:\n " + errors.map(function (err, i) { return ((i + 1) + ") " + err.toString()); }).join('\n ') : '');
  64468. this.name = err.name = 'UnsubscriptionError';
  64469. this.stack = err.stack;
  64470. this.message = err.message;
  64471. }
  64472. return UnsubscriptionError;
  64473. }(Error));
  64474. exports.UnsubscriptionError = UnsubscriptionError;
  64475. //# sourceMappingURL=UnsubscriptionError.js.map
  64476. /***/ }),
  64477. /* 156 */
  64478. /***/ (function(module, exports, __webpack_require__) {
  64479. "use strict";
  64480. exports.empty = {
  64481. closed: true,
  64482. next: function (value) { },
  64483. error: function (err) { throw err; },
  64484. complete: function () { }
  64485. };
  64486. //# sourceMappingURL=Observer.js.map
  64487. /***/ }),
  64488. /* 157 */
  64489. /***/ (function(module, exports, __webpack_require__) {
  64490. "use strict";
  64491. exports.isArrayLike = (function (x) { return x && typeof x.length === 'number'; });
  64492. //# sourceMappingURL=isArrayLike.js.map
  64493. /***/ }),
  64494. /* 158 */
  64495. /***/ (function(module, exports, __webpack_require__) {
  64496. "use strict";
  64497. function isPromise(value) {
  64498. return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
  64499. }
  64500. exports.isPromise = isPromise;
  64501. //# sourceMappingURL=isPromise.js.map
  64502. /***/ }),
  64503. /* 159 */
  64504. /***/ (function(module, exports, __webpack_require__) {
  64505. "use strict";
  64506. function identity(x) {
  64507. return x;
  64508. }
  64509. exports.identity = identity;
  64510. //# sourceMappingURL=identity.js.map
  64511. /***/ }),
  64512. /* 160 */
  64513. /***/ (function(module, exports, __webpack_require__) {
  64514. "use strict";
  64515. var share_1 = __webpack_require__(161);
  64516. /**
  64517. * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one
  64518. * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will
  64519. * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.
  64520. *
  64521. * This behaves similarly to .publish().refCount(), with a behavior difference when the source observable emits complete.
  64522. * .publish().refCount() will not resubscribe to the original source, however .share() will resubscribe to the original source.
  64523. * Observable.of("test").publish().refCount() will not re-emit "test" on new subscriptions, Observable.of("test").share() will
  64524. * re-emit "test" to new subscriptions.
  64525. *
  64526. * <img src="./img/share.png" width="100%">
  64527. *
  64528. * @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.
  64529. * @method share
  64530. * @owner Observable
  64531. */
  64532. function share() {
  64533. return share_1.share()(this);
  64534. }
  64535. exports.share = share;
  64536. ;
  64537. //# sourceMappingURL=share.js.map
  64538. /***/ }),
  64539. /* 161 */
  64540. /***/ (function(module, exports, __webpack_require__) {
  64541. "use strict";
  64542. var multicast_1 = __webpack_require__(39);
  64543. var refCount_1 = __webpack_require__(90);
  64544. var Subject_1 = __webpack_require__(12);
  64545. function shareSubjectFactory() {
  64546. return new Subject_1.Subject();
  64547. }
  64548. /**
  64549. * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one
  64550. * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will
  64551. * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.
  64552. * This is an alias for .multicast(() => new Subject()).refCount().
  64553. *
  64554. * <img src="./img/share.png" width="100%">
  64555. *
  64556. * @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.
  64557. * @method share
  64558. * @owner Observable
  64559. */
  64560. function share() {
  64561. return function (source) { return refCount_1.refCount()(multicast_1.multicast(shareSubjectFactory)(source)); };
  64562. }
  64563. exports.share = share;
  64564. ;
  64565. //# sourceMappingURL=share.js.map
  64566. /***/ }),
  64567. /* 162 */
  64568. /***/ (function(module, exports, __webpack_require__) {
  64569. "use strict";
  64570. var __extends = (this && this.__extends) || function (d, b) {
  64571. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  64572. function __() { this.constructor = d; }
  64573. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  64574. };
  64575. var Subject_1 = __webpack_require__(12);
  64576. var Observable_1 = __webpack_require__(0);
  64577. var Subscriber_1 = __webpack_require__(4);
  64578. var Subscription_1 = __webpack_require__(14);
  64579. var refCount_1 = __webpack_require__(90);
  64580. /**
  64581. * @class ConnectableObservable<T>
  64582. */
  64583. var ConnectableObservable = (function (_super) {
  64584. __extends(ConnectableObservable, _super);
  64585. function ConnectableObservable(/** @deprecated internal use only */ source,
  64586. /** @deprecated internal use only */ subjectFactory) {
  64587. _super.call(this);
  64588. this.source = source;
  64589. this.subjectFactory = subjectFactory;
  64590. /** @deprecated internal use only */ this._refCount = 0;
  64591. this._isComplete = false;
  64592. }
  64593. /** @deprecated internal use only */ ConnectableObservable.prototype._subscribe = function (subscriber) {
  64594. return this.getSubject().subscribe(subscriber);
  64595. };
  64596. /** @deprecated internal use only */ ConnectableObservable.prototype.getSubject = function () {
  64597. var subject = this._subject;
  64598. if (!subject || subject.isStopped) {
  64599. this._subject = this.subjectFactory();
  64600. }
  64601. return this._subject;
  64602. };
  64603. ConnectableObservable.prototype.connect = function () {
  64604. var connection = this._connection;
  64605. if (!connection) {
  64606. this._isComplete = false;
  64607. connection = this._connection = new Subscription_1.Subscription();
  64608. connection.add(this.source
  64609. .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
  64610. if (connection.closed) {
  64611. this._connection = null;
  64612. connection = Subscription_1.Subscription.EMPTY;
  64613. }
  64614. else {
  64615. this._connection = connection;
  64616. }
  64617. }
  64618. return connection;
  64619. };
  64620. ConnectableObservable.prototype.refCount = function () {
  64621. return refCount_1.refCount()(this);
  64622. };
  64623. return ConnectableObservable;
  64624. }(Observable_1.Observable));
  64625. exports.ConnectableObservable = ConnectableObservable;
  64626. var connectableProto = ConnectableObservable.prototype;
  64627. exports.connectableObservableDescriptor = {
  64628. operator: { value: null },
  64629. _refCount: { value: 0, writable: true },
  64630. _subject: { value: null, writable: true },
  64631. _connection: { value: null, writable: true },
  64632. _subscribe: { value: connectableProto._subscribe },
  64633. _isComplete: { value: connectableProto._isComplete, writable: true },
  64634. getSubject: { value: connectableProto.getSubject },
  64635. connect: { value: connectableProto.connect },
  64636. refCount: { value: connectableProto.refCount }
  64637. };
  64638. var ConnectableSubscriber = (function (_super) {
  64639. __extends(ConnectableSubscriber, _super);
  64640. function ConnectableSubscriber(destination, connectable) {
  64641. _super.call(this, destination);
  64642. this.connectable = connectable;
  64643. }
  64644. ConnectableSubscriber.prototype._error = function (err) {
  64645. this._unsubscribe();
  64646. _super.prototype._error.call(this, err);
  64647. };
  64648. ConnectableSubscriber.prototype._complete = function () {
  64649. this.connectable._isComplete = true;
  64650. this._unsubscribe();
  64651. _super.prototype._complete.call(this);
  64652. };
  64653. /** @deprecated internal use only */ ConnectableSubscriber.prototype._unsubscribe = function () {
  64654. var connectable = this.connectable;
  64655. if (connectable) {
  64656. this.connectable = null;
  64657. var connection = connectable._connection;
  64658. connectable._refCount = 0;
  64659. connectable._subject = null;
  64660. connectable._connection = null;
  64661. if (connection) {
  64662. connection.unsubscribe();
  64663. }
  64664. }
  64665. };
  64666. return ConnectableSubscriber;
  64667. }(Subject_1.SubjectSubscriber));
  64668. var RefCountOperator = (function () {
  64669. function RefCountOperator(connectable) {
  64670. this.connectable = connectable;
  64671. }
  64672. RefCountOperator.prototype.call = function (subscriber, source) {
  64673. var connectable = this.connectable;
  64674. connectable._refCount++;
  64675. var refCounter = new RefCountSubscriber(subscriber, connectable);
  64676. var subscription = source.subscribe(refCounter);
  64677. if (!refCounter.closed) {
  64678. refCounter.connection = connectable.connect();
  64679. }
  64680. return subscription;
  64681. };
  64682. return RefCountOperator;
  64683. }());
  64684. var RefCountSubscriber = (function (_super) {
  64685. __extends(RefCountSubscriber, _super);
  64686. function RefCountSubscriber(destination, connectable) {
  64687. _super.call(this, destination);
  64688. this.connectable = connectable;
  64689. }
  64690. /** @deprecated internal use only */ RefCountSubscriber.prototype._unsubscribe = function () {
  64691. var connectable = this.connectable;
  64692. if (!connectable) {
  64693. this.connection = null;
  64694. return;
  64695. }
  64696. this.connectable = null;
  64697. var refCount = connectable._refCount;
  64698. if (refCount <= 0) {
  64699. this.connection = null;
  64700. return;
  64701. }
  64702. connectable._refCount = refCount - 1;
  64703. if (refCount > 1) {
  64704. this.connection = null;
  64705. return;
  64706. }
  64707. ///
  64708. // Compare the local RefCountSubscriber's connection Subscription to the
  64709. // connection Subscription on the shared ConnectableObservable. In cases
  64710. // where the ConnectableObservable source synchronously emits values, and
  64711. // the RefCountSubscriber's downstream Observers synchronously unsubscribe,
  64712. // execution continues to here before the RefCountOperator has a chance to
  64713. // supply the RefCountSubscriber with the shared connection Subscription.
  64714. // For example:
  64715. // ```
  64716. // Observable.range(0, 10)
  64717. // .publish()
  64718. // .refCount()
  64719. // .take(5)
  64720. // .subscribe();
  64721. // ```
  64722. // In order to account for this case, RefCountSubscriber should only dispose
  64723. // the ConnectableObservable's shared connection Subscription if the
  64724. // connection Subscription exists, *and* either:
  64725. // a. RefCountSubscriber doesn't have a reference to the shared connection
  64726. // Subscription yet, or,
  64727. // b. RefCountSubscriber's connection Subscription reference is identical
  64728. // to the shared connection Subscription
  64729. ///
  64730. var connection = this.connection;
  64731. var sharedConnection = connectable._connection;
  64732. this.connection = null;
  64733. if (sharedConnection && (!connection || sharedConnection === connection)) {
  64734. sharedConnection.unsubscribe();
  64735. }
  64736. };
  64737. return RefCountSubscriber;
  64738. }(Subscriber_1.Subscriber));
  64739. //# sourceMappingURL=ConnectableObservable.js.map
  64740. /***/ }),
  64741. /* 163 */
  64742. /***/ (function(module, exports, __webpack_require__) {
  64743. "use strict";
  64744. var __extends = (this && this.__extends) || function (d, b) {
  64745. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  64746. function __() { this.constructor = d; }
  64747. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  64748. };
  64749. var Subscription_1 = __webpack_require__(14);
  64750. /**
  64751. * We need this JSDoc comment for affecting ESDoc.
  64752. * @ignore
  64753. * @extends {Ignored}
  64754. */
  64755. var SubjectSubscription = (function (_super) {
  64756. __extends(SubjectSubscription, _super);
  64757. function SubjectSubscription(subject, subscriber) {
  64758. _super.call(this);
  64759. this.subject = subject;
  64760. this.subscriber = subscriber;
  64761. this.closed = false;
  64762. }
  64763. SubjectSubscription.prototype.unsubscribe = function () {
  64764. if (this.closed) {
  64765. return;
  64766. }
  64767. this.closed = true;
  64768. var subject = this.subject;
  64769. var observers = subject.observers;
  64770. this.subject = null;
  64771. if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
  64772. return;
  64773. }
  64774. var subscriberIndex = observers.indexOf(this.subscriber);
  64775. if (subscriberIndex !== -1) {
  64776. observers.splice(subscriberIndex, 1);
  64777. }
  64778. };
  64779. return SubjectSubscription;
  64780. }(Subscription_1.Subscription));
  64781. exports.SubjectSubscription = SubjectSubscription;
  64782. //# sourceMappingURL=SubjectSubscription.js.map
  64783. /***/ }),
  64784. /* 164 */,
  64785. /* 165 */
  64786. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64787. "use strict";
  64788. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return OverlayPortal; });
  64789. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  64790. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app__ = __webpack_require__(11);
  64791. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  64792. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_deep_linker__ = __webpack_require__(24);
  64793. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__ = __webpack_require__(15);
  64794. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__ = __webpack_require__(13);
  64795. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__navigation_nav_controller_base__ = __webpack_require__(69);
  64796. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__platform_platform__ = __webpack_require__(7);
  64797. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__transitions_transition_controller__ = __webpack_require__(71);
  64798. var __extends = (this && this.__extends) || (function () {
  64799. var extendStatics = Object.setPrototypeOf ||
  64800. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  64801. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  64802. return function (d, b) {
  64803. extendStatics(d, b);
  64804. function __() { this.constructor = d; }
  64805. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  64806. };
  64807. })();
  64808. /**
  64809. * @hidden
  64810. */
  64811. var OverlayPortal = (function (_super) {
  64812. __extends(OverlayPortal, _super);
  64813. function OverlayPortal(app, config, plt, elementRef, zone, renderer, cfr, gestureCtrl, transCtrl, linker, viewPort, domCtrl, errHandler) {
  64814. var _this = _super.call(this, null, app, config, plt, elementRef, zone, renderer, cfr, gestureCtrl, transCtrl, linker, domCtrl, errHandler) || this;
  64815. _this._isPortal = true;
  64816. _this._init = true;
  64817. _this.setViewport(viewPort);
  64818. // on every page change make sure the portal has
  64819. // dismissed any views that should be auto dismissed on page change
  64820. app.viewDidLeave.subscribe(function (view) {
  64821. if (!view.isOverlay) {
  64822. _this.dismissPageChangeViews();
  64823. }
  64824. });
  64825. return _this;
  64826. }
  64827. Object.defineProperty(OverlayPortal.prototype, "_overlayPortal", {
  64828. set: function (val) {
  64829. this._zIndexOffset = (val || 0);
  64830. },
  64831. enumerable: true,
  64832. configurable: true
  64833. });
  64834. OverlayPortal.prototype.ngOnDestroy = function () {
  64835. this.destroy();
  64836. };
  64837. /*
  64838. * @private
  64839. */
  64840. OverlayPortal.prototype.getType = function () {
  64841. return 'portal';
  64842. };
  64843. /*
  64844. * @private
  64845. */
  64846. OverlayPortal.prototype.getSecondaryIdentifier = function () {
  64847. return null;
  64848. };
  64849. OverlayPortal.decorators = [
  64850. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  64851. selector: '[overlay-portal]',
  64852. },] },
  64853. ];
  64854. /** @nocollapse */
  64855. OverlayPortal.ctorParameters = function () { return [
  64856. { type: __WEBPACK_IMPORTED_MODULE_1__app__["a" /* App */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return __WEBPACK_IMPORTED_MODULE_1__app__["a" /* App */]; }),] },] },
  64857. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  64858. { type: __WEBPACK_IMPORTED_MODULE_7__platform_platform__["a" /* Platform */], },
  64859. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  64860. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  64861. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  64862. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */], },
  64863. { type: __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["l" /* GestureController */], },
  64864. { type: __WEBPACK_IMPORTED_MODULE_8__transitions_transition_controller__["a" /* TransitionController */], },
  64865. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_deep_linker__["a" /* DeepLinker */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  64866. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */], },
  64867. { type: __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__["a" /* DomController */], },
  64868. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* ErrorHandler */], },
  64869. ]; };
  64870. OverlayPortal.propDecorators = {
  64871. '_overlayPortal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */], args: ['overlay-portal',] },],
  64872. };
  64873. return OverlayPortal;
  64874. }(__WEBPACK_IMPORTED_MODULE_6__navigation_nav_controller_base__["a" /* NavControllerBase */]));
  64875. //# sourceMappingURL=overlay-portal.js.map
  64876. /***/ }),
  64877. /* 166 */
  64878. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64879. "use strict";
  64880. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SlideGesture; });
  64881. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__pan_gesture__ = __webpack_require__(70);
  64882. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  64883. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  64884. var __extends = (this && this.__extends) || (function () {
  64885. var extendStatics = Object.setPrototypeOf ||
  64886. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  64887. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  64888. return function (d, b) {
  64889. extendStatics(d, b);
  64890. function __() { this.constructor = d; }
  64891. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  64892. };
  64893. })();
  64894. /**
  64895. * @hidden
  64896. */
  64897. var SlideGesture = (function (_super) {
  64898. __extends(SlideGesture, _super);
  64899. function SlideGesture(plt, element, opts) {
  64900. if (opts === void 0) { opts = {}; }
  64901. var _this = _super.call(this, plt, element, opts) || this;
  64902. _this.slide = null;
  64903. return _this;
  64904. }
  64905. /*
  64906. * Get the min and max for the slide. pageX/pageY.
  64907. * Only called on dragstart.
  64908. */
  64909. SlideGesture.prototype.getSlideBoundaries = function (_slide, _ev) {
  64910. return {
  64911. min: 0,
  64912. max: this.getNativeElement().offsetWidth
  64913. };
  64914. };
  64915. /*
  64916. * Get the element's pos when the drag starts.
  64917. * For example, an open side menu starts at 100% and a closed
  64918. * sidemenu starts at 0%.
  64919. */
  64920. SlideGesture.prototype.getElementStartPos = function (_slide, _ev) {
  64921. return 0;
  64922. };
  64923. SlideGesture.prototype.onDragStart = function (ev) {
  64924. this.onSlideBeforeStart(ev);
  64925. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  64926. var pos = coord[this.direction];
  64927. this.slide = {
  64928. min: 0,
  64929. max: 0,
  64930. pointerStartPos: pos,
  64931. pos: pos,
  64932. timestamp: Date.now(),
  64933. elementStartPos: 0,
  64934. started: true,
  64935. delta: 0,
  64936. distance: 0,
  64937. velocity: 0,
  64938. };
  64939. // TODO: we should run this in the next frame
  64940. var _a = this.getSlideBoundaries(this.slide, ev), min = _a.min, max = _a.max;
  64941. this.slide.min = min;
  64942. this.slide.max = max;
  64943. this.slide.elementStartPos = this.getElementStartPos(this.slide, ev);
  64944. this.onSlideStart(this.slide, ev);
  64945. };
  64946. SlideGesture.prototype.onDragMove = function (ev) {
  64947. var slide = this.slide;
  64948. (void 0) /* assert */;
  64949. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  64950. var newPos = coord[this.direction];
  64951. var newTimestamp = Date.now();
  64952. var velocity = (this.plt.isRTL ? (slide.pos - newPos) : (newPos - slide.pos)) / (newTimestamp - slide.timestamp);
  64953. slide.pos = newPos;
  64954. slide.timestamp = newTimestamp;
  64955. slide.distance = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["a" /* clamp */])(slide.min, (this.plt.isRTL ? slide.pointerStartPos - newPos : newPos - slide.pointerStartPos) + slide.elementStartPos, slide.max);
  64956. slide.velocity = velocity;
  64957. slide.delta = (this.plt.isRTL ? slide.pointerStartPos - newPos : newPos - slide.pointerStartPos);
  64958. this.onSlide(slide, ev);
  64959. };
  64960. SlideGesture.prototype.onDragEnd = function (ev) {
  64961. this.onSlideEnd(this.slide, ev);
  64962. this.slide = null;
  64963. };
  64964. SlideGesture.prototype.onSlideBeforeStart = function (_ev) { };
  64965. SlideGesture.prototype.onSlideStart = function (_slide, _ev) { };
  64966. SlideGesture.prototype.onSlide = function (_slide, _ev) { };
  64967. SlideGesture.prototype.onSlideEnd = function (_slide, _ev) { };
  64968. return SlideGesture;
  64969. }(__WEBPACK_IMPORTED_MODULE_0__pan_gesture__["a" /* PanGesture */]));
  64970. //# sourceMappingURL=slide-gesture.js.map
  64971. /***/ }),
  64972. /* 167 */
  64973. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  64974. "use strict";
  64975. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PointerEvents; });
  64976. /* unused harmony export POINTER_EVENT_TYPE_MOUSE */
  64977. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return POINTER_EVENT_TYPE_TOUCH; });
  64978. /**
  64979. * @hidden
  64980. */
  64981. var PointerEvents = (function () {
  64982. function PointerEvents(plt, ele, pointerDown, pointerMove, pointerUp, option) {
  64983. this.plt = plt;
  64984. this.ele = ele;
  64985. this.pointerDown = pointerDown;
  64986. this.pointerMove = pointerMove;
  64987. this.pointerUp = pointerUp;
  64988. this.option = option;
  64989. this.rmTouchStart = null;
  64990. this.rmTouchMove = null;
  64991. this.rmTouchEnd = null;
  64992. this.rmTouchCancel = null;
  64993. this.rmMouseStart = null;
  64994. this.rmMouseMove = null;
  64995. this.rmMouseUp = null;
  64996. this.lastTouchEvent = 0;
  64997. this.mouseWait = 2 * 1000;
  64998. (void 0) /* assert */;
  64999. (void 0) /* assert */;
  65000. this.bindTouchEnd = this.handleTouchEnd.bind(this);
  65001. this.bindMouseUp = this.handleMouseUp.bind(this);
  65002. this.rmTouchStart = this.plt.registerListener(ele, 'touchstart', this.handleTouchStart.bind(this), option);
  65003. this.rmMouseStart = this.plt.registerListener(ele, 'mousedown', this.handleMouseDown.bind(this), option);
  65004. }
  65005. PointerEvents.prototype.handleTouchStart = function (ev) {
  65006. (void 0) /* assert */;
  65007. (void 0) /* assert */;
  65008. this.lastTouchEvent = Date.now() + this.mouseWait;
  65009. this.lastEventType = POINTER_EVENT_TYPE_TOUCH;
  65010. if (!this.pointerDown(ev, POINTER_EVENT_TYPE_TOUCH)) {
  65011. return;
  65012. }
  65013. if (!this.rmTouchMove && this.pointerMove) {
  65014. this.rmTouchMove = this.plt.registerListener(this.ele, 'touchmove', this.pointerMove, this.option);
  65015. }
  65016. if (!this.rmTouchEnd) {
  65017. this.rmTouchEnd = this.plt.registerListener(this.ele, 'touchend', this.bindTouchEnd, this.option);
  65018. }
  65019. if (!this.rmTouchCancel) {
  65020. this.rmTouchCancel = this.plt.registerListener(this.ele, 'touchcancel', this.bindTouchEnd, this.option);
  65021. }
  65022. };
  65023. PointerEvents.prototype.handleMouseDown = function (ev) {
  65024. (void 0) /* assert */;
  65025. (void 0) /* assert */;
  65026. if (this.lastTouchEvent > Date.now()) {
  65027. (void 0) /* console.debug */;
  65028. return;
  65029. }
  65030. this.lastEventType = POINTER_EVENT_TYPE_MOUSE;
  65031. if (!this.pointerDown(ev, POINTER_EVENT_TYPE_MOUSE)) {
  65032. return;
  65033. }
  65034. if (!this.rmMouseMove && this.pointerMove) {
  65035. this.rmMouseMove = this.plt.registerListener(this.plt.doc(), 'mousemove', this.pointerMove, this.option);
  65036. }
  65037. if (!this.rmMouseUp) {
  65038. this.rmMouseUp = this.plt.registerListener(this.plt.doc(), 'mouseup', this.bindMouseUp, this.option);
  65039. }
  65040. };
  65041. PointerEvents.prototype.handleTouchEnd = function (ev) {
  65042. this.stopTouch();
  65043. this.pointerUp && this.pointerUp(ev, POINTER_EVENT_TYPE_TOUCH);
  65044. };
  65045. PointerEvents.prototype.handleMouseUp = function (ev) {
  65046. this.stopMouse();
  65047. this.pointerUp && this.pointerUp(ev, POINTER_EVENT_TYPE_MOUSE);
  65048. };
  65049. PointerEvents.prototype.stopTouch = function () {
  65050. this.rmTouchMove && this.rmTouchMove();
  65051. this.rmTouchEnd && this.rmTouchEnd();
  65052. this.rmTouchCancel && this.rmTouchCancel();
  65053. this.rmTouchMove = this.rmTouchEnd = this.rmTouchCancel = null;
  65054. };
  65055. PointerEvents.prototype.stopMouse = function () {
  65056. this.rmMouseMove && this.rmMouseMove();
  65057. this.rmMouseUp && this.rmMouseUp();
  65058. this.rmMouseMove = this.rmMouseUp = null;
  65059. };
  65060. PointerEvents.prototype.stop = function () {
  65061. this.stopTouch();
  65062. this.stopMouse();
  65063. };
  65064. PointerEvents.prototype.destroy = function () {
  65065. this.rmTouchStart && this.rmTouchStart();
  65066. this.rmMouseStart && this.rmMouseStart();
  65067. this.stop();
  65068. this.ele = this.pointerUp = this.pointerMove = this.pointerDown = this.rmTouchStart = this.rmMouseStart = null;
  65069. };
  65070. return PointerEvents;
  65071. }());
  65072. var POINTER_EVENT_TYPE_MOUSE = 1;
  65073. var POINTER_EVENT_TYPE_TOUCH = 2;
  65074. //# sourceMappingURL=pointer-events.js.map
  65075. /***/ }),
  65076. /* 168 */
  65077. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65078. "use strict";
  65079. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionSheetController; });
  65080. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65081. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__action_sheet__ = __webpack_require__(93);
  65082. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_app__ = __webpack_require__(11);
  65083. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  65084. /**
  65085. * @name ActionSheetController
  65086. * @description
  65087. * An Action Sheet is a dialog that lets the user choose from a set of
  65088. * options. It appears on top of the app's content, and must be manually
  65089. * dismissed by the user before they can resume interaction with the app.
  65090. * Dangerous (destructive) options are made obvious in `ios` mode. There are easy
  65091. * ways to cancel out of the action sheet, such as tapping the backdrop or
  65092. * hitting the escape key on desktop.
  65093. *
  65094. * An action sheet is created from an array of `buttons`, with each button
  65095. * including properties for its `text`, and optionally a `handler` and `role`.
  65096. * If a handler returns `false` then the action sheet will not be dismissed. An
  65097. * action sheet can also optionally have a `title`, `subTitle` and an `icon`.
  65098. *
  65099. * A button's `role` property can either be `destructive` or `cancel`. Buttons
  65100. * without a role property will have the default look for the platform. Buttons
  65101. * with the `cancel` role will always load as the bottom button, no matter where
  65102. * they are in the array. All other buttons will be displayed in the order they
  65103. * have been added to the `buttons` array. Note: We recommend that `destructive`
  65104. * buttons are always the first button in the array, making them the top button.
  65105. * Additionally, if the action sheet is dismissed by tapping the backdrop, then
  65106. * it will fire the handler from the button with the cancel role.
  65107. *
  65108. * You can pass all of the action sheet's options in the first argument of
  65109. * the create method: `ActionSheet.create(opts)`. Otherwise the action sheet's
  65110. * instance has methods to add options, like `setTitle()` or `addButton()`.
  65111. *
  65112. * @usage
  65113. * ```ts
  65114. * import { ActionSheetController } from 'ionic-angular'
  65115. *
  65116. * export class MyClass{
  65117. *
  65118. * constructor(public actionSheetCtrl: ActionSheetController) { }
  65119. *
  65120. * presentActionSheet() {
  65121. * const actionSheet = this.actionSheetCtrl.create({
  65122. * title: 'Modify your album',
  65123. * buttons: [
  65124. * {
  65125. * text: 'Destructive',
  65126. * role: 'destructive',
  65127. * handler: () => {
  65128. * console.log('Destructive clicked');
  65129. * }
  65130. * },
  65131. * {
  65132. * text: 'Archive',
  65133. * handler: () => {
  65134. * console.log('Archive clicked');
  65135. * }
  65136. * },
  65137. * {
  65138. * text: 'Cancel',
  65139. * role: 'cancel',
  65140. * handler: () => {
  65141. * console.log('Cancel clicked');
  65142. * }
  65143. * }
  65144. * ]
  65145. * });
  65146. *
  65147. * actionSheet.present();
  65148. * }
  65149. * }
  65150. * ```
  65151. *
  65152. * @advanced
  65153. *
  65154. * ActionSheet create options
  65155. *
  65156. * | Option | Type | Description |
  65157. * |-----------------------|------------|--------------------------------------------------------------------|
  65158. * | title |`string` | The title for the Action Sheet. |
  65159. * | subTitle |`string` | The sub-title for the Action Sheet. |
  65160. * | cssClass |`string` | Additional classes for custom styles, separated by spaces. |
  65161. * | enableBackdropDismiss |`boolean` | If the Action Sheet should close when the user taps the backdrop. |
  65162. * | buttons |`array<any>`| An array of buttons to display. |
  65163. *
  65164. * ActionSheet button options
  65165. *
  65166. * | Option | Type | Description |
  65167. * |----------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------|
  65168. * | text | `string` | The buttons text. |
  65169. * | icon | `icon` | The buttons icons. |
  65170. * | handler | `any` | An express the button should evaluate. |
  65171. * | cssClass | `string` | Additional classes for custom styles, separated by spaces. |
  65172. * | role | `string` | How the button should be displayed, `destructive` or `cancel`. If not role is provided, it will display the button without any additional styles.|
  65173. *
  65174. *
  65175. * ### Dismissing And Async Navigation
  65176. *
  65177. * After an action sheet has been dismissed, the app may need to also transition
  65178. * to another page depending on the handler's logic. However, because multiple
  65179. * transitions were fired at roughly the same time, it's difficult for the
  65180. * nav controller to cleanly animate multiple transitions that may
  65181. * have been kicked off asynchronously. This is further described in the
  65182. * [`Nav Transition Promises`](../../nav/NavController/#nav-transition-promises) section. For action sheets,
  65183. * this means it's best to wait for the action sheet to finish its transition
  65184. * out before starting a new transition on the same nav controller.
  65185. *
  65186. * In the example below, after the button has been clicked, its handler
  65187. * waits on async operation to complete, *then* it uses `pop` to navigate
  65188. * back a page in the same stack. The potential problem is that the async operation
  65189. * may have been completed before the action sheet has even finished its transition
  65190. * out. In this case, it's best to ensure the action sheet has finished its transition
  65191. * out first, *then* start the next transition.
  65192. *
  65193. * ```ts
  65194. * const actionSheet = this.actionSheetCtrl.create({
  65195. * title: 'Hello',
  65196. * buttons: [{
  65197. * text: 'Ok',
  65198. * handler: () => {
  65199. * // user has clicked the action sheet button
  65200. * // begin the action sheet's dimiss transition
  65201. * let navTransition = actionSheet.dismiss();
  65202. *
  65203. * // start some async method
  65204. * someAsyncOperation().then(() => {
  65205. * // once the async operation has completed
  65206. * // then run the next nav transition after the
  65207. * // first transition has finished animating out
  65208. *
  65209. * navTransition.then(() => {
  65210. * this.nav.pop();
  65211. * });
  65212. * });
  65213. * return false;
  65214. * }
  65215. * }]
  65216. * });
  65217. *
  65218. * actionSheet.present();
  65219. * ```
  65220. *
  65221. * It's important to note that the handler returns `false`. A feature of
  65222. * button handlers is that they automatically dismiss the action sheet when their button
  65223. * was clicked, however, we'll need more control regarding the transition. Because
  65224. * the handler returns `false`, then the action sheet does not automatically dismiss
  65225. * itself. Instead, you now have complete control of when the action sheet has finished
  65226. * transitioning, and the ability to wait for the action sheet to finish transitioning
  65227. * out before starting a new transition.
  65228. *
  65229. *
  65230. * @demo /docs/demos/src/action-sheet/
  65231. * @see {@link /docs/components#action-sheets ActionSheet Component Docs}
  65232. */
  65233. var ActionSheetController = (function () {
  65234. function ActionSheetController(_app, config) {
  65235. this._app = _app;
  65236. this.config = config;
  65237. }
  65238. /**
  65239. * Open an action sheet with a title, subTitle, and an array of buttons
  65240. * @param {ActionSheetOptions} opts Action sheet options
  65241. */
  65242. ActionSheetController.prototype.create = function (opts) {
  65243. if (opts === void 0) { opts = {}; }
  65244. return new __WEBPACK_IMPORTED_MODULE_1__action_sheet__["a" /* ActionSheet */](this._app, opts, this.config);
  65245. };
  65246. ActionSheetController.decorators = [
  65247. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  65248. ];
  65249. /** @nocollapse */
  65250. ActionSheetController.ctorParameters = function () { return [
  65251. { type: __WEBPACK_IMPORTED_MODULE_2__app_app__["a" /* App */], },
  65252. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  65253. ]; };
  65254. return ActionSheetController;
  65255. }());
  65256. //# sourceMappingURL=action-sheet-controller.js.map
  65257. /***/ }),
  65258. /* 169 */
  65259. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65260. "use strict";
  65261. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AlertController; });
  65262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__alert__ = __webpack_require__(95);
  65264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_app__ = __webpack_require__(11);
  65265. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  65266. /**
  65267. * @name AlertController
  65268. * @description
  65269. * An Alert is a dialog that presents users with information or collects
  65270. * information from the user using inputs. An alert appears on top
  65271. * of the app's content, and must be manually dismissed by the user before
  65272. * they can resume interaction with the app. It can also optionally have a
  65273. * `title`, `subTitle` and `message`.
  65274. *
  65275. * You can pass all of the alert's options in the first argument of
  65276. * the create method: `create(opts)`. Otherwise the alert's instance
  65277. * has methods to add options, such as `setTitle()` or `addButton()`.
  65278. *
  65279. *
  65280. * ### Alert Buttons
  65281. *
  65282. * In the array of `buttons`, each button includes properties for its `text`,
  65283. * and optionally a `handler`. If a handler returns `false` then the alert
  65284. * will not automatically be dismissed when the button is clicked. All
  65285. * buttons will show up in the order they have been added to the `buttons`
  65286. * array, from left to right. Note: The right most button (the last one in
  65287. * the array) is the main button.
  65288. *
  65289. * Optionally, a `role` property can be added to a button, such as `cancel`.
  65290. * If a `cancel` role is on one of the buttons, then if the alert is
  65291. * dismissed by tapping the backdrop, then it will fire the handler from
  65292. * the button with a cancel role.
  65293. *
  65294. *
  65295. * ### Alert Inputs
  65296. *
  65297. * Alerts can also include several different inputs whose data can be passed
  65298. * back to the app. Inputs can be used as a simple way to prompt users for
  65299. * information. Radios, checkboxes and text inputs are all accepted, but they
  65300. * cannot be mixed. For example, an alert could have all radio button inputs,
  65301. * or all checkbox inputs, but the same alert cannot mix radio and checkbox
  65302. * inputs. Do note however, different types of "text"" inputs can be mixed,
  65303. * such as `url`, `email`, `text`, etc. If you require a complex form UI
  65304. * which doesn't fit within the guidelines of an alert then we recommend
  65305. * building the form within a modal instead.
  65306. *
  65307. *
  65308. * @usage
  65309. * ```ts
  65310. * import { AlertController } from 'ionic-angular';
  65311. *
  65312. * constructor(public alertCtrl: AlertController) { }
  65313. *
  65314. * presentAlert() {
  65315. * const alert = this.alertCtrl.create({
  65316. * title: 'Low battery',
  65317. * subTitle: '10% of battery remaining',
  65318. * buttons: ['Dismiss']
  65319. * });
  65320. * alert.present();
  65321. * }
  65322. *
  65323. * presentConfirm() {
  65324. * const alert = this.alertCtrl.create({
  65325. * title: 'Confirm purchase',
  65326. * message: 'Do you want to buy this book?',
  65327. * buttons: [
  65328. * {
  65329. * text: 'Cancel',
  65330. * role: 'cancel',
  65331. * handler: () => {
  65332. * console.log('Cancel clicked');
  65333. * }
  65334. * },
  65335. * {
  65336. * text: 'Buy',
  65337. * handler: () => {
  65338. * console.log('Buy clicked');
  65339. * }
  65340. * }
  65341. * ]
  65342. * });
  65343. * alert.present();
  65344. * }
  65345. *
  65346. * presentPrompt() {
  65347. * const alert = this.alertCtrl.create({
  65348. * title: 'Login',
  65349. * inputs: [
  65350. * {
  65351. * name: 'username',
  65352. * placeholder: 'Username'
  65353. * },
  65354. * {
  65355. * name: 'password',
  65356. * placeholder: 'Password',
  65357. * type: 'password'
  65358. * }
  65359. * ],
  65360. * buttons: [
  65361. * {
  65362. * text: 'Cancel',
  65363. * role: 'cancel',
  65364. * handler: data => {
  65365. * console.log('Cancel clicked');
  65366. * }
  65367. * },
  65368. * {
  65369. * text: 'Login',
  65370. * handler: data => {
  65371. * if (User.isValid(data.username, data.password)) {
  65372. * // logged in!
  65373. * } else {
  65374. * // invalid login
  65375. * return false;
  65376. * }
  65377. * }
  65378. * }
  65379. * ]
  65380. * });
  65381. * alert.present();
  65382. * }
  65383. * ```
  65384. * @advanced
  65385. *
  65386. *
  65387. * Alert options
  65388. *
  65389. * | Property | Type | Description |
  65390. * |-----------------------|-----------|------------------------------------------------------------------------------|
  65391. * | title | `string` | The title for the alert. |
  65392. * | subTitle | `string` | The subtitle for the alert. |
  65393. * | message | `string` | The message for the alert. |
  65394. * | cssClass | `string` | Additional classes for custom styles, separated by spaces. |
  65395. * | inputs | `array` | An array of inputs for the alert. See input options. |
  65396. * | buttons | `array` | An array of buttons for the alert. See buttons options. |
  65397. * | enableBackdropDismiss | `boolean` | Whether the alert should be dismissed by tapping the backdrop. Default true. |
  65398. *
  65399. *
  65400. * Input options
  65401. *
  65402. * | Property | Type | Description |
  65403. * |-------------|-----------|-----------------------------------------------------------------|
  65404. * | type | `string` | The type the input should be: text, tel, number, etc. |
  65405. * | name | `string` | The name for the input. |
  65406. * | placeholder | `string` | The input's placeholder (for textual/numeric inputs) |
  65407. * | value | `string` | The input's value. |
  65408. * | label | `string` | The input's label (only for radio/checkbox inputs) |
  65409. * | checked | `boolean` | Whether or not the input is checked. |
  65410. * | id | `string` | The input's id. |
  65411. *
  65412. * Button options
  65413. *
  65414. * | Property | Type | Description |
  65415. * |----------|----------|-----------------------------------------------------------------|
  65416. * | text | `string` | The buttons displayed text. |
  65417. * | handler | `any` | Emitted when the button is pressed. |
  65418. * | cssClass | `string` | An additional CSS class for the button. |
  65419. * | role | `string` | The buttons role, null or `cancel`. |
  65420. *
  65421. * ### Dismissing And Async Navigation
  65422. *
  65423. * After an alert has been dismissed, the app may need to also transition
  65424. * to another page depending on the handler's logic. However, because multiple
  65425. * transitions were fired at roughly the same time, it's difficult for the
  65426. * nav controller to cleanly animate multiple transitions that may
  65427. * have been kicked off asynchronously. This is further described in the
  65428. * [`Nav Transition Promises`](../../nav/NavController) section. For alerts,
  65429. * this means it's best to wait for the alert to finish its transition
  65430. * out before starting a new transition on the same nav controller.
  65431. *
  65432. * In the example below, after the alert button has been clicked, its handler
  65433. * waits on async operation to complete, *then* it uses `pop` to navigate
  65434. * back a page in the same stack. The potential problem is that the async operation
  65435. * may have been completed before the alert has even finished its transition
  65436. * out. In this case, it's best to ensure the alert has finished its transition
  65437. * out first, *then* start the next transition.
  65438. *
  65439. * ```ts
  65440. * const alert = this.alertCtrl.create({
  65441. * title: 'Hello',
  65442. * buttons: [{
  65443. * text: 'Ok',
  65444. * handler: () => {
  65445. * // user has clicked the alert button
  65446. * // begin the alert's dismiss transition
  65447. * const navTransition = alert.dismiss();
  65448. *
  65449. * // start some async method
  65450. * someAsyncOperation().then(() => {
  65451. * // once the async operation has completed
  65452. * // then run the next nav transition after the
  65453. * // first transition has finished animating out
  65454. *
  65455. * navTransition.then(() => {
  65456. * this.nav.pop();
  65457. * });
  65458. * });
  65459. * return false;
  65460. * }
  65461. * }]
  65462. * });
  65463. *
  65464. * alert.present();
  65465. * ```
  65466. *
  65467. * It's important to note that the handler returns `false`. A feature of
  65468. * button handlers is that they automatically dismiss the alert when their button
  65469. * was clicked, however, we'll need more control regarding the transition. Because
  65470. * the handler returns `false`, then the alert does not automatically dismiss
  65471. * itself. Instead, you now have complete control of when the alert has finished
  65472. * transitioning, and the ability to wait for the alert to finish transitioning
  65473. * out before starting a new transition.
  65474. *
  65475. *
  65476. * @demo /docs/demos/src/alert/
  65477. */
  65478. var AlertController = (function () {
  65479. function AlertController(_app, config) {
  65480. this._app = _app;
  65481. this.config = config;
  65482. }
  65483. /**
  65484. * Display an alert with a title, inputs, and buttons
  65485. * @param {AlertOptions} opts Alert. See the table below
  65486. */
  65487. AlertController.prototype.create = function (opts) {
  65488. if (opts === void 0) { opts = {}; }
  65489. return new __WEBPACK_IMPORTED_MODULE_1__alert__["a" /* Alert */](this._app, opts, this.config);
  65490. };
  65491. AlertController.decorators = [
  65492. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  65493. ];
  65494. /** @nocollapse */
  65495. AlertController.ctorParameters = function () { return [
  65496. { type: __WEBPACK_IMPORTED_MODULE_2__app_app__["a" /* App */], },
  65497. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  65498. ]; };
  65499. return AlertController;
  65500. }());
  65501. //# sourceMappingURL=alert-controller.js.map
  65502. /***/ }),
  65503. /* 170 */
  65504. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65505. "use strict";
  65506. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Avatar; });
  65507. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65508. /**
  65509. * @name Avatar
  65510. * @module ionic
  65511. * @description
  65512. * An Avatar is a component that creates a circular image for an item.
  65513. * Avatars can be placed on the left or right side of an item with the `item-start` or `item-end` directive.
  65514. * @see {@link /docs/components/#avatar-list Avatar Component Docs}
  65515. */
  65516. var Avatar = (function () {
  65517. function Avatar() {
  65518. }
  65519. Avatar.decorators = [
  65520. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  65521. selector: 'ion-avatar'
  65522. },] },
  65523. ];
  65524. /** @nocollapse */
  65525. Avatar.ctorParameters = function () { return []; };
  65526. return Avatar;
  65527. }());
  65528. //# sourceMappingURL=avatar.js.map
  65529. /***/ }),
  65530. /* 171 */
  65531. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65532. "use strict";
  65533. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Badge; });
  65534. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65535. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  65536. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  65537. var __extends = (this && this.__extends) || (function () {
  65538. var extendStatics = Object.setPrototypeOf ||
  65539. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  65540. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  65541. return function (d, b) {
  65542. extendStatics(d, b);
  65543. function __() { this.constructor = d; }
  65544. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65545. };
  65546. })();
  65547. /**
  65548. * @name Badge
  65549. * @module ionic
  65550. * @description
  65551. * Badges are simple components in Ionic containing numbers or text. You can display a badge to indicate that there is new information associated with the item it is on.
  65552. * @see {@link /docs/components/#badges Badges Component Docs}
  65553. */
  65554. var Badge = (function (_super) {
  65555. __extends(Badge, _super);
  65556. function Badge(config, elementRef, renderer) {
  65557. return _super.call(this, config, elementRef, renderer, 'badge') || this;
  65558. }
  65559. Badge.decorators = [
  65560. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  65561. selector: 'ion-badge'
  65562. },] },
  65563. ];
  65564. /** @nocollapse */
  65565. Badge.ctorParameters = function () { return [
  65566. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  65567. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  65568. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  65569. ]; };
  65570. return Badge;
  65571. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  65572. //# sourceMappingURL=badge.js.map
  65573. /***/ }),
  65574. /* 172 */
  65575. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65576. "use strict";
  65577. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Card; });
  65578. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65579. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  65580. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  65581. var __extends = (this && this.__extends) || (function () {
  65582. var extendStatics = Object.setPrototypeOf ||
  65583. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  65584. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  65585. return function (d, b) {
  65586. extendStatics(d, b);
  65587. function __() { this.constructor = d; }
  65588. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65589. };
  65590. })();
  65591. /**
  65592. * @hidden
  65593. */
  65594. var Card = (function (_super) {
  65595. __extends(Card, _super);
  65596. function Card(config, elementRef, renderer) {
  65597. return _super.call(this, config, elementRef, renderer, 'card') || this;
  65598. }
  65599. Card.decorators = [
  65600. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  65601. selector: 'ion-card'
  65602. },] },
  65603. ];
  65604. /** @nocollapse */
  65605. Card.ctorParameters = function () { return [
  65606. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  65607. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  65608. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  65609. ]; };
  65610. return Card;
  65611. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  65612. //# sourceMappingURL=card.js.map
  65613. /***/ }),
  65614. /* 173 */
  65615. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65616. "use strict";
  65617. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CardContent; });
  65618. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65619. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  65620. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  65621. var __extends = (this && this.__extends) || (function () {
  65622. var extendStatics = Object.setPrototypeOf ||
  65623. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  65624. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  65625. return function (d, b) {
  65626. extendStatics(d, b);
  65627. function __() { this.constructor = d; }
  65628. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65629. };
  65630. })();
  65631. /**
  65632. * @hidden
  65633. */
  65634. var CardContent = (function (_super) {
  65635. __extends(CardContent, _super);
  65636. function CardContent(config, elementRef, renderer) {
  65637. return _super.call(this, config, elementRef, renderer, 'card-content') || this;
  65638. }
  65639. CardContent.decorators = [
  65640. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  65641. selector: 'ion-card-content'
  65642. },] },
  65643. ];
  65644. /** @nocollapse */
  65645. CardContent.ctorParameters = function () { return [
  65646. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  65647. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  65648. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  65649. ]; };
  65650. return CardContent;
  65651. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  65652. //# sourceMappingURL=card-content.js.map
  65653. /***/ }),
  65654. /* 174 */
  65655. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65656. "use strict";
  65657. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CardHeader; });
  65658. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65659. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  65660. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  65661. var __extends = (this && this.__extends) || (function () {
  65662. var extendStatics = Object.setPrototypeOf ||
  65663. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  65664. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  65665. return function (d, b) {
  65666. extendStatics(d, b);
  65667. function __() { this.constructor = d; }
  65668. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65669. };
  65670. })();
  65671. /**
  65672. * @hidden
  65673. */
  65674. var CardHeader = (function (_super) {
  65675. __extends(CardHeader, _super);
  65676. function CardHeader(config, elementRef, renderer) {
  65677. return _super.call(this, config, elementRef, renderer, 'card-header') || this;
  65678. }
  65679. CardHeader.decorators = [
  65680. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  65681. selector: 'ion-card-header'
  65682. },] },
  65683. ];
  65684. /** @nocollapse */
  65685. CardHeader.ctorParameters = function () { return [
  65686. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  65687. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  65688. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  65689. ]; };
  65690. return CardHeader;
  65691. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  65692. //# sourceMappingURL=card-header.js.map
  65693. /***/ }),
  65694. /* 175 */
  65695. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65696. "use strict";
  65697. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CardTitle; });
  65698. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65699. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  65700. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  65701. var __extends = (this && this.__extends) || (function () {
  65702. var extendStatics = Object.setPrototypeOf ||
  65703. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  65704. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  65705. return function (d, b) {
  65706. extendStatics(d, b);
  65707. function __() { this.constructor = d; }
  65708. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65709. };
  65710. })();
  65711. /**
  65712. * @hidden
  65713. */
  65714. var CardTitle = (function (_super) {
  65715. __extends(CardTitle, _super);
  65716. function CardTitle(config, elementRef, renderer) {
  65717. return _super.call(this, config, elementRef, renderer, 'card-title') || this;
  65718. }
  65719. CardTitle.decorators = [
  65720. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  65721. selector: 'ion-card-title'
  65722. },] },
  65723. ];
  65724. /** @nocollapse */
  65725. CardTitle.ctorParameters = function () { return [
  65726. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  65727. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  65728. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  65729. ]; };
  65730. return CardTitle;
  65731. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  65732. //# sourceMappingURL=card-title.js.map
  65733. /***/ }),
  65734. /* 176 */
  65735. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  65736. "use strict";
  65737. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Checkbox; });
  65738. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  65739. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  65740. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  65741. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  65742. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_form__ = __webpack_require__(27);
  65743. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_base_input__ = __webpack_require__(37);
  65744. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__item_item__ = __webpack_require__(28);
  65745. var __extends = (this && this.__extends) || (function () {
  65746. var extendStatics = Object.setPrototypeOf ||
  65747. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  65748. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  65749. return function (d, b) {
  65750. extendStatics(d, b);
  65751. function __() { this.constructor = d; }
  65752. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65753. };
  65754. })();
  65755. /**
  65756. * @name Checkbox
  65757. * @module ionic
  65758. *
  65759. * @description
  65760. * The Checkbox is a simple component styled based on the mode. It can be
  65761. * placed in an `ion-item` or used as a stand-alone checkbox.
  65762. *
  65763. * See the [Angular Docs](https://angular.io/docs/ts/latest/guide/forms.html)
  65764. * for more info on forms and inputs.
  65765. *
  65766. *
  65767. * @usage
  65768. * ```html
  65769. *
  65770. * <ion-list>
  65771. *
  65772. * <ion-item>
  65773. * <ion-label>Pepperoni</ion-label>
  65774. * <ion-checkbox [(ngModel)]="pepperoni"></ion-checkbox>
  65775. * </ion-item>
  65776. *
  65777. * <ion-item>
  65778. * <ion-label>Sausage</ion-label>
  65779. * <ion-checkbox [(ngModel)]="sausage" disabled="true"></ion-checkbox>
  65780. * </ion-item>
  65781. *
  65782. * <ion-item>
  65783. * <ion-label>Mushrooms</ion-label>
  65784. * <ion-checkbox [(ngModel)]="mushrooms"></ion-checkbox>
  65785. * </ion-item>
  65786. *
  65787. * </ion-list>
  65788. * ```
  65789. *
  65790. * @advanced
  65791. *
  65792. * ```html
  65793. *
  65794. * <!-- Call function when state changes -->
  65795. * <ion-list>
  65796. *
  65797. * <ion-item>
  65798. * <ion-label>Cucumber</ion-label>
  65799. * <ion-checkbox [(ngModel)]="cucumber" (ionChange)="updateCucumber()"></ion-checkbox>
  65800. * </ion-item>
  65801. *
  65802. * </ion-list>
  65803. * ```
  65804. *
  65805. * ```ts
  65806. * @Component({
  65807. * templateUrl: 'main.html'
  65808. * })
  65809. * class SaladPage {
  65810. * cucumber: boolean;
  65811. *
  65812. * updateCucumber() {
  65813. * console.log('Cucumbers new state:' + this.cucumber);
  65814. * }
  65815. * }
  65816. * ```
  65817. *
  65818. * @demo /docs/demos/src/checkbox/
  65819. * @see {@link /docs/components#checkbox Checkbox Component Docs}
  65820. */
  65821. var Checkbox = (function (_super) {
  65822. __extends(Checkbox, _super);
  65823. function Checkbox(config, form, item, elementRef, renderer) {
  65824. return _super.call(this, config, elementRef, renderer, 'checkbox', false, form, item, null) || this;
  65825. }
  65826. Object.defineProperty(Checkbox.prototype, "checked", {
  65827. /**
  65828. * @input {boolean} If true, the element is selected.
  65829. */
  65830. get: function () {
  65831. return this.value;
  65832. },
  65833. set: function (val) {
  65834. this.value = val;
  65835. },
  65836. enumerable: true,
  65837. configurable: true
  65838. });
  65839. /**
  65840. * @hidden
  65841. */
  65842. Checkbox.prototype._click = function (ev) {
  65843. ev.preventDefault();
  65844. ev.stopPropagation();
  65845. this.value = !this.value;
  65846. this._fireTouched();
  65847. };
  65848. /**
  65849. * @hidden
  65850. */
  65851. Checkbox.prototype._inputNormalize = function (val) {
  65852. return Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  65853. };
  65854. /**
  65855. * @hidden
  65856. */
  65857. Checkbox.prototype._inputUpdated = function () {
  65858. this._item && this._item.setElementClass('item-checkbox-checked', this._value);
  65859. };
  65860. Checkbox.decorators = [
  65861. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  65862. selector: 'ion-checkbox',
  65863. template: '<div class="checkbox-icon" [class.checkbox-checked]="_value">' +
  65864. '<div class="checkbox-inner"></div>' +
  65865. '</div>' +
  65866. '<button role="checkbox" ' +
  65867. 'type="button" ' +
  65868. 'ion-button="item-cover" ' +
  65869. '[id]="id" ' +
  65870. '[attr.aria-checked]="_value" ' +
  65871. '[attr.aria-labelledby]="_labelId" ' +
  65872. '[attr.aria-disabled]="_disabled" ' +
  65873. 'class="item-cover"> ' +
  65874. '</button>',
  65875. host: {
  65876. '[class.checkbox-disabled]': '_disabled'
  65877. },
  65878. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["c" /* NG_VALUE_ACCESSOR */], useExisting: Checkbox, multi: true }],
  65879. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  65880. },] },
  65881. ];
  65882. /** @nocollapse */
  65883. Checkbox.ctorParameters = function () { return [
  65884. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  65885. { type: __WEBPACK_IMPORTED_MODULE_4__util_form__["a" /* Form */], },
  65886. { type: __WEBPACK_IMPORTED_MODULE_6__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  65887. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  65888. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  65889. ]; };
  65890. Checkbox.propDecorators = {
  65891. 'checked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  65892. '_click': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click', ['$event'],] },],
  65893. };
  65894. return Checkbox;
  65895. }(__WEBPACK_IMPORTED_MODULE_5__util_base_input__["a" /* BaseInput */]));
  65896. //# sourceMappingURL=checkbox.js.map
  65897. /***/ }),
  65898. /* 177 */
  65899. /***/ (function(module, exports, __webpack_require__) {
  65900. "use strict";
  65901. var ForkJoinObservable_1 = __webpack_require__(364);
  65902. exports.forkJoin = ForkJoinObservable_1.ForkJoinObservable.create;
  65903. //# sourceMappingURL=forkJoin.js.map
  65904. /***/ }),
  65905. /* 178 */
  65906. /***/ (function(module, exports, __webpack_require__) {
  65907. "use strict";
  65908. var PromiseObservable_1 = __webpack_require__(179);
  65909. exports.fromPromise = PromiseObservable_1.PromiseObservable.create;
  65910. //# sourceMappingURL=fromPromise.js.map
  65911. /***/ }),
  65912. /* 179 */
  65913. /***/ (function(module, exports, __webpack_require__) {
  65914. "use strict";
  65915. var __extends = (this && this.__extends) || function (d, b) {
  65916. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  65917. function __() { this.constructor = d; }
  65918. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  65919. };
  65920. var root_1 = __webpack_require__(19);
  65921. var Observable_1 = __webpack_require__(0);
  65922. /**
  65923. * We need this JSDoc comment for affecting ESDoc.
  65924. * @extends {Ignored}
  65925. * @hide true
  65926. */
  65927. var PromiseObservable = (function (_super) {
  65928. __extends(PromiseObservable, _super);
  65929. function PromiseObservable(promise, scheduler) {
  65930. _super.call(this);
  65931. this.promise = promise;
  65932. this.scheduler = scheduler;
  65933. }
  65934. /**
  65935. * Converts a Promise to an Observable.
  65936. *
  65937. * <span class="informal">Returns an Observable that just emits the Promise's
  65938. * resolved value, then completes.</span>
  65939. *
  65940. * Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an
  65941. * Observable. If the Promise resolves with a value, the output Observable
  65942. * emits that resolved value as a `next`, and then completes. If the Promise
  65943. * is rejected, then the output Observable emits the corresponding Error.
  65944. *
  65945. * @example <caption>Convert the Promise returned by Fetch to an Observable</caption>
  65946. * var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
  65947. * result.subscribe(x => console.log(x), e => console.error(e));
  65948. *
  65949. * @see {@link bindCallback}
  65950. * @see {@link from}
  65951. *
  65952. * @param {PromiseLike<T>} promise The promise to be converted.
  65953. * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling
  65954. * the delivery of the resolved value (or the rejection).
  65955. * @return {Observable<T>} An Observable which wraps the Promise.
  65956. * @static true
  65957. * @name fromPromise
  65958. * @owner Observable
  65959. */
  65960. PromiseObservable.create = function (promise, scheduler) {
  65961. return new PromiseObservable(promise, scheduler);
  65962. };
  65963. /** @deprecated internal use only */ PromiseObservable.prototype._subscribe = function (subscriber) {
  65964. var _this = this;
  65965. var promise = this.promise;
  65966. var scheduler = this.scheduler;
  65967. if (scheduler == null) {
  65968. if (this._isScalar) {
  65969. if (!subscriber.closed) {
  65970. subscriber.next(this.value);
  65971. subscriber.complete();
  65972. }
  65973. }
  65974. else {
  65975. promise.then(function (value) {
  65976. _this.value = value;
  65977. _this._isScalar = true;
  65978. if (!subscriber.closed) {
  65979. subscriber.next(value);
  65980. subscriber.complete();
  65981. }
  65982. }, function (err) {
  65983. if (!subscriber.closed) {
  65984. subscriber.error(err);
  65985. }
  65986. })
  65987. .then(null, function (err) {
  65988. // escape the promise trap, throw unhandled errors
  65989. root_1.root.setTimeout(function () { throw err; });
  65990. });
  65991. }
  65992. }
  65993. else {
  65994. if (this._isScalar) {
  65995. if (!subscriber.closed) {
  65996. return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });
  65997. }
  65998. }
  65999. else {
  66000. promise.then(function (value) {
  66001. _this.value = value;
  66002. _this._isScalar = true;
  66003. if (!subscriber.closed) {
  66004. subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));
  66005. }
  66006. }, function (err) {
  66007. if (!subscriber.closed) {
  66008. subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));
  66009. }
  66010. })
  66011. .then(null, function (err) {
  66012. // escape the promise trap, throw unhandled errors
  66013. root_1.root.setTimeout(function () { throw err; });
  66014. });
  66015. }
  66016. }
  66017. };
  66018. return PromiseObservable;
  66019. }(Observable_1.Observable));
  66020. exports.PromiseObservable = PromiseObservable;
  66021. function dispatchNext(arg) {
  66022. var value = arg.value, subscriber = arg.subscriber;
  66023. if (!subscriber.closed) {
  66024. subscriber.next(value);
  66025. subscriber.complete();
  66026. }
  66027. }
  66028. function dispatchError(arg) {
  66029. var err = arg.err, subscriber = arg.subscriber;
  66030. if (!subscriber.closed) {
  66031. subscriber.error(err);
  66032. }
  66033. }
  66034. //# sourceMappingURL=PromiseObservable.js.map
  66035. /***/ }),
  66036. /* 180 */
  66037. /***/ (function(module, exports, __webpack_require__) {
  66038. "use strict";
  66039. var map_1 = __webpack_require__(49);
  66040. /**
  66041. * Applies a given `project` function to each value emitted by the source
  66042. * Observable, and emits the resulting values as an Observable.
  66043. *
  66044. * <span class="informal">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),
  66045. * it passes each source value through a transformation function to get
  66046. * corresponding output values.</span>
  66047. *
  66048. * <img src="./img/map.png" width="100%">
  66049. *
  66050. * Similar to the well known `Array.prototype.map` function, this operator
  66051. * applies a projection to each value and emits that projection in the output
  66052. * Observable.
  66053. *
  66054. * @example <caption>Map every click to the clientX position of that click</caption>
  66055. * var clicks = Rx.Observable.fromEvent(document, 'click');
  66056. * var positions = clicks.map(ev => ev.clientX);
  66057. * positions.subscribe(x => console.log(x));
  66058. *
  66059. * @see {@link mapTo}
  66060. * @see {@link pluck}
  66061. *
  66062. * @param {function(value: T, index: number): R} project The function to apply
  66063. * to each `value` emitted by the source Observable. The `index` parameter is
  66064. * the number `i` for the i-th emission that has happened since the
  66065. * subscription, starting from the number `0`.
  66066. * @param {any} [thisArg] An optional argument to define what `this` is in the
  66067. * `project` function.
  66068. * @return {Observable<R>} An Observable that emits the values from the source
  66069. * Observable transformed by the given `project` function.
  66070. * @method map
  66071. * @owner Observable
  66072. */
  66073. function map(project, thisArg) {
  66074. return map_1.map(project, thisArg)(this);
  66075. }
  66076. exports.map = map;
  66077. //# sourceMappingURL=map.js.map
  66078. /***/ }),
  66079. /* 181 */
  66080. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  66081. "use strict";
  66082. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TimeoutDebouncer; });
  66083. var TimeoutDebouncer = (function () {
  66084. function TimeoutDebouncer(wait) {
  66085. this.wait = wait;
  66086. this.timer = null;
  66087. }
  66088. TimeoutDebouncer.prototype.debounce = function (callback) {
  66089. this.callback = callback;
  66090. this.schedule();
  66091. };
  66092. TimeoutDebouncer.prototype.schedule = function () {
  66093. this.cancel();
  66094. if (this.wait <= 0) {
  66095. this.callback();
  66096. }
  66097. else {
  66098. this.timer = setTimeout(this.callback, this.wait);
  66099. }
  66100. };
  66101. TimeoutDebouncer.prototype.cancel = function () {
  66102. if (this.timer) {
  66103. clearTimeout(this.timer);
  66104. this.timer = null;
  66105. }
  66106. };
  66107. return TimeoutDebouncer;
  66108. }());
  66109. //# sourceMappingURL=debouncer.js.map
  66110. /***/ }),
  66111. /* 182 */
  66112. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  66113. "use strict";
  66114. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ScrollView; });
  66115. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dom__ = __webpack_require__(18);
  66116. var ScrollView = (function () {
  66117. function ScrollView(_app, _plt, _dom) {
  66118. this._app = _app;
  66119. this._plt = _plt;
  66120. this._dom = _dom;
  66121. this.isScrolling = false;
  66122. this.initialized = false;
  66123. this._eventsEnabled = false;
  66124. this._t = 0;
  66125. this._l = 0;
  66126. this.ev = {
  66127. timeStamp: 0,
  66128. scrollTop: 0,
  66129. scrollLeft: 0,
  66130. scrollHeight: 0,
  66131. scrollWidth: 0,
  66132. contentHeight: 0,
  66133. contentWidth: 0,
  66134. contentTop: 0,
  66135. contentBottom: 0,
  66136. startY: 0,
  66137. startX: 0,
  66138. deltaY: 0,
  66139. deltaX: 0,
  66140. velocityY: 0,
  66141. velocityX: 0,
  66142. directionY: 'down',
  66143. directionX: null,
  66144. domWrite: _dom.write.bind(_dom)
  66145. };
  66146. }
  66147. ScrollView.prototype.init = function (ele, contentTop, contentBottom) {
  66148. (void 0) /* assert */;
  66149. this._el = ele;
  66150. if (!this.initialized) {
  66151. this.initialized = true;
  66152. if (this._js) {
  66153. this.enableJsScroll(contentTop, contentBottom);
  66154. }
  66155. else {
  66156. this.enableNativeScrolling();
  66157. }
  66158. }
  66159. };
  66160. ScrollView.prototype.enableEvents = function () {
  66161. this._eventsEnabled = true;
  66162. };
  66163. ScrollView.prototype.setScrolling = function (isScrolling, ev) {
  66164. if (this.isScrolling) {
  66165. if (isScrolling) {
  66166. this.onScroll && this.onScroll(ev);
  66167. }
  66168. else {
  66169. this.isScrolling = false;
  66170. this.onScrollEnd && this.onScrollEnd(ev);
  66171. }
  66172. }
  66173. else if (isScrolling) {
  66174. this.isScrolling = true;
  66175. this.onScrollStart && this.onScrollStart(ev);
  66176. }
  66177. };
  66178. ScrollView.prototype.enableNativeScrolling = function () {
  66179. (void 0) /* assert */;
  66180. (void 0) /* assert */;
  66181. (void 0) /* assert */;
  66182. this._js = false;
  66183. if (!this._el) {
  66184. return;
  66185. }
  66186. (void 0) /* console.debug */;
  66187. var self = this;
  66188. var ev = self.ev;
  66189. var positions = [];
  66190. function scrollCallback(scrollEvent) {
  66191. // remind the app that it's currently scrolling
  66192. self._app.setScrolling();
  66193. // if events are disabled, we do nothing
  66194. if (!self._eventsEnabled) {
  66195. return;
  66196. }
  66197. ev.timeStamp = scrollEvent.timeStamp;
  66198. // Event.timeStamp is 0 in firefox
  66199. if (!ev.timeStamp) {
  66200. ev.timeStamp = Date.now();
  66201. }
  66202. // get the current scrollTop
  66203. // ******** DOM READ ****************
  66204. ev.scrollTop = self.getTop();
  66205. // get the current scrollLeft
  66206. // ******** DOM READ ****************
  66207. ev.scrollLeft = self.getLeft();
  66208. if (!self.isScrolling) {
  66209. // remember the start positions
  66210. ev.startY = ev.scrollTop;
  66211. ev.startX = ev.scrollLeft;
  66212. // new scroll, so do some resets
  66213. ev.velocityY = ev.velocityX = 0;
  66214. ev.deltaY = ev.deltaX = 0;
  66215. positions.length = 0;
  66216. }
  66217. // actively scrolling
  66218. positions.push(ev.scrollTop, ev.scrollLeft, ev.timeStamp);
  66219. if (positions.length > 3) {
  66220. // we've gotten at least 2 scroll events so far
  66221. ev.deltaY = (ev.scrollTop - ev.startY);
  66222. ev.deltaX = (ev.scrollLeft - ev.startX);
  66223. var endPos = (positions.length - 1);
  66224. var startPos = endPos;
  66225. var timeRange = (ev.timeStamp - 100);
  66226. // move pointer to position measured 100ms ago
  66227. for (var i = endPos; i > 0 && positions[i] > timeRange; i -= 3) {
  66228. startPos = i;
  66229. }
  66230. if (startPos !== endPos) {
  66231. // compute relative movement between these two points
  66232. var movedTop = (positions[startPos - 2] - positions[endPos - 2]);
  66233. var movedLeft = (positions[startPos - 1] - positions[endPos - 1]);
  66234. var factor = FRAME_MS / (positions[endPos] - positions[startPos]);
  66235. // based on XXms compute the movement to apply for each render step
  66236. ev.velocityY = movedTop * factor;
  66237. ev.velocityX = movedLeft * factor;
  66238. // figure out which direction we're scrolling
  66239. ev.directionY = (movedTop > 0 ? 'up' : 'down');
  66240. ev.directionX = (movedLeft > 0 ? 'left' : 'right');
  66241. }
  66242. }
  66243. function scrollEnd() {
  66244. // reset velocity, do not reset the directions or deltas
  66245. ev.velocityY = ev.velocityX = 0;
  66246. // emit that the scroll has ended
  66247. self.setScrolling(false, ev);
  66248. self._endTmr = null;
  66249. }
  66250. // emit on each scroll event
  66251. self.setScrolling(true, ev);
  66252. // debounce for a moment after the last scroll event
  66253. self._dom.cancel(self._endTmr);
  66254. self._endTmr = self._dom.read(scrollEnd, SCROLL_END_DEBOUNCE_MS);
  66255. }
  66256. // clear out any existing listeners (just to be safe)
  66257. self._lsn && self._lsn();
  66258. // assign the raw scroll listener
  66259. // note that it does not have a wrapping requestAnimationFrame on purpose
  66260. // a scroll event callback will always be right before the raf callback
  66261. // so there's little to no value of using raf here since it'll all ways immediately
  66262. // call the raf if it was set within the scroll event, so this will save us some time
  66263. self._lsn = self._plt.registerListener(self._el, 'scroll', scrollCallback, EVENT_OPTS);
  66264. };
  66265. /**
  66266. * @hidden
  66267. * JS Scrolling has been provided only as a temporary solution
  66268. * until iOS apps can take advantage of scroll events at all times.
  66269. * The goal is to eventually remove JS scrolling entirely. When we
  66270. * no longer have to worry about iOS not firing scroll events during
  66271. * inertia then this can be burned to the ground. iOS's more modern
  66272. * WKWebView does not have this issue, only UIWebView does.
  66273. */
  66274. ScrollView.prototype.enableJsScroll = function (contentTop, contentBottom) {
  66275. var self = this;
  66276. self._js = true;
  66277. var ele = self._el;
  66278. if (!ele) {
  66279. return;
  66280. }
  66281. (void 0) /* console.debug */;
  66282. var ev = self.ev;
  66283. var positions = [];
  66284. var rafCancel;
  66285. var max;
  66286. function setMax() {
  66287. if (!max) {
  66288. // ******** DOM READ ****************
  66289. max = ele.scrollHeight - ele.parentElement.offsetHeight + contentTop + contentBottom;
  66290. }
  66291. }
  66292. function jsScrollDecelerate(timeStamp) {
  66293. ev.timeStamp = timeStamp;
  66294. (void 0) /* console.debug */;
  66295. if (ev.velocityY) {
  66296. ev.velocityY *= DECELERATION_FRICTION;
  66297. // update top with updated velocity
  66298. // clamp top within scroll limits
  66299. // ******** DOM READ ****************
  66300. setMax();
  66301. self._t = Math.min(Math.max(self._t + ev.velocityY, 0), max);
  66302. ev.scrollTop = self._t;
  66303. // emit on each scroll event
  66304. self.onScroll(ev);
  66305. self._dom.write(function () {
  66306. // ******** DOM WRITE ****************
  66307. self.setTop(self._t);
  66308. if (self._t > 0 && self._t < max && Math.abs(ev.velocityY) > MIN_VELOCITY_CONTINUE_DECELERATION) {
  66309. rafCancel = self._dom.read(function (rafTimeStamp) {
  66310. jsScrollDecelerate(rafTimeStamp);
  66311. });
  66312. }
  66313. else {
  66314. // haven't scrolled in a while, so it's a scrollend
  66315. self.isScrolling = false;
  66316. // reset velocity, do not reset the directions or deltas
  66317. ev.velocityY = ev.velocityX = 0;
  66318. // emit that the scroll has ended
  66319. self.onScrollEnd(ev);
  66320. }
  66321. });
  66322. }
  66323. }
  66324. function jsScrollTouchStart(touchEvent) {
  66325. positions.length = 0;
  66326. max = null;
  66327. self._dom.cancel(rafCancel);
  66328. positions.push(Object(__WEBPACK_IMPORTED_MODULE_0__dom__["f" /* pointerCoord */])(touchEvent).y, touchEvent.timeStamp);
  66329. }
  66330. function jsScrollTouchMove(touchEvent) {
  66331. if (!positions.length) {
  66332. return;
  66333. }
  66334. ev.timeStamp = touchEvent.timeStamp;
  66335. var y = Object(__WEBPACK_IMPORTED_MODULE_0__dom__["f" /* pointerCoord */])(touchEvent).y;
  66336. // ******** DOM READ ****************
  66337. setMax();
  66338. self._t -= (y - positions[positions.length - 2]);
  66339. self._t = Math.min(Math.max(self._t, 0), max);
  66340. positions.push(y, ev.timeStamp);
  66341. if (!self.isScrolling) {
  66342. // remember the start position
  66343. ev.startY = self._t;
  66344. // new scroll, so do some resets
  66345. ev.velocityY = ev.deltaY = 0;
  66346. self.isScrolling = true;
  66347. // emit only on the first scroll event
  66348. self.onScrollStart(ev);
  66349. }
  66350. self._dom.write(function () {
  66351. // ******** DOM WRITE ****************
  66352. self.setTop(self._t);
  66353. });
  66354. }
  66355. function jsScrollTouchEnd(touchEvent) {
  66356. // figure out what the scroll position was about 100ms ago
  66357. self._dom.cancel(rafCancel);
  66358. if (!positions.length && self.isScrolling) {
  66359. self.isScrolling = false;
  66360. ev.velocityY = ev.velocityX = 0;
  66361. self.onScrollEnd(ev);
  66362. return;
  66363. }
  66364. var y = Object(__WEBPACK_IMPORTED_MODULE_0__dom__["f" /* pointerCoord */])(touchEvent).y;
  66365. positions.push(y, touchEvent.timeStamp);
  66366. var endPos = (positions.length - 1);
  66367. var startPos = endPos;
  66368. var timeRange = (touchEvent.timeStamp - 100);
  66369. // move pointer to position measured 100ms ago
  66370. for (var i = endPos; i > 0 && positions[i] > timeRange; i -= 2) {
  66371. startPos = i;
  66372. }
  66373. if (startPos !== endPos) {
  66374. // compute relative movement between these two points
  66375. var timeOffset = (positions[endPos] - positions[startPos]);
  66376. var movedTop = (positions[startPos - 1] - positions[endPos - 1]);
  66377. // based on XXms compute the movement to apply for each render step
  66378. ev.velocityY = ((movedTop / timeOffset) * FRAME_MS);
  66379. // verify that we have enough velocity to start deceleration
  66380. if (Math.abs(ev.velocityY) > MIN_VELOCITY_START_DECELERATION) {
  66381. // ******** DOM READ ****************
  66382. setMax();
  66383. rafCancel = self._dom.read(function (rafTimeStamp) {
  66384. jsScrollDecelerate(rafTimeStamp);
  66385. });
  66386. }
  66387. }
  66388. else {
  66389. self.isScrolling = false;
  66390. ev.velocityY = 0;
  66391. self.onScrollEnd(ev);
  66392. }
  66393. positions.length = 0;
  66394. }
  66395. var plt = self._plt;
  66396. var unRegStart = plt.registerListener(ele, 'touchstart', jsScrollTouchStart, EVENT_OPTS);
  66397. var unRegMove = plt.registerListener(ele, 'touchmove', jsScrollTouchMove, EVENT_OPTS);
  66398. var unRegEnd = plt.registerListener(ele, 'touchend', jsScrollTouchEnd, EVENT_OPTS);
  66399. ele.parentElement.classList.add('js-scroll');
  66400. // stop listening for actual scroll events
  66401. self._lsn && self._lsn();
  66402. // create an unregister for all of these events
  66403. self._lsn = function () {
  66404. unRegStart();
  66405. unRegMove();
  66406. unRegEnd();
  66407. ele.parentElement.classList.remove('js-scroll');
  66408. };
  66409. };
  66410. /**
  66411. * DOM READ
  66412. */
  66413. ScrollView.prototype.getTop = function () {
  66414. if (this._js) {
  66415. return this._t;
  66416. }
  66417. return this._t = this._el.scrollTop;
  66418. };
  66419. /**
  66420. * DOM READ
  66421. */
  66422. ScrollView.prototype.getLeft = function () {
  66423. if (this._js) {
  66424. return 0;
  66425. }
  66426. return this._l = this._el.scrollLeft;
  66427. };
  66428. /**
  66429. * DOM WRITE
  66430. */
  66431. ScrollView.prototype.setTop = function (top) {
  66432. this._t = top;
  66433. if (this._js) {
  66434. this._el.style[this._plt.Css.transform] = "translate3d(" + this._l * -1 + "px," + top * -1 + "px,0px)";
  66435. }
  66436. else {
  66437. this._el.scrollTop = top;
  66438. }
  66439. };
  66440. /**
  66441. * DOM WRITE
  66442. */
  66443. ScrollView.prototype.setLeft = function (left) {
  66444. this._l = left;
  66445. if (this._js) {
  66446. this._el.style[this._plt.Css.transform] = "translate3d(" + left * -1 + "px," + this._t * -1 + "px,0px)";
  66447. }
  66448. else {
  66449. this._el.scrollLeft = left;
  66450. }
  66451. };
  66452. ScrollView.prototype.scrollTo = function (x, y, duration, done) {
  66453. // scroll animation loop w/ easing
  66454. // credit https://gist.github.com/dezinezync/5487119
  66455. var promise;
  66456. if (done === undefined) {
  66457. // only create a promise if a done callback wasn't provided
  66458. // done can be a null, which avoids any functions
  66459. promise = new Promise(function (resolve) {
  66460. done = resolve;
  66461. });
  66462. }
  66463. var self = this;
  66464. var el = self._el;
  66465. if (!el) {
  66466. // invalid element
  66467. done();
  66468. return promise;
  66469. }
  66470. if (duration < 32) {
  66471. self.setTop(y);
  66472. self.setLeft(x);
  66473. done();
  66474. return promise;
  66475. }
  66476. var fromY = el.scrollTop;
  66477. var fromX = el.scrollLeft;
  66478. var maxAttempts = (duration / 16) + 100;
  66479. var transform = self._plt.Css.transform;
  66480. var startTime;
  66481. var attempts = 0;
  66482. var stopScroll = false;
  66483. // scroll loop
  66484. function step(timeStamp) {
  66485. attempts++;
  66486. if (!self._el || stopScroll || attempts > maxAttempts) {
  66487. self.setScrolling(false, null);
  66488. el.style[transform] = '';
  66489. done();
  66490. return;
  66491. }
  66492. var time = Math.min(1, ((timeStamp - startTime) / duration));
  66493. // where .5 would be 50% of time on a linear scale easedT gives a
  66494. // fraction based on the easing method
  66495. var easedT = (--time) * time * time + 1;
  66496. if (fromY !== y) {
  66497. self.setTop((easedT * (y - fromY)) + fromY);
  66498. }
  66499. if (fromX !== x) {
  66500. self.setLeft(Math.floor((easedT * (x - fromX)) + fromX));
  66501. }
  66502. if (easedT < 1) {
  66503. // do not use DomController here
  66504. // must use nativeRaf in order to fire in the next frame
  66505. self._plt.raf(step);
  66506. }
  66507. else {
  66508. stopScroll = true;
  66509. self.setScrolling(false, null);
  66510. el.style[transform] = '';
  66511. done();
  66512. }
  66513. }
  66514. // start scroll loop
  66515. self.setScrolling(true, null);
  66516. self.isScrolling = true;
  66517. // chill out for a frame first
  66518. self._dom.write(function (timeStamp) {
  66519. startTime = timeStamp;
  66520. step(timeStamp);
  66521. }, 16);
  66522. return promise;
  66523. };
  66524. ScrollView.prototype.scrollToTop = function (duration) {
  66525. return this.scrollTo(0, 0, duration);
  66526. };
  66527. ScrollView.prototype.scrollToBottom = function (duration) {
  66528. var y = 0;
  66529. if (this._el) {
  66530. y = this._el.scrollHeight - this._el.clientHeight;
  66531. }
  66532. return this.scrollTo(0, y, duration);
  66533. };
  66534. ScrollView.prototype.stop = function () {
  66535. this.setScrolling(false, null);
  66536. };
  66537. /**
  66538. * @hidden
  66539. */
  66540. ScrollView.prototype.destroy = function () {
  66541. this.stop();
  66542. this._endTmr && this._dom.cancel(this._endTmr);
  66543. this._lsn && this._lsn();
  66544. var ev = this.ev;
  66545. ev.domWrite = ev.contentElement = ev.fixedElement = ev.scrollElement = ev.headerElement = null;
  66546. this._lsn = this._el = this._dom = this.ev = ev = null;
  66547. this.onScrollStart = this.onScroll = this.onScrollEnd = null;
  66548. };
  66549. return ScrollView;
  66550. }());
  66551. var SCROLL_END_DEBOUNCE_MS = 80;
  66552. var MIN_VELOCITY_START_DECELERATION = 4;
  66553. var MIN_VELOCITY_CONTINUE_DECELERATION = 0.12;
  66554. var DECELERATION_FRICTION = 0.97;
  66555. var FRAME_MS = (1000 / 60);
  66556. var EVENT_OPTS = {
  66557. passive: true,
  66558. zone: false
  66559. };
  66560. //# sourceMappingURL=scroll-view.js.map
  66561. /***/ }),
  66562. /* 183 */
  66563. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  66564. "use strict";
  66565. /* harmony export (immutable) */ __webpack_exports__["b"] = indexForItem;
  66566. /* unused harmony export reorderListForItem */
  66567. /* harmony export (immutable) */ __webpack_exports__["a"] = findReorderItem;
  66568. /**
  66569. * @hidden
  66570. */
  66571. function indexForItem(element) {
  66572. return element['$ionIndex'];
  66573. }
  66574. /**
  66575. * @hidden
  66576. */
  66577. function reorderListForItem(element) {
  66578. return element['$ionReorderList'];
  66579. }
  66580. /**
  66581. * @hidden
  66582. */
  66583. function findReorderItem(node, listNode) {
  66584. var nested = 0;
  66585. while (node && nested < 4) {
  66586. if (indexForItem(node) !== undefined) {
  66587. if (listNode && node.parentNode !== listNode) {
  66588. return null;
  66589. }
  66590. return node;
  66591. }
  66592. node = node.parentNode;
  66593. nested++;
  66594. }
  66595. return null;
  66596. }
  66597. //# sourceMappingURL=item-reorder-util.js.map
  66598. /***/ }),
  66599. /* 184 */
  66600. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  66601. "use strict";
  66602. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Chip; });
  66603. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  66604. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  66605. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  66606. var __extends = (this && this.__extends) || (function () {
  66607. var extendStatics = Object.setPrototypeOf ||
  66608. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  66609. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  66610. return function (d, b) {
  66611. extendStatics(d, b);
  66612. function __() { this.constructor = d; }
  66613. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  66614. };
  66615. })();
  66616. /**
  66617. * @name Chip
  66618. * @module ionic
  66619. * @description
  66620. * Chips represent complex entities in small blocks, such as a contact.
  66621. *
  66622. *
  66623. * @usage
  66624. *
  66625. * ```html
  66626. * <ion-chip>
  66627. * <ion-label>Default</ion-label>
  66628. * </ion-chip>
  66629. *
  66630. * <ion-chip>
  66631. * <ion-label color="secondary">Secondary Label</ion-label>
  66632. * </ion-chip>
  66633. *
  66634. * <ion-chip color="secondary">
  66635. * <ion-label color="dark">Secondary w/ Dark label</ion-label>
  66636. * </ion-chip>
  66637. *
  66638. * <ion-chip color="danger">
  66639. * <ion-label>Danger</ion-label>
  66640. * </ion-chip>
  66641. *
  66642. * <ion-chip>
  66643. * <ion-icon name="pin"></ion-icon>
  66644. * <ion-label>Default</ion-label>
  66645. * </ion-chip>
  66646. *
  66647. * <ion-chip>
  66648. * <ion-icon name="heart" color="dark"></ion-icon>
  66649. * <ion-label>Default</ion-label>
  66650. * </ion-chip>
  66651. *
  66652. * <ion-chip>
  66653. * <ion-avatar>
  66654. * <img src="assets/img/my-img.png">
  66655. * </ion-avatar>
  66656. * <ion-label>Default</ion-label>
  66657. * </ion-chip>
  66658. * ```
  66659. *
  66660. *
  66661. * @advanced
  66662. *
  66663. * ```html
  66664. * <ion-chip #chip1>
  66665. * <ion-label>Default</ion-label>
  66666. * <button ion-button clear color="light" (click)="delete(chip1)">
  66667. * <ion-icon name="close-circle"></ion-icon>
  66668. * </button>
  66669. * </ion-chip>
  66670. *
  66671. * <ion-chip #chip2>
  66672. * <ion-icon name="pin" color="primary"></ion-icon>
  66673. * <ion-label>With Icon</ion-label>
  66674. * <button ion-button (click)="delete(chip2)">
  66675. * <ion-icon name="close"></ion-icon>
  66676. * </button>
  66677. * </ion-chip>
  66678. *
  66679. * <ion-chip #chip3>
  66680. * <ion-avatar>
  66681. * <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==">
  66682. * </ion-avatar>
  66683. * <ion-label>With Avatar</ion-label>
  66684. * <button ion-button clear color="dark" (click)="delete(chip3)">
  66685. * <ion-icon name="close-circle"></ion-icon>
  66686. * </button>
  66687. * </ion-chip>
  66688. * ```
  66689. *
  66690. * ```ts
  66691. * @Component({
  66692. * templateUrl: 'main.html'
  66693. * })
  66694. * class E2EPage {
  66695. * delete(chip: Element) {
  66696. * chip.remove();
  66697. * }
  66698. * }
  66699. * ```
  66700. *
  66701. * @demo /docs/demos/src/chip/
  66702. **/
  66703. var Chip = (function (_super) {
  66704. __extends(Chip, _super);
  66705. function Chip(config, elementRef, renderer) {
  66706. return _super.call(this, config, elementRef, renderer, 'chip') || this;
  66707. }
  66708. Chip.decorators = [
  66709. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  66710. selector: 'ion-chip'
  66711. },] },
  66712. ];
  66713. /** @nocollapse */
  66714. Chip.ctorParameters = function () { return [
  66715. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  66716. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  66717. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  66718. ]; };
  66719. return Chip;
  66720. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  66721. //# sourceMappingURL=chip.js.map
  66722. /***/ }),
  66723. /* 185 */
  66724. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  66725. "use strict";
  66726. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DateTime; });
  66727. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  66728. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  66729. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  66730. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__picker_picker_controller__ = __webpack_require__(101);
  66731. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_form__ = __webpack_require__(27);
  66732. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_base_input__ = __webpack_require__(37);
  66733. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__item_item__ = __webpack_require__(28);
  66734. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_util__ = __webpack_require__(3);
  66735. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__util_datetime_util__ = __webpack_require__(368);
  66736. var __extends = (this && this.__extends) || (function () {
  66737. var extendStatics = Object.setPrototypeOf ||
  66738. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  66739. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  66740. return function (d, b) {
  66741. extendStatics(d, b);
  66742. function __() { this.constructor = d; }
  66743. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  66744. };
  66745. })();
  66746. var __assign = (this && this.__assign) || Object.assign || function(t) {
  66747. for (var s, i = 1, n = arguments.length; i < n; i++) {
  66748. s = arguments[i];
  66749. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  66750. t[p] = s[p];
  66751. }
  66752. return t;
  66753. };
  66754. /**
  66755. * @name DateTime
  66756. * @description
  66757. * The DateTime component is used to present an interface which makes it easy for
  66758. * users to select dates and times. Tapping on `<ion-datetime>` will display a picker
  66759. * interface that slides up from the bottom of the page. The picker then displays
  66760. * scrollable columns that can be used to individually select years, months, days,
  66761. * hours and minute values. The DateTime component is similar to the native
  66762. * `<input type="datetime-local">` element, however, Ionic's DateTime component makes
  66763. * it easy to display the date and time in a preferred format, and manage the datetime
  66764. * values.
  66765. *
  66766. * ```html
  66767. * <ion-item>
  66768. * <ion-label>Date</ion-label>
  66769. * <ion-datetime displayFormat="MM/DD/YYYY" [(ngModel)]="myDate"></ion-datetime>
  66770. * </ion-item>
  66771. * ```
  66772. *
  66773. *
  66774. * ## Display and Picker Formats
  66775. *
  66776. * The DateTime component displays the values in two places: in the `<ion-datetime>`
  66777. * component, and in the interface that is presented from the bottom of the screen.
  66778. * The following chart lists all of the formats that can be used.
  66779. *
  66780. * | Format | Description | Example |
  66781. * |---------|--------------------------------|-------------------------|
  66782. * | `YYYY` | Year, 4 digits | `2018` |
  66783. * | `YY` | Year, 2 digits | `18` |
  66784. * | `M` | Month | `1` ... `12` |
  66785. * | `MM` | Month, leading zero | `01` ... `12` |
  66786. * | `MMM` | Month, short name | `Jan` |
  66787. * | `MMMM` | Month, full name | `January` |
  66788. * | `D` | Day | `1` ... `31` |
  66789. * | `DD` | Day, leading zero | `01` ... `31` |
  66790. * | `DDD` | Day, short name | `Fri` |
  66791. * | `DDDD` | Day, full name | `Friday` |
  66792. * | `H` | Hour, 24-hour | `0` ... `23` |
  66793. * | `HH` | Hour, 24-hour, leading zero | `00` ... `23` |
  66794. * | `h` | Hour, 12-hour | `1` ... `12` |
  66795. * | `hh` | Hour, 12-hour, leading zero | `01` ... `12` |
  66796. * | `a` | 12-hour time period, lowercase | `am` `pm` |
  66797. * | `A` | 12-hour time period, uppercase | `AM` `PM` |
  66798. * | `m` | Minute | `1` ... `59` |
  66799. * | `mm` | Minute, leading zero | `01` ... `59` |
  66800. * | `s` | Second | `1` ... `59` |
  66801. * | `ss` | Second, leading zero | `01` ... `59` |
  66802. * | `Z` | UTC Timezone Offset | `Z or +HH:mm or -HH:mm` |
  66803. *
  66804. * **Important**: See the [Month Names and Day of the Week Names](#month-names-and-day-of-the-week-names)
  66805. * section below on how to use different names for the month and day.
  66806. *
  66807. * ### Display Format
  66808. *
  66809. * The `displayFormat` input property specifies how a datetime's value should be
  66810. * printed, as formatted text, within the `ion-datetime` component.
  66811. *
  66812. * In the following example, the display in the `<ion-datetime>` will use the
  66813. * month's short name, the numerical day with a leading zero, a comma and the
  66814. * four-digit year. In addition to the date, it will display the time with the hours
  66815. * in the 24-hour format and the minutes. Any character can be used as a separator.
  66816. * An example display using this format is: `Jun 17, 2005 11:06`.
  66817. *
  66818. * ```html
  66819. * <ion-item>
  66820. * <ion-label>Date</ion-label>
  66821. * <ion-datetime displayFormat="MMM DD, YYYY HH:mm" [(ngModel)]="myDate"></ion-datetime>
  66822. * </ion-item>
  66823. * ```
  66824. *
  66825. * ### Picker Format
  66826. *
  66827. * The `pickerFormat` input property determines which columns should be shown in the
  66828. * interface, the order of the columns, and which format to use within each column.
  66829. * If the `pickerFormat` input is not provided then it will default to the `displayFormat`.
  66830. *
  66831. * In the following example, the display in the `<ion-datetime>` will use the
  66832. * `MM/YYYY` format, such as `06/2020`. However, the picker interface
  66833. * will display two columns with the month's long name, and the four-digit year.
  66834. *
  66835. * ```html
  66836. * <ion-item>
  66837. * <ion-label>Date</ion-label>
  66838. * <ion-datetime displayFormat="MM/YYYY" pickerFormat="MMMM YYYY" [(ngModel)]="myDate"></ion-datetime>
  66839. * </ion-item>
  66840. * ```
  66841. *
  66842. * ### Datetime Data
  66843. *
  66844. * Historically, handling datetime values within JavaScript, or even within HTML
  66845. * inputs, has always been a challenge. Specifically, JavaScript's `Date` object is
  66846. * notoriously difficult to correctly parse apart datetime strings or to format
  66847. * datetime values. Even worse is how different browsers and JavaScript versions
  66848. * parse various datetime strings differently, especially per locale.
  66849. *
  66850. * But no worries, all is not lost! Ionic's datetime input has been designed so
  66851. * developers can avoid the common pitfalls, allowing developers to easily format
  66852. * datetime values within the input, and give the user a simple datetime picker for a
  66853. * great user experience.
  66854. *
  66855. * ##### ISO 8601 Datetime Format: YYYY-MM-DDTHH:mmZ
  66856. *
  66857. * Ionic uses the [ISO 8601 datetime format](https://www.w3.org/TR/NOTE-datetime)
  66858. * for its value. The value is simply a string, rather than using JavaScript's `Date`
  66859. * object. Additionally, when using the ISO datetime format, it makes it easier
  66860. * to serialize and pass within JSON objects, and sending databases a standardized
  66861. * format which it can be easily parsed if need be.
  66862. *
  66863. * To create an ISO datetime string for the current date and time, e.g. use `const currentDate = (new Date()).toISOString();`.
  66864. *
  66865. * An ISO format can be used as a simple year, or just the hour and minute, or get more
  66866. * detailed down to the millisecond and timezone. Any of the ISO formats below can be used,
  66867. * and after a user selects a new value, Ionic will continue to use the same ISO format
  66868. * which datetime value was originally given as.
  66869. *
  66870. * | Description | Format | Datetime Value Example |
  66871. * |----------------------|------------------------|------------------------------|
  66872. * | Year | YYYY | 1994 |
  66873. * | Year and Month | YYYY-MM | 1994-12 |
  66874. * | Complete Date | YYYY-MM-DD | 1994-12-15 |
  66875. * | Date and Time | YYYY-MM-DDTHH:mm | 1994-12-15T13:47 |
  66876. * | UTC Timezone | YYYY-MM-DDTHH:mm:ssTZD | 1994-12-15T13:47:20.789Z |
  66877. * | Timezone Offset | YYYY-MM-DDTHH:mm:ssTZD | 1994-12-15T13:47:20.789+5:00 |
  66878. * | Hour and Minute | HH:mm | 13:47 |
  66879. * | Hour, Minute, Second | HH:mm:ss | 13:47:20 |
  66880. *
  66881. * Note that the year is always four-digits, milliseconds (if it's added) is always
  66882. * three-digits, and all others are always two-digits. So the number representing
  66883. * January always has a leading zero, such as `01`. Additionally, the hour is always
  66884. * in the 24-hour format, so `00` is `12am` on a 12-hour clock, `13` means `1pm`,
  66885. * and `23` means `11pm`.
  66886. *
  66887. * It's also important to note that neither the `displayFormat` or `pickerFormat` can
  66888. * set the datetime value's output, which is the value that is set by the component's
  66889. * `ngModel`. The format's are merely for displaying the value as text and the picker's
  66890. * interface, but the datetime's value is always persisted as a valid ISO 8601 datetime
  66891. * string.
  66892. *
  66893. *
  66894. * ## Min and Max Datetimes
  66895. *
  66896. * Dates are infinite in either direction, so for a user's selection there should be at
  66897. * least some form of restricting the dates that can be selected. By default, the maximum
  66898. * date is to the end of the current year, and the minimum date is from the beginning
  66899. * of the year that was 100 years ago.
  66900. *
  66901. * To customize the minimum and maximum datetime values, the `min` and `max` component
  66902. * inputs can be provided which may make more sense for the app's use-case, rather
  66903. * than the default of the last 100 years. Following the same IS0 8601 format listed
  66904. * in the table above, each component can restrict which dates can be selected by the
  66905. * user. Below is an example of restricting the date selection between the beginning
  66906. * of 2016, and October 31st of 2020:
  66907. *
  66908. * ```html
  66909. * <ion-item>
  66910. * <ion-label>Date</ion-label>
  66911. * <ion-datetime displayFormat="MMMM YYYY" min="2016" max="2020-10-31" [(ngModel)]="myDate">
  66912. * </ion-datetime>
  66913. * </ion-item>
  66914. * ```
  66915. *
  66916. *
  66917. * ## Month Names and Day of the Week Names
  66918. *
  66919. * At this time, there is no one-size-fits-all standard to automatically choose the correct
  66920. * language/spelling for a month name, or day of the week name, depending on the language
  66921. * or locale. Good news is that there is an
  66922. * [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat)
  66923. * standard which *most* browsers have adopted. However, at this time the standard has not
  66924. * been fully implemented by all popular browsers so Ionic is unavailable to take advantage
  66925. * of it *yet*. Additionally, Angular also provides an internationalization service, but it
  66926. * is still under heavy development so Ionic does not depend on it at this time.
  66927. *
  66928. * All things considered, the by far easiest solution is to just provide an array of names
  66929. * if the app needs to use names other than the default English version of month and day
  66930. * names. The month names and day names can be either configured at the app level, or
  66931. * individual `ion-datetime` level.
  66932. *
  66933. * ### App Config Level
  66934. *
  66935. * ```ts
  66936. * //app.module.ts
  66937. * @NgModule({
  66938. * ...,
  66939. * imports: [
  66940. * IonicModule.forRoot(MyApp, {
  66941. * monthNames: ['janeiro', 'fevereiro', 'mar\u00e7o', ... ],
  66942. * monthShortNames: ['jan', 'fev', 'mar', ... ],
  66943. * dayNames: ['domingo', 'segunda-feira', 'ter\u00e7a-feira', ... ],
  66944. * dayShortNames: ['dom', 'seg', 'ter', ... ],
  66945. * })
  66946. * ],
  66947. * ...
  66948. * })
  66949. * ```
  66950. *
  66951. * ### Component Input Level
  66952. *
  66953. * ```html
  66954. * <ion-item>
  66955. * <ion-label>Período</ion-label>
  66956. * <ion-datetime displayFormat="DDDD MMM D, YYYY" [(ngModel)]="myDate"
  66957. * monthNames="janeiro, fevereiro, mar\u00e7o, ..."
  66958. * monthShortNames="jan, fev, mar, ..."
  66959. * dayNames="domingo, segunda-feira, ter\u00e7a-feira, ..."
  66960. * dayShortNames="dom, seg, ter, ..."></ion-datetime>
  66961. * </ion-item>
  66962. * ```
  66963. *
  66964. *
  66965. * ### Advanced Datetime Validation and Manipulation
  66966. *
  66967. * The datetime picker provides the simplicity of selecting an exact format, and persists
  66968. * the datetime values as a string using the standardized
  66969. * [ISO 8601 datetime format](https://www.w3.org/TR/NOTE-datetime).
  66970. * However, it's important to note that `ion-datetime` does not attempt to solve all
  66971. * situtations when validating and manipulating datetime values. If datetime values need
  66972. * to be parsed from a certain format, or manipulated (such as adding 5 days to a date,
  66973. * subtracting 30 minutes, etc.), or even formatting data to a specific locale, then we highly
  66974. * recommend using [moment.js](http://momentjs.com/) to "Parse, validate, manipulate, and
  66975. * display dates in JavaScript". [Moment.js](http://momentjs.com/) has quickly become
  66976. * our goto standard when dealing with datetimes within JavaScript, but Ionic does not
  66977. * prepackage this dependency since most apps will not require it, and its locale
  66978. * configuration should be decided by the end-developer.
  66979. *
  66980. *
  66981. * @usage
  66982. * ```html
  66983. * <ion-item>
  66984. * <ion-label>Date</ion-label>
  66985. * <ion-datetime displayFormat="MM/DD/YYYY" [(ngModel)]="myDate">
  66986. * </ion-datetime>
  66987. * </ion-item>
  66988. * ```
  66989. *
  66990. *
  66991. * @demo /docs/demos/src/datetime/
  66992. */
  66993. var DateTime = (function (_super) {
  66994. __extends(DateTime, _super);
  66995. function DateTime(form, config, elementRef, renderer, item, _pickerCtrl) {
  66996. var _this = _super.call(this, config, elementRef, renderer, 'datetime', {}, form, item, null) || this;
  66997. _this._pickerCtrl = _pickerCtrl;
  66998. _this._text = '';
  66999. _this._locale = {};
  67000. /**
  67001. * @input {string} The text to display on the picker's cancel button. Default: `Cancel`.
  67002. */
  67003. _this.cancelText = 'Cancel';
  67004. /**
  67005. * @input {string} The text to display on the picker's "Done" button. Default: `Done`.
  67006. */
  67007. _this.doneText = 'Done';
  67008. /**
  67009. * @input {any} Any additional options that the picker interface can accept.
  67010. * See the [Picker API docs](../../picker/Picker) for the picker options.
  67011. */
  67012. _this.pickerOptions = {};
  67013. /**
  67014. * @input {string} The text to display when there's no date selected yet.
  67015. * Using lowercase to match the input attribute
  67016. */
  67017. _this.placeholder = '';
  67018. /**
  67019. * @output {any} Emitted when the datetime selection was cancelled.
  67020. */
  67021. _this.ionCancel = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  67022. return _this;
  67023. }
  67024. /**
  67025. * @hidden
  67026. */
  67027. DateTime.prototype.ngAfterContentInit = function () {
  67028. var _this = this;
  67029. // first see if locale names were provided in the inputs
  67030. // then check to see if they're in the config
  67031. // if neither were provided then it will use default English names
  67032. ['monthNames', 'monthShortNames', 'dayNames', 'dayShortNames'].forEach(function (type) {
  67033. _this._locale[type] = convertToArrayOfStrings(Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(_this[type]) ? _this[type] : _this._config.get(type), type);
  67034. });
  67035. this._initialize();
  67036. };
  67037. /**
  67038. * @hidden
  67039. */
  67040. DateTime.prototype._inputNormalize = function (val) {
  67041. Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["m" /* updateDate */])(this._value, val);
  67042. return this._value;
  67043. };
  67044. /**
  67045. * @hidden
  67046. */
  67047. DateTime.prototype._inputUpdated = function () {
  67048. _super.prototype._inputUpdated.call(this);
  67049. this.updateText();
  67050. };
  67051. /**
  67052. * @hidden
  67053. */
  67054. DateTime.prototype._inputShouldChange = function () {
  67055. return true;
  67056. };
  67057. /**
  67058. * TODO: REMOVE THIS
  67059. * @hidden
  67060. */
  67061. DateTime.prototype._inputChangeEvent = function () {
  67062. return this.value;
  67063. };
  67064. /**
  67065. * @hidden
  67066. */
  67067. DateTime.prototype._inputNgModelEvent = function () {
  67068. return Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["b" /* convertDataToISO */])(this.value);
  67069. };
  67070. DateTime.prototype._click = function (ev) {
  67071. ev.preventDefault();
  67072. ev.stopPropagation();
  67073. this.open();
  67074. };
  67075. DateTime.prototype._keyup = function () {
  67076. this.open();
  67077. };
  67078. /**
  67079. * @hidden
  67080. */
  67081. DateTime.prototype.open = function () {
  67082. var _this = this;
  67083. if (this.isFocus() || this._disabled) {
  67084. return;
  67085. }
  67086. (void 0) /* console.debug */;
  67087. // the user may have assigned some options specifically for the picker
  67088. var pickerOptions = __assign({}, this.pickerOptions);
  67089. // Add a cancel and done button by default to the picker
  67090. var defaultButtons = [{
  67091. text: this.cancelText,
  67092. role: 'cancel',
  67093. handler: function () { return _this.ionCancel.emit(_this); }
  67094. }, {
  67095. text: this.doneText,
  67096. handler: function (data) { return _this.value = data; },
  67097. }];
  67098. pickerOptions.buttons = (pickerOptions.buttons || []).concat(defaultButtons);
  67099. // Configure picker under the hood
  67100. var picker = this._picker = this._pickerCtrl.create(pickerOptions);
  67101. picker.ionChange.subscribe(function () {
  67102. _this.validate();
  67103. picker.refresh();
  67104. });
  67105. // Update picker status before presenting
  67106. this.generate();
  67107. this.validate();
  67108. // Present picker
  67109. this._fireFocus();
  67110. picker.present(pickerOptions);
  67111. picker.onDidDismiss(function () {
  67112. _this._fireBlur();
  67113. });
  67114. };
  67115. /**
  67116. * @hidden
  67117. */
  67118. DateTime.prototype.generate = function () {
  67119. var _this = this;
  67120. var picker = this._picker;
  67121. // if a picker format wasn't provided, then fallback
  67122. // to use the display format
  67123. var template = this.pickerFormat || this.displayFormat || DEFAULT_FORMAT;
  67124. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(template)) {
  67125. // make sure we've got up to date sizing information
  67126. this.calcMinMax();
  67127. // does not support selecting by day name
  67128. // automaticallly remove any day name formats
  67129. template = template.replace('DDDD', '{~}').replace('DDD', '{~}');
  67130. if (template.indexOf('D') === -1) {
  67131. // there is not a day in the template
  67132. // replace the day name with a numeric one if it exists
  67133. template = template.replace('{~}', 'D');
  67134. }
  67135. // make sure no day name replacer is left in the string
  67136. template = template.replace(/{~}/g, '');
  67137. // parse apart the given template into an array of "formats"
  67138. Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["j" /* parseTemplate */])(template).forEach(function (format) {
  67139. // loop through each format in the template
  67140. // create a new picker column to build up with data
  67141. var key = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["c" /* convertFormatToKey */])(format);
  67142. var values;
  67143. // first see if they have exact values to use for this input
  67144. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(_this[key + 'Values'])) {
  67145. // user provide exact values for this date part
  67146. values = convertToArrayOfNumbers(_this[key + 'Values'], key);
  67147. }
  67148. else {
  67149. // use the default date part values
  67150. values = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["f" /* dateValueRange */])(format, _this._min, _this._max);
  67151. }
  67152. var column = {
  67153. name: key,
  67154. selectedIndex: 0,
  67155. options: values.map(function (val) {
  67156. return {
  67157. value: val,
  67158. text: Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["l" /* renderTextFormat */])(format, val, null, _this._locale),
  67159. };
  67160. })
  67161. };
  67162. // cool, we've loaded up the columns with options
  67163. // preselect the option for this column
  67164. var optValue = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["h" /* getValueFromFormat */])(_this.getValueOrDefault(), format);
  67165. var selectedIndex = column.options.findIndex(function (opt) { return opt.value === optValue; });
  67166. if (selectedIndex >= 0) {
  67167. // set the select index for this column's options
  67168. column.selectedIndex = selectedIndex;
  67169. }
  67170. // add our newly created column to the picker
  67171. picker.addColumn(column);
  67172. });
  67173. // Normalize min/max
  67174. var min_1 = this._min;
  67175. var max_1 = this._max;
  67176. var columns_1 = this._picker.getColumns();
  67177. ['month', 'day', 'hour', 'minute']
  67178. .filter(function (name) { return !columns_1.find(function (column) { return column.name === name; }); })
  67179. .forEach(function (name) {
  67180. min_1[name] = 0;
  67181. max_1[name] = 0;
  67182. });
  67183. this.divyColumns();
  67184. }
  67185. };
  67186. /**
  67187. * @hidden
  67188. */
  67189. DateTime.prototype.validateColumn = function (name, index, min, max, lowerBounds, upperBounds) {
  67190. (void 0) /* assert */;
  67191. (void 0) /* assert */;
  67192. var column = this._picker.getColumn(name);
  67193. if (!column) {
  67194. return 0;
  67195. }
  67196. var lb = lowerBounds.slice();
  67197. var ub = upperBounds.slice();
  67198. var options = column.options;
  67199. var indexMin = options.length - 1;
  67200. var indexMax = 0;
  67201. for (var i = 0; i < options.length; i++) {
  67202. var opt = options[i];
  67203. var value = opt.value;
  67204. lb[index] = opt.value;
  67205. ub[index] = opt.value;
  67206. var disabled = opt.disabled = (value < lowerBounds[index] ||
  67207. value > upperBounds[index] ||
  67208. Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["e" /* dateSortValue */])(ub[0], ub[1], ub[2], ub[3], ub[4]) < min ||
  67209. Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["e" /* dateSortValue */])(lb[0], lb[1], lb[2], lb[3], lb[4]) > max);
  67210. if (!disabled) {
  67211. indexMin = Math.min(indexMin, i);
  67212. indexMax = Math.max(indexMax, i);
  67213. }
  67214. }
  67215. var selectedIndex = column.selectedIndex = Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["a" /* clamp */])(indexMin, column.selectedIndex, indexMax);
  67216. opt = column.options[selectedIndex];
  67217. if (opt) {
  67218. return opt.value;
  67219. }
  67220. return 0;
  67221. };
  67222. /**
  67223. * @private
  67224. */
  67225. DateTime.prototype.validate = function () {
  67226. var today = new Date();
  67227. var minCompareVal = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["d" /* dateDataSortValue */])(this._min);
  67228. var maxCompareVal = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["d" /* dateDataSortValue */])(this._max);
  67229. var yearCol = this._picker.getColumn('year');
  67230. (void 0) /* assert */;
  67231. var selectedYear = today.getFullYear();
  67232. if (yearCol) {
  67233. // default to the first value if the current year doesn't exist in the options
  67234. if (!yearCol.options.find(function (col) { return col.value === today.getFullYear(); })) {
  67235. selectedYear = yearCol.options[0].value;
  67236. }
  67237. var yearOpt = yearCol.options[yearCol.selectedIndex];
  67238. if (yearOpt) {
  67239. // they have a selected year value
  67240. selectedYear = yearOpt.value;
  67241. }
  67242. }
  67243. var selectedMonth = this.validateColumn('month', 1, minCompareVal, maxCompareVal, [selectedYear, 0, 0, 0, 0], [selectedYear, 12, 31, 23, 59]);
  67244. var numDaysInMonth = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["g" /* daysInMonth */])(selectedMonth, selectedYear);
  67245. var selectedDay = this.validateColumn('day', 2, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, 0, 0, 0], [selectedYear, selectedMonth, numDaysInMonth, 23, 59]);
  67246. var selectedHour = this.validateColumn('hour', 3, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, selectedDay, 0, 0], [selectedYear, selectedMonth, selectedDay, 23, 59]);
  67247. this.validateColumn('minute', 4, minCompareVal, maxCompareVal, [selectedYear, selectedMonth, selectedDay, selectedHour, 0], [selectedYear, selectedMonth, selectedDay, selectedHour, 59]);
  67248. };
  67249. /**
  67250. * @hidden
  67251. */
  67252. DateTime.prototype.divyColumns = function () {
  67253. var pickerColumns = this._picker.getColumns();
  67254. var columnsWidth = [];
  67255. var col;
  67256. var width;
  67257. for (var i = 0; i < pickerColumns.length; i++) {
  67258. col = pickerColumns[i];
  67259. columnsWidth.push(0);
  67260. for (var j = 0; j < col.options.length; j++) {
  67261. width = col.options[j].text.length;
  67262. if (width > columnsWidth[i]) {
  67263. columnsWidth[i] = width;
  67264. }
  67265. }
  67266. }
  67267. if (columnsWidth.length === 2) {
  67268. width = Math.max(columnsWidth[0], columnsWidth[1]);
  67269. pickerColumns[0].align = 'right';
  67270. pickerColumns[1].align = 'left';
  67271. pickerColumns[0].optionsWidth = pickerColumns[1].optionsWidth = width * 17 + "px";
  67272. }
  67273. else if (columnsWidth.length === 3) {
  67274. width = Math.max(columnsWidth[0], columnsWidth[2]);
  67275. pickerColumns[0].align = 'right';
  67276. pickerColumns[1].columnWidth = columnsWidth[1] * 17 + "px";
  67277. pickerColumns[0].optionsWidth = pickerColumns[2].optionsWidth = width * 17 + "px";
  67278. pickerColumns[2].align = 'left';
  67279. }
  67280. };
  67281. /**
  67282. * @hidden
  67283. */
  67284. DateTime.prototype.updateText = function () {
  67285. // create the text of the formatted data
  67286. var template = this.displayFormat || this.pickerFormat || DEFAULT_FORMAT;
  67287. this._text = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["k" /* renderDateTime */])(template, this.getValue(), this._locale);
  67288. };
  67289. /**
  67290. * @hidden
  67291. */
  67292. DateTime.prototype.getValue = function () {
  67293. return this._value;
  67294. };
  67295. /**
  67296. * @hidden
  67297. */
  67298. DateTime.prototype.getValueOrDefault = function () {
  67299. if (this.hasValue()) {
  67300. return this._value;
  67301. }
  67302. var initialDateString = this.getDefaultValueDateString();
  67303. var _default = {};
  67304. Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["m" /* updateDate */])(_default, initialDateString);
  67305. return _default;
  67306. };
  67307. /**
  67308. * Get the default value as a date string
  67309. * @hidden
  67310. */
  67311. DateTime.prototype.getDefaultValueDateString = function () {
  67312. if (this.initialValue) {
  67313. return this.initialValue;
  67314. }
  67315. var nowString = (new Date).toISOString();
  67316. if (this.max) {
  67317. var now = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["i" /* parseDate */])(nowString);
  67318. var max = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["i" /* parseDate */])(this.max);
  67319. var v = void 0;
  67320. for (var i in max) {
  67321. v = max[i];
  67322. if (v === null) {
  67323. max[i] = now[i];
  67324. }
  67325. }
  67326. var diff = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["a" /* compareDates */])(now, max);
  67327. // If max is before current time, return max
  67328. if (diff > 0) {
  67329. return this.max;
  67330. }
  67331. }
  67332. return nowString;
  67333. };
  67334. /**
  67335. * @hidden
  67336. */
  67337. DateTime.prototype.hasValue = function () {
  67338. var val = this._value;
  67339. return Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(val)
  67340. && Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["k" /* isObject */])(val)
  67341. && Object.keys(val).length > 0;
  67342. };
  67343. /**
  67344. * @hidden
  67345. */
  67346. DateTime.prototype.calcMinMax = function (now) {
  67347. var todaysYear = (now || new Date()).getFullYear();
  67348. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(this.yearValues)) {
  67349. var years = convertToArrayOfNumbers(this.yearValues, 'year');
  67350. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(this.min)) {
  67351. this.min = Math.min.apply(Math, years);
  67352. }
  67353. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(this.max)) {
  67354. this.max = Math.max.apply(Math, years);
  67355. }
  67356. }
  67357. else {
  67358. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(this.min)) {
  67359. this.min = (todaysYear - 100).toString();
  67360. }
  67361. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["f" /* isBlank */])(this.max)) {
  67362. this.max = todaysYear.toString();
  67363. }
  67364. }
  67365. var min = this._min = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["i" /* parseDate */])(this.min);
  67366. var max = this._max = Object(__WEBPACK_IMPORTED_MODULE_8__util_datetime_util__["i" /* parseDate */])(this.max);
  67367. min.year = min.year || todaysYear;
  67368. max.year = max.year || todaysYear;
  67369. min.month = min.month || 1;
  67370. max.month = max.month || 12;
  67371. min.day = min.day || 1;
  67372. max.day = max.day || 31;
  67373. min.hour = min.hour || 0;
  67374. max.hour = max.hour || 23;
  67375. min.minute = min.minute || 0;
  67376. max.minute = max.minute || 59;
  67377. min.second = min.second || 0;
  67378. max.second = max.second || 59;
  67379. // Ensure min/max constraits
  67380. if (min.year > max.year) {
  67381. console.error('min.year > max.year');
  67382. min.year = max.year - 100;
  67383. }
  67384. if (min.year === max.year) {
  67385. if (min.month > max.month) {
  67386. console.error('min.month > max.month');
  67387. min.month = 1;
  67388. }
  67389. else if (min.month === max.month && min.day > max.day) {
  67390. console.error('min.day > max.day');
  67391. min.day = 1;
  67392. }
  67393. }
  67394. };
  67395. DateTime.decorators = [
  67396. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  67397. selector: 'ion-datetime',
  67398. template: '<div *ngIf="!_text" class="datetime-text datetime-placeholder">{{placeholder}}</div>' +
  67399. '<div *ngIf="_text" class="datetime-text">{{_text}}</div>' +
  67400. '<button aria-haspopup="true" ' +
  67401. 'type="button" ' +
  67402. '[id]="id" ' +
  67403. 'ion-button="item-cover" ' +
  67404. '[attr.aria-labelledby]="_labelId" ' +
  67405. '[attr.aria-disabled]="_disabled" ' +
  67406. 'class="item-cover">' +
  67407. '</button>',
  67408. host: {
  67409. '[class.datetime-disabled]': '_disabled'
  67410. },
  67411. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["c" /* NG_VALUE_ACCESSOR */], useExisting: DateTime, multi: true }],
  67412. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  67413. },] },
  67414. ];
  67415. /** @nocollapse */
  67416. DateTime.ctorParameters = function () { return [
  67417. { type: __WEBPACK_IMPORTED_MODULE_4__util_form__["a" /* Form */], },
  67418. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  67419. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  67420. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  67421. { type: __WEBPACK_IMPORTED_MODULE_6__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  67422. { type: __WEBPACK_IMPORTED_MODULE_3__picker_picker_controller__["a" /* PickerController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  67423. ]; };
  67424. DateTime.propDecorators = {
  67425. 'min': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67426. 'max': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67427. 'displayFormat': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67428. 'initialValue': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67429. 'pickerFormat': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67430. 'cancelText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67431. 'doneText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67432. 'yearValues': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67433. 'monthValues': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67434. 'dayValues': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67435. 'hourValues': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67436. 'minuteValues': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67437. 'monthNames': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67438. 'monthShortNames': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67439. 'dayNames': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67440. 'dayShortNames': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67441. 'pickerOptions': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67442. 'placeholder': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  67443. 'ionCancel': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  67444. '_click': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click', ['$event'],] },],
  67445. '_keyup': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['keyup.space',] },],
  67446. };
  67447. return DateTime;
  67448. }(__WEBPACK_IMPORTED_MODULE_5__util_base_input__["a" /* BaseInput */]));
  67449. /**
  67450. * @hidden
  67451. * Use to convert a string of comma separated numbers or
  67452. * an array of numbers, and clean up any user input
  67453. */
  67454. function convertToArrayOfNumbers(input, type) {
  67455. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["n" /* isString */])(input)) {
  67456. // convert the string to an array of strings
  67457. // auto remove any whitespace and [] characters
  67458. input = input.replace(/\[|\]|\s/g, '').split(',');
  67459. }
  67460. var values;
  67461. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["e" /* isArray */])(input)) {
  67462. // ensure each value is an actual number in the returned array
  67463. values = input
  67464. .map(function (num) { return parseInt(num, 10); })
  67465. .filter(isFinite);
  67466. }
  67467. if (!values || !values.length) {
  67468. console.warn("Invalid \"" + type + "Values\". Must be an array of numbers, or a comma separated string of numbers.");
  67469. }
  67470. return values;
  67471. }
  67472. /**
  67473. * @hidden
  67474. * Use to convert a string of comma separated strings or
  67475. * an array of strings, and clean up any user input
  67476. */
  67477. function convertToArrayOfStrings(input, type) {
  67478. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["l" /* isPresent */])(input)) {
  67479. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["n" /* isString */])(input)) {
  67480. // convert the string to an array of strings
  67481. // auto remove any [] characters
  67482. input = input.replace(/\[|\]/g, '').split(',');
  67483. }
  67484. var values;
  67485. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["e" /* isArray */])(input)) {
  67486. // trim up each string value
  67487. values = input.map(function (val) { return val.trim(); });
  67488. }
  67489. if (!values || !values.length) {
  67490. console.warn("Invalid \"" + type + "Names\". Must be an array of strings, or a comma separated string.");
  67491. }
  67492. return values;
  67493. }
  67494. }
  67495. var DEFAULT_FORMAT = 'MMM D, YYYY';
  67496. //# sourceMappingURL=datetime.js.map
  67497. /***/ }),
  67498. /* 186 */
  67499. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  67500. "use strict";
  67501. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Picker; });
  67502. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  67503. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  67504. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__picker_component__ = __webpack_require__(102);
  67505. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__picker_transitions__ = __webpack_require__(367);
  67506. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__ = __webpack_require__(9);
  67507. var __extends = (this && this.__extends) || (function () {
  67508. var extendStatics = Object.setPrototypeOf ||
  67509. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  67510. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  67511. return function (d, b) {
  67512. extendStatics(d, b);
  67513. function __() { this.constructor = d; }
  67514. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  67515. };
  67516. })();
  67517. /**
  67518. * @hidden
  67519. */
  67520. var Picker = (function (_super) {
  67521. __extends(Picker, _super);
  67522. function Picker(app, opts, config) {
  67523. if (opts === void 0) { opts = {}; }
  67524. var _this = this;
  67525. if (!opts) {
  67526. opts = {};
  67527. }
  67528. opts.columns = opts.columns || [];
  67529. opts.buttons = opts.buttons || [];
  67530. opts.enableBackdropDismiss = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.enableBackdropDismiss) ? Boolean(opts.enableBackdropDismiss) : true;
  67531. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_2__picker_component__["a" /* PickerCmp */], opts, null) || this;
  67532. _this._app = app;
  67533. _this.isOverlay = true;
  67534. _this.ionChange = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  67535. config.setTransition('picker-slide-in', __WEBPACK_IMPORTED_MODULE_3__picker_transitions__["a" /* PickerSlideIn */]);
  67536. config.setTransition('picker-slide-out', __WEBPACK_IMPORTED_MODULE_3__picker_transitions__["b" /* PickerSlideOut */]);
  67537. return _this;
  67538. }
  67539. /**
  67540. * @hidden
  67541. */
  67542. Picker.prototype.getTransitionName = function (direction) {
  67543. var key = (direction === 'back' ? 'pickerLeave' : 'pickerEnter');
  67544. return this._nav && this._nav.config.get(key);
  67545. };
  67546. /**
  67547. * @param {any} button Picker toolbar button
  67548. */
  67549. Picker.prototype.addButton = function (button) {
  67550. this.data.buttons.push(button);
  67551. };
  67552. /**
  67553. * @param {PickerColumn} column Picker toolbar button
  67554. */
  67555. Picker.prototype.addColumn = function (column) {
  67556. this.data.columns.push(column);
  67557. };
  67558. Picker.prototype.getColumns = function () {
  67559. return this.data.columns;
  67560. };
  67561. Picker.prototype.getColumn = function (name) {
  67562. return this.getColumns().find(function (column) { return column.name === name; });
  67563. };
  67564. Picker.prototype.refresh = function () {
  67565. (void 0) /* assert */;
  67566. (void 0) /* assert */;
  67567. this._cmp && this._cmp.instance.refresh && this._cmp.instance.refresh();
  67568. };
  67569. /**
  67570. * @param {string} cssClass CSS class name to add to the picker's outer wrapper.
  67571. */
  67572. Picker.prototype.setCssClass = function (cssClass) {
  67573. this.data.cssClass = cssClass;
  67574. };
  67575. /**
  67576. * Present the picker instance.
  67577. *
  67578. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  67579. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  67580. */
  67581. Picker.prototype.present = function (navOptions) {
  67582. if (navOptions === void 0) { navOptions = {}; }
  67583. return this._app.present(this, navOptions);
  67584. };
  67585. Picker.propDecorators = {
  67586. 'ionChange': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  67587. };
  67588. return Picker;
  67589. }(__WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__["a" /* ViewController */]));
  67590. //# sourceMappingURL=picker.js.map
  67591. /***/ }),
  67592. /* 187 */
  67593. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  67594. "use strict";
  67595. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FabContainer; });
  67596. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  67597. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_platform__ = __webpack_require__(7);
  67598. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gestures_ui_event_manager__ = __webpack_require__(36);
  67599. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__fab__ = __webpack_require__(72);
  67600. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__fab_list__ = __webpack_require__(104);
  67601. /**
  67602. * @name FabContainer
  67603. * @module ionic
  67604. *
  67605. * @description
  67606. * `<ion-fab>` is not a FAB button by itself but a container that assist the fab button (`<button ion-fab>`) allowing it
  67607. * to be placed in fixed position that does not scroll with the content. It is also used to implement "material design speed dial",
  67608. * ie. a FAB buttons displays a small lists of related actions when clicked.
  67609. *
  67610. * @property [top] - Places the container on the top of the content
  67611. * @property [bottom] - Places the container on the bottom of the content
  67612. * @property [left] - Places the container on the left
  67613. * @property [right] - Places the container on the right
  67614. * @property [middle] - Places the container on the middle vertically
  67615. * @property [center] - Places the container on the center horizontally
  67616. * @property [edge] - Used to place the container between the content and the header/footer
  67617. *
  67618. * @usage
  67619. *
  67620. * ```html
  67621. * <!-- this fab is placed at top right -->
  67622. * <ion-content>
  67623. * <ion-fab top right>
  67624. * <button ion-fab>Button</button>
  67625. * </ion-fab>
  67626. *
  67627. * <!-- this fab is placed at the center of the content viewport -->
  67628. * <ion-fab center middle>
  67629. * <button ion-fab>Button</button>
  67630. * </ion-fab>
  67631. * </ion-content>
  67632. * ```
  67633. *
  67634. * Ionic's FAB also supports "material design's fab speed dial". It is a normal fab button
  67635. * that shows a list of related actions when clicked.
  67636. *
  67637. * The same `ion-fab` container can contain several `ion-fab-list` with different side values:
  67638. * `top`, `bottom`, `left` and `right`. For example, if you want to have a list of button that are
  67639. * on the top of the main button, you should use `side="top"` and so on. By default, if side is ommited, `side="bottom"`.
  67640. *
  67641. * ```html
  67642. * <ion-content>
  67643. * <!-- this fab is placed at bottom right -->
  67644. * <ion-fab bottom right >
  67645. * <button ion-fab>Share</button>
  67646. * <ion-fab-list side="top">
  67647. * <button ion-fab>Facebook</button>
  67648. * <button ion-fab>Twitter</button>
  67649. * <button ion-fab>Youtube</button>
  67650. * </ion-fab-list>
  67651. * <ion-fab-list side="left">
  67652. * <button ion-fab>Vimeo</button>
  67653. * </ion-fab-list>
  67654. * </ion-fab>
  67655. * </ion-content>
  67656. * ```
  67657. *
  67658. * A FAB speed dial can also be closed programatically.
  67659. *
  67660. * ```html
  67661. * <ion-content>
  67662. * <ion-fab bottom right #fab>
  67663. * <button ion-fab>Share</button>
  67664. * <ion-fab-list side="top">
  67665. * <button ion-fab (click)="share('facebook', fab)">Facebook</button>
  67666. * <button ion-fab (click)="share('twitter', fab)">Twitter</button>
  67667. * </ion-fab-list>
  67668. * </ion-fab>
  67669. * </ion-content>
  67670. * ```
  67671. *
  67672. * ```ts
  67673. * share(socialNet: string, fab: FabContainer) {
  67674. * fab.close();
  67675. * console.log("Sharing in", socialNet);
  67676. * }
  67677. * ```
  67678. *
  67679. * @demo /docs/demos/src/fab/
  67680. * @see {@link /docs/components#fabs FAB Component Docs}
  67681. */
  67682. var FabContainer = (function () {
  67683. function FabContainer(plt) {
  67684. /**
  67685. * @hidden
  67686. */
  67687. this._listsActive = false;
  67688. this._events = new __WEBPACK_IMPORTED_MODULE_2__gestures_ui_event_manager__["a" /* UIEventManager */](plt);
  67689. }
  67690. /**
  67691. * @hidden
  67692. */
  67693. FabContainer.prototype.ngAfterContentInit = function () {
  67694. var mainButton = this._mainButton;
  67695. if (!mainButton || !mainButton.getNativeElement()) {
  67696. console.error('FAB container needs a main <button ion-fab>');
  67697. return;
  67698. }
  67699. this._events.listen(mainButton.getNativeElement(), 'click', this.clickHandler.bind(this), { zone: true });
  67700. };
  67701. /**
  67702. * @hidden
  67703. */
  67704. FabContainer.prototype.clickHandler = function (ev) {
  67705. if (this.canActivateList(ev)) {
  67706. this.toggleList();
  67707. }
  67708. };
  67709. /**
  67710. * @hidden
  67711. */
  67712. FabContainer.prototype.canActivateList = function (ev) {
  67713. if (this._fabLists.length > 0 && this._mainButton && ev.target) {
  67714. var ele = ev.target.closest('ion-fab>[ion-fab]');
  67715. return (ele && ele === this._mainButton.getNativeElement());
  67716. }
  67717. return false;
  67718. };
  67719. /**
  67720. * @hidden
  67721. */
  67722. FabContainer.prototype.toggleList = function () {
  67723. this.setActiveLists(!this._listsActive);
  67724. };
  67725. /**
  67726. * @hidden
  67727. */
  67728. FabContainer.prototype.setActiveLists = function (isActive) {
  67729. if (isActive === this._listsActive) {
  67730. return;
  67731. }
  67732. var lists = this._fabLists.toArray();
  67733. for (var _i = 0, lists_1 = lists; _i < lists_1.length; _i++) {
  67734. var list = lists_1[_i];
  67735. list.setVisible(isActive);
  67736. }
  67737. this._mainButton.setActiveClose(isActive);
  67738. this._listsActive = isActive;
  67739. };
  67740. /**
  67741. * Close an active FAB list container
  67742. */
  67743. FabContainer.prototype.close = function () {
  67744. this.setActiveLists(false);
  67745. };
  67746. /**
  67747. * @hidden
  67748. */
  67749. FabContainer.prototype.ngOnDestroy = function () {
  67750. this._events.destroy();
  67751. };
  67752. FabContainer.decorators = [
  67753. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  67754. selector: 'ion-fab',
  67755. template: '<ng-content></ng-content>'
  67756. },] },
  67757. ];
  67758. /** @nocollapse */
  67759. FabContainer.ctorParameters = function () { return [
  67760. { type: __WEBPACK_IMPORTED_MODULE_1__platform_platform__["a" /* Platform */], },
  67761. ]; };
  67762. FabContainer.propDecorators = {
  67763. '_mainButton': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_3__fab__["a" /* FabButton */],] },],
  67764. '_fabLists': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_4__fab_list__["a" /* FabList */],] },],
  67765. };
  67766. return FabContainer;
  67767. }());
  67768. //# sourceMappingURL=fab-container.js.map
  67769. /***/ }),
  67770. /* 188 */
  67771. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  67772. "use strict";
  67773. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Col; });
  67774. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  67775. /**
  67776. * @name Col
  67777. * @module ionic
  67778. * @description
  67779. *
  67780. * Columns are cellular components of the [grid](../Grid) system and go inside of a [row](../Row).
  67781. * They will expand to fill their row. All content within a grid should go inside of a column.
  67782. *
  67783. * ## Column attributes
  67784. *
  67785. * By default, columns will stretch to fill the entire height of the row.
  67786. * There are several attributes that can be added to a column to customize this behavior.
  67787. *
  67788. * | Property | Description |
  67789. * |-----------------------|-------------------------------------------------------------------------------------------------------------|
  67790. * | align-self-start | Adds `align-self: flex-start`. The column will be vertically aligned at the top. |
  67791. * | align-self-center | Adds `align-self: center`. The column will be vertically aligned in the center. |
  67792. * | align-self-end | Adds `align-self: flex-end`. The column will be vertically aligned at the bottom. |
  67793. * | align-self-stretch | Adds `align-self: stretch`. The column will be stretched to take up the entire height of the row. |
  67794. * | align-self-baseline | Adds `align-self: baseline`. The column will be vertically aligned at its baseline. |
  67795. *
  67796. *
  67797. */
  67798. var Col = (function () {
  67799. function Col() {
  67800. }
  67801. Col.decorators = [
  67802. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  67803. selector: 'ion-col, [ion-col]',
  67804. host: {
  67805. 'class': 'col'
  67806. }
  67807. },] },
  67808. ];
  67809. /** @nocollapse */
  67810. Col.ctorParameters = function () { return []; };
  67811. return Col;
  67812. }());
  67813. //# sourceMappingURL=col.js.map
  67814. /***/ }),
  67815. /* 189 */
  67816. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  67817. "use strict";
  67818. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Grid; });
  67819. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  67820. /**
  67821. * @name Grid
  67822. * @module ionic
  67823. * @description
  67824. *
  67825. * The grid is a powerful mobile-first flexbox system for building custom layouts.
  67826. * It is heavily influenced by [Bootstrap's grid system](http://v4-alpha.getbootstrap.com/layout/grid/).
  67827. *
  67828. * The grid is composed of three units — a grid, row(s) and column(s). Columns will expand to fill their
  67829. * row, and will resize to fit additional columns. It is based on a 12 column layout with different
  67830. * breakpoints based on the screen size. The number of columns and breakpoints can be fully customized
  67831. * using Sass.
  67832. *
  67833. * - [How it works](#how-it-works)
  67834. * - [Grid size](#grid-size)
  67835. * - [Grid attributes](#grid-attributes)
  67836. * - [Default breakpoints](#default-breakpoints)
  67837. * - [Auto-layout columns](#auto-layout-columns)
  67838. * - [Equal-width](#equal-width)
  67839. * - [Setting one column width](#setting-one-column-width)
  67840. * - [Variable-width](#variable-width)
  67841. * - [Responsive attributes](#responsive-attributes)
  67842. * - [All breakpoints](#all-breakpoints)
  67843. * - [Stacked to horizontal](#stacked-to-horizontal)
  67844. * - [Reordering](#reordering)
  67845. * - [Offsetting columns](#offsetting-columns)
  67846. * - [Push and pull](#push-and-pull)
  67847. * - [Alignment](#alignment)
  67848. * - [Vertical Alignment](#vertical-alignment)
  67849. * - [Horizontal Alignment](#horizontal-alignment)
  67850. * - [Customizing the grid](#customizing-the-grid)
  67851. * - [Number of columns and padding](#number-of-columns-and-padding)
  67852. * - [Grid tiers](#grid-tiers)
  67853. *
  67854. *
  67855. * ## How it works
  67856. *
  67857. * The grid is a mobile-first system made up of any number of rows and columns.
  67858. * It is built with flexbox making it extremely responsive. The components that
  67859. * make up the grid can be written as an element (e.g., `<ion-grid>`) or added as
  67860. * an attribute to any element (e.g., `<div ion-row>`).
  67861. *
  67862. * Here's how it works:
  67863. *
  67864. * - Grids act as a container for all rows and columns. Grids take up the full width of their container,
  67865. * but adding the `fixed` attribute will specify the width per screen size, see [grid size](#grid-size) below.
  67866. * - Rows are horizontal groups of columns that line the columns up properly.
  67867. * - Content should be placed within columns, and only columns may be immediate children of rows.
  67868. * - Grid columns without a specified width will automatically have equal widths.
  67869. * For example, four instances of `col-sm` will each automatically be 25% wide for small breakpoints.
  67870. * - Column attributes indicate the number of columns to use out of the default 12 per row.
  67871. * So, `col-4` can be added in order to have three equal-width columns.
  67872. * - Column widths are set as a percentage, so they’re always fluid and sized relative to their parent element.
  67873. * - Columns have padding between individual columns, however, the padding can be removed from the grid and
  67874. * columns by adding `no-padding` on the grid.
  67875. * - There are five grid tiers by default, one for each responsive breakpoint: all breakpoints (extra small),
  67876. * small, medium, large, and extra large.
  67877. * - Grid tiers are based on minimum widths, meaning they apply to their tier and all those larger than it
  67878. * (e.g., `col-sm-4` applies to small, medium, large, and extra large devices).
  67879. * - Grids can easily be customized via Sass variables. See [customizing the grid](#customizing-the-grid).
  67880. *
  67881. * There are some [known bugs with flexbox](https://github.com/philipwalton/flexbugs) that
  67882. * should be checked prior to creating issues with Ionic.
  67883. *
  67884. * ## Grid size
  67885. *
  67886. * By default, the grid will take up 100% width. To set a maximum width based on the screen
  67887. * size add the `fixed` attribute. The maximum width of the grid for each breakpoint is defined
  67888. * in the `$grid-max-widths` Sass variable. For more information, see
  67889. * [customizing the grid](#customizing-the-grid).
  67890. *
  67891. * | Name | Value | Description |
  67892. * |----------|----------|-----------------------------------------------------|
  67893. * | xs | auto | Don't set the grid width for xs screens |
  67894. * | sm | 540px | Set grid width to 540px when (min-width: 576px) |
  67895. * | md | 720px | Set grid width to 720px when (min-width: 768px) |
  67896. * | lg | 960px | Set grid width to 960px when (min-width: 992px) |
  67897. * | xl | 1140px | Set grid width to 1140px when (min-width: 1200px) |
  67898. *
  67899. *
  67900. * ## Grid attributes
  67901. *
  67902. * The grid takes up full width and has padding added to it based on the screen size. There are two
  67903. * attributes that can be used to adjust this behavior.
  67904. *
  67905. * | Property | Description |
  67906. * |-----------------|-------------------------------------------------------------------------------------------------------------------|
  67907. * | no-padding | Removes padding from the grid and immediate children columns. |
  67908. * | fixed | Set a max width based on the screen size. |
  67909. *
  67910. *
  67911. * ## Default breakpoints
  67912. *
  67913. * The default breakpoints are defined by the `$grid-breakpoints` Sass variable. It can be
  67914. * customized to use different values for the breakpoint, rename and add/remove breakpoints.
  67915. * For more information, see [customizing the grid](#customizing-the-grid).
  67916. *
  67917. * | Name | Value | Width Prefix | Offset Prefix | Push Prefix | Pull Prefix | Description |
  67918. * |----------|----------|--------------|---------------|--------------|-------------|---------------------------------------------------|
  67919. * | xs | 0 | `col-` | `offset-` | `push-` | `pull-` | Set columns when (min-width: 0) |
  67920. * | sm | 576px | `col-sm-` | `offset-sm-` | `push-sm-` | `pull-sm-` | Set columns when (min-width: 576px) |
  67921. * | md | 768px | `col-md-` | `offset-md-` | `push-md-` | `pull-md-` | Set columns when (min-width: 768px) |
  67922. * | lg | 992px | `col-lg-` | `offset-lg-` | `push-lg-` | `pull-lg-` | Set columns when (min-width: 992px) |
  67923. * | xl | 1200px | `col-xl-` | `offset-xl-` | `push-xl-` | `pull-xl-` | Set columns when (min-width: 1200px) |
  67924. *
  67925. * _Note: the first breakpoint must have the value set to 0 and all breakpoint values must be in
  67926. * ascending order._
  67927. *
  67928. * ## Auto-layout columns
  67929. *
  67930. * ### Equal-width
  67931. *
  67932. * By default, columns will take up equal width inside of a row for all devices and screen sizes.
  67933. *
  67934. * ```
  67935. * <ion-grid>
  67936. * <ion-row>
  67937. * <ion-col>
  67938. * 1 of 2
  67939. * </ion-col>
  67940. * <ion-col>
  67941. * 2 of 2
  67942. * </ion-col>
  67943. * </ion-row>
  67944. * <ion-row>
  67945. * <ion-col>
  67946. * 1 of 3
  67947. * </ion-col>
  67948. * <ion-col>
  67949. * 2 of 3
  67950. * </ion-col>
  67951. * <ion-col>
  67952. * 3 of 3
  67953. * </ion-col>
  67954. * </ion-row>
  67955. * </ion-grid>
  67956. * ```
  67957. *
  67958. * ### Setting one column width
  67959. *
  67960. * Set the width of one column and the others will automatically resize around it.
  67961. * This can be done using our predefined grid attributes. In the example below,
  67962. * the other columns will resize no matter the width of the center column.
  67963. *
  67964. * ```
  67965. * <ion-grid>
  67966. * <ion-row>
  67967. * <ion-col>
  67968. * 1 of 3
  67969. * </ion-col>
  67970. * <ion-col col-8>
  67971. * 2 of 3 (wider)
  67972. * </ion-col>
  67973. * <ion-col>
  67974. * 3 of 3
  67975. * </ion-col>
  67976. * </ion-row>
  67977. * <ion-row>
  67978. * <ion-col>
  67979. * 1 of 3
  67980. * </ion-col>
  67981. * <ion-col col-6>
  67982. * 2 of 3 (wider)
  67983. * </ion-col>
  67984. * <ion-col>
  67985. * 3 of 3
  67986. * </ion-col>
  67987. * </ion-row>
  67988. * </ion-grid>
  67989. * ```
  67990. *
  67991. * ### Variable-width
  67992. *
  67993. * Using the `col-{breakpoint}-auto` attributes, the column can size itself based on the
  67994. * natural width of its content. This is extremely useful for setting a column width
  67995. * using pixels. The columns next to the variable-width column will resize to fill the row.
  67996. *
  67997. * ```
  67998. * <ion-grid>
  67999. * <ion-row>
  68000. * <ion-col>
  68001. * 1 of 3
  68002. * </ion-col>
  68003. * <ion-col col-auto>
  68004. * Variable width content
  68005. * </ion-col>
  68006. * <ion-col>
  68007. * 3 of 3
  68008. * </ion-col>
  68009. * </ion-row>
  68010. * <ion-row>
  68011. * <ion-col>
  68012. * 1 of 4
  68013. * </ion-col>
  68014. * <ion-col>
  68015. * 2 of 4
  68016. * </ion-col>
  68017. * <ion-col col-auto>
  68018. * <ion-input placeholder="Variable width input"></ion-input>
  68019. * </ion-col>
  68020. * <ion-col>
  68021. * 4 of 4
  68022. * </ion-col>
  68023. * </ion-row>
  68024. * </ion-grid>
  68025. * ```
  68026. *
  68027. *
  68028. * ## Responsive attributes
  68029. *
  68030. * ### All breakpoints
  68031. *
  68032. * To customize a column's width for all devices and screens, add the `col-*`
  68033. * attribute. These attributes tell the column to take up `*` columns out
  68034. * of the available columns.
  68035. *
  68036. * ```
  68037. * <ion-grid>
  68038. * <ion-row>
  68039. * <ion-col col-4>
  68040. * 1 of 4
  68041. * </ion-col>
  68042. * <ion-col col-2>
  68043. * 2 of 4
  68044. * </ion-col>
  68045. * <ion-col col-2>
  68046. * 3 of 4
  68047. * </ion-col>
  68048. * <ion-col col-4>
  68049. * 4 of 4
  68050. * </ion-col>
  68051. * </ion-row>
  68052. * </ion-grid>
  68053. * ```
  68054. *
  68055. * ### Stacked to horizontal
  68056. *
  68057. * Use a combination of width and breakpoint attributes to create a grid that starts out stacked
  68058. * on extra small screens before becoming horizontal on small screens.
  68059. *
  68060. * ```
  68061. * <ion-grid>
  68062. * <ion-row>
  68063. * <ion-col col-12 col-sm>
  68064. * 1 of 4
  68065. * </ion-col>
  68066. * <ion-col col-12 col-sm>
  68067. * 2 of 4
  68068. * </ion-col>
  68069. * <ion-col col-12 col-sm>
  68070. * 3 of 4
  68071. * </ion-col>
  68072. * <ion-col col-12 col-sm>
  68073. * 4 of 4
  68074. * </ion-col>
  68075. * </ion-row>
  68076. * </ion-grid>
  68077. * ```
  68078. *
  68079. *
  68080. * ## Reordering
  68081. *
  68082. * ### Offsetting columns
  68083. *
  68084. * Move columns to the right by adding the `offset-*` attributes. These attributes
  68085. * increase the margin start of the column by `*` columns. For example, in the following
  68086. * grid the last column will be offset by 3 columns and take up 3 columns:
  68087. *
  68088. * ```
  68089. * <ion-grid>
  68090. * <ion-row>
  68091. * <ion-col col-3>
  68092. * 1 of 2
  68093. * </ion-col>
  68094. * <ion-col col-3 offset-3>
  68095. * 2 of 2
  68096. * </ion-col>
  68097. * </ion-row>
  68098. * </ion-grid>
  68099. * ```
  68100. *
  68101. * Offsets can also be added based on screen breakpoints. Here's an example of a
  68102. * grid where the last column will be offset by 3 columns for `md` screens and up:
  68103. *
  68104. * ```
  68105. * <ion-grid>
  68106. * <ion-row>
  68107. * <ion-col col-md-3>
  68108. * 1 of 3
  68109. * </ion-col>
  68110. * <ion-col col-md-3>
  68111. * 2 of 3
  68112. * </ion-col>
  68113. * <ion-col col-md-3 offset-md-3>
  68114. * 3 of 3
  68115. * </ion-col>
  68116. * </ion-row>
  68117. * </ion-grid>
  68118. * ```
  68119. *
  68120. * ### Push and pull
  68121. *
  68122. * Reorder the columns by adding the `push-*` and `pull-*` attributes. These attributes
  68123. * adjust the `left` and `right` of the columns by `*` columns making it easy to reorder
  68124. * columns. For example, in the following grid the column with the `1st col` description
  68125. * will actually be the last column and the `2nd col` will be the first column.
  68126. *
  68127. * ```
  68128. * <ion-grid>
  68129. * <ion-row>
  68130. * <ion-col col-9 push-3>
  68131. * 1 of 2
  68132. * </ion-col>
  68133. * <ion-col col-3 pull-9>
  68134. * 2 of 2
  68135. * </ion-col>
  68136. * </ion-row>
  68137. * </ion-grid>
  68138. * ```
  68139. *
  68140. * Push and pull can also be added based on screen breakpoints. In the following example,
  68141. * the column with the `3rd` column description will actually be the first column for
  68142. * `md` screens and up:
  68143. *
  68144. * ```
  68145. * <ion-grid>
  68146. * <ion-row>
  68147. * <ion-col col-md-6 push-md-3>
  68148. * 1 of 3
  68149. * </ion-col>
  68150. * <ion-col col-md-3 push-md-3>
  68151. * 2 of 3
  68152. * </ion-col>
  68153. * <ion-col col-md-3 pull-md-9>
  68154. * 3 of 3
  68155. * </ion-col>
  68156. * </ion-row>
  68157. * </ion-grid>
  68158. * ```
  68159. *
  68160. *
  68161. * ## Alignment
  68162. *
  68163. * ### Vertical alignment
  68164. *
  68165. * All columns can be vertically aligned inside of a row by adding different
  68166. * attributes to the row. For a list of available attributes, see
  68167. * [row attributes](../Row#row-attributes).
  68168. *
  68169. * ```
  68170. * <ion-grid>
  68171. * <ion-row align-items-start>
  68172. * <ion-col>
  68173. * 1 of 4
  68174. * </ion-col>
  68175. * <ion-col>
  68176. * 2 of 4
  68177. * </ion-col>
  68178. * <ion-col>
  68179. * 3 of 4
  68180. * </ion-col>
  68181. * <ion-col>
  68182. * 4 of 4 <br>#<br>#<br>#
  68183. * </ion-col>
  68184. * </ion-row>
  68185. *
  68186. * <ion-row align-items-center>
  68187. * <ion-col>
  68188. * 1 of 4
  68189. * </ion-col>
  68190. * <ion-col>
  68191. * 2 of 4
  68192. * </ion-col>
  68193. * <ion-col>
  68194. * 3 of 4
  68195. * </ion-col>
  68196. * <ion-col>
  68197. * 4 of 4 <br>#<br>#<br>#
  68198. * </ion-col>
  68199. * </ion-row>
  68200. *
  68201. * <ion-row align-items-end>
  68202. * <ion-col>
  68203. * 1 of 4
  68204. * </ion-col>
  68205. * <ion-col>
  68206. * 2 of 4
  68207. * </ion-col>
  68208. * <ion-col>
  68209. * 3 of 4
  68210. * </ion-col>
  68211. * <ion-col>
  68212. * 4 of 4 <br>#<br>#<br>#
  68213. * </ion-col>
  68214. * </ion-row>
  68215. * </ion-grid>
  68216. * ```
  68217. *
  68218. * Columns can also align themselves differently than other columns by
  68219. * adding the alignment attribute directly to the column. For a list of available
  68220. * attributes, see [column attributes](../Col#column-attributes).
  68221. *
  68222. * ```
  68223. * <ion-grid>
  68224. * <ion-row>
  68225. * <ion-col align-self-start>
  68226. * <div>
  68227. * 1 of 4
  68228. * </div>
  68229. * </ion-col>
  68230. * <ion-col align-self-center>
  68231. * <div>
  68232. * 2 of 4
  68233. * </div>
  68234. * </ion-col>
  68235. * <ion-col align-self-end>
  68236. * <div>
  68237. * 3 of 4
  68238. * </div>
  68239. * </ion-col>
  68240. * <ion-col>
  68241. * <div>
  68242. * 4 of 4 <br>#<br>#<br>#
  68243. * </div>
  68244. * </ion-col>
  68245. * </ion-row>
  68246. * </ion-grid>
  68247. * ```
  68248. *
  68249. * ### Horizontal alignment
  68250. *
  68251. * All columns can be horizontally aligned inside of a row by adding different
  68252. * attributes to the row. For a list of available attributes, see
  68253. * [row attributes](../Row#row-attributes).
  68254. *
  68255. * ```
  68256. * <ion-grid>
  68257. * <ion-row justify-content-start>
  68258. * <ion-col col-3>
  68259. * 1 of 2
  68260. * </ion-col>
  68261. * <ion-col col-3>
  68262. * 2 of 2
  68263. * </ion-col>
  68264. * </ion-row>
  68265. *
  68266. * <ion-row justify-content-center>
  68267. * <ion-col col-3>
  68268. * 1 of 2
  68269. * </ion-col>
  68270. * <ion-col col-3>
  68271. * 2 of 2
  68272. * </ion-col>
  68273. * </ion-row>
  68274. *
  68275. * <ion-row justify-content-end>
  68276. * <ion-col col-3>
  68277. * 1 of 2
  68278. * </ion-col>
  68279. * <ion-col col-3>
  68280. * 2 of 2
  68281. * </ion-col>
  68282. * </ion-row>
  68283. *
  68284. * <ion-row justify-content-around>
  68285. * <ion-col col-3>
  68286. * 1 of 2
  68287. * </ion-col>
  68288. * <ion-col col-3>
  68289. * 2 of 2
  68290. * </ion-col>
  68291. * </ion-row>
  68292. *
  68293. * <ion-row justify-content-between>
  68294. * <ion-col col-3>
  68295. * 1 of 2
  68296. * </ion-col>
  68297. * <ion-col col-3>
  68298. * 2 of 2
  68299. * </ion-col>
  68300. * </ion-row>
  68301. * </ion-grid>
  68302. * ```
  68303. *
  68304. *
  68305. * ## Customizing the grid
  68306. *
  68307. * Using our built-in grid Sass variables and maps, it’s possible to completely customize
  68308. * the predefined grid attributes. Change the number of breakpoints, the media query values,
  68309. * the number of columns, and more.
  68310. *
  68311. * ### Number of columns and padding
  68312. *
  68313. * The number of grid columns and their padding can be modified via Sass variables.
  68314. * `$grid-columns` is used to generate the widths (in percent) of each individual column.
  68315. * `$grid-padding-width` is used for the padding on the grid, while `$grid-padding-widths`
  68316. * allows breakpoint-specific widths that are divided evenly across `padding-left` and
  68317. * `padding-right` as well as `padding-top` and `padding-bottom` of the grid and columns.
  68318. *
  68319. * ```
  68320. * $grid-columns: 12 !default;
  68321. *
  68322. * $grid-padding-width: 10px !default;
  68323. *
  68324. * $grid-padding-widths: (
  68325. * xs: $grid-padding-width,
  68326. * sm: $grid-padding-width,
  68327. * md: $grid-padding-width,
  68328. * lg: $grid-padding-width,
  68329. * xl: $grid-padding-width
  68330. * ) !default;
  68331. * ```
  68332. *
  68333. * ### Grid tiers
  68334. *
  68335. * To customize the breakpoints and their values, override the values of
  68336. * `$grid-breakpoints` and `$grid-max-widths`. For example, to only use
  68337. * 3 breakpoints, the following could be written:
  68338. *
  68339. * ```
  68340. * $grid-breakpoints: (
  68341. * sm: 0,
  68342. * md: 768px,
  68343. * lg: 1024px
  68344. * );
  68345. *
  68346. * $grid-max-widths: (
  68347. * sm: 420px,
  68348. * md: 720px,
  68349. * lg: 960px
  68350. * );
  68351. * ```
  68352. *
  68353. */
  68354. var Grid = (function () {
  68355. function Grid() {
  68356. }
  68357. Grid.decorators = [
  68358. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  68359. selector: 'ion-grid, [ion-grid]',
  68360. host: {
  68361. 'class': 'grid'
  68362. }
  68363. },] },
  68364. ];
  68365. /** @nocollapse */
  68366. Grid.ctorParameters = function () { return []; };
  68367. return Grid;
  68368. }());
  68369. //# sourceMappingURL=grid.js.map
  68370. /***/ }),
  68371. /* 190 */
  68372. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  68373. "use strict";
  68374. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Row; });
  68375. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  68376. /**
  68377. * @name Row
  68378. * @module ionic
  68379. * @description
  68380. *
  68381. * Rows are horizontal components of the [grid](../Grid) system and contain varying numbers of
  68382. * [columns](../Col). They ensure the columns are positioned properly.
  68383. *
  68384. * ## Row attributes
  68385. *
  68386. * By default, columns will stretch to fill the entire height of the row and wrap when necessary.
  68387. * There are several attributes that can be added to a row to customize this behavior.
  68388. *
  68389. * | Property | Description |
  68390. * |-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
  68391. * | nowrap | Adds `flex-wrap: nowrap`. Forces the columns to a single row. |
  68392. * | wrap-reverse | Adds `flex-wrap: wrap-reverse`. The columns will wrap in reverse. |
  68393. * | align-items-start | Adds `align-items: flex-start`. All columns will be vertically aligned at the top, unless they specify their own alignment. |
  68394. * | align-items-center | Adds `align-items: center`. All columns will be vertically aligned in the center, unless they specify their own alignment. |
  68395. * | align-items-end | Adds `align-items: flex-end`. All columns will be vertically aligned at the bottom, unless they specify their own alignment. |
  68396. * | align-items-stretch | Adds `align-items: stretch`. All columns will be stretched to take up the entire height of the row, unless they specify their own alignment. |
  68397. * | align-items-baseline | Adds `align-items: baseline`. All columns will be vertically aligned at their baselines, unless they specify their own alignment. |
  68398. * | justify-content-start | Adds `justify-content: start`. All columns will be horizontally aligned at the start. |
  68399. * | justify-content-center | Adds `justify-content: center`. All columns will be horizontally aligned at the center. |
  68400. * | justify-content-end | Adds `justify-content: end`. All columns will be horizontally aligned at the end. |
  68401. * | justify-content-around | Adds `justify-content: space-around`. All columns will be horizontally aligned with equal space around them. |
  68402. * | justify-content-between | Adds `justify-content: space-between`. All columns will be horizontally aligned with a half-size space on either end. |
  68403. *
  68404. *
  68405. */
  68406. var Row = (function () {
  68407. function Row() {
  68408. }
  68409. Row.decorators = [
  68410. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  68411. selector: 'ion-row, [ion-row]',
  68412. host: {
  68413. 'class': 'row'
  68414. }
  68415. },] },
  68416. ];
  68417. /** @nocollapse */
  68418. Row.ctorParameters = function () { return []; };
  68419. return Row;
  68420. }());
  68421. //# sourceMappingURL=row.js.map
  68422. /***/ }),
  68423. /* 191 */
  68424. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  68425. "use strict";
  68426. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Img; });
  68427. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  68428. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__content_content__ = __webpack_require__(31);
  68429. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__ = __webpack_require__(15);
  68430. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  68431. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_platform__ = __webpack_require__(7);
  68432. /**
  68433. * @name Img
  68434. * @description
  68435. * Two of the biggest cuprits of scroll jank is starting up a new HTTP
  68436. * request, and rendering images. These two reasons is largely why
  68437. * `ion-img` was created. The standard HTML `img` element is often a large
  68438. * source of these problems, and what makes matters worse is that the app
  68439. * does not have fine-grained control of requests and rendering for each
  68440. * `img` element.
  68441. *
  68442. * The `ion-img` component is similar to the standard `img` element,
  68443. * but it also adds features in order to provide improved performance.
  68444. * Features include only loading images which are visible, using web workers
  68445. * for HTTP requests, preventing jank while scrolling and in-memory caching.
  68446. *
  68447. * Note that `ion-img` also comes with a few more restrictions in comparison
  68448. * to the standard `img` element. A good rule is, if there are only a few
  68449. * images to be rendered on a page, then the standard `img` is probably
  68450. * best. However, if a page has the potential for hundreds or even thousands
  68451. * of images within a scrollable area, then `ion-img` would be better suited
  68452. * for the job.
  68453. *
  68454. * > Note: `ion-img` is only meant to be used inside of [virtual-scroll](/docs/api/components/virtual-scroll/VirtualScroll/)
  68455. *
  68456. *
  68457. * ### Lazy Loading
  68458. *
  68459. * Lazy loading images refers to only loading images which are actually
  68460. * visible within the user's viewport. This also means that images which are
  68461. * not viewable on the initial load would not be downloaded or rendered. Next,
  68462. * as the user scrolls, each image which becomes visible is then requested
  68463. * then rendered on-demand.
  68464. *
  68465. * The benefits of this approach is that unnecessary and resource intensive
  68466. * HTTP requests are not started, valuable bandwidth isn't wasted, and this
  68467. * allows the browser to free up resources which would be wasted on images
  68468. * which are not even viewable. For example, animated GIFs are enourmous
  68469. * performance drains, however, with `ion-img` the app is able to dedicate
  68470. * resources to just the viewable images. But again, if the problems listed
  68471. * above are not problems within your app, then the standard `img` element
  68472. * may be best.
  68473. *
  68474. *
  68475. * ### Image Dimensions
  68476. *
  68477. * By providing image dimensions up front, Ionic is able to accurately size
  68478. * up the image's location within the viewport, which helps lazy load only
  68479. * images which are viewable. Image dimensions can either by set as
  68480. * properties, inline styles, or external stylesheets. It doesn't matter
  68481. * which method of setting dimensions is used, but it's important that somehow
  68482. * each `ion-img` has been given an exact size.
  68483. *
  68484. * For example, by default `<ion-avatar>` and `<ion-thumbnail>` already come
  68485. * with exact sizes when placed within an `<ion-item>`. By giving each image
  68486. * an exact size, this then further locks in the size of each `ion-item`,
  68487. * which again helps improve scroll performance.
  68488. *
  68489. * ```html
  68490. * <!-- dimensions set using attributes -->
  68491. * <ion-img width="80" height="80" src="..."></ion-img>
  68492. *
  68493. * <!-- dimensions set using input properties -->
  68494. * <ion-img [width]="imgWidth" [height]="imgHeight" src="..."></ion-img>
  68495. *
  68496. * <!-- dimensions set using inline styles -->
  68497. * <ion-img style="width: 80px; height: 80px;" src="..."></ion-img>
  68498. * ```
  68499. *
  68500. * Additionally, each `ion-img` uses the `object-fit: cover` CSS property.
  68501. * What this means is that the actual rendered image will center itself within
  68502. * it's container. Or to really get detailed: The image is sized to maintain
  68503. * its aspect ratio while filling the containing element’s entire content box.
  68504. * Its concrete object size is resolved as a cover constraint against the
  68505. * element’s used width and height.
  68506. *
  68507. * ### Future Optimizations
  68508. *
  68509. * Future goals are to place image requests within web workers, and cache
  68510. * images in-memory as datauris. This method has proven to be effective,
  68511. * however there are some current limitations with Cordova which we are
  68512. * currently working on.
  68513. *
  68514. */
  68515. var Img = (function () {
  68516. function Img(_elementRef, _renderer, _plt, _content, _dom) {
  68517. this._elementRef = _elementRef;
  68518. this._renderer = _renderer;
  68519. this._plt = _plt;
  68520. this._content = _content;
  68521. this._dom = _dom;
  68522. /** @internal */
  68523. this._cache = true;
  68524. /** @internal */
  68525. this._w = '';
  68526. /** @internal */
  68527. this._h = '';
  68528. /** @internal */
  68529. this._wQ = '';
  68530. /** @internal */
  68531. this._hQ = '';
  68532. /**
  68533. * @input {string} Set the `alt` attribute which gets assigned to
  68534. * the inner `img` element.
  68535. */
  68536. this.alt = '';
  68537. if (!this._content) {
  68538. console.warn("ion-img can only be used within an ion-content");
  68539. }
  68540. else {
  68541. this._content.addImg(this);
  68542. }
  68543. this._isLoaded(false);
  68544. }
  68545. Object.defineProperty(Img.prototype, "src", {
  68546. /**
  68547. * @input {string} The source of the image.
  68548. */
  68549. get: function () {
  68550. return this._src;
  68551. },
  68552. set: function (newSrc) {
  68553. // if the source hasn't changed, then um, let's not change it
  68554. if (newSrc !== this._src) {
  68555. // we're changing the source
  68556. // so abort any active http requests
  68557. // and render the image empty
  68558. this.reset();
  68559. // update to the new src
  68560. this._src = newSrc;
  68561. // Are they using an actual datauri already,
  68562. // or reset any existing datauri we might be holding onto
  68563. this._hasLoaded = newSrc.indexOf('data:') === 0;
  68564. // run update to kick off requests or render if everything is good
  68565. this.update();
  68566. }
  68567. },
  68568. enumerable: true,
  68569. configurable: true
  68570. });
  68571. /**
  68572. * @hidden
  68573. */
  68574. Img.prototype.reset = function () {
  68575. if (this._requestingSrc) {
  68576. // abort any active requests
  68577. (void 0) /* console.debug */;
  68578. this._srcAttr('');
  68579. this._requestingSrc = null;
  68580. }
  68581. if (this._renderedSrc) {
  68582. // clear out the currently rendered img
  68583. (void 0) /* console.debug */;
  68584. this._renderedSrc = null;
  68585. this._isLoaded(false);
  68586. }
  68587. };
  68588. /**
  68589. * @hidden
  68590. */
  68591. Img.prototype.update = function () {
  68592. var _this = this;
  68593. // only attempt an update if there is an active src
  68594. // and the content containing the image considers it updatable
  68595. if (this._src && this._content.isImgsUpdatable()) {
  68596. if (this.canRequest && (this._src !== this._renderedSrc && this._src !== this._requestingSrc) && !this._hasLoaded) {
  68597. // only begin the request if we "can" request
  68598. // begin the image request if the src is different from the rendered src
  68599. // and if we don't already has a tmpDataUri
  68600. (void 0) /* console.debug */;
  68601. this._requestingSrc = this._src;
  68602. this._isLoaded(false);
  68603. this._srcAttr(this._src);
  68604. // set the dimensions of the image if we do have different data
  68605. this._setDims();
  68606. }
  68607. if (this.canRender && this._hasLoaded && this._src !== this._renderedSrc) {
  68608. // we can render and we have a datauri to render
  68609. this._renderedSrc = this._src;
  68610. this._setDims();
  68611. this._dom.write(function () {
  68612. if (_this._hasLoaded) {
  68613. (void 0) /* console.debug */;
  68614. _this._isLoaded(true);
  68615. _this._srcAttr(_this._src);
  68616. }
  68617. });
  68618. }
  68619. }
  68620. };
  68621. /**
  68622. * @internal
  68623. */
  68624. Img.prototype._isLoaded = function (isLoaded) {
  68625. var renderer = this._renderer;
  68626. var ele = this._elementRef.nativeElement;
  68627. renderer.setElementClass(ele, 'img-loaded', isLoaded);
  68628. renderer.setElementClass(ele, 'img-unloaded', !isLoaded);
  68629. };
  68630. /**
  68631. * @internal
  68632. */
  68633. Img.prototype._srcAttr = function (srcAttr) {
  68634. var imgEle = this._img;
  68635. var renderer = this._renderer;
  68636. if (imgEle && imgEle.src !== srcAttr) {
  68637. renderer.setElementAttribute(this._img, 'src', srcAttr);
  68638. renderer.setElementAttribute(this._img, 'alt', this.alt);
  68639. }
  68640. };
  68641. Object.defineProperty(Img.prototype, "top", {
  68642. /**
  68643. * @hidden
  68644. */
  68645. get: function () {
  68646. var bounds = this._getBounds();
  68647. return bounds && bounds.top || 0;
  68648. },
  68649. enumerable: true,
  68650. configurable: true
  68651. });
  68652. Object.defineProperty(Img.prototype, "bottom", {
  68653. /**
  68654. * @hidden
  68655. */
  68656. get: function () {
  68657. var bounds = this._getBounds();
  68658. return bounds && bounds.bottom || 0;
  68659. },
  68660. enumerable: true,
  68661. configurable: true
  68662. });
  68663. Img.prototype._getBounds = function () {
  68664. if (this._bounds) {
  68665. // we've been manually passed bounds data
  68666. // this is probably from Virtual Scroll items
  68667. return this._bounds;
  68668. }
  68669. if (!this._rect) {
  68670. // we don't have bounds from virtual scroll
  68671. // so let's do the raw DOM lookup w/ getBoundingClientRect
  68672. this._rect = this._elementRef.nativeElement.getBoundingClientRect();
  68673. (void 0) /* console.debug */;
  68674. }
  68675. return this._rect;
  68676. };
  68677. Object.defineProperty(Img.prototype, "bounds", {
  68678. /**
  68679. * @input {any} Sets the bounding rectangle of the element relative to the viewport.
  68680. * When using `VirtualScroll`, each virtual item should pass its bounds to each
  68681. * `ion-img`. The passed in data object should include `top` and `bottom` properties.
  68682. */
  68683. set: function (b) {
  68684. if (Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["l" /* isPresent */])(b)) {
  68685. this._bounds = b;
  68686. }
  68687. },
  68688. enumerable: true,
  68689. configurable: true
  68690. });
  68691. Object.defineProperty(Img.prototype, "cache", {
  68692. /**
  68693. * @input {boolean} After an image has been successfully downloaded, it can be cached
  68694. * in-memory. This is useful for `VirtualScroll` by allowing image responses to be
  68695. * cached, and not rendered, until after scrolling has completed, which allows for
  68696. * smoother scrolling.
  68697. */
  68698. get: function () {
  68699. return this._cache;
  68700. },
  68701. set: function (val) {
  68702. this._cache = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  68703. },
  68704. enumerable: true,
  68705. configurable: true
  68706. });
  68707. Object.defineProperty(Img.prototype, "width", {
  68708. /**
  68709. * @input {string} Image width. If this property is not set it's important that
  68710. * the dimensions are still set using CSS. If the dimension is just a number it
  68711. * will assume the `px` unit.
  68712. */
  68713. set: function (val) {
  68714. this._wQ = getUnitValue(val);
  68715. this._setDims();
  68716. },
  68717. enumerable: true,
  68718. configurable: true
  68719. });
  68720. Object.defineProperty(Img.prototype, "height", {
  68721. /**
  68722. * @input {string} Image height. If this property is not set it's important that
  68723. * the dimensions are still set using CSS. If the dimension is just a number it
  68724. * will assume the `px` unit.
  68725. */
  68726. set: function (val) {
  68727. this._hQ = getUnitValue(val);
  68728. this._setDims();
  68729. },
  68730. enumerable: true,
  68731. configurable: true
  68732. });
  68733. Img.prototype._setDims = function () {
  68734. var _this = this;
  68735. // only set the dimensions if we can render
  68736. // and only if the dimensions have changed from when we last set it
  68737. if (this.canRender && (this._w !== this._wQ || this._h !== this._hQ)) {
  68738. var wrapperEle = this._elementRef.nativeElement;
  68739. var renderer = this._renderer;
  68740. this._dom.write(function () {
  68741. if (_this._w !== _this._wQ) {
  68742. _this._w = _this._wQ;
  68743. renderer.setElementStyle(wrapperEle, 'width', _this._w);
  68744. }
  68745. if (_this._h !== _this._hQ) {
  68746. _this._h = _this._hQ;
  68747. renderer.setElementStyle(wrapperEle, 'height', _this._h);
  68748. }
  68749. });
  68750. }
  68751. };
  68752. /**
  68753. * @hidden
  68754. */
  68755. Img.prototype.ngAfterContentInit = function () {
  68756. var _this = this;
  68757. this._img = this._elementRef.nativeElement.firstChild;
  68758. this._unreg = this._plt.registerListener(this._img, 'load', function () {
  68759. _this._hasLoaded = true;
  68760. _this.update();
  68761. }, { passive: true });
  68762. };
  68763. /**
  68764. * @hidden
  68765. */
  68766. Img.prototype.ngOnDestroy = function () {
  68767. this._unreg && this._unreg();
  68768. this._content && this._content.removeImg(this);
  68769. };
  68770. Img.decorators = [
  68771. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  68772. selector: 'ion-img',
  68773. template: '<img>',
  68774. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  68775. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  68776. },] },
  68777. ];
  68778. /** @nocollapse */
  68779. Img.ctorParameters = function () { return [
  68780. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  68781. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  68782. { type: __WEBPACK_IMPORTED_MODULE_4__platform_platform__["a" /* Platform */], },
  68783. { type: __WEBPACK_IMPORTED_MODULE_1__content_content__["a" /* Content */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  68784. { type: __WEBPACK_IMPORTED_MODULE_2__platform_dom_controller__["a" /* DomController */], },
  68785. ]; };
  68786. Img.propDecorators = {
  68787. 'src': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68788. 'bounds': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68789. 'cache': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68790. 'width': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68791. 'height': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68792. 'alt': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68793. };
  68794. return Img;
  68795. }());
  68796. function getUnitValue(val) {
  68797. if (Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["l" /* isPresent */])(val)) {
  68798. if (typeof val === 'string') {
  68799. if (val.indexOf('%') > -1 || val.indexOf('px') > -1) {
  68800. return val;
  68801. }
  68802. if (val.length) {
  68803. return val + 'px';
  68804. }
  68805. }
  68806. else if (typeof val === 'number') {
  68807. return val + 'px';
  68808. }
  68809. }
  68810. return '';
  68811. }
  68812. //# sourceMappingURL=img.js.map
  68813. /***/ }),
  68814. /* 192 */
  68815. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  68816. "use strict";
  68817. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return InfiniteScrollContent; });
  68818. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  68819. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  68820. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__infinite_scroll__ = __webpack_require__(105);
  68821. /**
  68822. * @hidden
  68823. */
  68824. var InfiniteScrollContent = (function () {
  68825. function InfiniteScrollContent(inf, _config) {
  68826. this.inf = inf;
  68827. this._config = _config;
  68828. }
  68829. /**
  68830. * @hidden
  68831. */
  68832. InfiniteScrollContent.prototype.ngOnInit = function () {
  68833. if (!this.loadingSpinner) {
  68834. this.loadingSpinner = this._config.get('infiniteLoadingSpinner', this._config.get('spinner', 'ios'));
  68835. }
  68836. };
  68837. InfiniteScrollContent.decorators = [
  68838. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  68839. selector: 'ion-infinite-scroll-content',
  68840. template: '<div class="infinite-loading">' +
  68841. '<div class="infinite-loading-spinner" *ngIf="loadingSpinner">' +
  68842. '<ion-spinner [name]="loadingSpinner"></ion-spinner>' +
  68843. '</div>' +
  68844. '<div class="infinite-loading-text" [innerHTML]="loadingText" *ngIf="loadingText"></div>' +
  68845. '</div>',
  68846. host: {
  68847. '[attr.state]': 'inf.state'
  68848. },
  68849. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  68850. },] },
  68851. ];
  68852. /** @nocollapse */
  68853. InfiniteScrollContent.ctorParameters = function () { return [
  68854. { type: __WEBPACK_IMPORTED_MODULE_2__infinite_scroll__["a" /* InfiniteScroll */], },
  68855. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  68856. ]; };
  68857. InfiniteScrollContent.propDecorators = {
  68858. 'loadingSpinner': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68859. 'loadingText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  68860. };
  68861. return InfiniteScrollContent;
  68862. }());
  68863. //# sourceMappingURL=infinite-scroll-content.js.map
  68864. /***/ }),
  68865. /* 193 */
  68866. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  68867. "use strict";
  68868. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TextInput; });
  68869. /* unused harmony export getScrollData */
  68870. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  68871. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  68872. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__ = __webpack_require__(12);
  68873. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__);
  68874. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_takeUntil__ = __webpack_require__(106);
  68875. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_takeUntil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_takeUntil__);
  68876. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__app_app__ = __webpack_require__(11);
  68877. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config_config__ = __webpack_require__(2);
  68878. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__content_content__ = __webpack_require__(31);
  68879. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_dom__ = __webpack_require__(18);
  68880. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__platform_dom_controller__ = __webpack_require__(15);
  68881. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__util_form__ = __webpack_require__(27);
  68882. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__util_base_input__ = __webpack_require__(37);
  68883. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__util_util__ = __webpack_require__(3);
  68884. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__item_item__ = __webpack_require__(28);
  68885. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__platform_platform__ = __webpack_require__(7);
  68886. var __extends = (this && this.__extends) || (function () {
  68887. var extendStatics = Object.setPrototypeOf ||
  68888. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  68889. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  68890. return function (d, b) {
  68891. extendStatics(d, b);
  68892. function __() { this.constructor = d; }
  68893. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  68894. };
  68895. })();
  68896. /**
  68897. * @name Input
  68898. * @description
  68899. *
  68900. * `ion-input` is meant for text type inputs only, such as `text`,
  68901. * `password`, `email`, `number`, `search`, `tel`, and `url`. Ionic
  68902. * still uses an actual `<input type="text">` HTML element within the
  68903. * component, however, with Ionic wrapping the native HTML input
  68904. * element it's better able to handle the user experience and
  68905. * interactivity.
  68906. *
  68907. * Similarly, `<ion-textarea>` should be used in place of `<textarea>`.
  68908. *
  68909. * An `ion-input` is **not** used for non-text type inputs, such as a
  68910. * `checkbox`, `radio`, `toggle`, `range`, `select`, etc.
  68911. *
  68912. * Along with the blur/focus events, `input` support all standard text input
  68913. * events like `keyup`, `keydown`, `keypress`, `input`,etc. Any standard event
  68914. * can be attached and will function as expected.
  68915. *
  68916. * @usage
  68917. * ```html
  68918. * <ion-list>
  68919. * <ion-item>
  68920. * <ion-label color="primary">Inline Label</ion-label>
  68921. * <ion-input placeholder="Text Input"></ion-input>
  68922. * </ion-item>
  68923. *
  68924. * <ion-item>
  68925. * <ion-label color="primary" fixed>Fixed Label</ion-label>
  68926. * <ion-input type="tel" placeholder="Tel Input"></ion-input>
  68927. * </ion-item>
  68928. *
  68929. * <ion-item>
  68930. * <ion-input type="number" placeholder="Number Input with no label"></ion-input>
  68931. * </ion-item>
  68932. *
  68933. * <ion-item>
  68934. * <ion-label color="primary" stacked>Stacked Label</ion-label>
  68935. * <ion-input type="email" placeholder="Email Input"></ion-input>
  68936. * </ion-item>
  68937. *
  68938. * <ion-item>
  68939. * <ion-label color="primary" stacked>Stacked Label</ion-label>
  68940. * <ion-input type="password" placeholder="Password Input"></ion-input>
  68941. * </ion-item>
  68942. *
  68943. * <ion-item>
  68944. * <ion-label color="primary" floating>Floating Label</ion-label>
  68945. * <ion-input></ion-input>
  68946. * </ion-item>
  68947. *
  68948. * <ion-item>
  68949. * <ion-input placeholder="Clear Input" clearInput></ion-input>
  68950. * </ion-item>
  68951. *
  68952. * <ion-item>
  68953. * <ion-textarea placeholder="Enter a description"></ion-textarea>
  68954. * </ion-item>
  68955. * </ion-list>
  68956. * ```
  68957. *
  68958. * @demo /docs/demos/src/input/
  68959. */
  68960. var TextInput = (function (_super) {
  68961. __extends(TextInput, _super);
  68962. function TextInput(config, _plt, _form, _app, elementRef, renderer, _content, _item, ngControl, _dom) {
  68963. var _this = _super.call(this, config, elementRef, renderer, 'input', '', _form, _item, ngControl) || this;
  68964. _this._plt = _plt;
  68965. _this._app = _app;
  68966. _this._content = _content;
  68967. _this.ngControl = ngControl;
  68968. _this._dom = _dom;
  68969. _this._clearInput = false;
  68970. _this._readonly = false;
  68971. _this._type = 'text';
  68972. _this._isTextarea = false;
  68973. _this._onDestroy = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__["Subject"]();
  68974. _this._useAssist = false;
  68975. _this._relocated = false;
  68976. /**
  68977. * @input {string} Set the input's autocomplete property. Values: `"on"`, `"off"`. Default `"off"`.
  68978. */
  68979. _this.autocomplete = '';
  68980. /**
  68981. * @input {string} Set the input's autocorrect property. Values: `"on"`, `"off"`. Default `"off"`.
  68982. */
  68983. _this.autocorrect = '';
  68984. /**
  68985. * @input {string} Instructional text that shows before the input has a value.
  68986. */
  68987. _this.placeholder = '';
  68988. /**
  68989. * @input {any} The minimum value, which must not be greater than its maximum (max attribute) value.
  68990. */
  68991. _this.min = null;
  68992. /**
  68993. * @input {any} The maximum value, which must not be less than its minimum (min attribute) value.
  68994. */
  68995. _this.max = null;
  68996. /**
  68997. * @input {any} Works with the min and max attributes to limit the increments at which a value can be set.
  68998. */
  68999. _this.step = null;
  69000. /**
  69001. * @hidden
  69002. */
  69003. _this.input = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  69004. /**
  69005. * @hidden
  69006. */
  69007. _this.blur = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  69008. /**
  69009. * @hidden
  69010. */
  69011. _this.focus = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  69012. _this.autocomplete = config.get('autocomplete', 'off');
  69013. _this.autocorrect = config.get('autocorrect', 'off');
  69014. _this._autoFocusAssist = config.get('autoFocusAssist', 'delay');
  69015. _this._keyboardHeight = config.getNumber('keyboardHeight');
  69016. _this._isTextarea = !!(elementRef.nativeElement.tagName === 'ION-TEXTAREA');
  69017. if (_this._isTextarea && _item) {
  69018. _item.setElementClass('item-textarea', true);
  69019. }
  69020. // If not inside content, let's disable all the hacks
  69021. if (!_content) {
  69022. return _this;
  69023. }
  69024. var hideCaretOnScroll = config.getBoolean('hideCaretOnScroll', false);
  69025. if (hideCaretOnScroll) {
  69026. _this._enableHideCaretOnScroll();
  69027. }
  69028. var win = _plt.win();
  69029. var keyboardPlugin = win.Ionic && win.Ionic.keyboardPlugin;
  69030. if (keyboardPlugin) {
  69031. var keyboardResizes = config.getBoolean('keyboardResizes', false);
  69032. if (keyboardResizes) {
  69033. _this._keyboardHeight = config.getNumber('keyboardSafeArea', 60);
  69034. _this._enableScrollMove();
  69035. }
  69036. else {
  69037. _this._enableScrollPadding();
  69038. _this._enableScrollMove();
  69039. }
  69040. }
  69041. else {
  69042. _this._useAssist = config.getBoolean('scrollAssist', false);
  69043. var usePadding = config.getBoolean('scrollPadding', _this._useAssist);
  69044. if (usePadding) {
  69045. _this._enableScrollPadding();
  69046. }
  69047. }
  69048. return _this;
  69049. }
  69050. Object.defineProperty(TextInput.prototype, "clearInput", {
  69051. /**
  69052. * @input {boolean} If true, a clear icon will appear in the input when there is a value. Clicking it clears the input.
  69053. */
  69054. get: function () {
  69055. return this._clearInput;
  69056. },
  69057. set: function (val) {
  69058. this._clearInput = (!this._isTextarea && Object(__WEBPACK_IMPORTED_MODULE_11__util_util__["o" /* isTrueProperty */])(val));
  69059. },
  69060. enumerable: true,
  69061. configurable: true
  69062. });
  69063. Object.defineProperty(TextInput.prototype, "type", {
  69064. /**
  69065. * @input {string} The type of control to display. The default type is text.
  69066. * Possible values are: `"text"`, `"password"`, `"email"`, `"number"`, `"search"`, `"tel"`, or `"url"`.
  69067. */
  69068. get: function () {
  69069. return (this._isTextarea)
  69070. ? 'text'
  69071. : this._type;
  69072. },
  69073. set: function (val) {
  69074. this._type = val;
  69075. },
  69076. enumerable: true,
  69077. configurable: true
  69078. });
  69079. Object.defineProperty(TextInput.prototype, "readonly", {
  69080. /**
  69081. * @input {boolean} If true, the user cannot modify the value.
  69082. */
  69083. get: function () {
  69084. return this._readonly;
  69085. },
  69086. set: function (val) {
  69087. this._readonly = Object(__WEBPACK_IMPORTED_MODULE_11__util_util__["o" /* isTrueProperty */])(val);
  69088. },
  69089. enumerable: true,
  69090. configurable: true
  69091. });
  69092. Object.defineProperty(TextInput.prototype, "clearOnEdit", {
  69093. /**
  69094. * @input {boolean} If true, the value will be cleared after focus upon edit.
  69095. * Defaults to `true` when `type` is `"password"`, `false` for all other types.
  69096. */
  69097. get: function () {
  69098. return this._clearOnEdit;
  69099. },
  69100. set: function (val) {
  69101. this._clearOnEdit = Object(__WEBPACK_IMPORTED_MODULE_11__util_util__["o" /* isTrueProperty */])(val);
  69102. },
  69103. enumerable: true,
  69104. configurable: true
  69105. });
  69106. TextInput.prototype.ngAfterContentInit = function () { };
  69107. /**
  69108. * @hidden
  69109. */
  69110. TextInput.prototype.ngAfterViewInit = function () {
  69111. (void 0) /* assert */;
  69112. // By default, password inputs clear after focus when they have content
  69113. if (this.clearOnEdit !== false && this.type === 'password') {
  69114. this.clearOnEdit = true;
  69115. }
  69116. var ionInputEle = this._elementRef.nativeElement;
  69117. var nativeInputEle = this._native.nativeElement;
  69118. // Copy remaining attributes, not handled by ionic/angular
  69119. Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["b" /* copyInputAttributes */])(ionInputEle, nativeInputEle);
  69120. // prevent having tabIndex duplicated
  69121. if (ionInputEle.hasAttribute('tabIndex')) {
  69122. ionInputEle.removeAttribute('tabIndex');
  69123. }
  69124. // handle the autofocus attribute
  69125. if (ionInputEle.hasAttribute('autofocus')) {
  69126. ionInputEle.removeAttribute('autofocus');
  69127. switch (this._autoFocusAssist) {
  69128. case 'immediate':
  69129. // config says to immediate focus on the input
  69130. // works best on android devices
  69131. nativeInputEle.focus();
  69132. break;
  69133. case 'delay':
  69134. // config says to chill out a bit and focus on the input after transitions
  69135. // works best on desktop
  69136. this._plt.timeout(function () { return nativeInputEle.focus(); }, 800);
  69137. break;
  69138. }
  69139. // traditionally iOS has big issues with autofocus on actual devices
  69140. // autoFocus is disabled by default with the iOS mode config
  69141. }
  69142. // Initialize the input (can start emitting events)
  69143. this._initialize();
  69144. if (this.focus.observers.length > 0) {
  69145. console.warn('(focus) is deprecated in ion-input, use (ionFocus) instead');
  69146. }
  69147. if (this.blur.observers.length > 0) {
  69148. console.warn('(blur) is deprecated in ion-input, use (ionBlur) instead');
  69149. }
  69150. };
  69151. /**
  69152. * @hidden
  69153. */
  69154. TextInput.prototype.ngOnDestroy = function () {
  69155. _super.prototype.ngOnDestroy.call(this);
  69156. this._onDestroy.next();
  69157. this._onDestroy = null;
  69158. };
  69159. /**
  69160. * @hidden
  69161. */
  69162. TextInput.prototype.initFocus = function () {
  69163. this.setFocus();
  69164. };
  69165. /**
  69166. * @hidden
  69167. */
  69168. TextInput.prototype.setFocus = function () {
  69169. // let's set focus to the element
  69170. // but only if it does not already have focus
  69171. if (!this.isFocus()) {
  69172. this._native.nativeElement.focus();
  69173. }
  69174. };
  69175. /**
  69176. * @hidden
  69177. */
  69178. TextInput.prototype.setBlur = function () {
  69179. if (this.isFocus()) {
  69180. this._native.nativeElement.blur();
  69181. }
  69182. };
  69183. /**
  69184. * @hidden
  69185. */
  69186. TextInput.prototype.onInput = function (ev) {
  69187. this.value = ev.target.value;
  69188. // TODO: deprecate this
  69189. this.input.emit(ev);
  69190. };
  69191. /**
  69192. * @hidden
  69193. */
  69194. TextInput.prototype.onBlur = function (ev) {
  69195. this._fireBlur();
  69196. // TODO: deprecate this (06/07/2017)
  69197. this.blur.emit(ev);
  69198. this._scrollData = null;
  69199. if (this._clearOnEdit && this.hasValue()) {
  69200. this._didBlurAfterEdit = true;
  69201. }
  69202. };
  69203. /**
  69204. * @hidden
  69205. */
  69206. TextInput.prototype.onFocus = function (ev) {
  69207. this._fireFocus();
  69208. // TODO: deprecate this (06/07/2017)
  69209. this.focus.emit(ev);
  69210. };
  69211. /**
  69212. * @hidden
  69213. */
  69214. TextInput.prototype.onKeydown = function (ev) {
  69215. if (ev && this._clearOnEdit) {
  69216. this.checkClearOnEdit(ev.target.value);
  69217. }
  69218. };
  69219. /**
  69220. * @hidden
  69221. */
  69222. TextInput.prototype._inputUpdated = function () {
  69223. _super.prototype._inputUpdated.call(this);
  69224. var inputEle = this._native.nativeElement;
  69225. var value = this._value;
  69226. if (inputEle.value !== value) {
  69227. inputEle.value = value;
  69228. }
  69229. };
  69230. /**
  69231. * @hidden
  69232. */
  69233. TextInput.prototype.clearTextInput = function () {
  69234. this.value = '';
  69235. };
  69236. /**
  69237. * Check if we need to clear the text input if clearOnEdit is enabled
  69238. * @hidden
  69239. */
  69240. TextInput.prototype.checkClearOnEdit = function (_) {
  69241. if (!this._clearOnEdit) {
  69242. return;
  69243. }
  69244. // Did the input value change after it was blurred and edited?
  69245. if (this._didBlurAfterEdit && this.hasValue()) {
  69246. // Clear the input
  69247. this.clearTextInput();
  69248. }
  69249. // Reset the flag
  69250. this._didBlurAfterEdit = false;
  69251. };
  69252. TextInput.prototype._getScrollData = function () {
  69253. if (!this._content) {
  69254. return newScrollData();
  69255. }
  69256. // get container of this input, probably an ion-item a few nodes up
  69257. if (this._scrollData) {
  69258. return this._scrollData;
  69259. }
  69260. var ele = this._elementRef.nativeElement;
  69261. ele = ele.closest('ion-item,[ion-item]') || ele;
  69262. return this._scrollData = getScrollData(ele.offsetTop, ele.offsetHeight, this._content.getContentDimensions(), this._keyboardHeight, this._plt.height());
  69263. };
  69264. TextInput.prototype._relocateInput = function (shouldRelocate) {
  69265. if (this._relocated === shouldRelocate) {
  69266. return;
  69267. }
  69268. var platform = this._plt;
  69269. var componentEle = this.getNativeElement();
  69270. var focusedInputEle = this._native.nativeElement;
  69271. (void 0) /* console.debug */;
  69272. if (shouldRelocate) {
  69273. // this allows for the actual input to receive the focus from
  69274. // the user's touch event, but before it receives focus, it
  69275. // moves the actual input to a location that will not screw
  69276. // up the app's layout, and does not allow the native browser
  69277. // to attempt to scroll the input into place (messing up headers/footers)
  69278. // the cloned input fills the area of where native input should be
  69279. // while the native input fakes out the browser by relocating itself
  69280. // before it receives the actual focus event
  69281. // We hide the focused input (with the visible caret) invisiable by making it scale(0),
  69282. cloneInputComponent(platform, componentEle, focusedInputEle);
  69283. var inputRelativeY = this._getScrollData().inputSafeY;
  69284. // fix for #11817
  69285. var tx = this._plt.isRTL ? 9999 : -9999;
  69286. focusedInputEle.style[platform.Css.transform] = "translate3d(" + tx + "px," + inputRelativeY + "px,0)";
  69287. focusedInputEle.style.opacity = '0';
  69288. }
  69289. else {
  69290. removeClone(platform, componentEle, focusedInputEle);
  69291. }
  69292. this._relocated = shouldRelocate;
  69293. };
  69294. TextInput.prototype._enableScrollPadding = function () {
  69295. var _this = this;
  69296. (void 0) /* assert */;
  69297. (void 0) /* console.debug */;
  69298. this.ionFocus.subscribe(function () {
  69299. var content = _this._content;
  69300. var scrollPadding = _this._getScrollData().scrollPadding;
  69301. content.addScrollPadding(scrollPadding);
  69302. content.clearScrollPaddingFocusOut();
  69303. });
  69304. };
  69305. TextInput.prototype._enableHideCaretOnScroll = function () {
  69306. var _this = this;
  69307. (void 0) /* assert */;
  69308. var content = this._content;
  69309. (void 0) /* console.debug */;
  69310. content.ionScrollStart
  69311. .takeUntil(this._onDestroy)
  69312. .subscribe(function () { return scrollHideCaret(true); });
  69313. content.ionScrollEnd
  69314. .takeUntil(this._onDestroy)
  69315. .subscribe(function () { return scrollHideCaret(false); });
  69316. this.ionBlur.subscribe(function () { return _this._relocateInput(false); });
  69317. var self = this;
  69318. function scrollHideCaret(shouldHideCaret) {
  69319. // if it does have focus, then do the dom write
  69320. if (self.isFocus()) {
  69321. self._dom.write(function () { return self._relocateInput(shouldHideCaret); });
  69322. }
  69323. }
  69324. };
  69325. TextInput.prototype._enableScrollMove = function () {
  69326. var _this = this;
  69327. (void 0) /* assert */;
  69328. (void 0) /* console.debug */;
  69329. this.ionFocus.subscribe(function () {
  69330. var scrollData = _this._getScrollData();
  69331. if (Math.abs(scrollData.scrollAmount) > 4) {
  69332. _this._content.scrollTo(0, scrollData.scrollTo, scrollData.scrollDuration);
  69333. }
  69334. });
  69335. };
  69336. TextInput.prototype._pointerStart = function (ev) {
  69337. (void 0) /* assert */;
  69338. // input cover touchstart
  69339. if (ev.type === 'touchstart') {
  69340. this._isTouch = true;
  69341. }
  69342. if ((this._isTouch || (!this._isTouch && ev.type === 'mousedown')) && this._app.isEnabled()) {
  69343. // remember where the touchstart/mousedown started
  69344. this._coord = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev);
  69345. }
  69346. (void 0) /* console.debug */;
  69347. };
  69348. TextInput.prototype._pointerEnd = function (ev) {
  69349. (void 0) /* assert */;
  69350. // input cover touchend/mouseup
  69351. (void 0) /* console.debug */;
  69352. if ((this._isTouch && ev.type === 'mouseup') || !this._app.isEnabled()) {
  69353. // the app is actively doing something right now
  69354. // don't try to scroll in the input
  69355. ev.preventDefault();
  69356. ev.stopPropagation();
  69357. }
  69358. else if (this._coord) {
  69359. // get where the touchend/mouseup ended
  69360. var endCoord = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev);
  69361. // focus this input if the pointer hasn't moved XX pixels
  69362. // and the input doesn't already have focus
  69363. if (!Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["d" /* hasPointerMoved */])(8, this._coord, endCoord) && !this.isFocus()) {
  69364. ev.preventDefault();
  69365. ev.stopPropagation();
  69366. // begin the input focus process
  69367. this._jsSetFocus();
  69368. }
  69369. }
  69370. this._coord = null;
  69371. };
  69372. TextInput.prototype._jsSetFocus = function () {
  69373. var _this = this;
  69374. (void 0) /* assert */;
  69375. // begin the process of setting focus to the inner input element
  69376. var content = this._content;
  69377. (void 0) /* console.debug */;
  69378. if (!content) {
  69379. // not inside of a scroll view, just focus it
  69380. this.setFocus();
  69381. }
  69382. var scrollData = this._getScrollData();
  69383. if (Math.abs(scrollData.scrollAmount) < 4) {
  69384. // the text input is in a safe position that doesn't
  69385. // require it to be scrolled into view, just set focus now
  69386. this.setFocus();
  69387. return;
  69388. }
  69389. // temporarily move the focus to the focus holder so the browser
  69390. // doesn't freak out while it's trying to get the input in place
  69391. // at this point the native text input still does not have focus
  69392. this._relocateInput(true);
  69393. this.setFocus();
  69394. // scroll the input into place
  69395. content.scrollTo(0, scrollData.scrollTo, scrollData.scrollDuration, function () {
  69396. // the scroll view is in the correct position now
  69397. // give the native text input focus
  69398. _this._relocateInput(false);
  69399. // ensure this is the focused input
  69400. _this.setFocus();
  69401. });
  69402. };
  69403. TextInput.decorators = [
  69404. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  69405. selector: 'ion-input,ion-textarea',
  69406. template: '<input #textInput *ngIf="!_isTextarea" class="text-input" ' +
  69407. '[ngClass]="\'text-input-\' + _mode"' +
  69408. '(input)="onInput($event)" ' +
  69409. '(blur)="onBlur($event)" ' +
  69410. '(focus)="onFocus($event)" ' +
  69411. '(keydown)="onKeydown($event)" ' +
  69412. '[type]="_type" ' +
  69413. 'dir="auto" ' +
  69414. '[attr.aria-labelledby]="_labelId" ' +
  69415. '[attr.min]="min" ' +
  69416. '[attr.max]="max" ' +
  69417. '[attr.step]="step" ' +
  69418. '[attr.autocomplete]="autocomplete" ' +
  69419. '[attr.autocorrect]="autocorrect" ' +
  69420. '[placeholder]="placeholder" ' +
  69421. '[disabled]="_disabled" ' +
  69422. '[readonly]="_readonly">' +
  69423. '<textarea #textInput *ngIf="_isTextarea" class="text-input" ' +
  69424. '[ngClass]="\'text-input-\' + _mode"' +
  69425. '(input)="onInput($event)" ' +
  69426. '(blur)="onBlur($event)" ' +
  69427. '(focus)="onFocus($event)" ' +
  69428. '(keydown)="onKeydown($event)" ' +
  69429. '[attr.aria-labelledby]="_labelId" ' +
  69430. '[attr.autocomplete]="autocomplete" ' +
  69431. '[attr.autocorrect]="autocorrect" ' +
  69432. '[placeholder]="placeholder" ' +
  69433. '[disabled]="_disabled" ' +
  69434. '[readonly]="_readonly"></textarea>' +
  69435. '<button ion-button *ngIf="_clearInput" clear class="text-input-clear-icon" ' +
  69436. 'type="button" ' +
  69437. '(click)="clearTextInput($event)" ' +
  69438. '(mousedown)="clearTextInput($event)" ' +
  69439. 'tabindex="-1"></button>' +
  69440. '<div class="input-cover" *ngIf="_useAssist" ' +
  69441. '(touchstart)="_pointerStart($event)" ' +
  69442. '(touchend)="_pointerEnd($event)" ' +
  69443. '(mousedown)="_pointerStart($event)" ' +
  69444. '(mouseup)="_pointerEnd($event)"></div>',
  69445. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  69446. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  69447. inputs: ['value']
  69448. },] },
  69449. ];
  69450. /** @nocollapse */
  69451. TextInput.ctorParameters = function () { return [
  69452. { type: __WEBPACK_IMPORTED_MODULE_5__config_config__["a" /* Config */], },
  69453. { type: __WEBPACK_IMPORTED_MODULE_13__platform_platform__["a" /* Platform */], },
  69454. { type: __WEBPACK_IMPORTED_MODULE_9__util_form__["a" /* Form */], },
  69455. { type: __WEBPACK_IMPORTED_MODULE_4__app_app__["a" /* App */], },
  69456. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  69457. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  69458. { type: __WEBPACK_IMPORTED_MODULE_6__content_content__["a" /* Content */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  69459. { type: __WEBPACK_IMPORTED_MODULE_12__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  69460. { type: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["d" /* NgControl */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  69461. { type: __WEBPACK_IMPORTED_MODULE_8__platform_dom_controller__["a" /* DomController */], },
  69462. ]; };
  69463. TextInput.propDecorators = {
  69464. 'clearInput': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69465. 'type': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69466. 'readonly': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69467. 'clearOnEdit': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69468. '_native': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['textInput', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */] },] },],
  69469. 'autocomplete': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69470. 'autocorrect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69471. 'placeholder': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69472. 'min': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69473. 'max': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69474. 'step': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  69475. 'input': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  69476. 'blur': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  69477. 'focus': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  69478. };
  69479. return TextInput;
  69480. }(__WEBPACK_IMPORTED_MODULE_10__util_base_input__["a" /* BaseInput */]));
  69481. /**
  69482. * @name TextArea
  69483. * @description
  69484. *
  69485. * `ion-textarea` is used for multi-line text inputs. Ionic still
  69486. * uses an actual `<textarea>` HTML element within the component;
  69487. * however, with Ionic wrapping the native HTML text area element, Ionic
  69488. * is able to better handle the user experience and interactivity.
  69489. *
  69490. * Note that `<ion-textarea>` must load its value from the `value` or
  69491. * `[(ngModel)]` attribute. Unlike the native `<textarea>` element,
  69492. * `<ion-textarea>` does not support loading its value from the
  69493. * textarea's inner content.
  69494. *
  69495. * When requiring only a single-line text input, we recommend using
  69496. * `<ion-input>` instead.
  69497. *
  69498. * @usage
  69499. * ```html
  69500. * <ion-item>
  69501. * <ion-label>Comments</ion-label>
  69502. * <ion-textarea></ion-textarea>
  69503. * </ion-item>
  69504. *
  69505. * <ion-item>
  69506. * <ion-label stacked>Message</ion-label>
  69507. * <ion-textarea [(ngModel)]="msg"></ion-textarea>
  69508. * </ion-item>
  69509. *
  69510. * <ion-item>
  69511. * <ion-label floating>Description</ion-label>
  69512. * <ion-textarea></ion-textarea>
  69513. * </ion-item>
  69514. *
  69515. * <ion-item>
  69516. * <ion-label>Long Description</ion-label>
  69517. * <ion-textarea rows="6" placeholder="enter long description here..."></ion-textarea>
  69518. * </ion-item>
  69519. * ```
  69520. *
  69521. * @demo /docs/demos/src/textarea/
  69522. */
  69523. var SCROLL_ASSIST_SPEED = 0.3;
  69524. function newScrollData() {
  69525. return {
  69526. scrollAmount: 0,
  69527. scrollTo: 0,
  69528. scrollPadding: 0,
  69529. scrollDuration: 0,
  69530. inputSafeY: 0
  69531. };
  69532. }
  69533. /**
  69534. * @hidden
  69535. */
  69536. function getScrollData(inputOffsetTop, inputOffsetHeight, scrollViewDimensions, keyboardHeight, plaformHeight) {
  69537. // compute input's Y values relative to the body
  69538. var inputTop = (inputOffsetTop + scrollViewDimensions.contentTop - scrollViewDimensions.scrollTop);
  69539. var inputBottom = (inputTop + inputOffsetHeight);
  69540. // compute the safe area which is the viewable content area when the soft keyboard is up
  69541. var safeAreaTop = scrollViewDimensions.contentTop;
  69542. var safeAreaHeight = (plaformHeight - keyboardHeight - safeAreaTop) / 2;
  69543. var safeAreaBottom = safeAreaTop + safeAreaHeight;
  69544. // figure out if each edge of teh input is within the safe area
  69545. var inputTopWithinSafeArea = (inputTop >= safeAreaTop && inputTop <= safeAreaBottom);
  69546. var inputTopAboveSafeArea = (inputTop < safeAreaTop);
  69547. var inputTopBelowSafeArea = (inputTop > safeAreaBottom);
  69548. var inputBottomWithinSafeArea = (inputBottom >= safeAreaTop && inputBottom <= safeAreaBottom);
  69549. var inputBottomBelowSafeArea = (inputBottom > safeAreaBottom);
  69550. /*
  69551. Text Input Scroll To Scenarios
  69552. ---------------------------------------
  69553. 1) Input top within safe area, bottom within safe area
  69554. 2) Input top within safe area, bottom below safe area, room to scroll
  69555. 3) Input top above safe area, bottom within safe area, room to scroll
  69556. 4) Input top below safe area, no room to scroll, input smaller than safe area
  69557. 5) Input top within safe area, bottom below safe area, no room to scroll, input smaller than safe area
  69558. 6) Input top within safe area, bottom below safe area, no room to scroll, input larger than safe area
  69559. 7) Input top below safe area, no room to scroll, input larger than safe area
  69560. */
  69561. var scrollData = newScrollData();
  69562. // when auto-scrolling, there also needs to be enough
  69563. // content padding at the bottom of the scroll view
  69564. // always add scroll padding when a text input has focus
  69565. // this allows for the content to scroll above of the keyboard
  69566. // content behind the keyboard would be blank
  69567. // some cases may not need it, but when jumping around it's best
  69568. // to have the padding already rendered so there's no jank
  69569. scrollData.scrollPadding = keyboardHeight;
  69570. if (inputTopWithinSafeArea && inputBottomWithinSafeArea) {
  69571. // Input top within safe area, bottom within safe area
  69572. // no need to scroll to a position, it's good as-is
  69573. return scrollData;
  69574. }
  69575. // looks like we'll have to do some auto-scrolling
  69576. if (inputTopBelowSafeArea || inputBottomBelowSafeArea || inputTopAboveSafeArea) {
  69577. // Input top or bottom below safe area
  69578. // auto scroll the input up so at least the top of it shows
  69579. if (safeAreaHeight > inputOffsetHeight) {
  69580. // safe area height is taller than the input height, so we
  69581. // can bring up the input just enough to show the input bottom
  69582. scrollData.scrollAmount = Math.round(safeAreaBottom - inputBottom);
  69583. }
  69584. else {
  69585. // safe area height is smaller than the input height, so we can
  69586. // only scroll it up so the input top is at the top of the safe area
  69587. // however the input bottom will be below the safe area
  69588. scrollData.scrollAmount = Math.round(safeAreaTop - inputTop);
  69589. }
  69590. scrollData.inputSafeY = -(inputTop - safeAreaTop) + 4;
  69591. if (inputTopAboveSafeArea && scrollData.scrollAmount > inputOffsetHeight) {
  69592. // the input top is above the safe area and we're already scrolling it into place
  69593. // don't let it scroll more than the height of the input
  69594. scrollData.scrollAmount = inputOffsetHeight;
  69595. }
  69596. }
  69597. // figure out where it should scroll to for the best position to the input
  69598. scrollData.scrollTo = (scrollViewDimensions.scrollTop - scrollData.scrollAmount);
  69599. // calculate animation duration
  69600. var distance = Math.abs(scrollData.scrollAmount);
  69601. var duration = distance / SCROLL_ASSIST_SPEED;
  69602. scrollData.scrollDuration = Math.min(400, Math.max(150, duration));
  69603. return scrollData;
  69604. }
  69605. function cloneInputComponent(plt, srcComponentEle, srcNativeInputEle) {
  69606. // Make sure we kill all the clones before creating new ones
  69607. // It is a defensive, removeClone() should do nothing
  69608. // removeClone(plt, srcComponentEle, srcNativeInputEle);
  69609. (void 0) /* assert */;
  69610. // given a native <input> or <textarea> element
  69611. // find its parent wrapping component like <ion-input> or <ion-textarea>
  69612. // then clone the entire component
  69613. if (srcComponentEle) {
  69614. // DOM READ
  69615. var srcTop = srcComponentEle.offsetTop;
  69616. var srcLeft = srcComponentEle.offsetLeft;
  69617. var srcWidth = srcComponentEle.offsetWidth;
  69618. var srcHeight = srcComponentEle.offsetHeight;
  69619. // DOM WRITE
  69620. // not using deep clone so we don't pull in unnecessary nodes
  69621. var clonedComponentEle = srcComponentEle.cloneNode(false);
  69622. var clonedStyle = clonedComponentEle.style;
  69623. clonedComponentEle.classList.add('cloned-input');
  69624. clonedComponentEle.setAttribute('aria-hidden', 'true');
  69625. clonedStyle.pointerEvents = 'none';
  69626. clonedStyle.position = 'absolute';
  69627. clonedStyle.top = srcTop + 'px';
  69628. clonedStyle.left = srcLeft + 'px';
  69629. clonedStyle.width = srcWidth + 'px';
  69630. clonedStyle.height = srcHeight + 'px';
  69631. var clonedNativeInputEle = srcNativeInputEle.cloneNode(false);
  69632. clonedNativeInputEle.value = srcNativeInputEle.value;
  69633. clonedNativeInputEle.tabIndex = -1;
  69634. clonedComponentEle.appendChild(clonedNativeInputEle);
  69635. srcComponentEle.parentNode.appendChild(clonedComponentEle);
  69636. srcComponentEle.style.pointerEvents = 'none';
  69637. }
  69638. srcNativeInputEle.style[plt.Css.transform] = 'scale(0)';
  69639. }
  69640. function removeClone(plt, srcComponentEle, srcNativeInputEle) {
  69641. if (srcComponentEle && srcComponentEle.parentElement) {
  69642. var clonedInputEles = srcComponentEle.parentElement.querySelectorAll('.cloned-input');
  69643. for (var i = 0; i < clonedInputEles.length; i++) {
  69644. clonedInputEles[i].parentNode.removeChild(clonedInputEles[i]);
  69645. }
  69646. srcComponentEle.style.pointerEvents = '';
  69647. }
  69648. srcNativeInputEle.style[plt.Css.transform] = '';
  69649. srcNativeInputEle.style.opacity = '';
  69650. }
  69651. //# sourceMappingURL=input.js.map
  69652. /***/ }),
  69653. /* 194 */
  69654. /***/ (function(module, exports, __webpack_require__) {
  69655. "use strict";
  69656. var __extends = (this && this.__extends) || function (d, b) {
  69657. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  69658. function __() { this.constructor = d; }
  69659. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  69660. };
  69661. var OuterSubscriber_1 = __webpack_require__(6);
  69662. var subscribeToResult_1 = __webpack_require__(5);
  69663. /**
  69664. * Emits the values emitted by the source Observable until a `notifier`
  69665. * Observable emits a value.
  69666. *
  69667. * <span class="informal">Lets values pass until a second Observable,
  69668. * `notifier`, emits something. Then, it completes.</span>
  69669. *
  69670. * <img src="./img/takeUntil.png" width="100%">
  69671. *
  69672. * `takeUntil` subscribes and begins mirroring the source Observable. It also
  69673. * monitors a second Observable, `notifier` that you provide. If the `notifier`
  69674. * emits a value or a complete notification, the output Observable stops
  69675. * mirroring the source Observable and completes.
  69676. *
  69677. * @example <caption>Tick every second until the first click happens</caption>
  69678. * var interval = Rx.Observable.interval(1000);
  69679. * var clicks = Rx.Observable.fromEvent(document, 'click');
  69680. * var result = interval.takeUntil(clicks);
  69681. * result.subscribe(x => console.log(x));
  69682. *
  69683. * @see {@link take}
  69684. * @see {@link takeLast}
  69685. * @see {@link takeWhile}
  69686. * @see {@link skip}
  69687. *
  69688. * @param {Observable} notifier The Observable whose first emitted value will
  69689. * cause the output Observable of `takeUntil` to stop emitting values from the
  69690. * source Observable.
  69691. * @return {Observable<T>} An Observable that emits the values from the source
  69692. * Observable until such time as `notifier` emits its first value.
  69693. * @method takeUntil
  69694. * @owner Observable
  69695. */
  69696. function takeUntil(notifier) {
  69697. return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
  69698. }
  69699. exports.takeUntil = takeUntil;
  69700. var TakeUntilOperator = (function () {
  69701. function TakeUntilOperator(notifier) {
  69702. this.notifier = notifier;
  69703. }
  69704. TakeUntilOperator.prototype.call = function (subscriber, source) {
  69705. return source.subscribe(new TakeUntilSubscriber(subscriber, this.notifier));
  69706. };
  69707. return TakeUntilOperator;
  69708. }());
  69709. /**
  69710. * We need this JSDoc comment for affecting ESDoc.
  69711. * @ignore
  69712. * @extends {Ignored}
  69713. */
  69714. var TakeUntilSubscriber = (function (_super) {
  69715. __extends(TakeUntilSubscriber, _super);
  69716. function TakeUntilSubscriber(destination, notifier) {
  69717. _super.call(this, destination);
  69718. this.notifier = notifier;
  69719. this.add(subscribeToResult_1.subscribeToResult(this, notifier));
  69720. }
  69721. TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  69722. this.complete();
  69723. };
  69724. TakeUntilSubscriber.prototype.notifyComplete = function () {
  69725. // noop
  69726. };
  69727. return TakeUntilSubscriber;
  69728. }(OuterSubscriber_1.OuterSubscriber));
  69729. //# sourceMappingURL=takeUntil.js.map
  69730. /***/ }),
  69731. /* 195 */
  69732. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  69733. "use strict";
  69734. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemContent; });
  69735. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  69736. /**
  69737. * @hidden
  69738. */
  69739. var ItemContent = (function () {
  69740. function ItemContent() {
  69741. }
  69742. ItemContent.decorators = [
  69743. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  69744. selector: 'ion-item,[ion-item]',
  69745. host: {
  69746. 'class': 'item-block'
  69747. }
  69748. },] },
  69749. ];
  69750. /** @nocollapse */
  69751. ItemContent.ctorParameters = function () { return []; };
  69752. return ItemContent;
  69753. }());
  69754. //# sourceMappingURL=item-content.js.map
  69755. /***/ }),
  69756. /* 196 */
  69757. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  69758. "use strict";
  69759. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemDivider; });
  69760. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  69761. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  69762. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  69763. var __extends = (this && this.__extends) || (function () {
  69764. var extendStatics = Object.setPrototypeOf ||
  69765. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  69766. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  69767. return function (d, b) {
  69768. extendStatics(d, b);
  69769. function __() { this.constructor = d; }
  69770. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  69771. };
  69772. })();
  69773. /**
  69774. * @hidden
  69775. */
  69776. var ItemDivider = (function (_super) {
  69777. __extends(ItemDivider, _super);
  69778. function ItemDivider(config, elementRef, renderer) {
  69779. return _super.call(this, config, elementRef, renderer, 'item-divider') || this;
  69780. }
  69781. ItemDivider.decorators = [
  69782. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  69783. selector: 'ion-item-divider',
  69784. host: {
  69785. 'class': 'item-divider'
  69786. }
  69787. },] },
  69788. ];
  69789. /** @nocollapse */
  69790. ItemDivider.ctorParameters = function () { return [
  69791. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  69792. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  69793. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  69794. ]; };
  69795. return ItemDivider;
  69796. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  69797. //# sourceMappingURL=item-divider.js.map
  69798. /***/ }),
  69799. /* 197 */
  69800. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  69801. "use strict";
  69802. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemGroup; });
  69803. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  69804. /**
  69805. * @hidden
  69806. */
  69807. var ItemGroup = (function () {
  69808. function ItemGroup() {
  69809. }
  69810. ItemGroup.decorators = [
  69811. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  69812. selector: 'ion-item-group'
  69813. },] },
  69814. ];
  69815. /** @nocollapse */
  69816. ItemGroup.ctorParameters = function () { return []; };
  69817. return ItemGroup;
  69818. }());
  69819. //# sourceMappingURL=item-group.js.map
  69820. /***/ }),
  69821. /* 198 */
  69822. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  69823. "use strict";
  69824. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemSliding; });
  69825. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  69826. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  69827. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__item__ = __webpack_require__(28);
  69828. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__list_list__ = __webpack_require__(108);
  69829. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_platform__ = __webpack_require__(7);
  69830. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__item_options__ = __webpack_require__(107);
  69831. var SWIPE_MARGIN = 30;
  69832. var ELASTIC_FACTOR = 0.55;
  69833. var ITEM_SIDE_FLAG_NONE = 0;
  69834. var ITEM_SIDE_FLAG_LEFT = 1 << 0;
  69835. var ITEM_SIDE_FLAG_RIGHT = 1 << 1;
  69836. var ITEM_SIDE_FLAG_BOTH = ITEM_SIDE_FLAG_LEFT | ITEM_SIDE_FLAG_RIGHT;
  69837. /**
  69838. * @name ItemSliding
  69839. * @description
  69840. * A sliding item is a list item that can be swiped to reveal buttons. It requires
  69841. * an [Item](../Item) component as a child and a [List](../../list/List) component as
  69842. * a parent. All buttons to reveal can be placed in the `<ion-item-options>` element.
  69843. *
  69844. * @usage
  69845. * ```html
  69846. * <ion-list>
  69847. * <ion-item-sliding #item>
  69848. * <ion-item>
  69849. * Item
  69850. * </ion-item>
  69851. * <ion-item-options side="left">
  69852. * <button ion-button (click)="favorite(item)">Favorite</button>
  69853. * <button ion-button color="danger" (click)="share(item)">Share</button>
  69854. * </ion-item-options>
  69855. *
  69856. * <ion-item-options side="right">
  69857. * <button ion-button (click)="unread(item)">Unread</button>
  69858. * </ion-item-options>
  69859. * </ion-item-sliding>
  69860. * </ion-list>
  69861. * ```
  69862. *
  69863. * ### Swipe Direction
  69864. * By default, the buttons are revealed when the sliding item is swiped from right to left,
  69865. * so the buttons are placed in the right side. But it's also possible to reveal them
  69866. * in the right side (sliding from left to right) by setting the `side` attribute
  69867. * on the `ion-item-options` element. Up to 2 `ion-item-options` can used at the same time
  69868. * in order to reveal two different sets of buttons depending the swipping direction.
  69869. *
  69870. * ```html
  69871. * <ion-item-options side="right">
  69872. * <button ion-button (click)="archive(item)">
  69873. * <ion-icon name="archive"></ion-icon>
  69874. * Archive
  69875. * </button>
  69876. * </ion-item-options>
  69877. *
  69878. * <ion-item-options side="left">
  69879. * <button ion-button (click)="archive(item)">
  69880. * <ion-icon name="archive"></ion-icon>
  69881. * Archive
  69882. * </button>
  69883. * </ion-item-options>
  69884. * ```
  69885. *
  69886. * ### Listening for events (ionDrag) and (ionSwipe)
  69887. * It's possible to know the current relative position of the sliding item by subscribing
  69888. * to the (ionDrag)` event.
  69889. *
  69890. * ```html
  69891. * <ion-item-sliding (ionDrag)="logDrag($event)">
  69892. * <ion-item>Item</ion-item>
  69893. * <ion-item-options>
  69894. * <button ion-button>Favorite</button>
  69895. * </ion-item-options>
  69896. * </ion-item-sliding>
  69897. * ```
  69898. *
  69899. * ### Button Layout
  69900. * If an icon is placed with text in the option button, by default it will
  69901. * display the icon on top of the text. This can be changed to display the icon
  69902. * to the left of the text by setting `icon-start` as an attribute on the
  69903. * `<ion-item-options>` element.
  69904. *
  69905. * ```html
  69906. * <ion-item-options icon-start>
  69907. * <button ion-button (click)="archive(item)">
  69908. * <ion-icon name="archive"></ion-icon>
  69909. * Archive
  69910. * </button>
  69911. * </ion-item-options>
  69912. *
  69913. * ```
  69914. *
  69915. * ### Expandable Options
  69916. *
  69917. * Options can be expanded to take up the full width of the item if you swipe past
  69918. * a certain point. This can be combined with the `ionSwipe` event to call methods
  69919. * on the class.
  69920. *
  69921. * ```html
  69922. *
  69923. * <ion-item-sliding (ionSwipe)="delete(item)">
  69924. * <ion-item>Item</ion-item>
  69925. * <ion-item-options>
  69926. * <button ion-button expandable (click)="delete(item)">Delete</button>
  69927. * </ion-item-options>
  69928. * </ion-item-sliding>
  69929. * ```
  69930. *
  69931. * We can call `delete` by either clicking the button, or by doing a full swipe on the item.
  69932. *
  69933. * @demo /docs/demos/src/item-sliding/
  69934. * @see {@link /docs/components#lists List Component Docs}
  69935. * @see {@link ../Item Item API Docs}
  69936. * @see {@link ../../list/List List API Docs}
  69937. */
  69938. var ItemSliding = (function () {
  69939. function ItemSliding(list, _plt, _renderer, _elementRef, _zone) {
  69940. this._plt = _plt;
  69941. this._renderer = _renderer;
  69942. this._elementRef = _elementRef;
  69943. this._zone = _zone;
  69944. this._openAmount = 0;
  69945. this._startX = 0;
  69946. this._optsWidthRightSide = 0;
  69947. this._optsWidthLeftSide = 0;
  69948. this._tmr = null;
  69949. this._optsDirty = true;
  69950. this._state = 2 /* Disabled */;
  69951. /**
  69952. * @output {event} Emitted when the sliding position changes.
  69953. * It reports the relative position.
  69954. *
  69955. * ```ts
  69956. * ondrag(item) {
  69957. * let percent = item.getSlidingPercent();
  69958. * if (percent > 0) {
  69959. * // positive
  69960. * console.log('right side');
  69961. * } else {
  69962. * // negative
  69963. * console.log('left side');
  69964. * }
  69965. * if (Math.abs(percent) > 1) {
  69966. * console.log('overscroll');
  69967. * }
  69968. * }
  69969. * ```
  69970. *
  69971. */
  69972. this.ionDrag = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  69973. list && list.containsSlidingItem(true);
  69974. _elementRef.nativeElement.$ionComponent = this;
  69975. this.setElementClass('item-wrapper', true);
  69976. }
  69977. Object.defineProperty(ItemSliding.prototype, "_itemOptions", {
  69978. set: function (itemOptions) {
  69979. var sides = 0;
  69980. // Reset left and right options in case they were removed
  69981. this._leftOptions = this._rightOptions = null;
  69982. for (var _i = 0, _a = itemOptions.toArray(); _i < _a.length; _i++) {
  69983. var item = _a[_i];
  69984. if (item.isRightSide()) {
  69985. this._rightOptions = item;
  69986. sides |= ITEM_SIDE_FLAG_RIGHT;
  69987. }
  69988. else {
  69989. this._leftOptions = item;
  69990. sides |= ITEM_SIDE_FLAG_LEFT;
  69991. }
  69992. }
  69993. this._optsDirty = true;
  69994. this._sides = sides;
  69995. },
  69996. enumerable: true,
  69997. configurable: true
  69998. });
  69999. /**
  70000. * @hidden
  70001. */
  70002. ItemSliding.prototype.getOpenAmount = function () {
  70003. return this._openAmount;
  70004. };
  70005. /**
  70006. * @hidden
  70007. */
  70008. ItemSliding.prototype.getSlidingPercent = function () {
  70009. var openAmount = this._openAmount;
  70010. if (openAmount > 0) {
  70011. return openAmount / this._optsWidthRightSide;
  70012. }
  70013. else if (openAmount < 0) {
  70014. return openAmount / this._optsWidthLeftSide;
  70015. }
  70016. else {
  70017. return 0;
  70018. }
  70019. };
  70020. /**
  70021. * @hidden
  70022. */
  70023. ItemSliding.prototype.startSliding = function (startX) {
  70024. if (this._tmr) {
  70025. this._plt.cancelTimeout(this._tmr);
  70026. this._tmr = null;
  70027. }
  70028. if (this._openAmount === 0) {
  70029. this._optsDirty = true;
  70030. this._setState(4 /* Enabled */);
  70031. }
  70032. this._startX = startX + this._openAmount;
  70033. this.item.setElementStyle(this._plt.Css.transition, 'none');
  70034. };
  70035. /**
  70036. * @hidden
  70037. */
  70038. ItemSliding.prototype.moveSliding = function (x) {
  70039. if (this._optsDirty) {
  70040. this.calculateOptsWidth();
  70041. return;
  70042. }
  70043. var openAmount = (this._startX - x);
  70044. switch (this._sides) {
  70045. case ITEM_SIDE_FLAG_RIGHT:
  70046. openAmount = Math.max(0, openAmount);
  70047. break;
  70048. case ITEM_SIDE_FLAG_LEFT:
  70049. openAmount = Math.min(0, openAmount);
  70050. break;
  70051. case ITEM_SIDE_FLAG_BOTH: break;
  70052. case ITEM_SIDE_FLAG_NONE: return;
  70053. default:
  70054. (void 0) /* assert */;
  70055. break;
  70056. }
  70057. if (openAmount > this._optsWidthRightSide) {
  70058. var optsWidth = this._optsWidthRightSide;
  70059. openAmount = optsWidth + (openAmount - optsWidth) * ELASTIC_FACTOR;
  70060. }
  70061. else if (openAmount < -this._optsWidthLeftSide) {
  70062. var optsWidth = -this._optsWidthLeftSide;
  70063. openAmount = optsWidth + (openAmount - optsWidth) * ELASTIC_FACTOR;
  70064. }
  70065. this._setOpenAmount(openAmount, false);
  70066. return openAmount;
  70067. };
  70068. /**
  70069. * @hidden
  70070. */
  70071. ItemSliding.prototype.endSliding = function (velocity) {
  70072. var restingPoint = (this._openAmount > 0)
  70073. ? this._optsWidthRightSide
  70074. : -this._optsWidthLeftSide;
  70075. // Check if the drag didn't clear the buttons mid-point
  70076. // and we aren't moving fast enough to swipe open
  70077. var isResetDirection = (this._openAmount > 0) === !(velocity < 0);
  70078. var isMovingFast = Math.abs(velocity) > 0.3;
  70079. var isOnCloseZone = Math.abs(this._openAmount) < Math.abs(restingPoint / 2);
  70080. if (Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["t" /* swipeShouldReset */])(isResetDirection, isMovingFast, isOnCloseZone)) {
  70081. restingPoint = 0;
  70082. }
  70083. this.fireSwipeEvent();
  70084. this._setOpenAmount(restingPoint, true);
  70085. return restingPoint;
  70086. };
  70087. /**
  70088. * @hidden
  70089. */
  70090. ItemSliding.prototype.fireSwipeEvent = function () {
  70091. var _this = this;
  70092. if (this._state & 32 /* SwipeRight */) {
  70093. this._zone.run(function () { return _this._rightOptions.ionSwipe.emit(_this); });
  70094. }
  70095. else if (this._state & 64 /* SwipeLeft */) {
  70096. this._zone.run(function () { return _this._leftOptions.ionSwipe.emit(_this); });
  70097. }
  70098. };
  70099. /**
  70100. * @hidden
  70101. */
  70102. ItemSliding.prototype.calculateOptsWidth = function () {
  70103. if (!this._optsDirty) {
  70104. return;
  70105. }
  70106. this._optsWidthRightSide = 0;
  70107. if (this._rightOptions) {
  70108. this._optsWidthRightSide = this._rightOptions.width();
  70109. (void 0) /* assert */;
  70110. }
  70111. this._optsWidthLeftSide = 0;
  70112. if (this._leftOptions) {
  70113. this._optsWidthLeftSide = this._leftOptions.width();
  70114. (void 0) /* assert */;
  70115. }
  70116. this._optsDirty = false;
  70117. };
  70118. ItemSliding.prototype._setOpenAmount = function (openAmount, isFinal) {
  70119. var _this = this;
  70120. var platform = this._plt;
  70121. if (this._tmr) {
  70122. platform.cancelTimeout(this._tmr);
  70123. this._tmr = null;
  70124. }
  70125. this._openAmount = openAmount;
  70126. if (isFinal) {
  70127. this.item.setElementStyle(platform.Css.transition, '');
  70128. }
  70129. if (openAmount > 0) {
  70130. var state = (openAmount >= (this._optsWidthRightSide + SWIPE_MARGIN))
  70131. ? 8 /* Right */ | 32 /* SwipeRight */
  70132. : 8 /* Right */;
  70133. this._setState(state);
  70134. }
  70135. else if (openAmount < 0) {
  70136. var state_1 = (openAmount <= (-this._optsWidthLeftSide - SWIPE_MARGIN))
  70137. ? 16 /* Left */ | 64 /* SwipeLeft */
  70138. : 16 /* Left */;
  70139. this._setState(state_1);
  70140. }
  70141. else {
  70142. (void 0) /* assert */;
  70143. this._tmr = platform.timeout(function () {
  70144. _this._setState(2 /* Disabled */);
  70145. _this._tmr = null;
  70146. }, 600);
  70147. this.item.setElementStyle(platform.Css.transform, '');
  70148. return;
  70149. }
  70150. this.item.setElementStyle(platform.Css.transform, "translate3d(" + -openAmount + "px,0,0)");
  70151. var ionDrag = this.ionDrag;
  70152. if (ionDrag.observers.length > 0) {
  70153. ionDrag.emit(this);
  70154. }
  70155. };
  70156. ItemSliding.prototype._setState = function (state) {
  70157. if (state === this._state) {
  70158. return;
  70159. }
  70160. this.setElementClass('active-slide', (state !== 2 /* Disabled */));
  70161. this.setElementClass('active-options-right', !!(state & 8 /* Right */));
  70162. this.setElementClass('active-options-left', !!(state & 16 /* Left */));
  70163. this.setElementClass('active-swipe-right', !!(state & 32 /* SwipeRight */));
  70164. this.setElementClass('active-swipe-left', !!(state & 64 /* SwipeLeft */));
  70165. this._state = state;
  70166. };
  70167. /**
  70168. * Close the sliding item. Items can also be closed from the [List](../../list/List).
  70169. *
  70170. * The sliding item can be closed by grabbing a reference to `ItemSliding`. In the
  70171. * below example, the template reference variable `slidingItem` is placed on the element
  70172. * and passed to the `share` method.
  70173. *
  70174. * ```html
  70175. * <ion-list>
  70176. * <ion-item-sliding #slidingItem>
  70177. * <ion-item>
  70178. * Item
  70179. * </ion-item>
  70180. * <ion-item-options>
  70181. * <button ion-button (click)="share(slidingItem)">Share</button>
  70182. * </ion-item-options>
  70183. * </ion-item-sliding>
  70184. * </ion-list>
  70185. * ```
  70186. *
  70187. * ```ts
  70188. * import { Component } from '@angular/core';
  70189. * import { ItemSliding } from 'ionic-angular';
  70190. *
  70191. * @Component({...})
  70192. * export class MyClass {
  70193. * constructor() { }
  70194. *
  70195. * share(slidingItem: ItemSliding) {
  70196. * slidingItem.close();
  70197. * }
  70198. * }
  70199. * ```
  70200. */
  70201. ItemSliding.prototype.close = function () {
  70202. this._setOpenAmount(0, true);
  70203. };
  70204. /**
  70205. * @hidden
  70206. */
  70207. ItemSliding.prototype.setElementClass = function (cssClass, shouldAdd) {
  70208. this._renderer.setElementClass(this._elementRef.nativeElement, cssClass, shouldAdd);
  70209. };
  70210. ItemSliding.decorators = [
  70211. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  70212. selector: 'ion-item-sliding',
  70213. template: "\n <ng-content select=\"ion-item,[ion-item]\"></ng-content>\n <ng-content select=\"ion-item-options\"></ng-content>\n ",
  70214. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  70215. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None
  70216. },] },
  70217. ];
  70218. /** @nocollapse */
  70219. ItemSliding.ctorParameters = function () { return [
  70220. { type: __WEBPACK_IMPORTED_MODULE_3__list_list__["a" /* List */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  70221. { type: __WEBPACK_IMPORTED_MODULE_4__platform_platform__["a" /* Platform */], },
  70222. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  70223. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  70224. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  70225. ]; };
  70226. ItemSliding.propDecorators = {
  70227. 'item': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_2__item__["a" /* Item */],] },],
  70228. 'ionDrag': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  70229. '_itemOptions': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return __WEBPACK_IMPORTED_MODULE_5__item_options__["a" /* ItemOptions */]; }),] },],
  70230. };
  70231. return ItemSliding;
  70232. }());
  70233. //# sourceMappingURL=item-sliding.js.map
  70234. /***/ }),
  70235. /* 199 */
  70236. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  70237. "use strict";
  70238. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Reorder; });
  70239. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  70240. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__item_reorder_util__ = __webpack_require__(183);
  70241. /**
  70242. * @hidden
  70243. */
  70244. var Reorder = (function () {
  70245. function Reorder(elementRef) {
  70246. this.elementRef = elementRef;
  70247. elementRef.nativeElement['$ionComponent'] = this;
  70248. }
  70249. Reorder.prototype.getReorderNode = function () {
  70250. return Object(__WEBPACK_IMPORTED_MODULE_1__item_reorder_util__["a" /* findReorderItem */])(this.elementRef.nativeElement, null);
  70251. };
  70252. Reorder.prototype.onClick = function (ev) {
  70253. // Stop propagation if click event reaches ion-reorder
  70254. ev.preventDefault();
  70255. ev.stopPropagation();
  70256. };
  70257. Reorder.decorators = [
  70258. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  70259. selector: 'ion-reorder',
  70260. template: "<ion-icon name=\"reorder\"></ion-icon>"
  70261. },] },
  70262. ];
  70263. /** @nocollapse */
  70264. Reorder.ctorParameters = function () { return [
  70265. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  70266. ]; };
  70267. Reorder.propDecorators = {
  70268. 'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click', ['$event'],] },],
  70269. };
  70270. return Reorder;
  70271. }());
  70272. //# sourceMappingURL=reorder.js.map
  70273. /***/ }),
  70274. /* 200 */
  70275. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  70276. "use strict";
  70277. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Loading; });
  70278. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  70279. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app_constants__ = __webpack_require__(47);
  70280. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__loading_component__ = __webpack_require__(110);
  70281. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__loading_transitions__ = __webpack_require__(371);
  70282. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__ = __webpack_require__(9);
  70283. var __extends = (this && this.__extends) || (function () {
  70284. var extendStatics = Object.setPrototypeOf ||
  70285. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  70286. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  70287. return function (d, b) {
  70288. extendStatics(d, b);
  70289. function __() { this.constructor = d; }
  70290. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  70291. };
  70292. })();
  70293. /**
  70294. * @hidden
  70295. */
  70296. var Loading = (function (_super) {
  70297. __extends(Loading, _super);
  70298. function Loading(app, opts, config) {
  70299. if (opts === void 0) { opts = {}; }
  70300. var _this = this;
  70301. opts.showBackdrop = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.showBackdrop) ? !!opts.showBackdrop : true;
  70302. opts.enableBackdropDismiss = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : false;
  70303. opts.dismissOnPageChange = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.dismissOnPageChange) ? !!opts.dismissOnPageChange : false;
  70304. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_2__loading_component__["a" /* LoadingCmp */], opts, null) || this;
  70305. _this._app = app;
  70306. _this.isOverlay = true;
  70307. config.setTransition('loading-pop-in', __WEBPACK_IMPORTED_MODULE_3__loading_transitions__["c" /* LoadingPopIn */]);
  70308. config.setTransition('loading-pop-out', __WEBPACK_IMPORTED_MODULE_3__loading_transitions__["d" /* LoadingPopOut */]);
  70309. config.setTransition('loading-md-pop-in', __WEBPACK_IMPORTED_MODULE_3__loading_transitions__["a" /* LoadingMdPopIn */]);
  70310. config.setTransition('loading-md-pop-out', __WEBPACK_IMPORTED_MODULE_3__loading_transitions__["b" /* LoadingMdPopOut */]);
  70311. config.setTransition('loading-wp-pop-in', __WEBPACK_IMPORTED_MODULE_3__loading_transitions__["e" /* LoadingWpPopIn */]);
  70312. config.setTransition('loading-wp-pop-out', __WEBPACK_IMPORTED_MODULE_3__loading_transitions__["f" /* LoadingWpPopOut */]);
  70313. return _this;
  70314. }
  70315. /**
  70316. * @hidden
  70317. */
  70318. Loading.prototype.getTransitionName = function (direction) {
  70319. var key = (direction === 'back' ? 'loadingLeave' : 'loadingEnter');
  70320. return this._nav && this._nav.config.get(key);
  70321. };
  70322. /**
  70323. * @param {string} content sets the html content for the loading indicator.
  70324. */
  70325. Loading.prototype.setContent = function (content) {
  70326. this.data.content = content;
  70327. return this;
  70328. };
  70329. /**
  70330. * @param {string} spinner sets the name of the SVG spinner for the loading indicator.
  70331. */
  70332. Loading.prototype.setSpinner = function (spinner) {
  70333. this.data.spinner = spinner;
  70334. return this;
  70335. };
  70336. /**
  70337. * @param {string} cssClass sets additional classes for custom styles, separated by spaces.
  70338. */
  70339. Loading.prototype.setCssClass = function (cssClass) {
  70340. this.data.cssClass = cssClass;
  70341. return this;
  70342. };
  70343. /**
  70344. * @param {boolean} showBackdrop sets whether to show the backdrop.
  70345. */
  70346. Loading.prototype.setShowBackdrop = function (showBackdrop) {
  70347. this.data.showBackdrop = showBackdrop;
  70348. return this;
  70349. };
  70350. /**
  70351. * @param {number} dur how many milliseconds to wait before hiding the indicator.
  70352. */
  70353. Loading.prototype.setDuration = function (dur) {
  70354. this.data.duration = dur;
  70355. return this;
  70356. };
  70357. /**
  70358. * Present the loading instance.
  70359. *
  70360. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  70361. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  70362. */
  70363. Loading.prototype.present = function (navOptions) {
  70364. if (navOptions === void 0) { navOptions = {}; }
  70365. return this._app.present(this, navOptions, __WEBPACK_IMPORTED_MODULE_1__app_app_constants__["b" /* PORTAL_LOADING */]);
  70366. };
  70367. /**
  70368. * Dismiss all loading components which have been presented.
  70369. */
  70370. Loading.prototype.dismissAll = function () {
  70371. this._nav && this._nav.popAll();
  70372. };
  70373. return Loading;
  70374. }(__WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__["a" /* ViewController */]));
  70375. //# sourceMappingURL=loading.js.map
  70376. /***/ }),
  70377. /* 201 */
  70378. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  70379. "use strict";
  70380. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoadingController; });
  70381. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  70382. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  70383. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  70384. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__loading__ = __webpack_require__(200);
  70385. /**
  70386. * @name LoadingController
  70387. * @description
  70388. * An overlay that can be used to indicate activity while blocking user
  70389. * interaction. The loading indicator appears on top of the app's content,
  70390. * and can be dismissed by the app to resume user interaction with
  70391. * the app. It includes an optional backdrop, which can be disabled
  70392. * by setting `showBackdrop: false` upon creation.
  70393. *
  70394. * ### Creating
  70395. * You can pass all of the loading options in the first argument of
  70396. * the create method: `create(opts)`. The spinner name should be
  70397. * passed in the `spinner` property, and any optional HTML can be passed
  70398. * in the `content` property. If you do not pass a value to `spinner`
  70399. * the loading indicator will use the spinner specified by the mode. To
  70400. * set the spinner name across the app, set the value of `loadingSpinner`
  70401. * in your app's config. To hide the spinner, set `loadingSpinner: 'hide'`
  70402. * in the app's config or pass `spinner: 'hide'` in the loading
  70403. * options. See the [create](#create) method below for all available options.
  70404. *
  70405. * ### Dismissing
  70406. * The loading indicator can be dismissed automatically after a specific
  70407. * amount of time by passing the number of milliseconds to display it in
  70408. * the `duration` of the loading options. By default the loading indicator
  70409. * will show even during page changes, but this can be disabled by setting
  70410. * `dismissOnPageChange` to `true`. To dismiss the loading indicator after
  70411. * creation, call the `dismiss()` method on the Loading instance. The
  70412. * `onDidDismiss` function can be called to perform an action after the loading
  70413. * indicator is dismissed.
  70414. *
  70415. * >Note that after the component is dismissed, it will not be usable anymore
  70416. * and another one must be created. This can be avoided by wrapping the
  70417. * creation and presentation of the component in a reusable function as shown
  70418. * in the `usage` section below.
  70419. *
  70420. * ### Limitations
  70421. * The element is styled to appear on top of other content by setting its
  70422. * `z-index` property. You must ensure no element has a stacking context with
  70423. * a higher `z-index` than this element.
  70424. *
  70425. * @usage
  70426. * ```ts
  70427. * import { LoadingController } from 'ionic-angular';
  70428. *
  70429. * constructor(public loadingCtrl: LoadingController) { }
  70430. *
  70431. * presentLoadingDefault() {
  70432. * const loading = this.loadingCtrl.create({
  70433. * content: 'Please wait...'
  70434. * });
  70435. *
  70436. * loading.present();
  70437. *
  70438. * setTimeout(() => {
  70439. * loading.dismiss();
  70440. * }, 5000);
  70441. * }
  70442. *
  70443. * presentLoadingCustom() {
  70444. * const loading = this.loadingCtrl.create({
  70445. * spinner: 'hide',
  70446. * content: `
  70447. * <div class="custom-spinner-container">
  70448. * <div class="custom-spinner-box"></div>
  70449. * </div>`,
  70450. * duration: 5000
  70451. * });
  70452. *
  70453. * loading.onDidDismiss(() => {
  70454. * console.log('Dismissed loading');
  70455. * });
  70456. *
  70457. * loading.present();
  70458. * }
  70459. *
  70460. * presentLoadingText() {
  70461. * const loading = this.loadingCtrl.create({
  70462. * spinner: 'hide',
  70463. * content: 'Loading Please Wait...'
  70464. * });
  70465. *
  70466. * loading.present();
  70467. *
  70468. * setTimeout(() => {
  70469. * this.nav.push(Page2);
  70470. * }, 1000);
  70471. *
  70472. * setTimeout(() => {
  70473. * loading.dismiss();
  70474. * }, 5000);
  70475. * }
  70476. * ```
  70477. * @advanced
  70478. *
  70479. * Loading options
  70480. *
  70481. * | Option | Type | Description |
  70482. * |-----------------------|------------|------------------------------------------------------------------------------------------------------------------|
  70483. * | spinner |`string` | The name of the SVG spinner for the loading indicator. |
  70484. * | content |`string` | The html content for the loading indicator. |
  70485. * | cssClass |`string` | Additional classes for custom styles, separated by spaces. |
  70486. * | showBackdrop |`boolean` | Whether to show the backdrop. Default true. |
  70487. * | enableBackdropDismiss | `boolean` | Whether the loading indicator should be dismissed by tapping the backdrop. Default false. |
  70488. * | dismissOnPageChange |`boolean` | Whether to dismiss the indicator when navigating to a new page. Default false. |
  70489. * | duration |`number` | How many milliseconds to wait before hiding the indicator. By default, it will show until `dismiss()` is called. |
  70490. *
  70491. * @demo /docs/demos/src/loading/
  70492. * @see {@link /docs/api/components/spinner/Spinner Spinner API Docs}
  70493. */
  70494. var LoadingController = (function () {
  70495. function LoadingController(_app, config) {
  70496. this._app = _app;
  70497. this.config = config;
  70498. }
  70499. /**
  70500. * Create a loading indicator. See below for options.
  70501. * @param {LoadingOptions} [opts] Loading options
  70502. * @returns {Loading} Returns a Loading Instance
  70503. */
  70504. LoadingController.prototype.create = function (opts) {
  70505. if (opts === void 0) { opts = {}; }
  70506. return new __WEBPACK_IMPORTED_MODULE_3__loading__["a" /* Loading */](this._app, opts, this.config);
  70507. };
  70508. LoadingController.decorators = [
  70509. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  70510. ];
  70511. /** @nocollapse */
  70512. LoadingController.ctorParameters = function () { return [
  70513. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  70514. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  70515. ]; };
  70516. return LoadingController;
  70517. }());
  70518. //# sourceMappingURL=loading-controller.js.map
  70519. /***/ }),
  70520. /* 202 */
  70521. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  70522. "use strict";
  70523. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Menu; });
  70524. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  70525. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  70526. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__backdrop_backdrop__ = __webpack_require__(97);
  70527. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  70528. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__content_content__ = __webpack_require__(31);
  70529. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__platform_dom_controller__ = __webpack_require__(15);
  70530. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__gestures_gesture_controller__ = __webpack_require__(13);
  70531. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_util__ = __webpack_require__(3);
  70532. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__platform_keyboard__ = __webpack_require__(50);
  70533. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__menu_gestures__ = __webpack_require__(372);
  70534. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__app_menu_controller__ = __webpack_require__(41);
  70535. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__nav_nav__ = __webpack_require__(111);
  70536. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__platform_platform__ = __webpack_require__(7);
  70537. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__gestures_ui_event_manager__ = __webpack_require__(36);
  70538. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__split_pane_split_pane__ = __webpack_require__(52);
  70539. /**
  70540. * @name Menu
  70541. * @description
  70542. * The Menu component is a navigation drawer that slides in from the side of the current
  70543. * view. By default, it slides in from the left, but the side can be overridden. The menu
  70544. * will be displayed differently based on the mode, however the display type can be changed
  70545. * to any of the available [menu types](#menu-types). The menu element should be a sibling
  70546. * to the app's content element. There can be any number of menus attached to the content.
  70547. * These can be controlled from the templates, or programmatically using the [MenuController](../../app/MenuController).
  70548. *
  70549. * @usage
  70550. *
  70551. * ```html
  70552. * <ion-menu [content]="mycontent">
  70553. * <ion-content>
  70554. * <ion-list>
  70555. * <p>some menu content, could be list items</p>
  70556. * </ion-list>
  70557. * </ion-content>
  70558. * </ion-menu>
  70559. *
  70560. * <ion-nav #mycontent [root]="rootPage"></ion-nav>
  70561. * ```
  70562. *
  70563. * To add a menu to an app, the `<ion-menu>` element should be added as a sibling to the `ion-nav` it will belongs
  70564. * to. A [local variable](https://angular.io/docs/ts/latest/guide/user-input.html#local-variables)
  70565. * should be added to the `ion-nav` and passed to the `ion-menu`s `content` property.
  70566. *
  70567. * This tells the menu what it is bound to and what element to watch for gestures.
  70568. * In the below example, `content` is using [property binding](https://angular.io/docs/ts/latest/guide/template-syntax.html#!#property-binding)
  70569. * because `mycontent` is a reference to the `<ion-nav>` element, and not a string.
  70570. *
  70571. *
  70572. * ### Opening/Closing Menus
  70573. *
  70574. * There are several ways to open or close a menu. The menu can be **toggled** open or closed
  70575. * from the template using the [MenuToggle](../MenuToggle) directive. It can also be
  70576. * **closed** from the template using the [MenuClose](../MenuClose) directive. To display a menu
  70577. * programmatically, inject the [MenuController](../MenuController) provider and call any of the
  70578. * `MenuController` methods.
  70579. *
  70580. *
  70581. * ### Menu Types
  70582. *
  70583. * The menu supports several display types: `overlay`, `reveal` and `push`. By default,
  70584. * it will use the correct type based on the mode, but this can be changed. The default
  70585. * type for both Material Design and Windows mode is `overlay`, and `reveal` is the default
  70586. * type for iOS mode. The menu type can be changed in the app's [config](../../config/Config)
  70587. * via the `menuType` property, or passed in the `type` property on the `<ion-menu>` element.
  70588. * See [usage](#usage) below for examples of changing the menu type.
  70589. *
  70590. *
  70591. * ### Navigation Bar Behavior
  70592. *
  70593. * If a [MenuToggle](../MenuToggle) button is added to the [Navbar](../../navbar/Navbar) of
  70594. * a page, the button will only appear when the page it's in is currently a root page. The
  70595. * root page is the initial page loaded in the app, or a page that has been set as the root
  70596. * using the [setRoot](../../nav/NavController/#setRoot) method on the [NavController](../../nav/NavController).
  70597. *
  70598. * For example, say the application has two pages, `Page1` and `Page2`, and both have a
  70599. * `MenuToggle` button in their navigation bars. Assume the initial page loaded into the app
  70600. * is `Page1`, making it the root page. `Page1` will display the `MenuToggle` button, but once
  70601. * `Page2` is pushed onto the navigation stack, the `MenuToggle` will not be displayed.
  70602. *
  70603. *
  70604. * ### Persistent Menus
  70605. *
  70606. * Persistent menus display the [MenuToggle](../MenuToggle) button in the [Navbar](../../navbar/Navbar)
  70607. * on all pages in the navigation stack. To make a menu persistent set `persistent` to `true` on the
  70608. * `<ion-menu>` element. Note that this will only affect the `MenuToggle` button in the `Navbar` attached
  70609. * to the `Menu` with `persistent` set to true, any other `MenuToggle` buttons will not be affected.
  70610. * ### Menu Side
  70611. *
  70612. * By default, menus slide in from the left, but this can be overridden by passing `right`
  70613. * to the `side` property:
  70614. *
  70615. * ```html
  70616. * <ion-menu side="right" [content]="mycontent">...</ion-menu>
  70617. * ```
  70618. *
  70619. *
  70620. * ### Menu Type
  70621. *
  70622. * The menu type can be changed by passing the value to `type` on the `<ion-menu>`:
  70623. *
  70624. * ```html
  70625. * <ion-menu type="overlay" [content]="mycontent">...</ion-menu>
  70626. * ```
  70627. *
  70628. * It can also be set in the app's config. The below will set the menu type to
  70629. * `push` for all modes, and then set the type to `overlay` for the `ios` mode.
  70630. *
  70631. * ```ts
  70632. * // in NgModules
  70633. *
  70634. * imports: [
  70635. * IonicModule.forRoot(MyApp,{
  70636. * menuType: 'push',
  70637. * platforms: {
  70638. * ios: {
  70639. * menuType: 'overlay',
  70640. * }
  70641. * }
  70642. * })
  70643. * ],
  70644. * ```
  70645. *
  70646. *
  70647. * ### Displaying the Menu
  70648. *
  70649. * To toggle a menu from the template, add a button with the `menuToggle`
  70650. * directive anywhere in the page's template:
  70651. *
  70652. * ```html
  70653. * <button ion-button menuToggle>Toggle Menu</button>
  70654. * ```
  70655. *
  70656. * To close a menu, add the `menuClose` button. It can be added anywhere
  70657. * in the content, or even the menu itself. Below it is added to the menu's
  70658. * content:
  70659. *
  70660. * ```html
  70661. * <ion-menu [content]="mycontent">
  70662. * <ion-content>
  70663. * <ion-list>
  70664. * <ion-item menuClose detail-none>Close Menu</ion-item>
  70665. * </ion-list>
  70666. * </ion-content>
  70667. * </ion-menu>
  70668. * ```
  70669. *
  70670. * See the [MenuToggle](../MenuToggle) and [MenuClose](../MenuClose) docs
  70671. * for more information on these directives.
  70672. *
  70673. * The menu can also be controlled from the Page by using the `MenuController`.
  70674. * Inject the `MenuController` provider into the page and then call any of its
  70675. * methods. In the below example, the `openMenu` method will open the menu
  70676. * when it is called.
  70677. *
  70678. * ```ts
  70679. * import { Component } from '@angular/core';
  70680. * import { MenuController } from 'ionic-angular';
  70681. *
  70682. * @Component({...})
  70683. * export class MyPage {
  70684. * constructor(public menuCtrl: MenuController) {}
  70685. *
  70686. * openMenu() {
  70687. * this.menuCtrl.open();
  70688. * }
  70689. * }
  70690. * ```
  70691. *
  70692. * See the [MenuController](../../app/MenuController) API docs for all of the methods
  70693. * and usage information.
  70694. *
  70695. *
  70696. * @demo /docs/demos/src/menu/
  70697. *
  70698. * @see {@link /docs/components#menus Menu Component Docs}
  70699. * @see {@link ../../app/MenuController MenuController API Docs}
  70700. * @see {@link ../../nav/Nav Nav API Docs}
  70701. * @see {@link ../../nav/NavController NavController API Docs}
  70702. */
  70703. var Menu = (function () {
  70704. function Menu(_menuCtrl, _elementRef, _config, _plt, _renderer, _keyboard, _gestureCtrl, _domCtrl, _app) {
  70705. this._menuCtrl = _menuCtrl;
  70706. this._elementRef = _elementRef;
  70707. this._config = _config;
  70708. this._plt = _plt;
  70709. this._renderer = _renderer;
  70710. this._keyboard = _keyboard;
  70711. this._gestureCtrl = _gestureCtrl;
  70712. this._domCtrl = _domCtrl;
  70713. this._app = _app;
  70714. this._isSwipeEnabled = true;
  70715. this._isAnimating = false;
  70716. this._isPersistent = false;
  70717. this._init = false;
  70718. this._isPane = false;
  70719. /**
  70720. * @hidden
  70721. */
  70722. this.isOpen = false;
  70723. /**
  70724. * @hidden
  70725. */
  70726. this.isRightSide = false;
  70727. /**
  70728. * @output {event} Emitted when the menu is being dragged open.
  70729. */
  70730. this.ionDrag = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  70731. /**
  70732. * @output {event} Emitted when the menu has been opened.
  70733. */
  70734. this.ionOpen = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  70735. /**
  70736. * @output {event} Emitted when the menu has been closed.
  70737. */
  70738. this.ionClose = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  70739. this._events = new __WEBPACK_IMPORTED_MODULE_13__gestures_ui_event_manager__["a" /* UIEventManager */](_plt);
  70740. this._gestureBlocker = _gestureCtrl.createBlocker({
  70741. disable: [__WEBPACK_IMPORTED_MODULE_6__gestures_gesture_controller__["b" /* GESTURE_GO_BACK_SWIPE */]]
  70742. });
  70743. this.side = 'start';
  70744. }
  70745. Object.defineProperty(Menu.prototype, "enabled", {
  70746. /**
  70747. * @input {boolean} If true, the menu is enabled. Default `true`.
  70748. */
  70749. get: function () {
  70750. return this._isEnabled;
  70751. },
  70752. set: function (val) {
  70753. var isEnabled = Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["o" /* isTrueProperty */])(val);
  70754. this.enable(isEnabled);
  70755. },
  70756. enumerable: true,
  70757. configurable: true
  70758. });
  70759. Object.defineProperty(Menu.prototype, "side", {
  70760. /**
  70761. * @input {string} Which side of the view the menu should be placed. Default `"left"`.
  70762. */
  70763. get: function () {
  70764. return this._side;
  70765. },
  70766. set: function (val) {
  70767. this.isRightSide = Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["m" /* isRightSide */])(val, this._plt.isRTL);
  70768. if (this.isRightSide) {
  70769. this._side = 'right';
  70770. }
  70771. else {
  70772. this._side = 'left';
  70773. }
  70774. },
  70775. enumerable: true,
  70776. configurable: true
  70777. });
  70778. Object.defineProperty(Menu.prototype, "swipeEnabled", {
  70779. /**
  70780. * @input {boolean} If true, swiping the menu is enabled. Default `true`.
  70781. */
  70782. get: function () {
  70783. return this._isSwipeEnabled;
  70784. },
  70785. set: function (val) {
  70786. var isEnabled = Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["o" /* isTrueProperty */])(val);
  70787. this.swipeEnable(isEnabled);
  70788. },
  70789. enumerable: true,
  70790. configurable: true
  70791. });
  70792. Object.defineProperty(Menu.prototype, "persistent", {
  70793. /**
  70794. * @input {boolean} If true, the menu will persist on child pages.
  70795. */
  70796. get: function () {
  70797. return this._isPersistent;
  70798. },
  70799. set: function (val) {
  70800. this._isPersistent = Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["o" /* isTrueProperty */])(val);
  70801. },
  70802. enumerable: true,
  70803. configurable: true
  70804. });
  70805. /**
  70806. * @hidden
  70807. */
  70808. Menu.prototype.ngOnInit = function () {
  70809. var _this = this;
  70810. this._init = true;
  70811. var content = this.content;
  70812. this._cntEle = (content instanceof Node) ? content : content && content.getNativeElement && content.getNativeElement();
  70813. // requires content element
  70814. if (!this._cntEle) {
  70815. return console.error('Menu: must have a [content] element to listen for drag events on. Example:\n\n<ion-menu [content]="content"></ion-menu>\n\n<ion-nav #content></ion-nav>');
  70816. }
  70817. this.setElementAttribute('side', this._side);
  70818. // normalize the "type"
  70819. if (!this.type) {
  70820. this.type = this._config.get('menuType');
  70821. }
  70822. this.setElementAttribute('type', this.type);
  70823. // add the gestures
  70824. this._gesture = new __WEBPACK_IMPORTED_MODULE_9__menu_gestures__["a" /* MenuContentGesture */](this._plt, this, this._gestureCtrl, this._domCtrl);
  70825. // add menu's content classes
  70826. this._cntEle.classList.add('menu-content');
  70827. this._cntEle.classList.add('menu-content-' + this.type);
  70828. var isEnabled = this._isEnabled;
  70829. if (isEnabled === true || typeof isEnabled === 'undefined') {
  70830. // check if more than one menu is on the same side
  70831. isEnabled = !this._menuCtrl.getMenus().some(function (m) {
  70832. return m.side === _this.side && m.enabled;
  70833. });
  70834. }
  70835. // register this menu with the app's menu controller
  70836. this._menuCtrl._register(this);
  70837. // mask it as enabled / disabled
  70838. this.enable(isEnabled);
  70839. };
  70840. /**
  70841. * @hidden
  70842. */
  70843. Menu.prototype.onBackdropClick = function (ev) {
  70844. ev.preventDefault();
  70845. ev.stopPropagation();
  70846. this._menuCtrl.close();
  70847. };
  70848. /**
  70849. * @hidden
  70850. */
  70851. Menu.prototype._getType = function () {
  70852. if (!this._type) {
  70853. this._type = __WEBPACK_IMPORTED_MODULE_10__app_menu_controller__["a" /* MenuController */].create(this.type, this, this._plt);
  70854. if (this._config.get('animate') === false) {
  70855. this._type.ani.duration(0);
  70856. }
  70857. }
  70858. return this._type;
  70859. };
  70860. /**
  70861. * @hidden
  70862. */
  70863. Menu.prototype.setOpen = function (shouldOpen, animated) {
  70864. var _this = this;
  70865. if (animated === void 0) { animated = true; }
  70866. // If the menu is disabled or it is currenly being animated, let's do nothing
  70867. if ((shouldOpen === this.isOpen) || !this._canOpen() || this._isAnimating) {
  70868. return Promise.resolve(this.isOpen);
  70869. }
  70870. return new Promise(function (resolve) {
  70871. _this._before();
  70872. _this._getType().setOpen(shouldOpen, animated, function () {
  70873. _this._after(shouldOpen);
  70874. resolve(_this.isOpen);
  70875. });
  70876. });
  70877. };
  70878. Menu.prototype._forceClosing = function () {
  70879. var _this = this;
  70880. (void 0) /* assert */;
  70881. this._isAnimating = true;
  70882. this._getType().setOpen(false, false, function () {
  70883. _this._after(false);
  70884. });
  70885. };
  70886. /**
  70887. * @hidden
  70888. */
  70889. Menu.prototype.canSwipe = function () {
  70890. return this._isSwipeEnabled &&
  70891. !this._isAnimating &&
  70892. this._canOpen() &&
  70893. this._app.isEnabled();
  70894. };
  70895. /**
  70896. * @hidden
  70897. */
  70898. Menu.prototype.isAnimating = function () {
  70899. return this._isAnimating;
  70900. };
  70901. Menu.prototype._swipeBeforeStart = function () {
  70902. if (!this.canSwipe()) {
  70903. (void 0) /* assert */;
  70904. return;
  70905. }
  70906. this._before();
  70907. };
  70908. Menu.prototype._swipeStart = function () {
  70909. if (!this._isAnimating) {
  70910. (void 0) /* assert */;
  70911. return;
  70912. }
  70913. this._getType().setProgressStart(this.isOpen);
  70914. };
  70915. Menu.prototype._swipeProgress = function (stepValue) {
  70916. if (!this._isAnimating) {
  70917. (void 0) /* assert */;
  70918. return;
  70919. }
  70920. this._getType().setProgessStep(stepValue);
  70921. var ionDrag = this.ionDrag;
  70922. if (ionDrag.observers.length > 0) {
  70923. ionDrag.emit(stepValue);
  70924. }
  70925. };
  70926. Menu.prototype._swipeEnd = function (shouldCompleteLeft, shouldCompleteRight, stepValue, velocity) {
  70927. var _this = this;
  70928. if (!this._isAnimating) {
  70929. (void 0) /* assert */;
  70930. return;
  70931. }
  70932. // user has finished dragging the menu
  70933. var isRightSide = this.isRightSide;
  70934. var isRTL = this._plt.isRTL;
  70935. var opening = !this.isOpen;
  70936. var shouldComplete = (opening)
  70937. ? (isRightSide !== isRTL) ? shouldCompleteLeft : shouldCompleteRight
  70938. : (isRightSide !== isRTL) ? shouldCompleteRight : shouldCompleteLeft;
  70939. this._getType().setProgressEnd(shouldComplete, stepValue, velocity, function (isOpen) {
  70940. (void 0) /* console.debug */;
  70941. _this._after(isOpen);
  70942. });
  70943. };
  70944. Menu.prototype._before = function () {
  70945. (void 0) /* assert */;
  70946. // this places the menu into the correct location before it animates in
  70947. // this css class doesn't actually kick off any animations
  70948. this.setElementClass('show-menu', true);
  70949. this.backdrop.setElementClass('show-backdrop', true);
  70950. this.resize();
  70951. this._keyboard.close();
  70952. this._isAnimating = true;
  70953. };
  70954. Menu.prototype._after = function (isOpen) {
  70955. (void 0) /* assert */;
  70956. this._app.setEnabled(false, 100);
  70957. // keep opening/closing the menu disabled for a touch more yet
  70958. // only add listeners/css if it's enabled and isOpen
  70959. // and only remove listeners/css if it's not open
  70960. // emit opened/closed events
  70961. this.isOpen = isOpen;
  70962. this._isAnimating = false;
  70963. this._events.unlistenAll();
  70964. if (isOpen) {
  70965. // Disable swipe to go back gesture
  70966. this._gestureBlocker.block();
  70967. this._cntEle.classList.add('menu-content-open');
  70968. var callback = this.onBackdropClick.bind(this);
  70969. this._events.listen(this._cntEle, 'click', callback, { capture: true });
  70970. this._events.listen(this.backdrop.getNativeElement(), 'click', callback, { capture: true });
  70971. this.ionOpen.emit(true);
  70972. }
  70973. else {
  70974. // Enable swipe to go back gesture
  70975. this._gestureBlocker.unblock();
  70976. this._cntEle.classList.remove('menu-content-open');
  70977. this.setElementClass('show-menu', false);
  70978. this.backdrop.setElementClass('show-menu', false);
  70979. this.ionClose.emit(true);
  70980. }
  70981. };
  70982. /**
  70983. * @hidden
  70984. */
  70985. Menu.prototype.open = function () {
  70986. return this.setOpen(true);
  70987. };
  70988. /**
  70989. * @hidden
  70990. */
  70991. Menu.prototype.close = function () {
  70992. return this.setOpen(false);
  70993. };
  70994. /**
  70995. * @hidden
  70996. */
  70997. Menu.prototype.resize = function () {
  70998. var content = this.menuContent
  70999. ? this.menuContent
  71000. : this.menuNav;
  71001. content && content.resize();
  71002. };
  71003. /**
  71004. * @hidden
  71005. */
  71006. Menu.prototype.toggle = function () {
  71007. return this.setOpen(!this.isOpen);
  71008. };
  71009. Menu.prototype._canOpen = function () {
  71010. return this._isEnabled && !this._isPane;
  71011. };
  71012. /**
  71013. * @hidden
  71014. */
  71015. Menu.prototype._updateState = function () {
  71016. var canOpen = this._canOpen();
  71017. // Close menu inmediately
  71018. if (!canOpen && this.isOpen) {
  71019. (void 0) /* assert */;
  71020. // close if this menu is open, and should not be enabled
  71021. this._forceClosing();
  71022. }
  71023. if (this._isEnabled && this._menuCtrl) {
  71024. this._menuCtrl._setActiveMenu(this);
  71025. }
  71026. if (!this._init) {
  71027. return;
  71028. }
  71029. var gesture = this._gesture;
  71030. // only listen/unlisten if the menu has initialized
  71031. if (canOpen && this._isSwipeEnabled && !gesture.isListening) {
  71032. // should listen, but is not currently listening
  71033. (void 0) /* console.debug */;
  71034. gesture.listen();
  71035. }
  71036. else if (gesture.isListening && (!canOpen || !this._isSwipeEnabled)) {
  71037. // should not listen, but is currently listening
  71038. (void 0) /* console.debug */;
  71039. gesture.unlisten();
  71040. }
  71041. if (this.isOpen || (this._isPane && this._isEnabled)) {
  71042. this.resize();
  71043. }
  71044. (void 0) /* assert */;
  71045. };
  71046. /**
  71047. * @hidden
  71048. */
  71049. Menu.prototype.enable = function (shouldEnable) {
  71050. this._isEnabled = shouldEnable;
  71051. this.setElementClass('menu-enabled', shouldEnable);
  71052. this._updateState();
  71053. return this;
  71054. };
  71055. /**
  71056. * @internal
  71057. */
  71058. Menu.prototype.initPane = function () {
  71059. return false;
  71060. };
  71061. /**
  71062. * @internal
  71063. */
  71064. Menu.prototype.paneChanged = function (isPane) {
  71065. this._isPane = isPane;
  71066. this._updateState();
  71067. };
  71068. /**
  71069. * @hidden
  71070. */
  71071. Menu.prototype.swipeEnable = function (shouldEnable) {
  71072. this._isSwipeEnabled = shouldEnable;
  71073. this._updateState();
  71074. return this;
  71075. };
  71076. /**
  71077. * @hidden
  71078. */
  71079. Menu.prototype.getNativeElement = function () {
  71080. return this._elementRef.nativeElement;
  71081. };
  71082. /**
  71083. * @hidden
  71084. */
  71085. Menu.prototype.getMenuElement = function () {
  71086. return this.getNativeElement().querySelector('.menu-inner');
  71087. };
  71088. /**
  71089. * @hidden
  71090. */
  71091. Menu.prototype.getContentElement = function () {
  71092. return this._cntEle;
  71093. };
  71094. /**
  71095. * @hidden
  71096. */
  71097. Menu.prototype.getBackdropElement = function () {
  71098. return this.backdrop.getNativeElement();
  71099. };
  71100. /**
  71101. * @hidden
  71102. */
  71103. Menu.prototype.width = function () {
  71104. return this.getMenuElement().offsetWidth;
  71105. };
  71106. /**
  71107. * @hidden
  71108. */
  71109. Menu.prototype.getMenuController = function () {
  71110. return this._menuCtrl;
  71111. };
  71112. /**
  71113. * @hidden
  71114. */
  71115. Menu.prototype.setElementClass = function (className, add) {
  71116. this._renderer.setElementClass(this._elementRef.nativeElement, className, add);
  71117. };
  71118. /**
  71119. * @hidden
  71120. */
  71121. Menu.prototype.setElementAttribute = function (attributeName, value) {
  71122. this._renderer.setElementAttribute(this._elementRef.nativeElement, attributeName, value);
  71123. };
  71124. /**
  71125. * @hidden
  71126. */
  71127. Menu.prototype.getElementRef = function () {
  71128. return this._elementRef;
  71129. };
  71130. /**
  71131. * @hidden
  71132. */
  71133. Menu.prototype.ngOnDestroy = function () {
  71134. this._menuCtrl._unregister(this);
  71135. this._events.destroy();
  71136. this._gesture && this._gesture.destroy();
  71137. this._type && this._type.destroy();
  71138. this._gesture = null;
  71139. this._type = null;
  71140. this._cntEle = null;
  71141. };
  71142. Menu.decorators = [
  71143. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  71144. selector: 'ion-menu',
  71145. template: '<div class="menu-inner"><ng-content></ng-content></div>' +
  71146. '<ion-backdrop></ion-backdrop>',
  71147. host: {
  71148. 'role': 'navigation'
  71149. },
  71150. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  71151. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  71152. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_14__split_pane_split_pane__["a" /* RootNode */], useExisting: Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return Menu; }) }]
  71153. },] },
  71154. ];
  71155. /** @nocollapse */
  71156. Menu.ctorParameters = function () { return [
  71157. { type: __WEBPACK_IMPORTED_MODULE_10__app_menu_controller__["a" /* MenuController */], },
  71158. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  71159. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  71160. { type: __WEBPACK_IMPORTED_MODULE_12__platform_platform__["a" /* Platform */], },
  71161. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  71162. { type: __WEBPACK_IMPORTED_MODULE_8__platform_keyboard__["a" /* Keyboard */], },
  71163. { type: __WEBPACK_IMPORTED_MODULE_6__gestures_gesture_controller__["l" /* GestureController */], },
  71164. { type: __WEBPACK_IMPORTED_MODULE_5__platform_dom_controller__["a" /* DomController */], },
  71165. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  71166. ]; };
  71167. Menu.propDecorators = {
  71168. 'backdrop': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: [__WEBPACK_IMPORTED_MODULE_2__backdrop_backdrop__["a" /* Backdrop */],] },],
  71169. 'menuContent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_4__content_content__["a" /* Content */],] },],
  71170. 'menuNav': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_11__nav_nav__["a" /* Nav */],] },],
  71171. 'content': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71172. 'id': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71173. 'type': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71174. 'enabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71175. 'side': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71176. 'swipeEnabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71177. 'persistent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71178. 'maxEdgeStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71179. 'ionDrag': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  71180. 'ionOpen': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  71181. 'ionClose': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  71182. };
  71183. return Menu;
  71184. }());
  71185. //# sourceMappingURL=menu.js.map
  71186. /***/ }),
  71187. /* 203 */
  71188. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71189. "use strict";
  71190. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuClose; });
  71191. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  71192. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_menu_controller__ = __webpack_require__(41);
  71193. /**
  71194. * @name MenuClose
  71195. * @description
  71196. * The `menuClose` directive can be placed on any button to close an open menu.
  71197. *
  71198. * @usage
  71199. *
  71200. * A simple `menuClose` button can be added using the following markup:
  71201. *
  71202. * ```html
  71203. * <button ion-button menuClose>Close Menu</button>
  71204. * ```
  71205. *
  71206. * To close a certain menu by its id or side, give the `menuClose`
  71207. * directive a value.
  71208. *
  71209. * ```html
  71210. * <button ion-button menuClose="left">Close Left Menu</button>
  71211. * ```
  71212. *
  71213. * @demo /docs/demos/src/menu/
  71214. * @see {@link /docs/components#menus Menu Component Docs}
  71215. * @see {@link ../../menu/Menu Menu API Docs}
  71216. */
  71217. var MenuClose = (function () {
  71218. function MenuClose(_menu) {
  71219. this._menu = _menu;
  71220. }
  71221. /**
  71222. * @hidden
  71223. */
  71224. MenuClose.prototype.close = function () {
  71225. var menu = this._menu.get(this.menuClose);
  71226. menu && menu.close();
  71227. };
  71228. MenuClose.decorators = [
  71229. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  71230. selector: '[menuClose]'
  71231. },] },
  71232. ];
  71233. /** @nocollapse */
  71234. MenuClose.ctorParameters = function () { return [
  71235. { type: __WEBPACK_IMPORTED_MODULE_1__app_menu_controller__["a" /* MenuController */], },
  71236. ]; };
  71237. MenuClose.propDecorators = {
  71238. 'menuClose': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71239. 'close': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click',] },],
  71240. };
  71241. return MenuClose;
  71242. }());
  71243. //# sourceMappingURL=menu-close.js.map
  71244. /***/ }),
  71245. /* 204 */
  71246. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71247. "use strict";
  71248. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuToggle; });
  71249. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  71250. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__button_button__ = __webpack_require__(48);
  71251. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_menu_controller__ = __webpack_require__(41);
  71252. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__toolbar_navbar__ = __webpack_require__(53);
  71253. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__ = __webpack_require__(9);
  71254. /**
  71255. * @name MenuToggle
  71256. * @description
  71257. * The `menuToggle` directive can be placed on any button to toggle a menu open or closed.
  71258. * If it is added to the [NavBar](../../toolbar/Navbar) of a page, the button will only appear
  71259. * when the page it's in is currently a root page. See the [Menu Navigation Bar Behavior](../Menu#navigation-bar-behavior)
  71260. * docs for more information.
  71261. *
  71262. *
  71263. * @usage
  71264. *
  71265. * A simple `menuToggle` button can be added using the following markup:
  71266. *
  71267. * ```html
  71268. * <button ion-button menuToggle>Toggle Menu</button>
  71269. * ```
  71270. *
  71271. * To toggle a specific menu by its id or side, give the `menuToggle`
  71272. * directive a value.
  71273. *
  71274. * ```html
  71275. * <button ion-button menuToggle="right">Toggle Right Menu</button>
  71276. * ```
  71277. *
  71278. * If placing the `menuToggle` in a navbar or toolbar, it should be
  71279. * placed as a child of the `<ion-navbar>` or `<ion-toolbar>`, and not in
  71280. * the `<ion-buttons>` element:
  71281. *
  71282. * ```html
  71283. * <ion-header>
  71284. *
  71285. * <ion-navbar>
  71286. * <ion-buttons start>
  71287. * <button ion-button>
  71288. * <ion-icon name="contact"></ion-icon>
  71289. * </button>
  71290. * </ion-buttons>
  71291. * <button ion-button menuToggle>
  71292. * <ion-icon name="menu"></ion-icon>
  71293. * </button>
  71294. * <ion-title>
  71295. * Title
  71296. * </ion-title>
  71297. * <ion-buttons end>
  71298. * <button ion-button (click)="doClick()">
  71299. * <ion-icon name="more"></ion-icon>
  71300. * </button>
  71301. * </ion-buttons>
  71302. * </ion-navbar>
  71303. *
  71304. * </ion-header>
  71305. * ```
  71306. *
  71307. * Similar to `<ion-buttons>`, the `menuToggle` can be positioned using
  71308. * `start`, `end`, `left`, or `right`:
  71309. *
  71310. * ```html
  71311. * <ion-toolbar>
  71312. * <button ion-button menuToggle right>
  71313. * <ion-icon name="menu"></ion-icon>
  71314. * </button>
  71315. * <ion-title>
  71316. * Title
  71317. * </ion-title>
  71318. * <ion-buttons end>
  71319. * <button ion-button (click)="doClick()">
  71320. * <ion-icon name="more"></ion-icon>
  71321. * </button>
  71322. * </ion-buttons>
  71323. * </ion-toolbar>
  71324. * ```
  71325. *
  71326. * See the [Toolbar API docs](../../toolbar/Toolbar) for more information
  71327. * on the different positions.
  71328. *
  71329. * @demo /docs/demos/src/menu/
  71330. * @see {@link /docs/components#menus Menu Component Docs}
  71331. * @see {@link ../../menu/Menu Menu API Docs}
  71332. */
  71333. var MenuToggle = (function () {
  71334. function MenuToggle(_menu, _viewCtrl, _button, _navbar) {
  71335. this._menu = _menu;
  71336. this._viewCtrl = _viewCtrl;
  71337. this._button = _button;
  71338. this._isButton = !!_button;
  71339. this._inNavbar = !!_navbar;
  71340. }
  71341. MenuToggle.prototype.ngAfterContentInit = function () {
  71342. // Add the bar-button-menutoggle / button-menutoggle class
  71343. if (this._isButton) {
  71344. this._button._setClass('menutoggle', true);
  71345. }
  71346. };
  71347. /**
  71348. * @hidden
  71349. */
  71350. MenuToggle.prototype.toggle = function () {
  71351. var menu = this._menu.get(this.menuToggle);
  71352. menu && menu.toggle();
  71353. };
  71354. Object.defineProperty(MenuToggle.prototype, "isHidden", {
  71355. /**
  71356. * @hidden
  71357. */
  71358. get: function () {
  71359. var menu = this._menu.get(this.menuToggle);
  71360. if (this._inNavbar && this._viewCtrl) {
  71361. if (!menu || !menu._canOpen()) {
  71362. return true;
  71363. }
  71364. if (this._viewCtrl.isFirst()) {
  71365. // this is the first view, so it should always show
  71366. return false;
  71367. }
  71368. if (menu) {
  71369. // this is not the root view, so see if this menu
  71370. // is configured to still be enabled if it's not the root view
  71371. return !menu.persistent;
  71372. }
  71373. }
  71374. return false;
  71375. },
  71376. enumerable: true,
  71377. configurable: true
  71378. });
  71379. MenuToggle.decorators = [
  71380. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  71381. selector: '[menuToggle]',
  71382. host: {
  71383. '[hidden]': 'isHidden'
  71384. }
  71385. },] },
  71386. ];
  71387. /** @nocollapse */
  71388. MenuToggle.ctorParameters = function () { return [
  71389. { type: __WEBPACK_IMPORTED_MODULE_2__app_menu_controller__["a" /* MenuController */], },
  71390. { type: __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  71391. { type: __WEBPACK_IMPORTED_MODULE_1__button_button__["a" /* Button */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  71392. { type: __WEBPACK_IMPORTED_MODULE_3__toolbar_navbar__["a" /* Navbar */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  71393. ]; };
  71394. MenuToggle.propDecorators = {
  71395. 'menuToggle': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  71396. 'toggle': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click',] },],
  71397. };
  71398. return MenuToggle;
  71399. }());
  71400. //# sourceMappingURL=menu-toggle.js.map
  71401. /***/ }),
  71402. /* 205 */
  71403. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71404. "use strict";
  71405. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToolbarBase; });
  71406. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ion__ = __webpack_require__(8);
  71407. var __extends = (this && this.__extends) || (function () {
  71408. var extendStatics = Object.setPrototypeOf ||
  71409. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  71410. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  71411. return function (d, b) {
  71412. extendStatics(d, b);
  71413. function __() { this.constructor = d; }
  71414. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  71415. };
  71416. })();
  71417. /**
  71418. * @hidden
  71419. */
  71420. var ToolbarBase = (function (_super) {
  71421. __extends(ToolbarBase, _super);
  71422. function ToolbarBase(config, elementRef, renderer) {
  71423. return _super.call(this, config, elementRef, renderer, 'toolbar') || this;
  71424. }
  71425. /**
  71426. * @hidden
  71427. */
  71428. ToolbarBase.prototype._setTitle = function (titleCmp) {
  71429. this._title = titleCmp;
  71430. };
  71431. /**
  71432. * @hidden
  71433. * Returns the toolbar title text if it exists or an empty string
  71434. */
  71435. ToolbarBase.prototype.getTitleText = function () {
  71436. return (this._title && this._title.getTitleText()) || '';
  71437. };
  71438. return ToolbarBase;
  71439. }(__WEBPACK_IMPORTED_MODULE_0__ion__["a" /* Ion */]));
  71440. //# sourceMappingURL=toolbar-base.js.map
  71441. /***/ }),
  71442. /* 206 */
  71443. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71444. "use strict";
  71445. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Modal; });
  71446. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__navigation_overlay_proxy__ = __webpack_require__(207);
  71447. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__modal_impl__ = __webpack_require__(374);
  71448. var __extends = (this && this.__extends) || (function () {
  71449. var extendStatics = Object.setPrototypeOf ||
  71450. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  71451. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  71452. return function (d, b) {
  71453. extendStatics(d, b);
  71454. function __() { this.constructor = d; }
  71455. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  71456. };
  71457. })();
  71458. /**
  71459. * @hidden
  71460. */
  71461. var Modal = (function (_super) {
  71462. __extends(Modal, _super);
  71463. function Modal(app, component, data, opts, config, deepLinker) {
  71464. if (opts === void 0) { opts = {}; }
  71465. var _this = _super.call(this, app, component, config, deepLinker) || this;
  71466. _this.data = data;
  71467. _this.opts = opts;
  71468. _this.isOverlay = true;
  71469. return _this;
  71470. }
  71471. Modal.prototype.getImplementation = function () {
  71472. return new __WEBPACK_IMPORTED_MODULE_1__modal_impl__["a" /* ModalImpl */](this._app, this._component, this.data, this.opts, this._config);
  71473. };
  71474. return Modal;
  71475. }(__WEBPACK_IMPORTED_MODULE_0__navigation_overlay_proxy__["a" /* OverlayProxy */]));
  71476. //# sourceMappingURL=modal.js.map
  71477. /***/ }),
  71478. /* 207 */
  71479. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71480. "use strict";
  71481. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return OverlayProxy; });
  71482. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  71483. var OverlayProxy = (function () {
  71484. function OverlayProxy(_app, _component, _config, _deepLinker) {
  71485. this._app = _app;
  71486. this._component = _component;
  71487. this._config = _config;
  71488. this._deepLinker = _deepLinker;
  71489. }
  71490. OverlayProxy.prototype.getImplementation = function () {
  71491. throw new Error('Child class must implement "getImplementation" method');
  71492. };
  71493. /**
  71494. * Present the modal instance.
  71495. *
  71496. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  71497. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  71498. */
  71499. OverlayProxy.prototype.present = function (navOptions) {
  71500. var _this = this;
  71501. if (navOptions === void 0) { navOptions = {}; }
  71502. // check if it's a lazy loaded component, or not
  71503. var isLazyLoaded = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["n" /* isString */])(this._component);
  71504. if (isLazyLoaded) {
  71505. return this._deepLinker.getComponentFromName(this._component).then(function (loadedComponent) {
  71506. _this._component = loadedComponent;
  71507. return _this.createAndPresentOverlay(navOptions);
  71508. });
  71509. }
  71510. else {
  71511. return this.createAndPresentOverlay(navOptions);
  71512. }
  71513. };
  71514. OverlayProxy.prototype.dismiss = function (data, role, navOptions) {
  71515. if (this.overlay) {
  71516. return this.overlay.dismiss(data, role, navOptions);
  71517. }
  71518. };
  71519. /**
  71520. * Called when the current viewController has be successfully dismissed
  71521. */
  71522. OverlayProxy.prototype.onDidDismiss = function (callback) {
  71523. this._onDidDismiss = callback;
  71524. if (this.overlay) {
  71525. this.overlay.onDidDismiss(this._onDidDismiss);
  71526. }
  71527. };
  71528. OverlayProxy.prototype.createAndPresentOverlay = function (navOptions) {
  71529. this.overlay = this.getImplementation();
  71530. this.overlay.onWillDismiss(this._onWillDismiss);
  71531. this.overlay.onDidDismiss(this._onDidDismiss);
  71532. return this.overlay.present(navOptions);
  71533. };
  71534. /**
  71535. * Called when the current viewController will be dismissed
  71536. */
  71537. OverlayProxy.prototype.onWillDismiss = function (callback) {
  71538. this._onWillDismiss = callback;
  71539. if (this.overlay) {
  71540. this.overlay.onWillDismiss(this._onWillDismiss);
  71541. }
  71542. };
  71543. return OverlayProxy;
  71544. }());
  71545. //# sourceMappingURL=overlay-proxy.js.map
  71546. /***/ }),
  71547. /* 208 */
  71548. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71549. "use strict";
  71550. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NgModuleLoader; });
  71551. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  71552. /**
  71553. * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory
  71554. */
  71555. var NgModuleLoader = (function () {
  71556. function NgModuleLoader(_compiler) {
  71557. this._compiler = _compiler;
  71558. }
  71559. NgModuleLoader.prototype.load = function (modulePath, ngModuleExport) {
  71560. var offlineMode = this._compiler instanceof __WEBPACK_IMPORTED_MODULE_0__angular_core__["k" /* Compiler */];
  71561. return offlineMode ? loadPrecompiledFactory(modulePath, ngModuleExport) : loadAndCompile(this._compiler, modulePath, ngModuleExport);
  71562. };
  71563. NgModuleLoader.decorators = [
  71564. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  71565. ];
  71566. /** @nocollapse */
  71567. NgModuleLoader.ctorParameters = function () { return [
  71568. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["k" /* Compiler */], },
  71569. ]; };
  71570. return NgModuleLoader;
  71571. }());
  71572. function loadAndCompile(compiler, modulePath, ngModuleExport) {
  71573. if (!ngModuleExport) {
  71574. ngModuleExport = 'default';
  71575. }
  71576. return __webpack_require__(209)(modulePath)
  71577. .then(function (rawModule) {
  71578. var module = rawModule[ngModuleExport];
  71579. if (!module) {
  71580. throw new Error("Module " + modulePath + " does not export " + ngModuleExport);
  71581. }
  71582. return compiler.compileModuleAsync(module);
  71583. });
  71584. }
  71585. function loadPrecompiledFactory(modulePath, ngModuleExport) {
  71586. return __webpack_require__(209)(modulePath)
  71587. .then(function (rawModule) {
  71588. var ngModuleFactory = rawModule[ngModuleExport];
  71589. if (!ngModuleFactory) {
  71590. throw new Error("Module " + modulePath + " does not export " + ngModuleExport);
  71591. }
  71592. return ngModuleFactory;
  71593. });
  71594. }
  71595. //# sourceMappingURL=ng-module-loader.js.map
  71596. /***/ }),
  71597. /* 209 */,
  71598. /* 210 */
  71599. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  71600. "use strict";
  71601. /* unused harmony export BrowserXhr */
  71602. /* unused harmony export JSONPBackend */
  71603. /* unused harmony export JSONPConnection */
  71604. /* unused harmony export CookieXSRFStrategy */
  71605. /* unused harmony export XHRBackend */
  71606. /* unused harmony export XHRConnection */
  71607. /* unused harmony export BaseRequestOptions */
  71608. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return RequestOptions; });
  71609. /* unused harmony export BaseResponseOptions */
  71610. /* unused harmony export ResponseOptions */
  71611. /* unused harmony export ReadyState */
  71612. /* unused harmony export RequestMethod */
  71613. /* unused harmony export ResponseContentType */
  71614. /* unused harmony export ResponseType */
  71615. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Headers; });
  71616. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Http; });
  71617. /* unused harmony export Jsonp */
  71618. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return HttpModule; });
  71619. /* unused harmony export JsonpModule */
  71620. /* unused harmony export Connection */
  71621. /* unused harmony export ConnectionBackend */
  71622. /* unused harmony export XSRFStrategy */
  71623. /* unused harmony export Request */
  71624. /* unused harmony export Response */
  71625. /* unused harmony export QueryEncoder */
  71626. /* unused harmony export URLSearchParams */
  71627. /* unused harmony export VERSION */
  71628. /* unused harmony export ɵe */
  71629. /* unused harmony export ɵf */
  71630. /* unused harmony export ɵa */
  71631. /* unused harmony export ɵb */
  71632. /* unused harmony export ɵc */
  71633. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  71634. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tslib__ = __webpack_require__(38);
  71635. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(0);
  71636. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);
  71637. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__ = __webpack_require__(40);
  71638. /**
  71639. * @license Angular v5.2.11
  71640. * (c) 2010-2018 Google, Inc. https://angular.io/
  71641. * License: MIT
  71642. */
  71643. /**
  71644. * @fileoverview added by tsickle
  71645. * @suppress {checkTypes} checked by tsc
  71646. */
  71647. /**
  71648. * @license
  71649. * Copyright Google Inc. All Rights Reserved.
  71650. *
  71651. * Use of this source code is governed by an MIT-style license that can be
  71652. * found in the LICENSE file at https://angular.io/license
  71653. */
  71654. /**
  71655. * A backend for http that uses the `XMLHttpRequest` browser API.
  71656. *
  71657. * Take care not to evaluate this in non-browser contexts.
  71658. *
  71659. * @deprecated use \@angular/common/http instead
  71660. */
  71661. var BrowserXhr = /** @class */ (function () {
  71662. function BrowserXhr() {
  71663. }
  71664. /**
  71665. * @return {?}
  71666. */
  71667. BrowserXhr.prototype.build = /**
  71668. * @return {?}
  71669. */
  71670. function () { return /** @type {?} */ ((new XMLHttpRequest())); };
  71671. BrowserXhr.decorators = [
  71672. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  71673. ];
  71674. /** @nocollapse */
  71675. BrowserXhr.ctorParameters = function () { return []; };
  71676. return BrowserXhr;
  71677. }());
  71678. /**
  71679. * @fileoverview added by tsickle
  71680. * @suppress {checkTypes} checked by tsc
  71681. */
  71682. /**
  71683. * @license
  71684. * Copyright Google Inc. All Rights Reserved.
  71685. *
  71686. * Use of this source code is governed by an MIT-style license that can be
  71687. * found in the LICENSE file at https://angular.io/license
  71688. */
  71689. /** @enum {number} */
  71690. var RequestMethod = {
  71691. Get: 0,
  71692. Post: 1,
  71693. Put: 2,
  71694. Delete: 3,
  71695. Options: 4,
  71696. Head: 5,
  71697. Patch: 6,
  71698. };
  71699. RequestMethod[RequestMethod.Get] = "Get";
  71700. RequestMethod[RequestMethod.Post] = "Post";
  71701. RequestMethod[RequestMethod.Put] = "Put";
  71702. RequestMethod[RequestMethod.Delete] = "Delete";
  71703. RequestMethod[RequestMethod.Options] = "Options";
  71704. RequestMethod[RequestMethod.Head] = "Head";
  71705. RequestMethod[RequestMethod.Patch] = "Patch";
  71706. /** @enum {number} */
  71707. var ReadyState = {
  71708. Unsent: 0,
  71709. Open: 1,
  71710. HeadersReceived: 2,
  71711. Loading: 3,
  71712. Done: 4,
  71713. Cancelled: 5,
  71714. };
  71715. ReadyState[ReadyState.Unsent] = "Unsent";
  71716. ReadyState[ReadyState.Open] = "Open";
  71717. ReadyState[ReadyState.HeadersReceived] = "HeadersReceived";
  71718. ReadyState[ReadyState.Loading] = "Loading";
  71719. ReadyState[ReadyState.Done] = "Done";
  71720. ReadyState[ReadyState.Cancelled] = "Cancelled";
  71721. /** @enum {number} */
  71722. var ResponseType = {
  71723. Basic: 0,
  71724. Cors: 1,
  71725. Default: 2,
  71726. Error: 3,
  71727. Opaque: 4,
  71728. };
  71729. ResponseType[ResponseType.Basic] = "Basic";
  71730. ResponseType[ResponseType.Cors] = "Cors";
  71731. ResponseType[ResponseType.Default] = "Default";
  71732. ResponseType[ResponseType.Error] = "Error";
  71733. ResponseType[ResponseType.Opaque] = "Opaque";
  71734. /** @enum {number} */
  71735. var ContentType = {
  71736. NONE: 0,
  71737. JSON: 1,
  71738. FORM: 2,
  71739. FORM_DATA: 3,
  71740. TEXT: 4,
  71741. BLOB: 5,
  71742. ARRAY_BUFFER: 6,
  71743. };
  71744. ContentType[ContentType.NONE] = "NONE";
  71745. ContentType[ContentType.JSON] = "JSON";
  71746. ContentType[ContentType.FORM] = "FORM";
  71747. ContentType[ContentType.FORM_DATA] = "FORM_DATA";
  71748. ContentType[ContentType.TEXT] = "TEXT";
  71749. ContentType[ContentType.BLOB] = "BLOB";
  71750. ContentType[ContentType.ARRAY_BUFFER] = "ARRAY_BUFFER";
  71751. /** @enum {number} */
  71752. var ResponseContentType = {
  71753. Text: 0,
  71754. Json: 1,
  71755. ArrayBuffer: 2,
  71756. Blob: 3,
  71757. };
  71758. ResponseContentType[ResponseContentType.Text] = "Text";
  71759. ResponseContentType[ResponseContentType.Json] = "Json";
  71760. ResponseContentType[ResponseContentType.ArrayBuffer] = "ArrayBuffer";
  71761. ResponseContentType[ResponseContentType.Blob] = "Blob";
  71762. /**
  71763. * @fileoverview added by tsickle
  71764. * @suppress {checkTypes} checked by tsc
  71765. */
  71766. /**
  71767. * @license
  71768. * Copyright Google Inc. All Rights Reserved.
  71769. *
  71770. * Use of this source code is governed by an MIT-style license that can be
  71771. * found in the LICENSE file at https://angular.io/license
  71772. */
  71773. /**
  71774. * Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as
  71775. * specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class).
  71776. *
  71777. * The only known difference between this `Headers` implementation and the spec is the
  71778. * lack of an `entries` method.
  71779. *
  71780. * ### Example
  71781. *
  71782. * ```
  71783. * import {Headers} from '\@angular/http';
  71784. *
  71785. * var firstHeaders = new Headers();
  71786. * firstHeaders.append('Content-Type', 'image/jpeg');
  71787. * console.log(firstHeaders.get('Content-Type')) //'image/jpeg'
  71788. *
  71789. * // Create headers from Plain Old JavaScript Object
  71790. * var secondHeaders = new Headers({
  71791. * 'X-My-Custom-Header': 'Angular'
  71792. * });
  71793. * console.log(secondHeaders.get('X-My-Custom-Header')); //'Angular'
  71794. *
  71795. * var thirdHeaders = new Headers(secondHeaders);
  71796. * console.log(thirdHeaders.get('X-My-Custom-Header')); //'Angular'
  71797. * ```
  71798. *
  71799. * @deprecated use \@angular/common/http instead
  71800. */
  71801. var Headers = /** @class */ (function () {
  71802. // TODO(vicb): any -> string|string[]
  71803. function Headers(headers) {
  71804. var _this = this;
  71805. /**
  71806. * \@internal header names are lower case
  71807. */
  71808. this._headers = new Map();
  71809. /**
  71810. * \@internal map lower case names to actual names
  71811. */
  71812. this._normalizedNames = new Map();
  71813. if (!headers) {
  71814. return;
  71815. }
  71816. if (headers instanceof Headers) {
  71817. headers.forEach(function (values, name) {
  71818. values.forEach(function (value) { return _this.append(name, value); });
  71819. });
  71820. return;
  71821. }
  71822. Object.keys(headers).forEach(function (name) {
  71823. var /** @type {?} */ values = Array.isArray(headers[name]) ? headers[name] : [headers[name]];
  71824. _this.delete(name);
  71825. values.forEach(function (value) { return _this.append(name, value); });
  71826. });
  71827. }
  71828. /**
  71829. * Returns a new Headers instance from the given DOMString of Response Headers
  71830. */
  71831. /**
  71832. * Returns a new Headers instance from the given DOMString of Response Headers
  71833. * @param {?} headersString
  71834. * @return {?}
  71835. */
  71836. Headers.fromResponseHeaderString = /**
  71837. * Returns a new Headers instance from the given DOMString of Response Headers
  71838. * @param {?} headersString
  71839. * @return {?}
  71840. */
  71841. function (headersString) {
  71842. var /** @type {?} */ headers = new Headers();
  71843. headersString.split('\n').forEach(function (line) {
  71844. var /** @type {?} */ index = line.indexOf(':');
  71845. if (index > 0) {
  71846. var /** @type {?} */ name_1 = line.slice(0, index);
  71847. var /** @type {?} */ value = line.slice(index + 1).trim();
  71848. headers.set(name_1, value);
  71849. }
  71850. });
  71851. return headers;
  71852. };
  71853. /**
  71854. * Appends a header to existing list of header values for a given header name.
  71855. */
  71856. /**
  71857. * Appends a header to existing list of header values for a given header name.
  71858. * @param {?} name
  71859. * @param {?} value
  71860. * @return {?}
  71861. */
  71862. Headers.prototype.append = /**
  71863. * Appends a header to existing list of header values for a given header name.
  71864. * @param {?} name
  71865. * @param {?} value
  71866. * @return {?}
  71867. */
  71868. function (name, value) {
  71869. var /** @type {?} */ values = this.getAll(name);
  71870. if (values === null) {
  71871. this.set(name, value);
  71872. }
  71873. else {
  71874. values.push(value);
  71875. }
  71876. };
  71877. /**
  71878. * Deletes all header values for the given name.
  71879. */
  71880. /**
  71881. * Deletes all header values for the given name.
  71882. * @param {?} name
  71883. * @return {?}
  71884. */
  71885. Headers.prototype.delete = /**
  71886. * Deletes all header values for the given name.
  71887. * @param {?} name
  71888. * @return {?}
  71889. */
  71890. function (name) {
  71891. var /** @type {?} */ lcName = name.toLowerCase();
  71892. this._normalizedNames.delete(lcName);
  71893. this._headers.delete(lcName);
  71894. };
  71895. /**
  71896. * @param {?} fn
  71897. * @return {?}
  71898. */
  71899. Headers.prototype.forEach = /**
  71900. * @param {?} fn
  71901. * @return {?}
  71902. */
  71903. function (fn) {
  71904. var _this = this;
  71905. this._headers.forEach(function (values, lcName) { return fn(values, _this._normalizedNames.get(lcName), _this._headers); });
  71906. };
  71907. /**
  71908. * Returns first header that matches given name.
  71909. */
  71910. /**
  71911. * Returns first header that matches given name.
  71912. * @param {?} name
  71913. * @return {?}
  71914. */
  71915. Headers.prototype.get = /**
  71916. * Returns first header that matches given name.
  71917. * @param {?} name
  71918. * @return {?}
  71919. */
  71920. function (name) {
  71921. var /** @type {?} */ values = this.getAll(name);
  71922. if (values === null) {
  71923. return null;
  71924. }
  71925. return values.length > 0 ? values[0] : null;
  71926. };
  71927. /**
  71928. * Checks for existence of header by given name.
  71929. */
  71930. /**
  71931. * Checks for existence of header by given name.
  71932. * @param {?} name
  71933. * @return {?}
  71934. */
  71935. Headers.prototype.has = /**
  71936. * Checks for existence of header by given name.
  71937. * @param {?} name
  71938. * @return {?}
  71939. */
  71940. function (name) { return this._headers.has(name.toLowerCase()); };
  71941. /**
  71942. * Returns the names of the headers
  71943. */
  71944. /**
  71945. * Returns the names of the headers
  71946. * @return {?}
  71947. */
  71948. Headers.prototype.keys = /**
  71949. * Returns the names of the headers
  71950. * @return {?}
  71951. */
  71952. function () { return Array.from(this._normalizedNames.values()); };
  71953. /**
  71954. * Sets or overrides header value for given name.
  71955. */
  71956. /**
  71957. * Sets or overrides header value for given name.
  71958. * @param {?} name
  71959. * @param {?} value
  71960. * @return {?}
  71961. */
  71962. Headers.prototype.set = /**
  71963. * Sets or overrides header value for given name.
  71964. * @param {?} name
  71965. * @param {?} value
  71966. * @return {?}
  71967. */
  71968. function (name, value) {
  71969. if (Array.isArray(value)) {
  71970. if (value.length) {
  71971. this._headers.set(name.toLowerCase(), [value.join(',')]);
  71972. }
  71973. }
  71974. else {
  71975. this._headers.set(name.toLowerCase(), [value]);
  71976. }
  71977. this.mayBeSetNormalizedName(name);
  71978. };
  71979. /**
  71980. * Returns values of all headers.
  71981. */
  71982. /**
  71983. * Returns values of all headers.
  71984. * @return {?}
  71985. */
  71986. Headers.prototype.values = /**
  71987. * Returns values of all headers.
  71988. * @return {?}
  71989. */
  71990. function () { return Array.from(this._headers.values()); };
  71991. /**
  71992. * Returns string of all headers.
  71993. */
  71994. // TODO(vicb): returns {[name: string]: string[]}
  71995. /**
  71996. * Returns string of all headers.
  71997. * @return {?}
  71998. */
  71999. Headers.prototype.toJSON = /**
  72000. * Returns string of all headers.
  72001. * @return {?}
  72002. */
  72003. function () {
  72004. var _this = this;
  72005. var /** @type {?} */ serialized = {};
  72006. this._headers.forEach(function (values, name) {
  72007. var /** @type {?} */ split = [];
  72008. values.forEach(function (v) { return split.push.apply(split, v.split(',')); });
  72009. serialized[/** @type {?} */ ((_this._normalizedNames.get(name)))] = split;
  72010. });
  72011. return serialized;
  72012. };
  72013. /**
  72014. * Returns list of header values for a given name.
  72015. */
  72016. /**
  72017. * Returns list of header values for a given name.
  72018. * @param {?} name
  72019. * @return {?}
  72020. */
  72021. Headers.prototype.getAll = /**
  72022. * Returns list of header values for a given name.
  72023. * @param {?} name
  72024. * @return {?}
  72025. */
  72026. function (name) {
  72027. return this.has(name) ? this._headers.get(name.toLowerCase()) || null : null;
  72028. };
  72029. /**
  72030. * This method is not implemented.
  72031. */
  72032. /**
  72033. * This method is not implemented.
  72034. * @return {?}
  72035. */
  72036. Headers.prototype.entries = /**
  72037. * This method is not implemented.
  72038. * @return {?}
  72039. */
  72040. function () { throw new Error('"entries" method is not implemented on Headers class'); };
  72041. /**
  72042. * @param {?} name
  72043. * @return {?}
  72044. */
  72045. Headers.prototype.mayBeSetNormalizedName = /**
  72046. * @param {?} name
  72047. * @return {?}
  72048. */
  72049. function (name) {
  72050. var /** @type {?} */ lcName = name.toLowerCase();
  72051. if (!this._normalizedNames.has(lcName)) {
  72052. this._normalizedNames.set(lcName, name);
  72053. }
  72054. };
  72055. return Headers;
  72056. }());
  72057. /**
  72058. * @fileoverview added by tsickle
  72059. * @suppress {checkTypes} checked by tsc
  72060. */
  72061. /**
  72062. * @license
  72063. * Copyright Google Inc. All Rights Reserved.
  72064. *
  72065. * Use of this source code is governed by an MIT-style license that can be
  72066. * found in the LICENSE file at https://angular.io/license
  72067. */
  72068. /**
  72069. * Creates a response options object to be optionally provided when instantiating a
  72070. * {\@link Response}.
  72071. *
  72072. * This class is based on the `ResponseInit` description in the [Fetch
  72073. * Spec](https://fetch.spec.whatwg.org/#responseinit).
  72074. *
  72075. * All values are null by default. Typical defaults can be found in the
  72076. * {\@link BaseResponseOptions} class, which sub-classes `ResponseOptions`.
  72077. *
  72078. * This class may be used in tests to build {\@link Response Responses} for
  72079. * mock responses (see {\@link MockBackend}).
  72080. *
  72081. * ### Example ([live demo](http://plnkr.co/edit/P9Jkk8e8cz6NVzbcxEsD?p=preview))
  72082. *
  72083. * ```typescript
  72084. * import {ResponseOptions, Response} from '\@angular/http';
  72085. *
  72086. * var options = new ResponseOptions({
  72087. * body: '{"name":"Jeff"}'
  72088. * });
  72089. * var res = new Response(options);
  72090. *
  72091. * console.log('res.json():', res.json()); // Object {name: "Jeff"}
  72092. * ```
  72093. *
  72094. * @deprecated use \@angular/common/http instead
  72095. */
  72096. var ResponseOptions = /** @class */ (function () {
  72097. function ResponseOptions(opts) {
  72098. if (opts === void 0) { opts = {}; }
  72099. var body = opts.body, status = opts.status, headers = opts.headers, statusText = opts.statusText, type = opts.type, url = opts.url;
  72100. this.body = body != null ? body : null;
  72101. this.status = status != null ? status : null;
  72102. this.headers = headers != null ? headers : null;
  72103. this.statusText = statusText != null ? statusText : null;
  72104. this.type = type != null ? type : null;
  72105. this.url = url != null ? url : null;
  72106. }
  72107. /**
  72108. * Creates a copy of the `ResponseOptions` instance, using the optional input as values to
  72109. * override
  72110. * existing values. This method will not change the values of the instance on which it is being
  72111. * called.
  72112. *
  72113. * This may be useful when sharing a base `ResponseOptions` object inside tests,
  72114. * where certain properties may change from test to test.
  72115. *
  72116. * ### Example ([live demo](http://plnkr.co/edit/1lXquqFfgduTFBWjNoRE?p=preview))
  72117. *
  72118. * ```typescript
  72119. * import {ResponseOptions, Response} from '@angular/http';
  72120. *
  72121. * var options = new ResponseOptions({
  72122. * body: {name: 'Jeff'}
  72123. * });
  72124. * var res = new Response(options.merge({
  72125. * url: 'https://google.com'
  72126. * }));
  72127. * console.log('options.url:', options.url); // null
  72128. * console.log('res.json():', res.json()); // Object {name: "Jeff"}
  72129. * console.log('res.url:', res.url); // https://google.com
  72130. * ```
  72131. */
  72132. /**
  72133. * Creates a copy of the `ResponseOptions` instance, using the optional input as values to
  72134. * override
  72135. * existing values. This method will not change the values of the instance on which it is being
  72136. * called.
  72137. *
  72138. * This may be useful when sharing a base `ResponseOptions` object inside tests,
  72139. * where certain properties may change from test to test.
  72140. *
  72141. * ### Example ([live demo](http://plnkr.co/edit/1lXquqFfgduTFBWjNoRE?p=preview))
  72142. *
  72143. * ```typescript
  72144. * import {ResponseOptions, Response} from '\@angular/http';
  72145. *
  72146. * var options = new ResponseOptions({
  72147. * body: {name: 'Jeff'}
  72148. * });
  72149. * var res = new Response(options.merge({
  72150. * url: 'https://google.com'
  72151. * }));
  72152. * console.log('options.url:', options.url); // null
  72153. * console.log('res.json():', res.json()); // Object {name: "Jeff"}
  72154. * console.log('res.url:', res.url); // https://google.com
  72155. * ```
  72156. * @param {?=} options
  72157. * @return {?}
  72158. */
  72159. ResponseOptions.prototype.merge = /**
  72160. * Creates a copy of the `ResponseOptions` instance, using the optional input as values to
  72161. * override
  72162. * existing values. This method will not change the values of the instance on which it is being
  72163. * called.
  72164. *
  72165. * This may be useful when sharing a base `ResponseOptions` object inside tests,
  72166. * where certain properties may change from test to test.
  72167. *
  72168. * ### Example ([live demo](http://plnkr.co/edit/1lXquqFfgduTFBWjNoRE?p=preview))
  72169. *
  72170. * ```typescript
  72171. * import {ResponseOptions, Response} from '\@angular/http';
  72172. *
  72173. * var options = new ResponseOptions({
  72174. * body: {name: 'Jeff'}
  72175. * });
  72176. * var res = new Response(options.merge({
  72177. * url: 'https://google.com'
  72178. * }));
  72179. * console.log('options.url:', options.url); // null
  72180. * console.log('res.json():', res.json()); // Object {name: "Jeff"}
  72181. * console.log('res.url:', res.url); // https://google.com
  72182. * ```
  72183. * @param {?=} options
  72184. * @return {?}
  72185. */
  72186. function (options) {
  72187. return new ResponseOptions({
  72188. body: options && options.body != null ? options.body : this.body,
  72189. status: options && options.status != null ? options.status : this.status,
  72190. headers: options && options.headers != null ? options.headers : this.headers,
  72191. statusText: options && options.statusText != null ? options.statusText : this.statusText,
  72192. type: options && options.type != null ? options.type : this.type,
  72193. url: options && options.url != null ? options.url : this.url,
  72194. });
  72195. };
  72196. return ResponseOptions;
  72197. }());
  72198. /**
  72199. * Subclass of {\@link ResponseOptions}, with default values.
  72200. *
  72201. * Default values:
  72202. * * status: 200
  72203. * * headers: empty {\@link Headers} object
  72204. *
  72205. * This class could be extended and bound to the {\@link ResponseOptions} class
  72206. * when configuring an {\@link Injector}, in order to override the default options
  72207. * used by {\@link Http} to create {\@link Response Responses}.
  72208. *
  72209. * ### Example ([live demo](http://plnkr.co/edit/qv8DLT?p=preview))
  72210. *
  72211. * ```typescript
  72212. * import {provide} from '\@angular/core';
  72213. * import {bootstrap} from '\@angular/platform-browser/browser';
  72214. * import {HTTP_PROVIDERS, Headers, Http, BaseResponseOptions, ResponseOptions} from
  72215. * '\@angular/http';
  72216. * import {App} from './myapp';
  72217. *
  72218. * class MyOptions extends BaseResponseOptions {
  72219. * headers:Headers = new Headers({network: 'github'});
  72220. * }
  72221. *
  72222. * bootstrap(App, [HTTP_PROVIDERS, {provide: ResponseOptions, useClass: MyOptions}]);
  72223. * ```
  72224. *
  72225. * The options could also be extended when manually creating a {\@link Response}
  72226. * object.
  72227. *
  72228. * ### Example ([live demo](http://plnkr.co/edit/VngosOWiaExEtbstDoix?p=preview))
  72229. *
  72230. * ```
  72231. * import {BaseResponseOptions, Response} from '\@angular/http';
  72232. *
  72233. * var options = new BaseResponseOptions();
  72234. * var res = new Response(options.merge({
  72235. * body: 'Angular',
  72236. * headers: new Headers({framework: 'angular'})
  72237. * }));
  72238. * console.log('res.headers.get("framework"):', res.headers.get('framework')); // angular
  72239. * console.log('res.text():', res.text()); // Angular;
  72240. * ```
  72241. *
  72242. * @deprecated use \@angular/common/http instead
  72243. */
  72244. var BaseResponseOptions = /** @class */ (function (_super) {
  72245. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(BaseResponseOptions, _super);
  72246. function BaseResponseOptions() {
  72247. return _super.call(this, { status: 200, statusText: 'Ok', type: ResponseType.Default, headers: new Headers() }) || this;
  72248. }
  72249. BaseResponseOptions.decorators = [
  72250. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  72251. ];
  72252. /** @nocollapse */
  72253. BaseResponseOptions.ctorParameters = function () { return []; };
  72254. return BaseResponseOptions;
  72255. }(ResponseOptions));
  72256. /**
  72257. * @fileoverview added by tsickle
  72258. * @suppress {checkTypes} checked by tsc
  72259. */
  72260. /**
  72261. * @license
  72262. * Copyright Google Inc. All Rights Reserved.
  72263. *
  72264. * Use of this source code is governed by an MIT-style license that can be
  72265. * found in the LICENSE file at https://angular.io/license
  72266. */
  72267. /**
  72268. * Abstract class from which real backends are derived.
  72269. *
  72270. * The primary purpose of a `ConnectionBackend` is to create new connections to fulfill a given
  72271. * {\@link Request}.
  72272. *
  72273. * @deprecated use \@angular/common/http instead
  72274. * @abstract
  72275. */
  72276. var ConnectionBackend = /** @class */ (function () {
  72277. function ConnectionBackend() {
  72278. }
  72279. return ConnectionBackend;
  72280. }());
  72281. /**
  72282. * Abstract class from which real connections are derived.
  72283. *
  72284. * @deprecated use \@angular/common/http instead
  72285. * @abstract
  72286. */
  72287. var Connection = /** @class */ (function () {
  72288. function Connection() {
  72289. }
  72290. return Connection;
  72291. }());
  72292. /**
  72293. * An XSRFStrategy configures XSRF protection (e.g. via headers) on an HTTP request.
  72294. *
  72295. * @deprecated use \@angular/common/http instead
  72296. * @abstract
  72297. */
  72298. var XSRFStrategy = /** @class */ (function () {
  72299. function XSRFStrategy() {
  72300. }
  72301. return XSRFStrategy;
  72302. }());
  72303. /**
  72304. * Interface for options to construct a RequestOptions, based on
  72305. * [RequestInit](https://fetch.spec.whatwg.org/#requestinit) from the Fetch spec.
  72306. *
  72307. * @deprecated use \@angular/common/http instead
  72308. * @record
  72309. */
  72310. /**
  72311. * Required structure when constructing new Request();
  72312. * @record
  72313. */
  72314. /**
  72315. * Interface for options to construct a Response, based on
  72316. * [ResponseInit](https://fetch.spec.whatwg.org/#responseinit) from the Fetch spec.
  72317. *
  72318. * @deprecated use \@angular/common/http instead
  72319. * @record
  72320. */
  72321. /**
  72322. * @fileoverview added by tsickle
  72323. * @suppress {checkTypes} checked by tsc
  72324. */
  72325. /**
  72326. * @license
  72327. * Copyright Google Inc. All Rights Reserved.
  72328. *
  72329. * Use of this source code is governed by an MIT-style license that can be
  72330. * found in the LICENSE file at https://angular.io/license
  72331. */
  72332. /**
  72333. * @param {?} method
  72334. * @return {?}
  72335. */
  72336. function normalizeMethodName(method) {
  72337. if (typeof method !== 'string')
  72338. return method;
  72339. switch (method.toUpperCase()) {
  72340. case 'GET':
  72341. return RequestMethod.Get;
  72342. case 'POST':
  72343. return RequestMethod.Post;
  72344. case 'PUT':
  72345. return RequestMethod.Put;
  72346. case 'DELETE':
  72347. return RequestMethod.Delete;
  72348. case 'OPTIONS':
  72349. return RequestMethod.Options;
  72350. case 'HEAD':
  72351. return RequestMethod.Head;
  72352. case 'PATCH':
  72353. return RequestMethod.Patch;
  72354. }
  72355. throw new Error("Invalid request method. The method \"" + method + "\" is not supported.");
  72356. }
  72357. var isSuccess = function (status) { return (status >= 200 && status < 300); };
  72358. /**
  72359. * @param {?} xhr
  72360. * @return {?}
  72361. */
  72362. function getResponseURL(xhr) {
  72363. if ('responseURL' in xhr) {
  72364. return xhr.responseURL;
  72365. }
  72366. if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {
  72367. return xhr.getResponseHeader('X-Request-URL');
  72368. }
  72369. return null;
  72370. }
  72371. /**
  72372. * @param {?} input
  72373. * @return {?}
  72374. */
  72375. /**
  72376. * @param {?} input
  72377. * @return {?}
  72378. */
  72379. function stringToArrayBuffer(input) {
  72380. var /** @type {?} */ view = new Uint16Array(input.length);
  72381. for (var /** @type {?} */ i = 0, /** @type {?} */ strLen = input.length; i < strLen; i++) {
  72382. view[i] = input.charCodeAt(i);
  72383. }
  72384. return view.buffer;
  72385. }
  72386. /**
  72387. * @fileoverview added by tsickle
  72388. * @suppress {checkTypes} checked by tsc
  72389. */
  72390. /**
  72391. * @license
  72392. * Copyright Google Inc. All Rights Reserved.
  72393. *
  72394. * Use of this source code is governed by an MIT-style license that can be
  72395. * found in the LICENSE file at https://angular.io/license
  72396. */
  72397. /**
  72398. * @param {?=} rawParams
  72399. * @return {?}
  72400. */
  72401. function paramParser(rawParams) {
  72402. if (rawParams === void 0) { rawParams = ''; }
  72403. var /** @type {?} */ map = new Map();
  72404. if (rawParams.length > 0) {
  72405. var /** @type {?} */ params = rawParams.split('&');
  72406. params.forEach(function (param) {
  72407. var /** @type {?} */ eqIdx = param.indexOf('=');
  72408. var _a = eqIdx == -1 ? [param, ''] : [param.slice(0, eqIdx), param.slice(eqIdx + 1)], key = _a[0], val = _a[1];
  72409. var /** @type {?} */ list = map.get(key) || [];
  72410. list.push(val);
  72411. map.set(key, list);
  72412. });
  72413. }
  72414. return map;
  72415. }
  72416. /**
  72417. * @deprecated use \@angular/common/http instead
  72418. *
  72419. */
  72420. var QueryEncoder = /** @class */ (function () {
  72421. function QueryEncoder() {
  72422. }
  72423. /**
  72424. * @param {?} k
  72425. * @return {?}
  72426. */
  72427. QueryEncoder.prototype.encodeKey = /**
  72428. * @param {?} k
  72429. * @return {?}
  72430. */
  72431. function (k) { return standardEncoding(k); };
  72432. /**
  72433. * @param {?} v
  72434. * @return {?}
  72435. */
  72436. QueryEncoder.prototype.encodeValue = /**
  72437. * @param {?} v
  72438. * @return {?}
  72439. */
  72440. function (v) { return standardEncoding(v); };
  72441. return QueryEncoder;
  72442. }());
  72443. /**
  72444. * @param {?} v
  72445. * @return {?}
  72446. */
  72447. function standardEncoding(v) {
  72448. return encodeURIComponent(v)
  72449. .replace(/%40/gi, '@')
  72450. .replace(/%3A/gi, ':')
  72451. .replace(/%24/gi, '$')
  72452. .replace(/%2C/gi, ',')
  72453. .replace(/%3B/gi, ';')
  72454. .replace(/%2B/gi, '+')
  72455. .replace(/%3D/gi, '=')
  72456. .replace(/%3F/gi, '?')
  72457. .replace(/%2F/gi, '/');
  72458. }
  72459. /**
  72460. * Map-like representation of url search parameters, based on
  72461. * [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,
  72462. * with several extensions for merging URLSearchParams objects:
  72463. * - setAll()
  72464. * - appendAll()
  72465. * - replaceAll()
  72466. *
  72467. * This class accepts an optional second parameter of ${\@link QueryEncoder},
  72468. * which is used to serialize parameters before making a request. By default,
  72469. * `QueryEncoder` encodes keys and values of parameters using `encodeURIComponent`,
  72470. * and then un-encodes certain characters that are allowed to be part of the query
  72471. * according to IETF RFC 3986: https://tools.ietf.org/html/rfc3986.
  72472. *
  72473. * These are the characters that are not encoded: `! $ \' ( ) * + , ; A 9 - . _ ~ ? /`
  72474. *
  72475. * If the set of allowed query characters is not acceptable for a particular backend,
  72476. * `QueryEncoder` can be subclassed and provided as the 2nd argument to URLSearchParams.
  72477. *
  72478. * ```
  72479. * import {URLSearchParams, QueryEncoder} from '\@angular/http';
  72480. * class MyQueryEncoder extends QueryEncoder {
  72481. * encodeKey(k: string): string {
  72482. * return myEncodingFunction(k);
  72483. * }
  72484. *
  72485. * encodeValue(v: string): string {
  72486. * return myEncodingFunction(v);
  72487. * }
  72488. * }
  72489. *
  72490. * let params = new URLSearchParams('', new MyQueryEncoder());
  72491. * ```
  72492. * @deprecated use \@angular/common/http instead
  72493. */
  72494. var URLSearchParams = /** @class */ (function () {
  72495. function URLSearchParams(rawParams, queryEncoder) {
  72496. if (rawParams === void 0) { rawParams = ''; }
  72497. if (queryEncoder === void 0) { queryEncoder = new QueryEncoder(); }
  72498. this.rawParams = rawParams;
  72499. this.queryEncoder = queryEncoder;
  72500. this.paramsMap = paramParser(rawParams);
  72501. }
  72502. /**
  72503. * @return {?}
  72504. */
  72505. URLSearchParams.prototype.clone = /**
  72506. * @return {?}
  72507. */
  72508. function () {
  72509. var /** @type {?} */ clone = new URLSearchParams('', this.queryEncoder);
  72510. clone.appendAll(this);
  72511. return clone;
  72512. };
  72513. /**
  72514. * @param {?} param
  72515. * @return {?}
  72516. */
  72517. URLSearchParams.prototype.has = /**
  72518. * @param {?} param
  72519. * @return {?}
  72520. */
  72521. function (param) { return this.paramsMap.has(param); };
  72522. /**
  72523. * @param {?} param
  72524. * @return {?}
  72525. */
  72526. URLSearchParams.prototype.get = /**
  72527. * @param {?} param
  72528. * @return {?}
  72529. */
  72530. function (param) {
  72531. var /** @type {?} */ storedParam = this.paramsMap.get(param);
  72532. return Array.isArray(storedParam) ? storedParam[0] : null;
  72533. };
  72534. /**
  72535. * @param {?} param
  72536. * @return {?}
  72537. */
  72538. URLSearchParams.prototype.getAll = /**
  72539. * @param {?} param
  72540. * @return {?}
  72541. */
  72542. function (param) { return this.paramsMap.get(param) || []; };
  72543. /**
  72544. * @param {?} param
  72545. * @param {?} val
  72546. * @return {?}
  72547. */
  72548. URLSearchParams.prototype.set = /**
  72549. * @param {?} param
  72550. * @param {?} val
  72551. * @return {?}
  72552. */
  72553. function (param, val) {
  72554. if (val === void 0 || val === null) {
  72555. this.delete(param);
  72556. return;
  72557. }
  72558. var /** @type {?} */ list = this.paramsMap.get(param) || [];
  72559. list.length = 0;
  72560. list.push(val);
  72561. this.paramsMap.set(param, list);
  72562. };
  72563. // A merge operation
  72564. // For each name-values pair in `searchParams`, perform `set(name, values[0])`
  72565. //
  72566. // E.g: "a=[1,2,3], c=[8]" + "a=[4,5,6], b=[7]" = "a=[4], c=[8], b=[7]"
  72567. //
  72568. // TODO(@caitp): document this better
  72569. /**
  72570. * @param {?} searchParams
  72571. * @return {?}
  72572. */
  72573. URLSearchParams.prototype.setAll = /**
  72574. * @param {?} searchParams
  72575. * @return {?}
  72576. */
  72577. function (searchParams) {
  72578. var _this = this;
  72579. searchParams.paramsMap.forEach(function (value, param) {
  72580. var /** @type {?} */ list = _this.paramsMap.get(param) || [];
  72581. list.length = 0;
  72582. list.push(value[0]);
  72583. _this.paramsMap.set(param, list);
  72584. });
  72585. };
  72586. /**
  72587. * @param {?} param
  72588. * @param {?} val
  72589. * @return {?}
  72590. */
  72591. URLSearchParams.prototype.append = /**
  72592. * @param {?} param
  72593. * @param {?} val
  72594. * @return {?}
  72595. */
  72596. function (param, val) {
  72597. if (val === void 0 || val === null)
  72598. return;
  72599. var /** @type {?} */ list = this.paramsMap.get(param) || [];
  72600. list.push(val);
  72601. this.paramsMap.set(param, list);
  72602. };
  72603. // A merge operation
  72604. // For each name-values pair in `searchParams`, perform `append(name, value)`
  72605. // for each value in `values`.
  72606. //
  72607. // E.g: "a=[1,2], c=[8]" + "a=[3,4], b=[7]" = "a=[1,2,3,4], c=[8], b=[7]"
  72608. //
  72609. // TODO(@caitp): document this better
  72610. /**
  72611. * @param {?} searchParams
  72612. * @return {?}
  72613. */
  72614. URLSearchParams.prototype.appendAll = /**
  72615. * @param {?} searchParams
  72616. * @return {?}
  72617. */
  72618. function (searchParams) {
  72619. var _this = this;
  72620. searchParams.paramsMap.forEach(function (value, param) {
  72621. var /** @type {?} */ list = _this.paramsMap.get(param) || [];
  72622. for (var /** @type {?} */ i = 0; i < value.length; ++i) {
  72623. list.push(value[i]);
  72624. }
  72625. _this.paramsMap.set(param, list);
  72626. });
  72627. };
  72628. // A merge operation
  72629. // For each name-values pair in `searchParams`, perform `delete(name)`,
  72630. // followed by `set(name, values)`
  72631. //
  72632. // E.g: "a=[1,2,3], c=[8]" + "a=[4,5,6], b=[7]" = "a=[4,5,6], c=[8], b=[7]"
  72633. //
  72634. // TODO(@caitp): document this better
  72635. /**
  72636. * @param {?} searchParams
  72637. * @return {?}
  72638. */
  72639. URLSearchParams.prototype.replaceAll = /**
  72640. * @param {?} searchParams
  72641. * @return {?}
  72642. */
  72643. function (searchParams) {
  72644. var _this = this;
  72645. searchParams.paramsMap.forEach(function (value, param) {
  72646. var /** @type {?} */ list = _this.paramsMap.get(param) || [];
  72647. list.length = 0;
  72648. for (var /** @type {?} */ i = 0; i < value.length; ++i) {
  72649. list.push(value[i]);
  72650. }
  72651. _this.paramsMap.set(param, list);
  72652. });
  72653. };
  72654. /**
  72655. * @return {?}
  72656. */
  72657. URLSearchParams.prototype.toString = /**
  72658. * @return {?}
  72659. */
  72660. function () {
  72661. var _this = this;
  72662. var /** @type {?} */ paramsList = [];
  72663. this.paramsMap.forEach(function (values, k) {
  72664. values.forEach(function (v) {
  72665. return paramsList.push(_this.queryEncoder.encodeKey(k) + '=' + _this.queryEncoder.encodeValue(v));
  72666. });
  72667. });
  72668. return paramsList.join('&');
  72669. };
  72670. /**
  72671. * @param {?} param
  72672. * @return {?}
  72673. */
  72674. URLSearchParams.prototype.delete = /**
  72675. * @param {?} param
  72676. * @return {?}
  72677. */
  72678. function (param) { this.paramsMap.delete(param); };
  72679. return URLSearchParams;
  72680. }());
  72681. /**
  72682. * @fileoverview added by tsickle
  72683. * @suppress {checkTypes} checked by tsc
  72684. */
  72685. /**
  72686. * @license
  72687. * Copyright Google Inc. All Rights Reserved.
  72688. *
  72689. * Use of this source code is governed by an MIT-style license that can be
  72690. * found in the LICENSE file at https://angular.io/license
  72691. */
  72692. /**
  72693. * HTTP request body used by both {\@link Request} and {\@link Response}
  72694. * https://fetch.spec.whatwg.org/#body
  72695. * @abstract
  72696. */
  72697. var Body = /** @class */ (function () {
  72698. function Body() {
  72699. }
  72700. /**
  72701. * Attempts to return body as parsed `JSON` object, or raises an exception.
  72702. */
  72703. /**
  72704. * Attempts to return body as parsed `JSON` object, or raises an exception.
  72705. * @return {?}
  72706. */
  72707. Body.prototype.json = /**
  72708. * Attempts to return body as parsed `JSON` object, or raises an exception.
  72709. * @return {?}
  72710. */
  72711. function () {
  72712. if (typeof this._body === 'string') {
  72713. return JSON.parse(/** @type {?} */ (this._body));
  72714. }
  72715. if (this._body instanceof ArrayBuffer) {
  72716. return JSON.parse(this.text());
  72717. }
  72718. return this._body;
  72719. };
  72720. /**
  72721. * Returns the body as a string, presuming `toString()` can be called on the response body.
  72722. *
  72723. * When decoding an `ArrayBuffer`, the optional `encodingHint` parameter determines how the
  72724. * bytes in the buffer will be interpreted. Valid values are:
  72725. *
  72726. * - `legacy` - incorrectly interpret the bytes as UTF-16 (technically, UCS-2). Only characters
  72727. * in the Basic Multilingual Plane are supported, surrogate pairs are not handled correctly.
  72728. * In addition, the endianness of the 16-bit octet pairs in the `ArrayBuffer` is not taken
  72729. * into consideration. This is the default behavior to avoid breaking apps, but should be
  72730. * considered deprecated.
  72731. *
  72732. * - `iso-8859` - interpret the bytes as ISO-8859 (which can be used for ASCII encoded text).
  72733. */
  72734. /**
  72735. * Returns the body as a string, presuming `toString()` can be called on the response body.
  72736. *
  72737. * When decoding an `ArrayBuffer`, the optional `encodingHint` parameter determines how the
  72738. * bytes in the buffer will be interpreted. Valid values are:
  72739. *
  72740. * - `legacy` - incorrectly interpret the bytes as UTF-16 (technically, UCS-2). Only characters
  72741. * in the Basic Multilingual Plane are supported, surrogate pairs are not handled correctly.
  72742. * In addition, the endianness of the 16-bit octet pairs in the `ArrayBuffer` is not taken
  72743. * into consideration. This is the default behavior to avoid breaking apps, but should be
  72744. * considered deprecated.
  72745. *
  72746. * - `iso-8859` - interpret the bytes as ISO-8859 (which can be used for ASCII encoded text).
  72747. * @param {?=} encodingHint
  72748. * @return {?}
  72749. */
  72750. Body.prototype.text = /**
  72751. * Returns the body as a string, presuming `toString()` can be called on the response body.
  72752. *
  72753. * When decoding an `ArrayBuffer`, the optional `encodingHint` parameter determines how the
  72754. * bytes in the buffer will be interpreted. Valid values are:
  72755. *
  72756. * - `legacy` - incorrectly interpret the bytes as UTF-16 (technically, UCS-2). Only characters
  72757. * in the Basic Multilingual Plane are supported, surrogate pairs are not handled correctly.
  72758. * In addition, the endianness of the 16-bit octet pairs in the `ArrayBuffer` is not taken
  72759. * into consideration. This is the default behavior to avoid breaking apps, but should be
  72760. * considered deprecated.
  72761. *
  72762. * - `iso-8859` - interpret the bytes as ISO-8859 (which can be used for ASCII encoded text).
  72763. * @param {?=} encodingHint
  72764. * @return {?}
  72765. */
  72766. function (encodingHint) {
  72767. if (encodingHint === void 0) { encodingHint = 'legacy'; }
  72768. if (this._body instanceof URLSearchParams) {
  72769. return this._body.toString();
  72770. }
  72771. if (this._body instanceof ArrayBuffer) {
  72772. switch (encodingHint) {
  72773. case 'legacy':
  72774. return String.fromCharCode.apply(null, new Uint16Array(/** @type {?} */ (this._body)));
  72775. case 'iso-8859':
  72776. return String.fromCharCode.apply(null, new Uint8Array(/** @type {?} */ (this._body)));
  72777. default:
  72778. throw new Error("Invalid value for encodingHint: " + encodingHint);
  72779. }
  72780. }
  72781. if (this._body == null) {
  72782. return '';
  72783. }
  72784. if (typeof this._body === 'object') {
  72785. return JSON.stringify(this._body, null, 2);
  72786. }
  72787. return this._body.toString();
  72788. };
  72789. /**
  72790. * Return the body as an ArrayBuffer
  72791. */
  72792. /**
  72793. * Return the body as an ArrayBuffer
  72794. * @return {?}
  72795. */
  72796. Body.prototype.arrayBuffer = /**
  72797. * Return the body as an ArrayBuffer
  72798. * @return {?}
  72799. */
  72800. function () {
  72801. if (this._body instanceof ArrayBuffer) {
  72802. return /** @type {?} */ (this._body);
  72803. }
  72804. return stringToArrayBuffer(this.text());
  72805. };
  72806. /**
  72807. * Returns the request's body as a Blob, assuming that body exists.
  72808. */
  72809. /**
  72810. * Returns the request's body as a Blob, assuming that body exists.
  72811. * @return {?}
  72812. */
  72813. Body.prototype.blob = /**
  72814. * Returns the request's body as a Blob, assuming that body exists.
  72815. * @return {?}
  72816. */
  72817. function () {
  72818. if (this._body instanceof Blob) {
  72819. return /** @type {?} */ (this._body);
  72820. }
  72821. if (this._body instanceof ArrayBuffer) {
  72822. return new Blob([this._body]);
  72823. }
  72824. throw new Error('The request body isn\'t either a blob or an array buffer');
  72825. };
  72826. return Body;
  72827. }());
  72828. /**
  72829. * @fileoverview added by tsickle
  72830. * @suppress {checkTypes} checked by tsc
  72831. */
  72832. /**
  72833. * @license
  72834. * Copyright Google Inc. All Rights Reserved.
  72835. *
  72836. * Use of this source code is governed by an MIT-style license that can be
  72837. * found in the LICENSE file at https://angular.io/license
  72838. */
  72839. /**
  72840. * Creates `Response` instances from provided values.
  72841. *
  72842. * Though this object isn't
  72843. * usually instantiated by end-users, it is the primary object interacted with when it comes time to
  72844. * add data to a view.
  72845. *
  72846. * ### Example
  72847. *
  72848. * ```
  72849. * http.request('my-friends.txt').subscribe(response => this.friends = response.text());
  72850. * ```
  72851. *
  72852. * The Response's interface is inspired by the Response constructor defined in the [Fetch
  72853. * Spec](https://fetch.spec.whatwg.org/#response-class), but is considered a static value whose body
  72854. * can be accessed many times. There are other differences in the implementation, but this is the
  72855. * most significant.
  72856. *
  72857. * @deprecated use \@angular/common/http instead
  72858. */
  72859. var Response = /** @class */ (function (_super) {
  72860. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(Response, _super);
  72861. function Response(responseOptions) {
  72862. var _this = _super.call(this) || this;
  72863. _this._body = responseOptions.body;
  72864. _this.status = /** @type {?} */ ((responseOptions.status));
  72865. _this.ok = (_this.status >= 200 && _this.status <= 299);
  72866. _this.statusText = responseOptions.statusText;
  72867. _this.headers = responseOptions.headers;
  72868. _this.type = /** @type {?} */ ((responseOptions.type));
  72869. _this.url = /** @type {?} */ ((responseOptions.url));
  72870. return _this;
  72871. }
  72872. /**
  72873. * @return {?}
  72874. */
  72875. Response.prototype.toString = /**
  72876. * @return {?}
  72877. */
  72878. function () {
  72879. return "Response with status: " + this.status + " " + this.statusText + " for URL: " + this.url;
  72880. };
  72881. return Response;
  72882. }(Body));
  72883. /**
  72884. * @fileoverview added by tsickle
  72885. * @suppress {checkTypes} checked by tsc
  72886. */
  72887. /**
  72888. * @license
  72889. * Copyright Google Inc. All Rights Reserved.
  72890. *
  72891. * Use of this source code is governed by an MIT-style license that can be
  72892. * found in the LICENSE file at https://angular.io/license
  72893. */
  72894. var _nextRequestId = 0;
  72895. var JSONP_HOME = '__ng_jsonp__';
  72896. var _jsonpConnections = null;
  72897. /**
  72898. * @return {?}
  72899. */
  72900. function _getJsonpConnections() {
  72901. var /** @type {?} */ w = typeof window == 'object' ? window : {};
  72902. if (_jsonpConnections === null) {
  72903. _jsonpConnections = w[JSONP_HOME] = {};
  72904. }
  72905. return _jsonpConnections;
  72906. }
  72907. var BrowserJsonp = /** @class */ (function () {
  72908. function BrowserJsonp() {
  72909. }
  72910. // Construct a <script> element with the specified URL
  72911. /**
  72912. * @param {?} url
  72913. * @return {?}
  72914. */
  72915. BrowserJsonp.prototype.build = /**
  72916. * @param {?} url
  72917. * @return {?}
  72918. */
  72919. function (url) {
  72920. var /** @type {?} */ node = document.createElement('script');
  72921. node.src = url;
  72922. return node;
  72923. };
  72924. /**
  72925. * @return {?}
  72926. */
  72927. BrowserJsonp.prototype.nextRequestID = /**
  72928. * @return {?}
  72929. */
  72930. function () { return "__req" + _nextRequestId++; };
  72931. /**
  72932. * @param {?} id
  72933. * @return {?}
  72934. */
  72935. BrowserJsonp.prototype.requestCallback = /**
  72936. * @param {?} id
  72937. * @return {?}
  72938. */
  72939. function (id) { return JSONP_HOME + "." + id + ".finished"; };
  72940. /**
  72941. * @param {?} id
  72942. * @param {?} connection
  72943. * @return {?}
  72944. */
  72945. BrowserJsonp.prototype.exposeConnection = /**
  72946. * @param {?} id
  72947. * @param {?} connection
  72948. * @return {?}
  72949. */
  72950. function (id, connection) {
  72951. var /** @type {?} */ connections = _getJsonpConnections();
  72952. connections[id] = connection;
  72953. };
  72954. /**
  72955. * @param {?} id
  72956. * @return {?}
  72957. */
  72958. BrowserJsonp.prototype.removeConnection = /**
  72959. * @param {?} id
  72960. * @return {?}
  72961. */
  72962. function (id) {
  72963. var /** @type {?} */ connections = _getJsonpConnections();
  72964. connections[id] = null;
  72965. };
  72966. // Attach the <script> element to the DOM
  72967. /**
  72968. * @param {?} node
  72969. * @return {?}
  72970. */
  72971. BrowserJsonp.prototype.send = /**
  72972. * @param {?} node
  72973. * @return {?}
  72974. */
  72975. function (node) { document.body.appendChild(/** @type {?} */ ((node))); };
  72976. // Remove <script> element from the DOM
  72977. /**
  72978. * @param {?} node
  72979. * @return {?}
  72980. */
  72981. BrowserJsonp.prototype.cleanup = /**
  72982. * @param {?} node
  72983. * @return {?}
  72984. */
  72985. function (node) {
  72986. if (node.parentNode) {
  72987. node.parentNode.removeChild(/** @type {?} */ ((node)));
  72988. }
  72989. };
  72990. BrowserJsonp.decorators = [
  72991. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  72992. ];
  72993. /** @nocollapse */
  72994. BrowserJsonp.ctorParameters = function () { return []; };
  72995. return BrowserJsonp;
  72996. }());
  72997. /**
  72998. * @fileoverview added by tsickle
  72999. * @suppress {checkTypes} checked by tsc
  73000. */
  73001. /**
  73002. * @license
  73003. * Copyright Google Inc. All Rights Reserved.
  73004. *
  73005. * Use of this source code is governed by an MIT-style license that can be
  73006. * found in the LICENSE file at https://angular.io/license
  73007. */
  73008. var JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';
  73009. var JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';
  73010. /**
  73011. * Base class for an in-flight JSONP request.
  73012. *
  73013. * @deprecated use \@angular/common/http instead
  73014. */
  73015. var JSONPConnection = /** @class */ (function () {
  73016. /** @internal */
  73017. function JSONPConnection(req, _dom, baseResponseOptions) {
  73018. var _this = this;
  73019. this._dom = _dom;
  73020. this.baseResponseOptions = baseResponseOptions;
  73021. this._finished = false;
  73022. if (req.method !== RequestMethod.Get) {
  73023. throw new TypeError(JSONP_ERR_WRONG_METHOD);
  73024. }
  73025. this.request = req;
  73026. this.response = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"](function (responseObserver) {
  73027. _this.readyState = ReadyState.Loading;
  73028. var /** @type {?} */ id = _this._id = _dom.nextRequestID();
  73029. _dom.exposeConnection(id, _this);
  73030. // Workaround Dart
  73031. // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`);
  73032. var /** @type {?} */ callback = _dom.requestCallback(_this._id);
  73033. var /** @type {?} */ url = req.url;
  73034. if (url.indexOf('=JSONP_CALLBACK&') > -1) {
  73035. url = url.replace('=JSONP_CALLBACK&', "=" + callback + "&");
  73036. }
  73037. else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {
  73038. url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + ("=" + callback);
  73039. }
  73040. var /** @type {?} */ script = _this._script = _dom.build(url);
  73041. var /** @type {?} */ onLoad = function (event) {
  73042. if (_this.readyState === ReadyState.Cancelled)
  73043. return;
  73044. _this.readyState = ReadyState.Done;
  73045. _dom.cleanup(script);
  73046. if (!_this._finished) {
  73047. var /** @type {?} */ responseOptions_1 = new ResponseOptions({ body: JSONP_ERR_NO_CALLBACK, type: ResponseType.Error, url: url });
  73048. if (baseResponseOptions) {
  73049. responseOptions_1 = baseResponseOptions.merge(responseOptions_1);
  73050. }
  73051. responseObserver.error(new Response(responseOptions_1));
  73052. return;
  73053. }
  73054. var /** @type {?} */ responseOptions = new ResponseOptions({ body: _this._responseData, url: url });
  73055. if (_this.baseResponseOptions) {
  73056. responseOptions = _this.baseResponseOptions.merge(responseOptions);
  73057. }
  73058. responseObserver.next(new Response(responseOptions));
  73059. responseObserver.complete();
  73060. };
  73061. var /** @type {?} */ onError = function (error) {
  73062. if (_this.readyState === ReadyState.Cancelled)
  73063. return;
  73064. _this.readyState = ReadyState.Done;
  73065. _dom.cleanup(script);
  73066. var /** @type {?} */ responseOptions = new ResponseOptions({ body: error.message, type: ResponseType.Error });
  73067. if (baseResponseOptions) {
  73068. responseOptions = baseResponseOptions.merge(responseOptions);
  73069. }
  73070. responseObserver.error(new Response(responseOptions));
  73071. };
  73072. script.addEventListener('load', onLoad);
  73073. script.addEventListener('error', onError);
  73074. _dom.send(script);
  73075. return function () {
  73076. _this.readyState = ReadyState.Cancelled;
  73077. script.removeEventListener('load', onLoad);
  73078. script.removeEventListener('error', onError);
  73079. _this._dom.cleanup(script);
  73080. };
  73081. });
  73082. }
  73083. /**
  73084. * Callback called when the JSONP request completes, to notify the application
  73085. * of the new data.
  73086. */
  73087. /**
  73088. * Callback called when the JSONP request completes, to notify the application
  73089. * of the new data.
  73090. * @param {?=} data
  73091. * @return {?}
  73092. */
  73093. JSONPConnection.prototype.finished = /**
  73094. * Callback called when the JSONP request completes, to notify the application
  73095. * of the new data.
  73096. * @param {?=} data
  73097. * @return {?}
  73098. */
  73099. function (data) {
  73100. // Don't leak connections
  73101. this._finished = true;
  73102. this._dom.removeConnection(this._id);
  73103. if (this.readyState === ReadyState.Cancelled)
  73104. return;
  73105. this._responseData = data;
  73106. };
  73107. return JSONPConnection;
  73108. }());
  73109. /**
  73110. * A {\@link ConnectionBackend} that uses the JSONP strategy of making requests.
  73111. *
  73112. * @deprecated use \@angular/common/http instead
  73113. */
  73114. var JSONPBackend = /** @class */ (function (_super) {
  73115. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(JSONPBackend, _super);
  73116. /** @internal */
  73117. function JSONPBackend(_browserJSONP, _baseResponseOptions) {
  73118. var _this = _super.call(this) || this;
  73119. _this._browserJSONP = _browserJSONP;
  73120. _this._baseResponseOptions = _baseResponseOptions;
  73121. return _this;
  73122. }
  73123. /**
  73124. * @param {?} request
  73125. * @return {?}
  73126. */
  73127. JSONPBackend.prototype.createConnection = /**
  73128. * @param {?} request
  73129. * @return {?}
  73130. */
  73131. function (request) {
  73132. return new JSONPConnection(request, this._browserJSONP, this._baseResponseOptions);
  73133. };
  73134. JSONPBackend.decorators = [
  73135. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  73136. ];
  73137. /** @nocollapse */
  73138. JSONPBackend.ctorParameters = function () { return [
  73139. { type: BrowserJsonp, },
  73140. { type: ResponseOptions, },
  73141. ]; };
  73142. return JSONPBackend;
  73143. }(ConnectionBackend));
  73144. /**
  73145. * @fileoverview added by tsickle
  73146. * @suppress {checkTypes} checked by tsc
  73147. */
  73148. /**
  73149. * @license
  73150. * Copyright Google Inc. All Rights Reserved.
  73151. *
  73152. * Use of this source code is governed by an MIT-style license that can be
  73153. * found in the LICENSE file at https://angular.io/license
  73154. */
  73155. var XSSI_PREFIX = /^\)\]\}',?\n/;
  73156. /**
  73157. * Creates connections using `XMLHttpRequest`. Given a fully-qualified
  73158. * request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the
  73159. * request.
  73160. *
  73161. * This class would typically not be created or interacted with directly inside applications, though
  73162. * the {\@link MockConnection} may be interacted with in tests.
  73163. *
  73164. * @deprecated use \@angular/common/http instead
  73165. */
  73166. var XHRConnection = /** @class */ (function () {
  73167. function XHRConnection(req, browserXHR, baseResponseOptions) {
  73168. var _this = this;
  73169. this.request = req;
  73170. this.response = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__["Observable"](function (responseObserver) {
  73171. var /** @type {?} */ _xhr = browserXHR.build();
  73172. _xhr.open(RequestMethod[req.method].toUpperCase(), req.url);
  73173. if (req.withCredentials != null) {
  73174. _xhr.withCredentials = req.withCredentials;
  73175. }
  73176. // load event handler
  73177. var /** @type {?} */ onLoad = function () {
  73178. // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
  73179. var /** @type {?} */ status = _xhr.status === 1223 ? 204 : _xhr.status;
  73180. var /** @type {?} */ body = null;
  73181. // HTTP 204 means no content
  73182. if (status !== 204) {
  73183. // responseText is the old-school way of retrieving response (supported by IE8 & 9)
  73184. // response/responseType properties were introduced in ResourceLoader Level2 spec
  73185. // (supported by IE10)
  73186. body = (typeof _xhr.response === 'undefined') ? _xhr.responseText : _xhr.response;
  73187. // Implicitly strip a potential XSSI prefix.
  73188. if (typeof body === 'string') {
  73189. body = body.replace(XSSI_PREFIX, '');
  73190. }
  73191. }
  73192. // fix status code when it is 0 (0 status is undocumented).
  73193. // Occurs when accessing file resources or on Android 4.1 stock browser
  73194. // while retrieving files from application cache.
  73195. if (status === 0) {
  73196. status = body ? 200 : 0;
  73197. }
  73198. var /** @type {?} */ headers = Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders());
  73199. // IE 9 does not provide the way to get URL of response
  73200. var /** @type {?} */ url = getResponseURL(_xhr) || req.url;
  73201. var /** @type {?} */ statusText = _xhr.statusText || 'OK';
  73202. var /** @type {?} */ responseOptions = new ResponseOptions({ body: body, status: status, headers: headers, statusText: statusText, url: url });
  73203. if (baseResponseOptions != null) {
  73204. responseOptions = baseResponseOptions.merge(responseOptions);
  73205. }
  73206. var /** @type {?} */ response = new Response(responseOptions);
  73207. response.ok = isSuccess(status);
  73208. if (response.ok) {
  73209. responseObserver.next(response);
  73210. // TODO(gdi2290): defer complete if array buffer until done
  73211. responseObserver.complete();
  73212. return;
  73213. }
  73214. responseObserver.error(response);
  73215. };
  73216. // error event handler
  73217. var /** @type {?} */ onError = function (err) {
  73218. var /** @type {?} */ responseOptions = new ResponseOptions({
  73219. body: err,
  73220. type: ResponseType.Error,
  73221. status: _xhr.status,
  73222. statusText: _xhr.statusText,
  73223. });
  73224. if (baseResponseOptions != null) {
  73225. responseOptions = baseResponseOptions.merge(responseOptions);
  73226. }
  73227. responseObserver.error(new Response(responseOptions));
  73228. };
  73229. _this.setDetectedContentType(req, _xhr);
  73230. if (req.headers == null) {
  73231. req.headers = new Headers();
  73232. }
  73233. if (!req.headers.has('Accept')) {
  73234. req.headers.append('Accept', 'application/json, text/plain, */*');
  73235. }
  73236. req.headers.forEach(function (values, name) { return _xhr.setRequestHeader(/** @type {?} */ ((name)), values.join(',')); });
  73237. // Select the correct buffer type to store the response
  73238. if (req.responseType != null && _xhr.responseType != null) {
  73239. switch (req.responseType) {
  73240. case ResponseContentType.ArrayBuffer:
  73241. _xhr.responseType = 'arraybuffer';
  73242. break;
  73243. case ResponseContentType.Json:
  73244. _xhr.responseType = 'json';
  73245. break;
  73246. case ResponseContentType.Text:
  73247. _xhr.responseType = 'text';
  73248. break;
  73249. case ResponseContentType.Blob:
  73250. _xhr.responseType = 'blob';
  73251. break;
  73252. default:
  73253. throw new Error('The selected responseType is not supported');
  73254. }
  73255. }
  73256. _xhr.addEventListener('load', onLoad);
  73257. _xhr.addEventListener('error', onError);
  73258. _xhr.send(_this.request.getBody());
  73259. return function () {
  73260. _xhr.removeEventListener('load', onLoad);
  73261. _xhr.removeEventListener('error', onError);
  73262. _xhr.abort();
  73263. };
  73264. });
  73265. }
  73266. /**
  73267. * @param {?} req
  73268. * @param {?} _xhr
  73269. * @return {?}
  73270. */
  73271. XHRConnection.prototype.setDetectedContentType = /**
  73272. * @param {?} req
  73273. * @param {?} _xhr
  73274. * @return {?}
  73275. */
  73276. function (req /** TODO Request */, _xhr /** XMLHttpRequest */) {
  73277. // Skip if a custom Content-Type header is provided
  73278. if (req.headers != null && req.headers.get('Content-Type') != null) {
  73279. return;
  73280. }
  73281. // Set the detected content type
  73282. switch (req.contentType) {
  73283. case ContentType.NONE:
  73284. break;
  73285. case ContentType.JSON:
  73286. _xhr.setRequestHeader('content-type', 'application/json');
  73287. break;
  73288. case ContentType.FORM:
  73289. _xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
  73290. break;
  73291. case ContentType.TEXT:
  73292. _xhr.setRequestHeader('content-type', 'text/plain');
  73293. break;
  73294. case ContentType.BLOB:
  73295. var /** @type {?} */ blob = req.blob();
  73296. if (blob.type) {
  73297. _xhr.setRequestHeader('content-type', blob.type);
  73298. }
  73299. break;
  73300. }
  73301. };
  73302. return XHRConnection;
  73303. }());
  73304. /**
  73305. * `XSRFConfiguration` sets up Cross Site Request Forgery (XSRF) protection for the application
  73306. * using a cookie. See https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
  73307. * for more information on XSRF.
  73308. *
  73309. * Applications can configure custom cookie and header names by binding an instance of this class
  73310. * with different `cookieName` and `headerName` values. See the main HTTP documentation for more
  73311. * details.
  73312. *
  73313. * @deprecated use \@angular/common/http instead
  73314. */
  73315. var CookieXSRFStrategy = /** @class */ (function () {
  73316. function CookieXSRFStrategy(_cookieName, _headerName) {
  73317. if (_cookieName === void 0) { _cookieName = 'XSRF-TOKEN'; }
  73318. if (_headerName === void 0) { _headerName = 'X-XSRF-TOKEN'; }
  73319. this._cookieName = _cookieName;
  73320. this._headerName = _headerName;
  73321. }
  73322. /**
  73323. * @param {?} req
  73324. * @return {?}
  73325. */
  73326. CookieXSRFStrategy.prototype.configureRequest = /**
  73327. * @param {?} req
  73328. * @return {?}
  73329. */
  73330. function (req) {
  73331. var /** @type {?} */ xsrfToken = Object(__WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__["g" /* ɵgetDOM */])().getCookie(this._cookieName);
  73332. if (xsrfToken) {
  73333. req.headers.set(this._headerName, xsrfToken);
  73334. }
  73335. };
  73336. return CookieXSRFStrategy;
  73337. }());
  73338. /**
  73339. * Creates {\@link XHRConnection} instances.
  73340. *
  73341. * This class would typically not be used by end users, but could be
  73342. * overridden if a different backend implementation should be used,
  73343. * such as in a node backend.
  73344. *
  73345. * ### Example
  73346. *
  73347. * ```
  73348. * import {Http, MyNodeBackend, HTTP_PROVIDERS, BaseRequestOptions} from '\@angular/http';
  73349. * \@Component({
  73350. * viewProviders: [
  73351. * HTTP_PROVIDERS,
  73352. * {provide: Http, useFactory: (backend, options) => {
  73353. * return new Http(backend, options);
  73354. * }, deps: [MyNodeBackend, BaseRequestOptions]}]
  73355. * })
  73356. * class MyComponent {
  73357. * constructor(http:Http) {
  73358. * http.request('people.json').subscribe(res => this.people = res.json());
  73359. * }
  73360. * }
  73361. * ```
  73362. * @deprecated use \@angular/common/http instead
  73363. */
  73364. var XHRBackend = /** @class */ (function () {
  73365. function XHRBackend(_browserXHR, _baseResponseOptions, _xsrfStrategy) {
  73366. this._browserXHR = _browserXHR;
  73367. this._baseResponseOptions = _baseResponseOptions;
  73368. this._xsrfStrategy = _xsrfStrategy;
  73369. }
  73370. /**
  73371. * @param {?} request
  73372. * @return {?}
  73373. */
  73374. XHRBackend.prototype.createConnection = /**
  73375. * @param {?} request
  73376. * @return {?}
  73377. */
  73378. function (request) {
  73379. this._xsrfStrategy.configureRequest(request);
  73380. return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);
  73381. };
  73382. XHRBackend.decorators = [
  73383. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  73384. ];
  73385. /** @nocollapse */
  73386. XHRBackend.ctorParameters = function () { return [
  73387. { type: BrowserXhr, },
  73388. { type: ResponseOptions, },
  73389. { type: XSRFStrategy, },
  73390. ]; };
  73391. return XHRBackend;
  73392. }());
  73393. /**
  73394. * @fileoverview added by tsickle
  73395. * @suppress {checkTypes} checked by tsc
  73396. */
  73397. /**
  73398. * @license
  73399. * Copyright Google Inc. All Rights Reserved.
  73400. *
  73401. * Use of this source code is governed by an MIT-style license that can be
  73402. * found in the LICENSE file at https://angular.io/license
  73403. */
  73404. /**
  73405. * Creates a request options object to be optionally provided when instantiating a
  73406. * {\@link Request}.
  73407. *
  73408. * This class is based on the `RequestInit` description in the [Fetch
  73409. * Spec](https://fetch.spec.whatwg.org/#requestinit).
  73410. *
  73411. * All values are null by default. Typical defaults can be found in the {\@link BaseRequestOptions}
  73412. * class, which sub-classes `RequestOptions`.
  73413. *
  73414. * ```typescript
  73415. * import {RequestOptions, Request, RequestMethod} from '\@angular/http';
  73416. *
  73417. * const options = new RequestOptions({
  73418. * method: RequestMethod.Post,
  73419. * url: 'https://google.com'
  73420. * });
  73421. * const req = new Request(options);
  73422. * console.log('req.method:', RequestMethod[req.method]); // Post
  73423. * console.log('options.url:', options.url); // https://google.com
  73424. * ```
  73425. *
  73426. * @deprecated use \@angular/common/http instead
  73427. */
  73428. var RequestOptions = /** @class */ (function () {
  73429. // TODO(Dzmitry): remove search when this.search is removed
  73430. function RequestOptions(opts) {
  73431. if (opts === void 0) { opts = {}; }
  73432. var method = opts.method, headers = opts.headers, body = opts.body, url = opts.url, search = opts.search, params = opts.params, withCredentials = opts.withCredentials, responseType = opts.responseType;
  73433. this.method = method != null ? normalizeMethodName(method) : null;
  73434. this.headers = headers != null ? headers : null;
  73435. this.body = body != null ? body : null;
  73436. this.url = url != null ? url : null;
  73437. this.params = this._mergeSearchParams(params || search);
  73438. this.withCredentials = withCredentials != null ? withCredentials : null;
  73439. this.responseType = responseType != null ? responseType : null;
  73440. }
  73441. Object.defineProperty(RequestOptions.prototype, "search", {
  73442. /**
  73443. * @deprecated from 4.0.0. Use params instead.
  73444. */
  73445. get: /**
  73446. * @deprecated from 4.0.0. Use params instead.
  73447. * @return {?}
  73448. */
  73449. function () { return this.params; },
  73450. /**
  73451. * @deprecated from 4.0.0. Use params instead.
  73452. */
  73453. set: /**
  73454. * @deprecated from 4.0.0. Use params instead.
  73455. * @param {?} params
  73456. * @return {?}
  73457. */
  73458. function (params) { this.params = params; },
  73459. enumerable: true,
  73460. configurable: true
  73461. });
  73462. /**
  73463. * Creates a copy of the `RequestOptions` instance, using the optional input as values to override
  73464. * existing values. This method will not change the values of the instance on which it is being
  73465. * called.
  73466. *
  73467. * Note that `headers` and `search` will override existing values completely if present in
  73468. * the `options` object. If these values should be merged, it should be done prior to calling
  73469. * `merge` on the `RequestOptions` instance.
  73470. *
  73471. * ```typescript
  73472. * import {RequestOptions, Request, RequestMethod} from '@angular/http';
  73473. *
  73474. * const options = new RequestOptions({
  73475. * method: RequestMethod.Post
  73476. * });
  73477. * const req = new Request(options.merge({
  73478. * url: 'https://google.com'
  73479. * }));
  73480. * console.log('req.method:', RequestMethod[req.method]); // Post
  73481. * console.log('options.url:', options.url); // null
  73482. * console.log('req.url:', req.url); // https://google.com
  73483. * ```
  73484. */
  73485. /**
  73486. * Creates a copy of the `RequestOptions` instance, using the optional input as values to override
  73487. * existing values. This method will not change the values of the instance on which it is being
  73488. * called.
  73489. *
  73490. * Note that `headers` and `search` will override existing values completely if present in
  73491. * the `options` object. If these values should be merged, it should be done prior to calling
  73492. * `merge` on the `RequestOptions` instance.
  73493. *
  73494. * ```typescript
  73495. * import {RequestOptions, Request, RequestMethod} from '\@angular/http';
  73496. *
  73497. * const options = new RequestOptions({
  73498. * method: RequestMethod.Post
  73499. * });
  73500. * const req = new Request(options.merge({
  73501. * url: 'https://google.com'
  73502. * }));
  73503. * console.log('req.method:', RequestMethod[req.method]); // Post
  73504. * console.log('options.url:', options.url); // null
  73505. * console.log('req.url:', req.url); // https://google.com
  73506. * ```
  73507. * @param {?=} options
  73508. * @return {?}
  73509. */
  73510. RequestOptions.prototype.merge = /**
  73511. * Creates a copy of the `RequestOptions` instance, using the optional input as values to override
  73512. * existing values. This method will not change the values of the instance on which it is being
  73513. * called.
  73514. *
  73515. * Note that `headers` and `search` will override existing values completely if present in
  73516. * the `options` object. If these values should be merged, it should be done prior to calling
  73517. * `merge` on the `RequestOptions` instance.
  73518. *
  73519. * ```typescript
  73520. * import {RequestOptions, Request, RequestMethod} from '\@angular/http';
  73521. *
  73522. * const options = new RequestOptions({
  73523. * method: RequestMethod.Post
  73524. * });
  73525. * const req = new Request(options.merge({
  73526. * url: 'https://google.com'
  73527. * }));
  73528. * console.log('req.method:', RequestMethod[req.method]); // Post
  73529. * console.log('options.url:', options.url); // null
  73530. * console.log('req.url:', req.url); // https://google.com
  73531. * ```
  73532. * @param {?=} options
  73533. * @return {?}
  73534. */
  73535. function (options) {
  73536. return new RequestOptions({
  73537. method: options && options.method != null ? options.method : this.method,
  73538. headers: options && options.headers != null ? options.headers : new Headers(this.headers),
  73539. body: options && options.body != null ? options.body : this.body,
  73540. url: options && options.url != null ? options.url : this.url,
  73541. params: options && this._mergeSearchParams(options.params || options.search),
  73542. withCredentials: options && options.withCredentials != null ? options.withCredentials :
  73543. this.withCredentials,
  73544. responseType: options && options.responseType != null ? options.responseType :
  73545. this.responseType
  73546. });
  73547. };
  73548. /**
  73549. * @param {?=} params
  73550. * @return {?}
  73551. */
  73552. RequestOptions.prototype._mergeSearchParams = /**
  73553. * @param {?=} params
  73554. * @return {?}
  73555. */
  73556. function (params) {
  73557. if (!params)
  73558. return this.params;
  73559. if (params instanceof URLSearchParams) {
  73560. return params.clone();
  73561. }
  73562. if (typeof params === 'string') {
  73563. return new URLSearchParams(params);
  73564. }
  73565. return this._parseParams(params);
  73566. };
  73567. /**
  73568. * @param {?=} objParams
  73569. * @return {?}
  73570. */
  73571. RequestOptions.prototype._parseParams = /**
  73572. * @param {?=} objParams
  73573. * @return {?}
  73574. */
  73575. function (objParams) {
  73576. var _this = this;
  73577. if (objParams === void 0) { objParams = {}; }
  73578. var /** @type {?} */ params = new URLSearchParams();
  73579. Object.keys(objParams).forEach(function (key) {
  73580. var /** @type {?} */ value = objParams[key];
  73581. if (Array.isArray(value)) {
  73582. value.forEach(function (item) { return _this._appendParam(key, item, params); });
  73583. }
  73584. else {
  73585. _this._appendParam(key, value, params);
  73586. }
  73587. });
  73588. return params;
  73589. };
  73590. /**
  73591. * @param {?} key
  73592. * @param {?} value
  73593. * @param {?} params
  73594. * @return {?}
  73595. */
  73596. RequestOptions.prototype._appendParam = /**
  73597. * @param {?} key
  73598. * @param {?} value
  73599. * @param {?} params
  73600. * @return {?}
  73601. */
  73602. function (key, value, params) {
  73603. if (typeof value !== 'string') {
  73604. value = JSON.stringify(value);
  73605. }
  73606. params.append(key, value);
  73607. };
  73608. return RequestOptions;
  73609. }());
  73610. /**
  73611. * Subclass of {\@link RequestOptions}, with default values.
  73612. *
  73613. * Default values:
  73614. * * method: {\@link RequestMethod RequestMethod.Get}
  73615. * * headers: empty {\@link Headers} object
  73616. *
  73617. * This class could be extended and bound to the {\@link RequestOptions} class
  73618. * when configuring an {\@link Injector}, in order to override the default options
  73619. * used by {\@link Http} to create and send {\@link Request Requests}.
  73620. *
  73621. * ```typescript
  73622. * import {BaseRequestOptions, RequestOptions} from '\@angular/http';
  73623. *
  73624. * class MyOptions extends BaseRequestOptions {
  73625. * search: string = 'coreTeam=true';
  73626. * }
  73627. *
  73628. * {provide: RequestOptions, useClass: MyOptions};
  73629. * ```
  73630. *
  73631. * The options could also be extended when manually creating a {\@link Request}
  73632. * object.
  73633. *
  73634. * ```
  73635. * import {BaseRequestOptions, Request, RequestMethod} from '\@angular/http';
  73636. *
  73637. * const options = new BaseRequestOptions();
  73638. * const req = new Request(options.merge({
  73639. * method: RequestMethod.Post,
  73640. * url: 'https://google.com'
  73641. * }));
  73642. * console.log('req.method:', RequestMethod[req.method]); // Post
  73643. * console.log('options.url:', options.url); // null
  73644. * console.log('req.url:', req.url); // https://google.com
  73645. * ```
  73646. *
  73647. * @deprecated use \@angular/common/http instead
  73648. */
  73649. var BaseRequestOptions = /** @class */ (function (_super) {
  73650. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(BaseRequestOptions, _super);
  73651. function BaseRequestOptions() {
  73652. return _super.call(this, { method: RequestMethod.Get, headers: new Headers() }) || this;
  73653. }
  73654. BaseRequestOptions.decorators = [
  73655. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  73656. ];
  73657. /** @nocollapse */
  73658. BaseRequestOptions.ctorParameters = function () { return []; };
  73659. return BaseRequestOptions;
  73660. }(RequestOptions));
  73661. /**
  73662. * @fileoverview added by tsickle
  73663. * @suppress {checkTypes} checked by tsc
  73664. */
  73665. /**
  73666. * @license
  73667. * Copyright Google Inc. All Rights Reserved.
  73668. *
  73669. * Use of this source code is governed by an MIT-style license that can be
  73670. * found in the LICENSE file at https://angular.io/license
  73671. */
  73672. /**
  73673. * Creates `Request` instances from provided values.
  73674. *
  73675. * The Request's interface is inspired by the Request constructor defined in the [Fetch
  73676. * Spec](https://fetch.spec.whatwg.org/#request-class),
  73677. * but is considered a static value whose body can be accessed many times. There are other
  73678. * differences in the implementation, but this is the most significant.
  73679. *
  73680. * `Request` instances are typically created by higher-level classes, like {\@link Http} and
  73681. * {\@link Jsonp}, but it may occasionally be useful to explicitly create `Request` instances.
  73682. * One such example is when creating services that wrap higher-level services, like {\@link Http},
  73683. * where it may be useful to generate a `Request` with arbitrary headers and search params.
  73684. *
  73685. * ```typescript
  73686. * import {Injectable, Injector} from '\@angular/core';
  73687. * import {HTTP_PROVIDERS, Http, Request, RequestMethod} from '\@angular/http';
  73688. *
  73689. * \@Injectable()
  73690. * class AutoAuthenticator {
  73691. * constructor(public http:Http) {}
  73692. * request(url:string) {
  73693. * return this.http.request(new Request({
  73694. * method: RequestMethod.Get,
  73695. * url: url,
  73696. * search: 'password=123'
  73697. * }));
  73698. * }
  73699. * }
  73700. *
  73701. * var injector = Injector.resolveAndCreate([HTTP_PROVIDERS, AutoAuthenticator]);
  73702. * var authenticator = injector.get(AutoAuthenticator);
  73703. * authenticator.request('people.json').subscribe(res => {
  73704. * //URL should have included '?password=123'
  73705. * console.log('people', res.json());
  73706. * });
  73707. * ```
  73708. *
  73709. * @deprecated use \@angular/common/http instead
  73710. */
  73711. var Request = /** @class */ (function (_super) {
  73712. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(Request, _super);
  73713. function Request(requestOptions) {
  73714. var _this = _super.call(this) || this;
  73715. // TODO: assert that url is present
  73716. var /** @type {?} */ url = requestOptions.url;
  73717. _this.url = /** @type {?} */ ((requestOptions.url));
  73718. var /** @type {?} */ paramsArg = requestOptions.params || requestOptions.search;
  73719. if (paramsArg) {
  73720. var /** @type {?} */ params = void 0;
  73721. if (typeof paramsArg === 'object' && !(paramsArg instanceof URLSearchParams)) {
  73722. params = urlEncodeParams(paramsArg).toString();
  73723. }
  73724. else {
  73725. params = paramsArg.toString();
  73726. }
  73727. if (params.length > 0) {
  73728. var /** @type {?} */ prefix = '?';
  73729. if (_this.url.indexOf('?') != -1) {
  73730. prefix = (_this.url[_this.url.length - 1] == '&') ? '' : '&';
  73731. }
  73732. // TODO: just delete search-query-looking string in url?
  73733. // TODO: just delete search-query-looking string in url?
  73734. _this.url = url + prefix + params;
  73735. }
  73736. }
  73737. _this._body = requestOptions.body;
  73738. _this.method = normalizeMethodName(/** @type {?} */ ((requestOptions.method)));
  73739. // TODO(jeffbcross): implement behavior
  73740. // Defaults to 'omit', consistent with browser
  73741. // TODO(jeffbcross): implement behavior
  73742. // Defaults to 'omit', consistent with browser
  73743. _this.headers = new Headers(requestOptions.headers);
  73744. _this.contentType = _this.detectContentType();
  73745. _this.withCredentials = /** @type {?} */ ((requestOptions.withCredentials));
  73746. _this.responseType = /** @type {?} */ ((requestOptions.responseType));
  73747. return _this;
  73748. }
  73749. /**
  73750. * Returns the content type enum based on header options.
  73751. */
  73752. /**
  73753. * Returns the content type enum based on header options.
  73754. * @return {?}
  73755. */
  73756. Request.prototype.detectContentType = /**
  73757. * Returns the content type enum based on header options.
  73758. * @return {?}
  73759. */
  73760. function () {
  73761. switch (this.headers.get('content-type')) {
  73762. case 'application/json':
  73763. return ContentType.JSON;
  73764. case 'application/x-www-form-urlencoded':
  73765. return ContentType.FORM;
  73766. case 'multipart/form-data':
  73767. return ContentType.FORM_DATA;
  73768. case 'text/plain':
  73769. case 'text/html':
  73770. return ContentType.TEXT;
  73771. case 'application/octet-stream':
  73772. return this._body instanceof ArrayBuffer$1 ? ContentType.ARRAY_BUFFER : ContentType.BLOB;
  73773. default:
  73774. return this.detectContentTypeFromBody();
  73775. }
  73776. };
  73777. /**
  73778. * Returns the content type of request's body based on its type.
  73779. */
  73780. /**
  73781. * Returns the content type of request's body based on its type.
  73782. * @return {?}
  73783. */
  73784. Request.prototype.detectContentTypeFromBody = /**
  73785. * Returns the content type of request's body based on its type.
  73786. * @return {?}
  73787. */
  73788. function () {
  73789. if (this._body == null) {
  73790. return ContentType.NONE;
  73791. }
  73792. else if (this._body instanceof URLSearchParams) {
  73793. return ContentType.FORM;
  73794. }
  73795. else if (this._body instanceof FormData) {
  73796. return ContentType.FORM_DATA;
  73797. }
  73798. else if (this._body instanceof Blob$1) {
  73799. return ContentType.BLOB;
  73800. }
  73801. else if (this._body instanceof ArrayBuffer$1) {
  73802. return ContentType.ARRAY_BUFFER;
  73803. }
  73804. else if (this._body && typeof this._body === 'object') {
  73805. return ContentType.JSON;
  73806. }
  73807. else {
  73808. return ContentType.TEXT;
  73809. }
  73810. };
  73811. /**
  73812. * Returns the request's body according to its type. If body is undefined, return
  73813. * null.
  73814. */
  73815. /**
  73816. * Returns the request's body according to its type. If body is undefined, return
  73817. * null.
  73818. * @return {?}
  73819. */
  73820. Request.prototype.getBody = /**
  73821. * Returns the request's body according to its type. If body is undefined, return
  73822. * null.
  73823. * @return {?}
  73824. */
  73825. function () {
  73826. switch (this.contentType) {
  73827. case ContentType.JSON:
  73828. return this.text();
  73829. case ContentType.FORM:
  73830. return this.text();
  73831. case ContentType.FORM_DATA:
  73832. return this._body;
  73833. case ContentType.TEXT:
  73834. return this.text();
  73835. case ContentType.BLOB:
  73836. return this.blob();
  73837. case ContentType.ARRAY_BUFFER:
  73838. return this.arrayBuffer();
  73839. default:
  73840. return null;
  73841. }
  73842. };
  73843. return Request;
  73844. }(Body));
  73845. /**
  73846. * @param {?} params
  73847. * @return {?}
  73848. */
  73849. function urlEncodeParams(params) {
  73850. var /** @type {?} */ searchParams = new URLSearchParams();
  73851. Object.keys(params).forEach(function (key) {
  73852. var /** @type {?} */ value = params[key];
  73853. if (value && Array.isArray(value)) {
  73854. value.forEach(function (element) { return searchParams.append(key, element.toString()); });
  73855. }
  73856. else {
  73857. searchParams.append(key, value.toString());
  73858. }
  73859. });
  73860. return searchParams;
  73861. }
  73862. var noop = function () { };
  73863. var w = typeof window == 'object' ? window : noop;
  73864. var FormData = (/** @type {?} */ (w /** TODO #9100 */) /** TODO #9100 */)['FormData'] || noop;
  73865. var Blob$1 = (/** @type {?} */ (w /** TODO #9100 */) /** TODO #9100 */)['Blob'] || noop;
  73866. var ArrayBuffer$1 = (/** @type {?} */ (w /** TODO #9100 */) /** TODO #9100 */)['ArrayBuffer'] || noop;
  73867. /**
  73868. * @fileoverview added by tsickle
  73869. * @suppress {checkTypes} checked by tsc
  73870. */
  73871. /**
  73872. * @license
  73873. * Copyright Google Inc. All Rights Reserved.
  73874. *
  73875. * Use of this source code is governed by an MIT-style license that can be
  73876. * found in the LICENSE file at https://angular.io/license
  73877. */
  73878. /**
  73879. * @param {?} backend
  73880. * @param {?} request
  73881. * @return {?}
  73882. */
  73883. function httpRequest(backend, request) {
  73884. return backend.createConnection(request).response;
  73885. }
  73886. /**
  73887. * @param {?} defaultOpts
  73888. * @param {?} providedOpts
  73889. * @param {?} method
  73890. * @param {?} url
  73891. * @return {?}
  73892. */
  73893. function mergeOptions(defaultOpts, providedOpts, method, url) {
  73894. var /** @type {?} */ newOptions = defaultOpts;
  73895. if (providedOpts) {
  73896. // Hack so Dart can used named parameters
  73897. return /** @type {?} */ (newOptions.merge(new RequestOptions({
  73898. method: providedOpts.method || method,
  73899. url: providedOpts.url || url,
  73900. search: providedOpts.search,
  73901. params: providedOpts.params,
  73902. headers: providedOpts.headers,
  73903. body: providedOpts.body,
  73904. withCredentials: providedOpts.withCredentials,
  73905. responseType: providedOpts.responseType
  73906. })));
  73907. }
  73908. return /** @type {?} */ (newOptions.merge(new RequestOptions({ method: method, url: url })));
  73909. }
  73910. /**
  73911. * Performs http requests using `XMLHttpRequest` as the default backend.
  73912. *
  73913. * `Http` is available as an injectable class, with methods to perform http requests. Calling
  73914. * `request` returns an `Observable` which will emit a single {\@link Response} when a
  73915. * response is received.
  73916. *
  73917. * ### Example
  73918. *
  73919. * ```typescript
  73920. * import {Http, HTTP_PROVIDERS} from '\@angular/http';
  73921. * import 'rxjs/add/operator/map'
  73922. * \@Component({
  73923. * selector: 'http-app',
  73924. * viewProviders: [HTTP_PROVIDERS],
  73925. * templateUrl: 'people.html'
  73926. * })
  73927. * class PeopleComponent {
  73928. * constructor(http: Http) {
  73929. * http.get('people.json')
  73930. * // Call map on the response observable to get the parsed people object
  73931. * .map(res => res.json())
  73932. * // Subscribe to the observable to get the parsed people object and attach it to the
  73933. * // component
  73934. * .subscribe(people => this.people = people);
  73935. * }
  73936. * }
  73937. * ```
  73938. *
  73939. *
  73940. * ### Example
  73941. *
  73942. * ```
  73943. * http.get('people.json').subscribe((res:Response) => this.people = res.json());
  73944. * ```
  73945. *
  73946. * The default construct used to perform requests, `XMLHttpRequest`, is abstracted as a "Backend" (
  73947. * {\@link XHRBackend} in this case), which could be mocked with dependency injection by replacing
  73948. * the {\@link XHRBackend} provider, as in the following example:
  73949. *
  73950. * ### Example
  73951. *
  73952. * ```typescript
  73953. * import {BaseRequestOptions, Http} from '\@angular/http';
  73954. * import {MockBackend} from '\@angular/http/testing';
  73955. * var injector = Injector.resolveAndCreate([
  73956. * BaseRequestOptions,
  73957. * MockBackend,
  73958. * {provide: Http, useFactory:
  73959. * function(backend, defaultOptions) {
  73960. * return new Http(backend, defaultOptions);
  73961. * },
  73962. * deps: [MockBackend, BaseRequestOptions]}
  73963. * ]);
  73964. * var http = injector.get(Http);
  73965. * http.get('request-from-mock-backend.json').subscribe((res:Response) => doSomething(res));
  73966. * ```
  73967. *
  73968. * @deprecated use \@angular/common/http instead
  73969. */
  73970. var Http = /** @class */ (function () {
  73971. function Http(_backend, _defaultOptions) {
  73972. this._backend = _backend;
  73973. this._defaultOptions = _defaultOptions;
  73974. }
  73975. /**
  73976. * Performs any type of http request. First argument is required, and can either be a url or
  73977. * a {@link Request} instance. If the first argument is a url, an optional {@link RequestOptions}
  73978. * object can be provided as the 2nd argument. The options object will be merged with the values
  73979. * of {@link BaseRequestOptions} before performing the request.
  73980. */
  73981. /**
  73982. * Performs any type of http request. First argument is required, and can either be a url or
  73983. * a {\@link Request} instance. If the first argument is a url, an optional {\@link RequestOptions}
  73984. * object can be provided as the 2nd argument. The options object will be merged with the values
  73985. * of {\@link BaseRequestOptions} before performing the request.
  73986. * @param {?} url
  73987. * @param {?=} options
  73988. * @return {?}
  73989. */
  73990. Http.prototype.request = /**
  73991. * Performs any type of http request. First argument is required, and can either be a url or
  73992. * a {\@link Request} instance. If the first argument is a url, an optional {\@link RequestOptions}
  73993. * object can be provided as the 2nd argument. The options object will be merged with the values
  73994. * of {\@link BaseRequestOptions} before performing the request.
  73995. * @param {?} url
  73996. * @param {?=} options
  73997. * @return {?}
  73998. */
  73999. function (url, options) {
  74000. var /** @type {?} */ responseObservable;
  74001. if (typeof url === 'string') {
  74002. responseObservable = httpRequest(this._backend, new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, /** @type {?} */ (url))));
  74003. }
  74004. else if (url instanceof Request) {
  74005. responseObservable = httpRequest(this._backend, url);
  74006. }
  74007. else {
  74008. throw new Error('First argument must be a url string or Request instance.');
  74009. }
  74010. return responseObservable;
  74011. };
  74012. /**
  74013. * Performs a request with `get` http method.
  74014. */
  74015. /**
  74016. * Performs a request with `get` http method.
  74017. * @param {?} url
  74018. * @param {?=} options
  74019. * @return {?}
  74020. */
  74021. Http.prototype.get = /**
  74022. * Performs a request with `get` http method.
  74023. * @param {?} url
  74024. * @param {?=} options
  74025. * @return {?}
  74026. */
  74027. function (url, options) {
  74028. return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, url)));
  74029. };
  74030. /**
  74031. * Performs a request with `post` http method.
  74032. */
  74033. /**
  74034. * Performs a request with `post` http method.
  74035. * @param {?} url
  74036. * @param {?} body
  74037. * @param {?=} options
  74038. * @return {?}
  74039. */
  74040. Http.prototype.post = /**
  74041. * Performs a request with `post` http method.
  74042. * @param {?} url
  74043. * @param {?} body
  74044. * @param {?=} options
  74045. * @return {?}
  74046. */
  74047. function (url, body, options) {
  74048. return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({ body: body })), options, RequestMethod.Post, url)));
  74049. };
  74050. /**
  74051. * Performs a request with `put` http method.
  74052. */
  74053. /**
  74054. * Performs a request with `put` http method.
  74055. * @param {?} url
  74056. * @param {?} body
  74057. * @param {?=} options
  74058. * @return {?}
  74059. */
  74060. Http.prototype.put = /**
  74061. * Performs a request with `put` http method.
  74062. * @param {?} url
  74063. * @param {?} body
  74064. * @param {?=} options
  74065. * @return {?}
  74066. */
  74067. function (url, body, options) {
  74068. return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({ body: body })), options, RequestMethod.Put, url)));
  74069. };
  74070. /**
  74071. * Performs a request with `delete` http method.
  74072. */
  74073. /**
  74074. * Performs a request with `delete` http method.
  74075. * @param {?} url
  74076. * @param {?=} options
  74077. * @return {?}
  74078. */
  74079. Http.prototype.delete = /**
  74080. * Performs a request with `delete` http method.
  74081. * @param {?} url
  74082. * @param {?=} options
  74083. * @return {?}
  74084. */
  74085. function (url, options) {
  74086. return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Delete, url)));
  74087. };
  74088. /**
  74089. * Performs a request with `patch` http method.
  74090. */
  74091. /**
  74092. * Performs a request with `patch` http method.
  74093. * @param {?} url
  74094. * @param {?} body
  74095. * @param {?=} options
  74096. * @return {?}
  74097. */
  74098. Http.prototype.patch = /**
  74099. * Performs a request with `patch` http method.
  74100. * @param {?} url
  74101. * @param {?} body
  74102. * @param {?=} options
  74103. * @return {?}
  74104. */
  74105. function (url, body, options) {
  74106. return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({ body: body })), options, RequestMethod.Patch, url)));
  74107. };
  74108. /**
  74109. * Performs a request with `head` http method.
  74110. */
  74111. /**
  74112. * Performs a request with `head` http method.
  74113. * @param {?} url
  74114. * @param {?=} options
  74115. * @return {?}
  74116. */
  74117. Http.prototype.head = /**
  74118. * Performs a request with `head` http method.
  74119. * @param {?} url
  74120. * @param {?=} options
  74121. * @return {?}
  74122. */
  74123. function (url, options) {
  74124. return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Head, url)));
  74125. };
  74126. /**
  74127. * Performs a request with `options` http method.
  74128. */
  74129. /**
  74130. * Performs a request with `options` http method.
  74131. * @param {?} url
  74132. * @param {?=} options
  74133. * @return {?}
  74134. */
  74135. Http.prototype.options = /**
  74136. * Performs a request with `options` http method.
  74137. * @param {?} url
  74138. * @param {?=} options
  74139. * @return {?}
  74140. */
  74141. function (url, options) {
  74142. return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Options, url)));
  74143. };
  74144. Http.decorators = [
  74145. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  74146. ];
  74147. /** @nocollapse */
  74148. Http.ctorParameters = function () { return [
  74149. { type: ConnectionBackend, },
  74150. { type: RequestOptions, },
  74151. ]; };
  74152. return Http;
  74153. }());
  74154. /**
  74155. * @deprecated use \@angular/common/http instead
  74156. */
  74157. var Jsonp = /** @class */ (function (_super) {
  74158. Object(__WEBPACK_IMPORTED_MODULE_1_tslib__["b" /* __extends */])(Jsonp, _super);
  74159. function Jsonp(backend, defaultOptions) {
  74160. return _super.call(this, backend, defaultOptions) || this;
  74161. }
  74162. /**
  74163. * Performs any type of http request. First argument is required, and can either be a url or
  74164. * a {@link Request} instance. If the first argument is a url, an optional {@link RequestOptions}
  74165. * object can be provided as the 2nd argument. The options object will be merged with the values
  74166. * of {@link BaseRequestOptions} before performing the request.
  74167. *
  74168. * @security Regular XHR is the safest alternative to JSONP for most applications, and is
  74169. * supported by all current browsers. Because JSONP creates a `<script>` element with
  74170. * contents retrieved from a remote source, attacker-controlled data introduced by an untrusted
  74171. * source could expose your application to XSS risks. Data exposed by JSONP may also be
  74172. * readable by malicious third-party websites. In addition, JSONP introduces potential risk for
  74173. * future security issues (e.g. content sniffing). For more detail, see the
  74174. * [Security Guide](http://g.co/ng/security).
  74175. */
  74176. /**
  74177. * Performs any type of http request. First argument is required, and can either be a url or
  74178. * a {\@link Request} instance. If the first argument is a url, an optional {\@link RequestOptions}
  74179. * object can be provided as the 2nd argument. The options object will be merged with the values
  74180. * of {\@link BaseRequestOptions} before performing the request.
  74181. *
  74182. * \@security Regular XHR is the safest alternative to JSONP for most applications, and is
  74183. * supported by all current browsers. Because JSONP creates a `<script>` element with
  74184. * contents retrieved from a remote source, attacker-controlled data introduced by an untrusted
  74185. * source could expose your application to XSS risks. Data exposed by JSONP may also be
  74186. * readable by malicious third-party websites. In addition, JSONP introduces potential risk for
  74187. * future security issues (e.g. content sniffing). For more detail, see the
  74188. * [Security Guide](http://g.co/ng/security).
  74189. * @param {?} url
  74190. * @param {?=} options
  74191. * @return {?}
  74192. */
  74193. Jsonp.prototype.request = /**
  74194. * Performs any type of http request. First argument is required, and can either be a url or
  74195. * a {\@link Request} instance. If the first argument is a url, an optional {\@link RequestOptions}
  74196. * object can be provided as the 2nd argument. The options object will be merged with the values
  74197. * of {\@link BaseRequestOptions} before performing the request.
  74198. *
  74199. * \@security Regular XHR is the safest alternative to JSONP for most applications, and is
  74200. * supported by all current browsers. Because JSONP creates a `<script>` element with
  74201. * contents retrieved from a remote source, attacker-controlled data introduced by an untrusted
  74202. * source could expose your application to XSS risks. Data exposed by JSONP may also be
  74203. * readable by malicious third-party websites. In addition, JSONP introduces potential risk for
  74204. * future security issues (e.g. content sniffing). For more detail, see the
  74205. * [Security Guide](http://g.co/ng/security).
  74206. * @param {?} url
  74207. * @param {?=} options
  74208. * @return {?}
  74209. */
  74210. function (url, options) {
  74211. var /** @type {?} */ responseObservable;
  74212. if (typeof url === 'string') {
  74213. url =
  74214. new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, /** @type {?} */ (url)));
  74215. }
  74216. if (url instanceof Request) {
  74217. if (url.method !== RequestMethod.Get) {
  74218. throw new Error('JSONP requests must use GET request method.');
  74219. }
  74220. responseObservable = httpRequest(this._backend, url);
  74221. }
  74222. else {
  74223. throw new Error('First argument must be a url string or Request instance.');
  74224. }
  74225. return responseObservable;
  74226. };
  74227. Jsonp.decorators = [
  74228. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  74229. ];
  74230. /** @nocollapse */
  74231. Jsonp.ctorParameters = function () { return [
  74232. { type: ConnectionBackend, },
  74233. { type: RequestOptions, },
  74234. ]; };
  74235. return Jsonp;
  74236. }(Http));
  74237. /**
  74238. * @fileoverview added by tsickle
  74239. * @suppress {checkTypes} checked by tsc
  74240. */
  74241. /**
  74242. * @license
  74243. * Copyright Google Inc. All Rights Reserved.
  74244. *
  74245. * Use of this source code is governed by an MIT-style license that can be
  74246. * found in the LICENSE file at https://angular.io/license
  74247. */
  74248. /**
  74249. * @return {?}
  74250. */
  74251. function _createDefaultCookieXSRFStrategy() {
  74252. return new CookieXSRFStrategy();
  74253. }
  74254. /**
  74255. * @param {?} xhrBackend
  74256. * @param {?} requestOptions
  74257. * @return {?}
  74258. */
  74259. function httpFactory(xhrBackend, requestOptions) {
  74260. return new Http(xhrBackend, requestOptions);
  74261. }
  74262. /**
  74263. * @param {?} jsonpBackend
  74264. * @param {?} requestOptions
  74265. * @return {?}
  74266. */
  74267. function jsonpFactory(jsonpBackend, requestOptions) {
  74268. return new Jsonp(jsonpBackend, requestOptions);
  74269. }
  74270. /**
  74271. * The module that includes http's providers
  74272. *
  74273. * @deprecated use \@angular/common/http instead
  74274. */
  74275. var HttpModule = /** @class */ (function () {
  74276. function HttpModule() {
  74277. }
  74278. HttpModule.decorators = [
  74279. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */], args: [{
  74280. providers: [
  74281. // TODO(pascal): use factory type annotations once supported in DI
  74282. // issue: https://github.com/angular/angular/issues/3183
  74283. { provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions] },
  74284. BrowserXhr,
  74285. { provide: RequestOptions, useClass: BaseRequestOptions },
  74286. { provide: ResponseOptions, useClass: BaseResponseOptions },
  74287. XHRBackend,
  74288. { provide: XSRFStrategy, useFactory: _createDefaultCookieXSRFStrategy },
  74289. ],
  74290. },] },
  74291. ];
  74292. /** @nocollapse */
  74293. HttpModule.ctorParameters = function () { return []; };
  74294. return HttpModule;
  74295. }());
  74296. /**
  74297. * The module that includes jsonp's providers
  74298. *
  74299. * @deprecated use \@angular/common/http instead
  74300. */
  74301. var JsonpModule = /** @class */ (function () {
  74302. function JsonpModule() {
  74303. }
  74304. JsonpModule.decorators = [
  74305. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */], args: [{
  74306. providers: [
  74307. // TODO(pascal): use factory type annotations once supported in DI
  74308. // issue: https://github.com/angular/angular/issues/3183
  74309. { provide: Jsonp, useFactory: jsonpFactory, deps: [JSONPBackend, RequestOptions] },
  74310. BrowserJsonp,
  74311. { provide: RequestOptions, useClass: BaseRequestOptions },
  74312. { provide: ResponseOptions, useClass: BaseResponseOptions },
  74313. JSONPBackend,
  74314. ],
  74315. },] },
  74316. ];
  74317. /** @nocollapse */
  74318. JsonpModule.ctorParameters = function () { return []; };
  74319. return JsonpModule;
  74320. }());
  74321. /**
  74322. * @fileoverview added by tsickle
  74323. * @suppress {checkTypes} checked by tsc
  74324. */
  74325. /**
  74326. * @license
  74327. * Copyright Google Inc. All Rights Reserved.
  74328. *
  74329. * Use of this source code is governed by an MIT-style license that can be
  74330. * found in the LICENSE file at https://angular.io/license
  74331. */
  74332. /**
  74333. * @deprecated use \@angular/common/http instead
  74334. */
  74335. var VERSION = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["_7" /* Version */]('5.2.11');
  74336. /**
  74337. * @fileoverview added by tsickle
  74338. * @suppress {checkTypes} checked by tsc
  74339. */
  74340. /**
  74341. * @license
  74342. * Copyright Google Inc. All Rights Reserved.
  74343. *
  74344. * Use of this source code is governed by an MIT-style license that can be
  74345. * found in the LICENSE file at https://angular.io/license
  74346. */
  74347. /**
  74348. * @fileoverview added by tsickle
  74349. * @suppress {checkTypes} checked by tsc
  74350. */
  74351. /**
  74352. * @license
  74353. * Copyright Google Inc. All Rights Reserved.
  74354. *
  74355. * Use of this source code is governed by an MIT-style license that can be
  74356. * found in the LICENSE file at https://angular.io/license
  74357. */
  74358. /**
  74359. * @module
  74360. * @description
  74361. * Entry point for all public APIs of this package.
  74362. */
  74363. // This file only reexports content of the `src` folder. Keep it that way.
  74364. /**
  74365. * @fileoverview added by tsickle
  74366. * @suppress {checkTypes} checked by tsc
  74367. */
  74368. /**
  74369. * Generated bundle index. Do not edit.
  74370. */
  74371. //# sourceMappingURL=http.js.map
  74372. /***/ }),
  74373. /* 211 */
  74374. /***/ (function(module, exports, __webpack_require__) {
  74375. "use strict";
  74376. var ArrayObservable_1 = __webpack_require__(32);
  74377. exports.of = ArrayObservable_1.ArrayObservable.of;
  74378. //# sourceMappingURL=of.js.map
  74379. /***/ }),
  74380. /* 212 */
  74381. /***/ (function(module, exports, __webpack_require__) {
  74382. "use strict";
  74383. var FromObservable_1 = __webpack_require__(213);
  74384. exports.from = FromObservable_1.FromObservable.create;
  74385. //# sourceMappingURL=from.js.map
  74386. /***/ }),
  74387. /* 213 */
  74388. /***/ (function(module, exports, __webpack_require__) {
  74389. "use strict";
  74390. var __extends = (this && this.__extends) || function (d, b) {
  74391. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  74392. function __() { this.constructor = d; }
  74393. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  74394. };
  74395. var isArray_1 = __webpack_require__(26);
  74396. var isArrayLike_1 = __webpack_require__(157);
  74397. var isPromise_1 = __webpack_require__(158);
  74398. var PromiseObservable_1 = __webpack_require__(179);
  74399. var IteratorObservable_1 = __webpack_require__(385);
  74400. var ArrayObservable_1 = __webpack_require__(32);
  74401. var ArrayLikeObservable_1 = __webpack_require__(386);
  74402. var iterator_1 = __webpack_require__(46);
  74403. var Observable_1 = __webpack_require__(0);
  74404. var observeOn_1 = __webpack_require__(75);
  74405. var observable_1 = __webpack_require__(64);
  74406. /**
  74407. * We need this JSDoc comment for affecting ESDoc.
  74408. * @extends {Ignored}
  74409. * @hide true
  74410. */
  74411. var FromObservable = (function (_super) {
  74412. __extends(FromObservable, _super);
  74413. function FromObservable(ish, scheduler) {
  74414. _super.call(this, null);
  74415. this.ish = ish;
  74416. this.scheduler = scheduler;
  74417. }
  74418. /**
  74419. * Creates an Observable from an Array, an array-like object, a Promise, an
  74420. * iterable object, or an Observable-like object.
  74421. *
  74422. * <span class="informal">Converts almost anything to an Observable.</span>
  74423. *
  74424. * <img src="./img/from.png" width="100%">
  74425. *
  74426. * Convert various other objects and data types into Observables. `from`
  74427. * converts a Promise or an array-like or an
  74428. * [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)
  74429. * object into an Observable that emits the items in that promise or array or
  74430. * iterable. A String, in this context, is treated as an array of characters.
  74431. * Observable-like objects (contains a function named with the ES2015 Symbol
  74432. * for Observable) can also be converted through this operator.
  74433. *
  74434. * @example <caption>Converts an array to an Observable</caption>
  74435. * var array = [10, 20, 30];
  74436. * var result = Rx.Observable.from(array);
  74437. * result.subscribe(x => console.log(x));
  74438. *
  74439. * // Results in the following:
  74440. * // 10 20 30
  74441. *
  74442. * @example <caption>Convert an infinite iterable (from a generator) to an Observable</caption>
  74443. * function* generateDoubles(seed) {
  74444. * var i = seed;
  74445. * while (true) {
  74446. * yield i;
  74447. * i = 2 * i; // double it
  74448. * }
  74449. * }
  74450. *
  74451. * var iterator = generateDoubles(3);
  74452. * var result = Rx.Observable.from(iterator).take(10);
  74453. * result.subscribe(x => console.log(x));
  74454. *
  74455. * // Results in the following:
  74456. * // 3 6 12 24 48 96 192 384 768 1536
  74457. *
  74458. * @see {@link create}
  74459. * @see {@link fromEvent}
  74460. * @see {@link fromEventPattern}
  74461. * @see {@link fromPromise}
  74462. *
  74463. * @param {ObservableInput<T>} ish A subscribable object, a Promise, an
  74464. * Observable-like, an Array, an iterable or an array-like object to be
  74465. * converted.
  74466. * @param {Scheduler} [scheduler] The scheduler on which to schedule the
  74467. * emissions of values.
  74468. * @return {Observable<T>} The Observable whose values are originally from the
  74469. * input object that was converted.
  74470. * @static true
  74471. * @name from
  74472. * @owner Observable
  74473. */
  74474. FromObservable.create = function (ish, scheduler) {
  74475. if (ish != null) {
  74476. if (typeof ish[observable_1.observable] === 'function') {
  74477. if (ish instanceof Observable_1.Observable && !scheduler) {
  74478. return ish;
  74479. }
  74480. return new FromObservable(ish, scheduler);
  74481. }
  74482. else if (isArray_1.isArray(ish)) {
  74483. return new ArrayObservable_1.ArrayObservable(ish, scheduler);
  74484. }
  74485. else if (isPromise_1.isPromise(ish)) {
  74486. return new PromiseObservable_1.PromiseObservable(ish, scheduler);
  74487. }
  74488. else if (typeof ish[iterator_1.iterator] === 'function' || typeof ish === 'string') {
  74489. return new IteratorObservable_1.IteratorObservable(ish, scheduler);
  74490. }
  74491. else if (isArrayLike_1.isArrayLike(ish)) {
  74492. return new ArrayLikeObservable_1.ArrayLikeObservable(ish, scheduler);
  74493. }
  74494. }
  74495. throw new TypeError((ish !== null && typeof ish || ish) + ' is not observable');
  74496. };
  74497. /** @deprecated internal use only */ FromObservable.prototype._subscribe = function (subscriber) {
  74498. var ish = this.ish;
  74499. var scheduler = this.scheduler;
  74500. if (scheduler == null) {
  74501. return ish[observable_1.observable]().subscribe(subscriber);
  74502. }
  74503. else {
  74504. return ish[observable_1.observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));
  74505. }
  74506. };
  74507. return FromObservable;
  74508. }(Observable_1.Observable));
  74509. exports.FromObservable = FromObservable;
  74510. //# sourceMappingURL=FromObservable.js.map
  74511. /***/ }),
  74512. /* 214 */
  74513. /***/ (function(module, exports, __webpack_require__) {
  74514. "use strict";
  74515. var FromEventObservable_1 = __webpack_require__(395);
  74516. exports.fromEvent = FromEventObservable_1.FromEventObservable.create;
  74517. //# sourceMappingURL=fromEvent.js.map
  74518. /***/ }),
  74519. /* 215 */
  74520. /***/ (function(module, exports, __webpack_require__) {
  74521. "use strict";
  74522. var ErrorObservable_1 = __webpack_require__(429);
  74523. exports._throw = ErrorObservable_1.ErrorObservable.create;
  74524. //# sourceMappingURL=throw.js.map
  74525. /***/ }),
  74526. /* 216 */
  74527. /***/ (function(module, exports, __webpack_require__) {
  74528. "use strict";
  74529. var TimerObservable_1 = __webpack_require__(431);
  74530. exports.timer = TimerObservable_1.TimerObservable.create;
  74531. //# sourceMappingURL=timer.js.map
  74532. /***/ }),
  74533. /* 217 */
  74534. /***/ (function(module, exports, __webpack_require__) {
  74535. "use strict";
  74536. var __extends = (this && this.__extends) || function (d, b) {
  74537. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  74538. function __() { this.constructor = d; }
  74539. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  74540. };
  74541. var root_1 = __webpack_require__(19);
  74542. var tryCatch_1 = __webpack_require__(17);
  74543. var errorObject_1 = __webpack_require__(16);
  74544. var Observable_1 = __webpack_require__(0);
  74545. var Subscriber_1 = __webpack_require__(4);
  74546. var map_1 = __webpack_require__(49);
  74547. function getCORSRequest() {
  74548. if (root_1.root.XMLHttpRequest) {
  74549. return new root_1.root.XMLHttpRequest();
  74550. }
  74551. else if (!!root_1.root.XDomainRequest) {
  74552. return new root_1.root.XDomainRequest();
  74553. }
  74554. else {
  74555. throw new Error('CORS is not supported by your browser');
  74556. }
  74557. }
  74558. function getXMLHttpRequest() {
  74559. if (root_1.root.XMLHttpRequest) {
  74560. return new root_1.root.XMLHttpRequest();
  74561. }
  74562. else {
  74563. var progId = void 0;
  74564. try {
  74565. var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
  74566. for (var i = 0; i < 3; i++) {
  74567. try {
  74568. progId = progIds[i];
  74569. if (new root_1.root.ActiveXObject(progId)) {
  74570. break;
  74571. }
  74572. }
  74573. catch (e) {
  74574. }
  74575. }
  74576. return new root_1.root.ActiveXObject(progId);
  74577. }
  74578. catch (e) {
  74579. throw new Error('XMLHttpRequest is not supported by your browser');
  74580. }
  74581. }
  74582. }
  74583. function ajaxGet(url, headers) {
  74584. if (headers === void 0) { headers = null; }
  74585. return new AjaxObservable({ method: 'GET', url: url, headers: headers });
  74586. }
  74587. exports.ajaxGet = ajaxGet;
  74588. ;
  74589. function ajaxPost(url, body, headers) {
  74590. return new AjaxObservable({ method: 'POST', url: url, body: body, headers: headers });
  74591. }
  74592. exports.ajaxPost = ajaxPost;
  74593. ;
  74594. function ajaxDelete(url, headers) {
  74595. return new AjaxObservable({ method: 'DELETE', url: url, headers: headers });
  74596. }
  74597. exports.ajaxDelete = ajaxDelete;
  74598. ;
  74599. function ajaxPut(url, body, headers) {
  74600. return new AjaxObservable({ method: 'PUT', url: url, body: body, headers: headers });
  74601. }
  74602. exports.ajaxPut = ajaxPut;
  74603. ;
  74604. function ajaxPatch(url, body, headers) {
  74605. return new AjaxObservable({ method: 'PATCH', url: url, body: body, headers: headers });
  74606. }
  74607. exports.ajaxPatch = ajaxPatch;
  74608. ;
  74609. var mapResponse = map_1.map(function (x, index) { return x.response; });
  74610. function ajaxGetJSON(url, headers) {
  74611. return mapResponse(new AjaxObservable({
  74612. method: 'GET',
  74613. url: url,
  74614. responseType: 'json',
  74615. headers: headers
  74616. }));
  74617. }
  74618. exports.ajaxGetJSON = ajaxGetJSON;
  74619. ;
  74620. /**
  74621. * We need this JSDoc comment for affecting ESDoc.
  74622. * @extends {Ignored}
  74623. * @hide true
  74624. */
  74625. var AjaxObservable = (function (_super) {
  74626. __extends(AjaxObservable, _super);
  74627. function AjaxObservable(urlOrRequest) {
  74628. _super.call(this);
  74629. var request = {
  74630. async: true,
  74631. createXHR: function () {
  74632. return this.crossDomain ? getCORSRequest.call(this) : getXMLHttpRequest();
  74633. },
  74634. crossDomain: false,
  74635. withCredentials: false,
  74636. headers: {},
  74637. method: 'GET',
  74638. responseType: 'json',
  74639. timeout: 0
  74640. };
  74641. if (typeof urlOrRequest === 'string') {
  74642. request.url = urlOrRequest;
  74643. }
  74644. else {
  74645. for (var prop in urlOrRequest) {
  74646. if (urlOrRequest.hasOwnProperty(prop)) {
  74647. request[prop] = urlOrRequest[prop];
  74648. }
  74649. }
  74650. }
  74651. this.request = request;
  74652. }
  74653. /** @deprecated internal use only */ AjaxObservable.prototype._subscribe = function (subscriber) {
  74654. return new AjaxSubscriber(subscriber, this.request);
  74655. };
  74656. /**
  74657. * Creates an observable for an Ajax request with either a request object with
  74658. * url, headers, etc or a string for a URL.
  74659. *
  74660. * @example
  74661. * source = Rx.Observable.ajax('/products');
  74662. * source = Rx.Observable.ajax({ url: 'products', method: 'GET' });
  74663. *
  74664. * @param {string|Object} request Can be one of the following:
  74665. * A string of the URL to make the Ajax call.
  74666. * An object with the following properties
  74667. * - url: URL of the request
  74668. * - body: The body of the request
  74669. * - method: Method of the request, such as GET, POST, PUT, PATCH, DELETE
  74670. * - async: Whether the request is async
  74671. * - headers: Optional headers
  74672. * - crossDomain: true if a cross domain request, else false
  74673. * - createXHR: a function to override if you need to use an alternate
  74674. * XMLHttpRequest implementation.
  74675. * - resultSelector: a function to use to alter the output value type of
  74676. * the Observable. Gets {@link AjaxResponse} as an argument.
  74677. * @return {Observable} An observable sequence containing the XMLHttpRequest.
  74678. * @static true
  74679. * @name ajax
  74680. * @owner Observable
  74681. */
  74682. AjaxObservable.create = (function () {
  74683. var create = function (urlOrRequest) {
  74684. return new AjaxObservable(urlOrRequest);
  74685. };
  74686. create.get = ajaxGet;
  74687. create.post = ajaxPost;
  74688. create.delete = ajaxDelete;
  74689. create.put = ajaxPut;
  74690. create.patch = ajaxPatch;
  74691. create.getJSON = ajaxGetJSON;
  74692. return create;
  74693. })();
  74694. return AjaxObservable;
  74695. }(Observable_1.Observable));
  74696. exports.AjaxObservable = AjaxObservable;
  74697. /**
  74698. * We need this JSDoc comment for affecting ESDoc.
  74699. * @ignore
  74700. * @extends {Ignored}
  74701. */
  74702. var AjaxSubscriber = (function (_super) {
  74703. __extends(AjaxSubscriber, _super);
  74704. function AjaxSubscriber(destination, request) {
  74705. _super.call(this, destination);
  74706. this.request = request;
  74707. this.done = false;
  74708. var headers = request.headers = request.headers || {};
  74709. // force CORS if requested
  74710. if (!request.crossDomain && !headers['X-Requested-With']) {
  74711. headers['X-Requested-With'] = 'XMLHttpRequest';
  74712. }
  74713. // ensure content type is set
  74714. if (!('Content-Type' in headers) && !(root_1.root.FormData && request.body instanceof root_1.root.FormData) && typeof request.body !== 'undefined') {
  74715. headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
  74716. }
  74717. // properly serialize body
  74718. request.body = this.serializeBody(request.body, request.headers['Content-Type']);
  74719. this.send();
  74720. }
  74721. AjaxSubscriber.prototype.next = function (e) {
  74722. this.done = true;
  74723. var _a = this, xhr = _a.xhr, request = _a.request, destination = _a.destination;
  74724. var response = new AjaxResponse(e, xhr, request);
  74725. destination.next(response);
  74726. };
  74727. AjaxSubscriber.prototype.send = function () {
  74728. var _a = this, request = _a.request, _b = _a.request, user = _b.user, method = _b.method, url = _b.url, async = _b.async, password = _b.password, headers = _b.headers, body = _b.body;
  74729. var createXHR = request.createXHR;
  74730. var xhr = tryCatch_1.tryCatch(createXHR).call(request);
  74731. if (xhr === errorObject_1.errorObject) {
  74732. this.error(errorObject_1.errorObject.e);
  74733. }
  74734. else {
  74735. this.xhr = xhr;
  74736. // set up the events before open XHR
  74737. // https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
  74738. // You need to add the event listeners before calling open() on the request.
  74739. // Otherwise the progress events will not fire.
  74740. this.setupEvents(xhr, request);
  74741. // open XHR
  74742. var result = void 0;
  74743. if (user) {
  74744. result = tryCatch_1.tryCatch(xhr.open).call(xhr, method, url, async, user, password);
  74745. }
  74746. else {
  74747. result = tryCatch_1.tryCatch(xhr.open).call(xhr, method, url, async);
  74748. }
  74749. if (result === errorObject_1.errorObject) {
  74750. this.error(errorObject_1.errorObject.e);
  74751. return null;
  74752. }
  74753. // timeout, responseType and withCredentials can be set once the XHR is open
  74754. if (async) {
  74755. xhr.timeout = request.timeout;
  74756. xhr.responseType = request.responseType;
  74757. }
  74758. if ('withCredentials' in xhr) {
  74759. xhr.withCredentials = !!request.withCredentials;
  74760. }
  74761. // set headers
  74762. this.setHeaders(xhr, headers);
  74763. // finally send the request
  74764. result = body ? tryCatch_1.tryCatch(xhr.send).call(xhr, body) : tryCatch_1.tryCatch(xhr.send).call(xhr);
  74765. if (result === errorObject_1.errorObject) {
  74766. this.error(errorObject_1.errorObject.e);
  74767. return null;
  74768. }
  74769. }
  74770. return xhr;
  74771. };
  74772. AjaxSubscriber.prototype.serializeBody = function (body, contentType) {
  74773. if (!body || typeof body === 'string') {
  74774. return body;
  74775. }
  74776. else if (root_1.root.FormData && body instanceof root_1.root.FormData) {
  74777. return body;
  74778. }
  74779. if (contentType) {
  74780. var splitIndex = contentType.indexOf(';');
  74781. if (splitIndex !== -1) {
  74782. contentType = contentType.substring(0, splitIndex);
  74783. }
  74784. }
  74785. switch (contentType) {
  74786. case 'application/x-www-form-urlencoded':
  74787. return Object.keys(body).map(function (key) { return (encodeURI(key) + "=" + encodeURI(body[key])); }).join('&');
  74788. case 'application/json':
  74789. return JSON.stringify(body);
  74790. default:
  74791. return body;
  74792. }
  74793. };
  74794. AjaxSubscriber.prototype.setHeaders = function (xhr, headers) {
  74795. for (var key in headers) {
  74796. if (headers.hasOwnProperty(key)) {
  74797. xhr.setRequestHeader(key, headers[key]);
  74798. }
  74799. }
  74800. };
  74801. AjaxSubscriber.prototype.setupEvents = function (xhr, request) {
  74802. var progressSubscriber = request.progressSubscriber;
  74803. function xhrTimeout(e) {
  74804. var _a = xhrTimeout, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;
  74805. if (progressSubscriber) {
  74806. progressSubscriber.error(e);
  74807. }
  74808. subscriber.error(new AjaxTimeoutError(this, request)); //TODO: Make betterer.
  74809. }
  74810. ;
  74811. xhr.ontimeout = xhrTimeout;
  74812. xhrTimeout.request = request;
  74813. xhrTimeout.subscriber = this;
  74814. xhrTimeout.progressSubscriber = progressSubscriber;
  74815. if (xhr.upload && 'withCredentials' in xhr) {
  74816. if (progressSubscriber) {
  74817. var xhrProgress_1;
  74818. xhrProgress_1 = function (e) {
  74819. var progressSubscriber = xhrProgress_1.progressSubscriber;
  74820. progressSubscriber.next(e);
  74821. };
  74822. if (root_1.root.XDomainRequest) {
  74823. xhr.onprogress = xhrProgress_1;
  74824. }
  74825. else {
  74826. xhr.upload.onprogress = xhrProgress_1;
  74827. }
  74828. xhrProgress_1.progressSubscriber = progressSubscriber;
  74829. }
  74830. var xhrError_1;
  74831. xhrError_1 = function (e) {
  74832. var _a = xhrError_1, progressSubscriber = _a.progressSubscriber, subscriber = _a.subscriber, request = _a.request;
  74833. if (progressSubscriber) {
  74834. progressSubscriber.error(e);
  74835. }
  74836. subscriber.error(new AjaxError('ajax error', this, request));
  74837. };
  74838. xhr.onerror = xhrError_1;
  74839. xhrError_1.request = request;
  74840. xhrError_1.subscriber = this;
  74841. xhrError_1.progressSubscriber = progressSubscriber;
  74842. }
  74843. function xhrReadyStateChange(e) {
  74844. var _a = xhrReadyStateChange, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;
  74845. if (this.readyState === 4) {
  74846. // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
  74847. var status_1 = this.status === 1223 ? 204 : this.status;
  74848. var response = (this.responseType === 'text' ? (this.response || this.responseText) : this.response);
  74849. // fix status code when it is 0 (0 status is undocumented).
  74850. // Occurs when accessing file resources or on Android 4.1 stock browser
  74851. // while retrieving files from application cache.
  74852. if (status_1 === 0) {
  74853. status_1 = response ? 200 : 0;
  74854. }
  74855. if (200 <= status_1 && status_1 < 300) {
  74856. if (progressSubscriber) {
  74857. progressSubscriber.complete();
  74858. }
  74859. subscriber.next(e);
  74860. subscriber.complete();
  74861. }
  74862. else {
  74863. if (progressSubscriber) {
  74864. progressSubscriber.error(e);
  74865. }
  74866. subscriber.error(new AjaxError('ajax error ' + status_1, this, request));
  74867. }
  74868. }
  74869. }
  74870. ;
  74871. xhr.onreadystatechange = xhrReadyStateChange;
  74872. xhrReadyStateChange.subscriber = this;
  74873. xhrReadyStateChange.progressSubscriber = progressSubscriber;
  74874. xhrReadyStateChange.request = request;
  74875. };
  74876. AjaxSubscriber.prototype.unsubscribe = function () {
  74877. var _a = this, done = _a.done, xhr = _a.xhr;
  74878. if (!done && xhr && xhr.readyState !== 4 && typeof xhr.abort === 'function') {
  74879. xhr.abort();
  74880. }
  74881. _super.prototype.unsubscribe.call(this);
  74882. };
  74883. return AjaxSubscriber;
  74884. }(Subscriber_1.Subscriber));
  74885. exports.AjaxSubscriber = AjaxSubscriber;
  74886. /**
  74887. * A normalized AJAX response.
  74888. *
  74889. * @see {@link ajax}
  74890. *
  74891. * @class AjaxResponse
  74892. */
  74893. var AjaxResponse = (function () {
  74894. function AjaxResponse(originalEvent, xhr, request) {
  74895. this.originalEvent = originalEvent;
  74896. this.xhr = xhr;
  74897. this.request = request;
  74898. this.status = xhr.status;
  74899. this.responseType = xhr.responseType || request.responseType;
  74900. this.response = parseXhrResponse(this.responseType, xhr);
  74901. }
  74902. return AjaxResponse;
  74903. }());
  74904. exports.AjaxResponse = AjaxResponse;
  74905. /**
  74906. * A normalized AJAX error.
  74907. *
  74908. * @see {@link ajax}
  74909. *
  74910. * @class AjaxError
  74911. */
  74912. var AjaxError = (function (_super) {
  74913. __extends(AjaxError, _super);
  74914. function AjaxError(message, xhr, request) {
  74915. _super.call(this, message);
  74916. this.message = message;
  74917. this.xhr = xhr;
  74918. this.request = request;
  74919. this.status = xhr.status;
  74920. this.responseType = xhr.responseType || request.responseType;
  74921. this.response = parseXhrResponse(this.responseType, xhr);
  74922. }
  74923. return AjaxError;
  74924. }(Error));
  74925. exports.AjaxError = AjaxError;
  74926. function parseXhrResponse(responseType, xhr) {
  74927. switch (responseType) {
  74928. case 'json':
  74929. if ('response' in xhr) {
  74930. //IE does not support json as responseType, parse it internally
  74931. return xhr.responseType ? xhr.response : JSON.parse(xhr.response || xhr.responseText || 'null');
  74932. }
  74933. else {
  74934. // HACK(benlesh): TypeScript shennanigans
  74935. // tslint:disable-next-line:no-any latest TS seems to think xhr is "never" here.
  74936. return JSON.parse(xhr.responseText || 'null');
  74937. }
  74938. case 'xml':
  74939. return xhr.responseXML;
  74940. case 'text':
  74941. default:
  74942. // HACK(benlesh): TypeScript shennanigans
  74943. // tslint:disable-next-line:no-any latest TS seems to think xhr is "never" here.
  74944. return ('response' in xhr) ? xhr.response : xhr.responseText;
  74945. }
  74946. }
  74947. /**
  74948. * @see {@link ajax}
  74949. *
  74950. * @class AjaxTimeoutError
  74951. */
  74952. var AjaxTimeoutError = (function (_super) {
  74953. __extends(AjaxTimeoutError, _super);
  74954. function AjaxTimeoutError(xhr, request) {
  74955. _super.call(this, 'ajax timeout', xhr, request);
  74956. }
  74957. return AjaxTimeoutError;
  74958. }(AjaxError));
  74959. exports.AjaxTimeoutError = AjaxTimeoutError;
  74960. //# sourceMappingURL=AjaxObservable.js.map
  74961. /***/ }),
  74962. /* 218 */
  74963. /***/ (function(module, exports, __webpack_require__) {
  74964. "use strict";
  74965. var QueueAction_1 = __webpack_require__(439);
  74966. var QueueScheduler_1 = __webpack_require__(440);
  74967. /**
  74968. *
  74969. * Queue Scheduler
  74970. *
  74971. * <span class="informal">Put every next task on a queue, instead of executing it immediately</span>
  74972. *
  74973. * `queue` scheduler, when used with delay, behaves the same as {@link async} scheduler.
  74974. *
  74975. * When used without delay, it schedules given task synchronously - executes it right when
  74976. * it is scheduled. However when called recursively, that is when inside the scheduled task,
  74977. * another task is scheduled with queue scheduler, instead of executing immediately as well,
  74978. * that task will be put on a queue and wait for current one to finish.
  74979. *
  74980. * This means that when you execute task with `queue` scheduler, you are sure it will end
  74981. * before any other task scheduled with that scheduler will start.
  74982. *
  74983. * @examples <caption>Schedule recursively first, then do something</caption>
  74984. *
  74985. * Rx.Scheduler.queue.schedule(() => {
  74986. * Rx.Scheduler.queue.schedule(() => console.log('second')); // will not happen now, but will be put on a queue
  74987. *
  74988. * console.log('first');
  74989. * });
  74990. *
  74991. * // Logs:
  74992. * // "first"
  74993. * // "second"
  74994. *
  74995. *
  74996. * @example <caption>Reschedule itself recursively</caption>
  74997. *
  74998. * Rx.Scheduler.queue.schedule(function(state) {
  74999. * if (state !== 0) {
  75000. * console.log('before', state);
  75001. * this.schedule(state - 1); // `this` references currently executing Action,
  75002. * // which we reschedule with new state
  75003. * console.log('after', state);
  75004. * }
  75005. * }, 0, 3);
  75006. *
  75007. * // In scheduler that runs recursively, you would expect:
  75008. * // "before", 3
  75009. * // "before", 2
  75010. * // "before", 1
  75011. * // "after", 1
  75012. * // "after", 2
  75013. * // "after", 3
  75014. *
  75015. * // But with queue it logs:
  75016. * // "before", 3
  75017. * // "after", 3
  75018. * // "before", 2
  75019. * // "after", 2
  75020. * // "before", 1
  75021. * // "after", 1
  75022. *
  75023. *
  75024. * @static true
  75025. * @name queue
  75026. * @owner Scheduler
  75027. */
  75028. exports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);
  75029. //# sourceMappingURL=queue.js.map
  75030. /***/ }),
  75031. /* 219 */
  75032. /***/ (function(module, exports, __webpack_require__) {
  75033. "use strict";
  75034. var __extends = (this && this.__extends) || function (d, b) {
  75035. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  75036. function __() { this.constructor = d; }
  75037. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  75038. };
  75039. var OuterSubscriber_1 = __webpack_require__(6);
  75040. var subscribeToResult_1 = __webpack_require__(5);
  75041. /**
  75042. * Buffers the source Observable values until `closingNotifier` emits.
  75043. *
  75044. * <span class="informal">Collects values from the past as an array, and emits
  75045. * that array only when another Observable emits.</span>
  75046. *
  75047. * <img src="./img/buffer.png" width="100%">
  75048. *
  75049. * Buffers the incoming Observable values until the given `closingNotifier`
  75050. * Observable emits a value, at which point it emits the buffer on the output
  75051. * Observable and starts a new buffer internally, awaiting the next time
  75052. * `closingNotifier` emits.
  75053. *
  75054. * @example <caption>On every click, emit array of most recent interval events</caption>
  75055. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75056. * var interval = Rx.Observable.interval(1000);
  75057. * var buffered = interval.buffer(clicks);
  75058. * buffered.subscribe(x => console.log(x));
  75059. *
  75060. * @see {@link bufferCount}
  75061. * @see {@link bufferTime}
  75062. * @see {@link bufferToggle}
  75063. * @see {@link bufferWhen}
  75064. * @see {@link window}
  75065. *
  75066. * @param {Observable<any>} closingNotifier An Observable that signals the
  75067. * buffer to be emitted on the output Observable.
  75068. * @return {Observable<T[]>} An Observable of buffers, which are arrays of
  75069. * values.
  75070. * @method buffer
  75071. * @owner Observable
  75072. */
  75073. function buffer(closingNotifier) {
  75074. return function bufferOperatorFunction(source) {
  75075. return source.lift(new BufferOperator(closingNotifier));
  75076. };
  75077. }
  75078. exports.buffer = buffer;
  75079. var BufferOperator = (function () {
  75080. function BufferOperator(closingNotifier) {
  75081. this.closingNotifier = closingNotifier;
  75082. }
  75083. BufferOperator.prototype.call = function (subscriber, source) {
  75084. return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
  75085. };
  75086. return BufferOperator;
  75087. }());
  75088. /**
  75089. * We need this JSDoc comment for affecting ESDoc.
  75090. * @ignore
  75091. * @extends {Ignored}
  75092. */
  75093. var BufferSubscriber = (function (_super) {
  75094. __extends(BufferSubscriber, _super);
  75095. function BufferSubscriber(destination, closingNotifier) {
  75096. _super.call(this, destination);
  75097. this.buffer = [];
  75098. this.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));
  75099. }
  75100. BufferSubscriber.prototype._next = function (value) {
  75101. this.buffer.push(value);
  75102. };
  75103. BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  75104. var buffer = this.buffer;
  75105. this.buffer = [];
  75106. this.destination.next(buffer);
  75107. };
  75108. return BufferSubscriber;
  75109. }(OuterSubscriber_1.OuterSubscriber));
  75110. //# sourceMappingURL=buffer.js.map
  75111. /***/ }),
  75112. /* 220 */
  75113. /***/ (function(module, exports, __webpack_require__) {
  75114. "use strict";
  75115. var __extends = (this && this.__extends) || function (d, b) {
  75116. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  75117. function __() { this.constructor = d; }
  75118. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  75119. };
  75120. var Subscriber_1 = __webpack_require__(4);
  75121. /**
  75122. * Buffers the source Observable values until the size hits the maximum
  75123. * `bufferSize` given.
  75124. *
  75125. * <span class="informal">Collects values from the past as an array, and emits
  75126. * that array only when its size reaches `bufferSize`.</span>
  75127. *
  75128. * <img src="./img/bufferCount.png" width="100%">
  75129. *
  75130. * Buffers a number of values from the source Observable by `bufferSize` then
  75131. * emits the buffer and clears it, and starts a new buffer each
  75132. * `startBufferEvery` values. If `startBufferEvery` is not provided or is
  75133. * `null`, then new buffers are started immediately at the start of the source
  75134. * and when each buffer closes and is emitted.
  75135. *
  75136. * @example <caption>Emit the last two click events as an array</caption>
  75137. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75138. * var buffered = clicks.bufferCount(2);
  75139. * buffered.subscribe(x => console.log(x));
  75140. *
  75141. * @example <caption>On every click, emit the last two click events as an array</caption>
  75142. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75143. * var buffered = clicks.bufferCount(2, 1);
  75144. * buffered.subscribe(x => console.log(x));
  75145. *
  75146. * @see {@link buffer}
  75147. * @see {@link bufferTime}
  75148. * @see {@link bufferToggle}
  75149. * @see {@link bufferWhen}
  75150. * @see {@link pairwise}
  75151. * @see {@link windowCount}
  75152. *
  75153. * @param {number} bufferSize The maximum size of the buffer emitted.
  75154. * @param {number} [startBufferEvery] Interval at which to start a new buffer.
  75155. * For example if `startBufferEvery` is `2`, then a new buffer will be started
  75156. * on every other value from the source. A new buffer is started at the
  75157. * beginning of the source by default.
  75158. * @return {Observable<T[]>} An Observable of arrays of buffered values.
  75159. * @method bufferCount
  75160. * @owner Observable
  75161. */
  75162. function bufferCount(bufferSize, startBufferEvery) {
  75163. if (startBufferEvery === void 0) { startBufferEvery = null; }
  75164. return function bufferCountOperatorFunction(source) {
  75165. return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
  75166. };
  75167. }
  75168. exports.bufferCount = bufferCount;
  75169. var BufferCountOperator = (function () {
  75170. function BufferCountOperator(bufferSize, startBufferEvery) {
  75171. this.bufferSize = bufferSize;
  75172. this.startBufferEvery = startBufferEvery;
  75173. if (!startBufferEvery || bufferSize === startBufferEvery) {
  75174. this.subscriberClass = BufferCountSubscriber;
  75175. }
  75176. else {
  75177. this.subscriberClass = BufferSkipCountSubscriber;
  75178. }
  75179. }
  75180. BufferCountOperator.prototype.call = function (subscriber, source) {
  75181. return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
  75182. };
  75183. return BufferCountOperator;
  75184. }());
  75185. /**
  75186. * We need this JSDoc comment for affecting ESDoc.
  75187. * @ignore
  75188. * @extends {Ignored}
  75189. */
  75190. var BufferCountSubscriber = (function (_super) {
  75191. __extends(BufferCountSubscriber, _super);
  75192. function BufferCountSubscriber(destination, bufferSize) {
  75193. _super.call(this, destination);
  75194. this.bufferSize = bufferSize;
  75195. this.buffer = [];
  75196. }
  75197. BufferCountSubscriber.prototype._next = function (value) {
  75198. var buffer = this.buffer;
  75199. buffer.push(value);
  75200. if (buffer.length == this.bufferSize) {
  75201. this.destination.next(buffer);
  75202. this.buffer = [];
  75203. }
  75204. };
  75205. BufferCountSubscriber.prototype._complete = function () {
  75206. var buffer = this.buffer;
  75207. if (buffer.length > 0) {
  75208. this.destination.next(buffer);
  75209. }
  75210. _super.prototype._complete.call(this);
  75211. };
  75212. return BufferCountSubscriber;
  75213. }(Subscriber_1.Subscriber));
  75214. /**
  75215. * We need this JSDoc comment for affecting ESDoc.
  75216. * @ignore
  75217. * @extends {Ignored}
  75218. */
  75219. var BufferSkipCountSubscriber = (function (_super) {
  75220. __extends(BufferSkipCountSubscriber, _super);
  75221. function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
  75222. _super.call(this, destination);
  75223. this.bufferSize = bufferSize;
  75224. this.startBufferEvery = startBufferEvery;
  75225. this.buffers = [];
  75226. this.count = 0;
  75227. }
  75228. BufferSkipCountSubscriber.prototype._next = function (value) {
  75229. var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
  75230. this.count++;
  75231. if (count % startBufferEvery === 0) {
  75232. buffers.push([]);
  75233. }
  75234. for (var i = buffers.length; i--;) {
  75235. var buffer = buffers[i];
  75236. buffer.push(value);
  75237. if (buffer.length === bufferSize) {
  75238. buffers.splice(i, 1);
  75239. this.destination.next(buffer);
  75240. }
  75241. }
  75242. };
  75243. BufferSkipCountSubscriber.prototype._complete = function () {
  75244. var _a = this, buffers = _a.buffers, destination = _a.destination;
  75245. while (buffers.length > 0) {
  75246. var buffer = buffers.shift();
  75247. if (buffer.length > 0) {
  75248. destination.next(buffer);
  75249. }
  75250. }
  75251. _super.prototype._complete.call(this);
  75252. };
  75253. return BufferSkipCountSubscriber;
  75254. }(Subscriber_1.Subscriber));
  75255. //# sourceMappingURL=bufferCount.js.map
  75256. /***/ }),
  75257. /* 221 */
  75258. /***/ (function(module, exports, __webpack_require__) {
  75259. "use strict";
  75260. var __extends = (this && this.__extends) || function (d, b) {
  75261. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  75262. function __() { this.constructor = d; }
  75263. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  75264. };
  75265. var async_1 = __webpack_require__(10);
  75266. var Subscriber_1 = __webpack_require__(4);
  75267. var isScheduler_1 = __webpack_require__(22);
  75268. /* tslint:enable:max-line-length */
  75269. /**
  75270. * Buffers the source Observable values for a specific time period.
  75271. *
  75272. * <span class="informal">Collects values from the past as an array, and emits
  75273. * those arrays periodically in time.</span>
  75274. *
  75275. * <img src="./img/bufferTime.png" width="100%">
  75276. *
  75277. * Buffers values from the source for a specific time duration `bufferTimeSpan`.
  75278. * Unless the optional argument `bufferCreationInterval` is given, it emits and
  75279. * resets the buffer every `bufferTimeSpan` milliseconds. If
  75280. * `bufferCreationInterval` is given, this operator opens the buffer every
  75281. * `bufferCreationInterval` milliseconds and closes (emits and resets) the
  75282. * buffer every `bufferTimeSpan` milliseconds. When the optional argument
  75283. * `maxBufferSize` is specified, the buffer will be closed either after
  75284. * `bufferTimeSpan` milliseconds or when it contains `maxBufferSize` elements.
  75285. *
  75286. * @example <caption>Every second, emit an array of the recent click events</caption>
  75287. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75288. * var buffered = clicks.bufferTime(1000);
  75289. * buffered.subscribe(x => console.log(x));
  75290. *
  75291. * @example <caption>Every 5 seconds, emit the click events from the next 2 seconds</caption>
  75292. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75293. * var buffered = clicks.bufferTime(2000, 5000);
  75294. * buffered.subscribe(x => console.log(x));
  75295. *
  75296. * @see {@link buffer}
  75297. * @see {@link bufferCount}
  75298. * @see {@link bufferToggle}
  75299. * @see {@link bufferWhen}
  75300. * @see {@link windowTime}
  75301. *
  75302. * @param {number} bufferTimeSpan The amount of time to fill each buffer array.
  75303. * @param {number} [bufferCreationInterval] The interval at which to start new
  75304. * buffers.
  75305. * @param {number} [maxBufferSize] The maximum buffer size.
  75306. * @param {Scheduler} [scheduler=async] The scheduler on which to schedule the
  75307. * intervals that determine buffer boundaries.
  75308. * @return {Observable<T[]>} An observable of arrays of buffered values.
  75309. * @method bufferTime
  75310. * @owner Observable
  75311. */
  75312. function bufferTime(bufferTimeSpan) {
  75313. var length = arguments.length;
  75314. var scheduler = async_1.async;
  75315. if (isScheduler_1.isScheduler(arguments[arguments.length - 1])) {
  75316. scheduler = arguments[arguments.length - 1];
  75317. length--;
  75318. }
  75319. var bufferCreationInterval = null;
  75320. if (length >= 2) {
  75321. bufferCreationInterval = arguments[1];
  75322. }
  75323. var maxBufferSize = Number.POSITIVE_INFINITY;
  75324. if (length >= 3) {
  75325. maxBufferSize = arguments[2];
  75326. }
  75327. return function bufferTimeOperatorFunction(source) {
  75328. return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
  75329. };
  75330. }
  75331. exports.bufferTime = bufferTime;
  75332. var BufferTimeOperator = (function () {
  75333. function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
  75334. this.bufferTimeSpan = bufferTimeSpan;
  75335. this.bufferCreationInterval = bufferCreationInterval;
  75336. this.maxBufferSize = maxBufferSize;
  75337. this.scheduler = scheduler;
  75338. }
  75339. BufferTimeOperator.prototype.call = function (subscriber, source) {
  75340. return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
  75341. };
  75342. return BufferTimeOperator;
  75343. }());
  75344. var Context = (function () {
  75345. function Context() {
  75346. this.buffer = [];
  75347. }
  75348. return Context;
  75349. }());
  75350. /**
  75351. * We need this JSDoc comment for affecting ESDoc.
  75352. * @ignore
  75353. * @extends {Ignored}
  75354. */
  75355. var BufferTimeSubscriber = (function (_super) {
  75356. __extends(BufferTimeSubscriber, _super);
  75357. function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
  75358. _super.call(this, destination);
  75359. this.bufferTimeSpan = bufferTimeSpan;
  75360. this.bufferCreationInterval = bufferCreationInterval;
  75361. this.maxBufferSize = maxBufferSize;
  75362. this.scheduler = scheduler;
  75363. this.contexts = [];
  75364. var context = this.openContext();
  75365. this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
  75366. if (this.timespanOnly) {
  75367. var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
  75368. this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
  75369. }
  75370. else {
  75371. var closeState = { subscriber: this, context: context };
  75372. var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: this, scheduler: scheduler };
  75373. this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
  75374. this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
  75375. }
  75376. }
  75377. BufferTimeSubscriber.prototype._next = function (value) {
  75378. var contexts = this.contexts;
  75379. var len = contexts.length;
  75380. var filledBufferContext;
  75381. for (var i = 0; i < len; i++) {
  75382. var context = contexts[i];
  75383. var buffer = context.buffer;
  75384. buffer.push(value);
  75385. if (buffer.length == this.maxBufferSize) {
  75386. filledBufferContext = context;
  75387. }
  75388. }
  75389. if (filledBufferContext) {
  75390. this.onBufferFull(filledBufferContext);
  75391. }
  75392. };
  75393. BufferTimeSubscriber.prototype._error = function (err) {
  75394. this.contexts.length = 0;
  75395. _super.prototype._error.call(this, err);
  75396. };
  75397. BufferTimeSubscriber.prototype._complete = function () {
  75398. var _a = this, contexts = _a.contexts, destination = _a.destination;
  75399. while (contexts.length > 0) {
  75400. var context = contexts.shift();
  75401. destination.next(context.buffer);
  75402. }
  75403. _super.prototype._complete.call(this);
  75404. };
  75405. /** @deprecated internal use only */ BufferTimeSubscriber.prototype._unsubscribe = function () {
  75406. this.contexts = null;
  75407. };
  75408. BufferTimeSubscriber.prototype.onBufferFull = function (context) {
  75409. this.closeContext(context);
  75410. var closeAction = context.closeAction;
  75411. closeAction.unsubscribe();
  75412. this.remove(closeAction);
  75413. if (!this.closed && this.timespanOnly) {
  75414. context = this.openContext();
  75415. var bufferTimeSpan = this.bufferTimeSpan;
  75416. var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
  75417. this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
  75418. }
  75419. };
  75420. BufferTimeSubscriber.prototype.openContext = function () {
  75421. var context = new Context();
  75422. this.contexts.push(context);
  75423. return context;
  75424. };
  75425. BufferTimeSubscriber.prototype.closeContext = function (context) {
  75426. this.destination.next(context.buffer);
  75427. var contexts = this.contexts;
  75428. var spliceIndex = contexts ? contexts.indexOf(context) : -1;
  75429. if (spliceIndex >= 0) {
  75430. contexts.splice(contexts.indexOf(context), 1);
  75431. }
  75432. };
  75433. return BufferTimeSubscriber;
  75434. }(Subscriber_1.Subscriber));
  75435. function dispatchBufferTimeSpanOnly(state) {
  75436. var subscriber = state.subscriber;
  75437. var prevContext = state.context;
  75438. if (prevContext) {
  75439. subscriber.closeContext(prevContext);
  75440. }
  75441. if (!subscriber.closed) {
  75442. state.context = subscriber.openContext();
  75443. state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
  75444. }
  75445. }
  75446. function dispatchBufferCreation(state) {
  75447. var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
  75448. var context = subscriber.openContext();
  75449. var action = this;
  75450. if (!subscriber.closed) {
  75451. subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
  75452. action.schedule(state, bufferCreationInterval);
  75453. }
  75454. }
  75455. function dispatchBufferClose(arg) {
  75456. var subscriber = arg.subscriber, context = arg.context;
  75457. subscriber.closeContext(context);
  75458. }
  75459. //# sourceMappingURL=bufferTime.js.map
  75460. /***/ }),
  75461. /* 222 */
  75462. /***/ (function(module, exports, __webpack_require__) {
  75463. "use strict";
  75464. var __extends = (this && this.__extends) || function (d, b) {
  75465. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  75466. function __() { this.constructor = d; }
  75467. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  75468. };
  75469. var Subscription_1 = __webpack_require__(14);
  75470. var subscribeToResult_1 = __webpack_require__(5);
  75471. var OuterSubscriber_1 = __webpack_require__(6);
  75472. /**
  75473. * Buffers the source Observable values starting from an emission from
  75474. * `openings` and ending when the output of `closingSelector` emits.
  75475. *
  75476. * <span class="informal">Collects values from the past as an array. Starts
  75477. * collecting only when `opening` emits, and calls the `closingSelector`
  75478. * function to get an Observable that tells when to close the buffer.</span>
  75479. *
  75480. * <img src="./img/bufferToggle.png" width="100%">
  75481. *
  75482. * Buffers values from the source by opening the buffer via signals from an
  75483. * Observable provided to `openings`, and closing and sending the buffers when
  75484. * a Subscribable or Promise returned by the `closingSelector` function emits.
  75485. *
  75486. * @example <caption>Every other second, emit the click events from the next 500ms</caption>
  75487. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75488. * var openings = Rx.Observable.interval(1000);
  75489. * var buffered = clicks.bufferToggle(openings, i =>
  75490. * i % 2 ? Rx.Observable.interval(500) : Rx.Observable.empty()
  75491. * );
  75492. * buffered.subscribe(x => console.log(x));
  75493. *
  75494. * @see {@link buffer}
  75495. * @see {@link bufferCount}
  75496. * @see {@link bufferTime}
  75497. * @see {@link bufferWhen}
  75498. * @see {@link windowToggle}
  75499. *
  75500. * @param {SubscribableOrPromise<O>} openings A Subscribable or Promise of notifications to start new
  75501. * buffers.
  75502. * @param {function(value: O): SubscribableOrPromise} closingSelector A function that takes
  75503. * the value emitted by the `openings` observable and returns a Subscribable or Promise,
  75504. * which, when it emits, signals that the associated buffer should be emitted
  75505. * and cleared.
  75506. * @return {Observable<T[]>} An observable of arrays of buffered values.
  75507. * @method bufferToggle
  75508. * @owner Observable
  75509. */
  75510. function bufferToggle(openings, closingSelector) {
  75511. return function bufferToggleOperatorFunction(source) {
  75512. return source.lift(new BufferToggleOperator(openings, closingSelector));
  75513. };
  75514. }
  75515. exports.bufferToggle = bufferToggle;
  75516. var BufferToggleOperator = (function () {
  75517. function BufferToggleOperator(openings, closingSelector) {
  75518. this.openings = openings;
  75519. this.closingSelector = closingSelector;
  75520. }
  75521. BufferToggleOperator.prototype.call = function (subscriber, source) {
  75522. return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
  75523. };
  75524. return BufferToggleOperator;
  75525. }());
  75526. /**
  75527. * We need this JSDoc comment for affecting ESDoc.
  75528. * @ignore
  75529. * @extends {Ignored}
  75530. */
  75531. var BufferToggleSubscriber = (function (_super) {
  75532. __extends(BufferToggleSubscriber, _super);
  75533. function BufferToggleSubscriber(destination, openings, closingSelector) {
  75534. _super.call(this, destination);
  75535. this.openings = openings;
  75536. this.closingSelector = closingSelector;
  75537. this.contexts = [];
  75538. this.add(subscribeToResult_1.subscribeToResult(this, openings));
  75539. }
  75540. BufferToggleSubscriber.prototype._next = function (value) {
  75541. var contexts = this.contexts;
  75542. var len = contexts.length;
  75543. for (var i = 0; i < len; i++) {
  75544. contexts[i].buffer.push(value);
  75545. }
  75546. };
  75547. BufferToggleSubscriber.prototype._error = function (err) {
  75548. var contexts = this.contexts;
  75549. while (contexts.length > 0) {
  75550. var context = contexts.shift();
  75551. context.subscription.unsubscribe();
  75552. context.buffer = null;
  75553. context.subscription = null;
  75554. }
  75555. this.contexts = null;
  75556. _super.prototype._error.call(this, err);
  75557. };
  75558. BufferToggleSubscriber.prototype._complete = function () {
  75559. var contexts = this.contexts;
  75560. while (contexts.length > 0) {
  75561. var context = contexts.shift();
  75562. this.destination.next(context.buffer);
  75563. context.subscription.unsubscribe();
  75564. context.buffer = null;
  75565. context.subscription = null;
  75566. }
  75567. this.contexts = null;
  75568. _super.prototype._complete.call(this);
  75569. };
  75570. BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  75571. outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
  75572. };
  75573. BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
  75574. this.closeBuffer(innerSub.context);
  75575. };
  75576. BufferToggleSubscriber.prototype.openBuffer = function (value) {
  75577. try {
  75578. var closingSelector = this.closingSelector;
  75579. var closingNotifier = closingSelector.call(this, value);
  75580. if (closingNotifier) {
  75581. this.trySubscribe(closingNotifier);
  75582. }
  75583. }
  75584. catch (err) {
  75585. this._error(err);
  75586. }
  75587. };
  75588. BufferToggleSubscriber.prototype.closeBuffer = function (context) {
  75589. var contexts = this.contexts;
  75590. if (contexts && context) {
  75591. var buffer = context.buffer, subscription = context.subscription;
  75592. this.destination.next(buffer);
  75593. contexts.splice(contexts.indexOf(context), 1);
  75594. this.remove(subscription);
  75595. subscription.unsubscribe();
  75596. }
  75597. };
  75598. BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
  75599. var contexts = this.contexts;
  75600. var buffer = [];
  75601. var subscription = new Subscription_1.Subscription();
  75602. var context = { buffer: buffer, subscription: subscription };
  75603. contexts.push(context);
  75604. var innerSubscription = subscribeToResult_1.subscribeToResult(this, closingNotifier, context);
  75605. if (!innerSubscription || innerSubscription.closed) {
  75606. this.closeBuffer(context);
  75607. }
  75608. else {
  75609. innerSubscription.context = context;
  75610. this.add(innerSubscription);
  75611. subscription.add(innerSubscription);
  75612. }
  75613. };
  75614. return BufferToggleSubscriber;
  75615. }(OuterSubscriber_1.OuterSubscriber));
  75616. //# sourceMappingURL=bufferToggle.js.map
  75617. /***/ }),
  75618. /* 223 */
  75619. /***/ (function(module, exports, __webpack_require__) {
  75620. "use strict";
  75621. var __extends = (this && this.__extends) || function (d, b) {
  75622. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  75623. function __() { this.constructor = d; }
  75624. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  75625. };
  75626. var Subscription_1 = __webpack_require__(14);
  75627. var tryCatch_1 = __webpack_require__(17);
  75628. var errorObject_1 = __webpack_require__(16);
  75629. var OuterSubscriber_1 = __webpack_require__(6);
  75630. var subscribeToResult_1 = __webpack_require__(5);
  75631. /**
  75632. * Buffers the source Observable values, using a factory function of closing
  75633. * Observables to determine when to close, emit, and reset the buffer.
  75634. *
  75635. * <span class="informal">Collects values from the past as an array. When it
  75636. * starts collecting values, it calls a function that returns an Observable that
  75637. * tells when to close the buffer and restart collecting.</span>
  75638. *
  75639. * <img src="./img/bufferWhen.png" width="100%">
  75640. *
  75641. * Opens a buffer immediately, then closes the buffer when the observable
  75642. * returned by calling `closingSelector` function emits a value. When it closes
  75643. * the buffer, it immediately opens a new buffer and repeats the process.
  75644. *
  75645. * @example <caption>Emit an array of the last clicks every [1-5] random seconds</caption>
  75646. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75647. * var buffered = clicks.bufferWhen(() =>
  75648. * Rx.Observable.interval(1000 + Math.random() * 4000)
  75649. * );
  75650. * buffered.subscribe(x => console.log(x));
  75651. *
  75652. * @see {@link buffer}
  75653. * @see {@link bufferCount}
  75654. * @see {@link bufferTime}
  75655. * @see {@link bufferToggle}
  75656. * @see {@link windowWhen}
  75657. *
  75658. * @param {function(): Observable} closingSelector A function that takes no
  75659. * arguments and returns an Observable that signals buffer closure.
  75660. * @return {Observable<T[]>} An observable of arrays of buffered values.
  75661. * @method bufferWhen
  75662. * @owner Observable
  75663. */
  75664. function bufferWhen(closingSelector) {
  75665. return function (source) {
  75666. return source.lift(new BufferWhenOperator(closingSelector));
  75667. };
  75668. }
  75669. exports.bufferWhen = bufferWhen;
  75670. var BufferWhenOperator = (function () {
  75671. function BufferWhenOperator(closingSelector) {
  75672. this.closingSelector = closingSelector;
  75673. }
  75674. BufferWhenOperator.prototype.call = function (subscriber, source) {
  75675. return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
  75676. };
  75677. return BufferWhenOperator;
  75678. }());
  75679. /**
  75680. * We need this JSDoc comment for affecting ESDoc.
  75681. * @ignore
  75682. * @extends {Ignored}
  75683. */
  75684. var BufferWhenSubscriber = (function (_super) {
  75685. __extends(BufferWhenSubscriber, _super);
  75686. function BufferWhenSubscriber(destination, closingSelector) {
  75687. _super.call(this, destination);
  75688. this.closingSelector = closingSelector;
  75689. this.subscribing = false;
  75690. this.openBuffer();
  75691. }
  75692. BufferWhenSubscriber.prototype._next = function (value) {
  75693. this.buffer.push(value);
  75694. };
  75695. BufferWhenSubscriber.prototype._complete = function () {
  75696. var buffer = this.buffer;
  75697. if (buffer) {
  75698. this.destination.next(buffer);
  75699. }
  75700. _super.prototype._complete.call(this);
  75701. };
  75702. /** @deprecated internal use only */ BufferWhenSubscriber.prototype._unsubscribe = function () {
  75703. this.buffer = null;
  75704. this.subscribing = false;
  75705. };
  75706. BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  75707. this.openBuffer();
  75708. };
  75709. BufferWhenSubscriber.prototype.notifyComplete = function () {
  75710. if (this.subscribing) {
  75711. this.complete();
  75712. }
  75713. else {
  75714. this.openBuffer();
  75715. }
  75716. };
  75717. BufferWhenSubscriber.prototype.openBuffer = function () {
  75718. var closingSubscription = this.closingSubscription;
  75719. if (closingSubscription) {
  75720. this.remove(closingSubscription);
  75721. closingSubscription.unsubscribe();
  75722. }
  75723. var buffer = this.buffer;
  75724. if (this.buffer) {
  75725. this.destination.next(buffer);
  75726. }
  75727. this.buffer = [];
  75728. var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)();
  75729. if (closingNotifier === errorObject_1.errorObject) {
  75730. this.error(errorObject_1.errorObject.e);
  75731. }
  75732. else {
  75733. closingSubscription = new Subscription_1.Subscription();
  75734. this.closingSubscription = closingSubscription;
  75735. this.add(closingSubscription);
  75736. this.subscribing = true;
  75737. closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));
  75738. this.subscribing = false;
  75739. }
  75740. };
  75741. return BufferWhenSubscriber;
  75742. }(OuterSubscriber_1.OuterSubscriber));
  75743. //# sourceMappingURL=bufferWhen.js.map
  75744. /***/ }),
  75745. /* 224 */
  75746. /***/ (function(module, exports, __webpack_require__) {
  75747. "use strict";
  75748. var Observable_1 = __webpack_require__(0);
  75749. var catch_1 = __webpack_require__(452);
  75750. Observable_1.Observable.prototype.catch = catch_1._catch;
  75751. Observable_1.Observable.prototype._catch = catch_1._catch;
  75752. //# sourceMappingURL=catch.js.map
  75753. /***/ }),
  75754. /* 225 */
  75755. /***/ (function(module, exports, __webpack_require__) {
  75756. "use strict";
  75757. var __extends = (this && this.__extends) || function (d, b) {
  75758. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  75759. function __() { this.constructor = d; }
  75760. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  75761. };
  75762. var OuterSubscriber_1 = __webpack_require__(6);
  75763. var subscribeToResult_1 = __webpack_require__(5);
  75764. /**
  75765. * Catches errors on the observable to be handled by returning a new observable or throwing an error.
  75766. *
  75767. * <img src="./img/catch.png" width="100%">
  75768. *
  75769. * @example <caption>Continues with a different Observable when there's an error</caption>
  75770. *
  75771. * Observable.of(1, 2, 3, 4, 5)
  75772. * .map(n => {
  75773. * if (n == 4) {
  75774. * throw 'four!';
  75775. * }
  75776. * return n;
  75777. * })
  75778. * .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))
  75779. * .subscribe(x => console.log(x));
  75780. * // 1, 2, 3, I, II, III, IV, V
  75781. *
  75782. * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>
  75783. *
  75784. * Observable.of(1, 2, 3, 4, 5)
  75785. * .map(n => {
  75786. * if (n === 4) {
  75787. * throw 'four!';
  75788. * }
  75789. * return n;
  75790. * })
  75791. * .catch((err, caught) => caught)
  75792. * .take(30)
  75793. * .subscribe(x => console.log(x));
  75794. * // 1, 2, 3, 1, 2, 3, ...
  75795. *
  75796. * @example <caption>Throws a new error when the source Observable throws an error</caption>
  75797. *
  75798. * Observable.of(1, 2, 3, 4, 5)
  75799. * .map(n => {
  75800. * if (n == 4) {
  75801. * throw 'four!';
  75802. * }
  75803. * return n;
  75804. * })
  75805. * .catch(err => {
  75806. * throw 'error in source. Details: ' + err;
  75807. * })
  75808. * .subscribe(
  75809. * x => console.log(x),
  75810. * err => console.log(err)
  75811. * );
  75812. * // 1, 2, 3, error in source. Details: four!
  75813. *
  75814. * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which
  75815. * is the source observable, in case you'd like to "retry" that observable by returning it again. Whatever observable
  75816. * is returned by the `selector` will be used to continue the observable chain.
  75817. * @return {Observable} An observable that originates from either the source or the observable returned by the
  75818. * catch `selector` function.
  75819. * @name catchError
  75820. */
  75821. function catchError(selector) {
  75822. return function catchErrorOperatorFunction(source) {
  75823. var operator = new CatchOperator(selector);
  75824. var caught = source.lift(operator);
  75825. return (operator.caught = caught);
  75826. };
  75827. }
  75828. exports.catchError = catchError;
  75829. var CatchOperator = (function () {
  75830. function CatchOperator(selector) {
  75831. this.selector = selector;
  75832. }
  75833. CatchOperator.prototype.call = function (subscriber, source) {
  75834. return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
  75835. };
  75836. return CatchOperator;
  75837. }());
  75838. /**
  75839. * We need this JSDoc comment for affecting ESDoc.
  75840. * @ignore
  75841. * @extends {Ignored}
  75842. */
  75843. var CatchSubscriber = (function (_super) {
  75844. __extends(CatchSubscriber, _super);
  75845. function CatchSubscriber(destination, selector, caught) {
  75846. _super.call(this, destination);
  75847. this.selector = selector;
  75848. this.caught = caught;
  75849. }
  75850. // NOTE: overriding `error` instead of `_error` because we don't want
  75851. // to have this flag this subscriber as `isStopped`. We can mimic the
  75852. // behavior of the RetrySubscriber (from the `retry` operator), where
  75853. // we unsubscribe from our source chain, reset our Subscriber flags,
  75854. // then subscribe to the selector result.
  75855. CatchSubscriber.prototype.error = function (err) {
  75856. if (!this.isStopped) {
  75857. var result = void 0;
  75858. try {
  75859. result = this.selector(err, this.caught);
  75860. }
  75861. catch (err2) {
  75862. _super.prototype.error.call(this, err2);
  75863. return;
  75864. }
  75865. this._unsubscribeAndRecycle();
  75866. this.add(subscribeToResult_1.subscribeToResult(this, result));
  75867. }
  75868. };
  75869. return CatchSubscriber;
  75870. }(OuterSubscriber_1.OuterSubscriber));
  75871. //# sourceMappingURL=catchError.js.map
  75872. /***/ }),
  75873. /* 226 */
  75874. /***/ (function(module, exports, __webpack_require__) {
  75875. "use strict";
  75876. var combineLatest_1 = __webpack_require__(74);
  75877. function combineAll(project) {
  75878. return function (source) { return source.lift(new combineLatest_1.CombineLatestOperator(project)); };
  75879. }
  75880. exports.combineAll = combineAll;
  75881. //# sourceMappingURL=combineAll.js.map
  75882. /***/ }),
  75883. /* 227 */
  75884. /***/ (function(module, exports, __webpack_require__) {
  75885. "use strict";
  75886. var concat_1 = __webpack_require__(54);
  75887. var concat_2 = __webpack_require__(54);
  75888. exports.concatStatic = concat_2.concat;
  75889. /* tslint:enable:max-line-length */
  75890. /**
  75891. * Creates an output Observable which sequentially emits all values from every
  75892. * given input Observable after the current Observable.
  75893. *
  75894. * <span class="informal">Concatenates multiple Observables together by
  75895. * sequentially emitting their values, one Observable after the other.</span>
  75896. *
  75897. * <img src="./img/concat.png" width="100%">
  75898. *
  75899. * Joins this Observable with multiple other Observables by subscribing to them
  75900. * one at a time, starting with the source, and merging their results into the
  75901. * output Observable. Will wait for each Observable to complete before moving
  75902. * on to the next.
  75903. *
  75904. * @example <caption>Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10</caption>
  75905. * var timer = Rx.Observable.interval(1000).take(4);
  75906. * var sequence = Rx.Observable.range(1, 10);
  75907. * var result = timer.concat(sequence);
  75908. * result.subscribe(x => console.log(x));
  75909. *
  75910. * // results in:
  75911. * // 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
  75912. *
  75913. * @example <caption>Concatenate 3 Observables</caption>
  75914. * var timer1 = Rx.Observable.interval(1000).take(10);
  75915. * var timer2 = Rx.Observable.interval(2000).take(6);
  75916. * var timer3 = Rx.Observable.interval(500).take(10);
  75917. * var result = timer1.concat(timer2, timer3);
  75918. * result.subscribe(x => console.log(x));
  75919. *
  75920. * // results in the following:
  75921. * // (Prints to console sequentially)
  75922. * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
  75923. * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
  75924. * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9
  75925. *
  75926. * @see {@link concatAll}
  75927. * @see {@link concatMap}
  75928. * @see {@link concatMapTo}
  75929. *
  75930. * @param {ObservableInput} other An input Observable to concatenate after the source
  75931. * Observable. More than one input Observables may be given as argument.
  75932. * @param {Scheduler} [scheduler=null] An optional IScheduler to schedule each
  75933. * Observable subscription on.
  75934. * @return {Observable} All values of each passed Observable merged into a
  75935. * single Observable, in order, in serial fashion.
  75936. * @method concat
  75937. * @owner Observable
  75938. */
  75939. function concat() {
  75940. var observables = [];
  75941. for (var _i = 0; _i < arguments.length; _i++) {
  75942. observables[_i - 0] = arguments[_i];
  75943. }
  75944. return function (source) { return source.lift.call(concat_1.concat.apply(void 0, [source].concat(observables))); };
  75945. }
  75946. exports.concat = concat;
  75947. //# sourceMappingURL=concat.js.map
  75948. /***/ }),
  75949. /* 228 */
  75950. /***/ (function(module, exports, __webpack_require__) {
  75951. "use strict";
  75952. var concatMap_1 = __webpack_require__(117);
  75953. /* tslint:enable:max-line-length */
  75954. /**
  75955. * Projects each source value to the same Observable which is merged multiple
  75956. * times in a serialized fashion on the output Observable.
  75957. *
  75958. * <span class="informal">It's like {@link concatMap}, but maps each value
  75959. * always to the same inner Observable.</span>
  75960. *
  75961. * <img src="./img/concatMapTo.png" width="100%">
  75962. *
  75963. * Maps each source value to the given Observable `innerObservable` regardless
  75964. * of the source value, and then flattens those resulting Observables into one
  75965. * single Observable, which is the output Observable. Each new `innerObservable`
  75966. * instance emitted on the output Observable is concatenated with the previous
  75967. * `innerObservable` instance.
  75968. *
  75969. * __Warning:__ if source values arrive endlessly and faster than their
  75970. * corresponding inner Observables can complete, it will result in memory issues
  75971. * as inner Observables amass in an unbounded buffer waiting for their turn to
  75972. * be subscribed to.
  75973. *
  75974. * Note: `concatMapTo` is equivalent to `mergeMapTo` with concurrency parameter
  75975. * set to `1`.
  75976. *
  75977. * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
  75978. * var clicks = Rx.Observable.fromEvent(document, 'click');
  75979. * var result = clicks.concatMapTo(Rx.Observable.interval(1000).take(4));
  75980. * result.subscribe(x => console.log(x));
  75981. *
  75982. * // Results in the following:
  75983. * // (results are not concurrent)
  75984. * // For every click on the "document" it will emit values 0 to 3 spaced
  75985. * // on a 1000ms interval
  75986. * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
  75987. *
  75988. * @see {@link concat}
  75989. * @see {@link concatAll}
  75990. * @see {@link concatMap}
  75991. * @see {@link mergeMapTo}
  75992. * @see {@link switchMapTo}
  75993. *
  75994. * @param {ObservableInput} innerObservable An Observable to replace each value from
  75995. * the source Observable.
  75996. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  75997. * A function to produce the value on the output Observable based on the values
  75998. * and the indices of the source (outer) emission and the inner Observable
  75999. * emission. The arguments passed to this function are:
  76000. * - `outerValue`: the value that came from the source
  76001. * - `innerValue`: the value that came from the projected Observable
  76002. * - `outerIndex`: the "index" of the value that came from the source
  76003. * - `innerIndex`: the "index" of the value from the projected Observable
  76004. * @return {Observable} An observable of values merged together by joining the
  76005. * passed observable with itself, one after the other, for each value emitted
  76006. * from the source.
  76007. * @method concatMapTo
  76008. * @owner Observable
  76009. */
  76010. function concatMapTo(innerObservable, resultSelector) {
  76011. return concatMap_1.concatMap(function () { return innerObservable; }, resultSelector);
  76012. }
  76013. exports.concatMapTo = concatMapTo;
  76014. //# sourceMappingURL=concatMapTo.js.map
  76015. /***/ }),
  76016. /* 229 */
  76017. /***/ (function(module, exports, __webpack_require__) {
  76018. "use strict";
  76019. var __extends = (this && this.__extends) || function (d, b) {
  76020. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76021. function __() { this.constructor = d; }
  76022. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76023. };
  76024. var Subscriber_1 = __webpack_require__(4);
  76025. /**
  76026. * Counts the number of emissions on the source and emits that number when the
  76027. * source completes.
  76028. *
  76029. * <span class="informal">Tells how many values were emitted, when the source
  76030. * completes.</span>
  76031. *
  76032. * <img src="./img/count.png" width="100%">
  76033. *
  76034. * `count` transforms an Observable that emits values into an Observable that
  76035. * emits a single value that represents the number of values emitted by the
  76036. * source Observable. If the source Observable terminates with an error, `count`
  76037. * will pass this error notification along without emitting a value first. If
  76038. * the source Observable does not terminate at all, `count` will neither emit
  76039. * a value nor terminate. This operator takes an optional `predicate` function
  76040. * as argument, in which case the output emission will represent the number of
  76041. * source values that matched `true` with the `predicate`.
  76042. *
  76043. * @example <caption>Counts how many seconds have passed before the first click happened</caption>
  76044. * var seconds = Rx.Observable.interval(1000);
  76045. * var clicks = Rx.Observable.fromEvent(document, 'click');
  76046. * var secondsBeforeClick = seconds.takeUntil(clicks);
  76047. * var result = secondsBeforeClick.count();
  76048. * result.subscribe(x => console.log(x));
  76049. *
  76050. * @example <caption>Counts how many odd numbers are there between 1 and 7</caption>
  76051. * var numbers = Rx.Observable.range(1, 7);
  76052. * var result = numbers.count(i => i % 2 === 1);
  76053. * result.subscribe(x => console.log(x));
  76054. *
  76055. * // Results in:
  76056. * // 4
  76057. *
  76058. * @see {@link max}
  76059. * @see {@link min}
  76060. * @see {@link reduce}
  76061. *
  76062. * @param {function(value: T, i: number, source: Observable<T>): boolean} [predicate] A
  76063. * boolean function to select what values are to be counted. It is provided with
  76064. * arguments of:
  76065. * - `value`: the value from the source Observable.
  76066. * - `index`: the (zero-based) "index" of the value from the source Observable.
  76067. * - `source`: the source Observable instance itself.
  76068. * @return {Observable} An Observable of one number that represents the count as
  76069. * described above.
  76070. * @method count
  76071. * @owner Observable
  76072. */
  76073. function count(predicate) {
  76074. return function (source) { return source.lift(new CountOperator(predicate, source)); };
  76075. }
  76076. exports.count = count;
  76077. var CountOperator = (function () {
  76078. function CountOperator(predicate, source) {
  76079. this.predicate = predicate;
  76080. this.source = source;
  76081. }
  76082. CountOperator.prototype.call = function (subscriber, source) {
  76083. return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
  76084. };
  76085. return CountOperator;
  76086. }());
  76087. /**
  76088. * We need this JSDoc comment for affecting ESDoc.
  76089. * @ignore
  76090. * @extends {Ignored}
  76091. */
  76092. var CountSubscriber = (function (_super) {
  76093. __extends(CountSubscriber, _super);
  76094. function CountSubscriber(destination, predicate, source) {
  76095. _super.call(this, destination);
  76096. this.predicate = predicate;
  76097. this.source = source;
  76098. this.count = 0;
  76099. this.index = 0;
  76100. }
  76101. CountSubscriber.prototype._next = function (value) {
  76102. if (this.predicate) {
  76103. this._tryPredicate(value);
  76104. }
  76105. else {
  76106. this.count++;
  76107. }
  76108. };
  76109. CountSubscriber.prototype._tryPredicate = function (value) {
  76110. var result;
  76111. try {
  76112. result = this.predicate(value, this.index++, this.source);
  76113. }
  76114. catch (err) {
  76115. this.destination.error(err);
  76116. return;
  76117. }
  76118. if (result) {
  76119. this.count++;
  76120. }
  76121. };
  76122. CountSubscriber.prototype._complete = function () {
  76123. this.destination.next(this.count);
  76124. this.destination.complete();
  76125. };
  76126. return CountSubscriber;
  76127. }(Subscriber_1.Subscriber));
  76128. //# sourceMappingURL=count.js.map
  76129. /***/ }),
  76130. /* 230 */
  76131. /***/ (function(module, exports, __webpack_require__) {
  76132. "use strict";
  76133. var __extends = (this && this.__extends) || function (d, b) {
  76134. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76135. function __() { this.constructor = d; }
  76136. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76137. };
  76138. var Subscriber_1 = __webpack_require__(4);
  76139. /**
  76140. * Converts an Observable of {@link Notification} objects into the emissions
  76141. * that they represent.
  76142. *
  76143. * <span class="informal">Unwraps {@link Notification} objects as actual `next`,
  76144. * `error` and `complete` emissions. The opposite of {@link materialize}.</span>
  76145. *
  76146. * <img src="./img/dematerialize.png" width="100%">
  76147. *
  76148. * `dematerialize` is assumed to operate an Observable that only emits
  76149. * {@link Notification} objects as `next` emissions, and does not emit any
  76150. * `error`. Such Observable is the output of a `materialize` operation. Those
  76151. * notifications are then unwrapped using the metadata they contain, and emitted
  76152. * as `next`, `error`, and `complete` on the output Observable.
  76153. *
  76154. * Use this operator in conjunction with {@link materialize}.
  76155. *
  76156. * @example <caption>Convert an Observable of Notifications to an actual Observable</caption>
  76157. * var notifA = new Rx.Notification('N', 'A');
  76158. * var notifB = new Rx.Notification('N', 'B');
  76159. * var notifE = new Rx.Notification('E', void 0,
  76160. * new TypeError('x.toUpperCase is not a function')
  76161. * );
  76162. * var materialized = Rx.Observable.of(notifA, notifB, notifE);
  76163. * var upperCase = materialized.dematerialize();
  76164. * upperCase.subscribe(x => console.log(x), e => console.error(e));
  76165. *
  76166. * // Results in:
  76167. * // A
  76168. * // B
  76169. * // TypeError: x.toUpperCase is not a function
  76170. *
  76171. * @see {@link Notification}
  76172. * @see {@link materialize}
  76173. *
  76174. * @return {Observable} An Observable that emits items and notifications
  76175. * embedded in Notification objects emitted by the source Observable.
  76176. * @method dematerialize
  76177. * @owner Observable
  76178. */
  76179. function dematerialize() {
  76180. return function dematerializeOperatorFunction(source) {
  76181. return source.lift(new DeMaterializeOperator());
  76182. };
  76183. }
  76184. exports.dematerialize = dematerialize;
  76185. var DeMaterializeOperator = (function () {
  76186. function DeMaterializeOperator() {
  76187. }
  76188. DeMaterializeOperator.prototype.call = function (subscriber, source) {
  76189. return source.subscribe(new DeMaterializeSubscriber(subscriber));
  76190. };
  76191. return DeMaterializeOperator;
  76192. }());
  76193. /**
  76194. * We need this JSDoc comment for affecting ESDoc.
  76195. * @ignore
  76196. * @extends {Ignored}
  76197. */
  76198. var DeMaterializeSubscriber = (function (_super) {
  76199. __extends(DeMaterializeSubscriber, _super);
  76200. function DeMaterializeSubscriber(destination) {
  76201. _super.call(this, destination);
  76202. }
  76203. DeMaterializeSubscriber.prototype._next = function (value) {
  76204. value.observe(this.destination);
  76205. };
  76206. return DeMaterializeSubscriber;
  76207. }(Subscriber_1.Subscriber));
  76208. //# sourceMappingURL=dematerialize.js.map
  76209. /***/ }),
  76210. /* 231 */
  76211. /***/ (function(module, exports, __webpack_require__) {
  76212. "use strict";
  76213. var __extends = (this && this.__extends) || function (d, b) {
  76214. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76215. function __() { this.constructor = d; }
  76216. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76217. };
  76218. var OuterSubscriber_1 = __webpack_require__(6);
  76219. var subscribeToResult_1 = __webpack_require__(5);
  76220. /**
  76221. * Emits a value from the source Observable only after a particular time span
  76222. * determined by another Observable has passed without another source emission.
  76223. *
  76224. * <span class="informal">It's like {@link debounceTime}, but the time span of
  76225. * emission silence is determined by a second Observable.</span>
  76226. *
  76227. * <img src="./img/debounce.png" width="100%">
  76228. *
  76229. * `debounce` delays values emitted by the source Observable, but drops previous
  76230. * pending delayed emissions if a new value arrives on the source Observable.
  76231. * This operator keeps track of the most recent value from the source
  76232. * Observable, and spawns a duration Observable by calling the
  76233. * `durationSelector` function. The value is emitted only when the duration
  76234. * Observable emits a value or completes, and if no other value was emitted on
  76235. * the source Observable since the duration Observable was spawned. If a new
  76236. * value appears before the duration Observable emits, the previous value will
  76237. * be dropped and will not be emitted on the output Observable.
  76238. *
  76239. * Like {@link debounceTime}, this is a rate-limiting operator, and also a
  76240. * delay-like operator since output emissions do not necessarily occur at the
  76241. * same time as they did on the source Observable.
  76242. *
  76243. * @example <caption>Emit the most recent click after a burst of clicks</caption>
  76244. * var clicks = Rx.Observable.fromEvent(document, 'click');
  76245. * var result = clicks.debounce(() => Rx.Observable.interval(1000));
  76246. * result.subscribe(x => console.log(x));
  76247. *
  76248. * @see {@link audit}
  76249. * @see {@link debounceTime}
  76250. * @see {@link delayWhen}
  76251. * @see {@link throttle}
  76252. *
  76253. * @param {function(value: T): SubscribableOrPromise} durationSelector A function
  76254. * that receives a value from the source Observable, for computing the timeout
  76255. * duration for each source value, returned as an Observable or a Promise.
  76256. * @return {Observable} An Observable that delays the emissions of the source
  76257. * Observable by the specified duration Observable returned by
  76258. * `durationSelector`, and may drop some values if they occur too frequently.
  76259. * @method debounce
  76260. * @owner Observable
  76261. */
  76262. function debounce(durationSelector) {
  76263. return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
  76264. }
  76265. exports.debounce = debounce;
  76266. var DebounceOperator = (function () {
  76267. function DebounceOperator(durationSelector) {
  76268. this.durationSelector = durationSelector;
  76269. }
  76270. DebounceOperator.prototype.call = function (subscriber, source) {
  76271. return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
  76272. };
  76273. return DebounceOperator;
  76274. }());
  76275. /**
  76276. * We need this JSDoc comment for affecting ESDoc.
  76277. * @ignore
  76278. * @extends {Ignored}
  76279. */
  76280. var DebounceSubscriber = (function (_super) {
  76281. __extends(DebounceSubscriber, _super);
  76282. function DebounceSubscriber(destination, durationSelector) {
  76283. _super.call(this, destination);
  76284. this.durationSelector = durationSelector;
  76285. this.hasValue = false;
  76286. this.durationSubscription = null;
  76287. }
  76288. DebounceSubscriber.prototype._next = function (value) {
  76289. try {
  76290. var result = this.durationSelector.call(this, value);
  76291. if (result) {
  76292. this._tryNext(value, result);
  76293. }
  76294. }
  76295. catch (err) {
  76296. this.destination.error(err);
  76297. }
  76298. };
  76299. DebounceSubscriber.prototype._complete = function () {
  76300. this.emitValue();
  76301. this.destination.complete();
  76302. };
  76303. DebounceSubscriber.prototype._tryNext = function (value, duration) {
  76304. var subscription = this.durationSubscription;
  76305. this.value = value;
  76306. this.hasValue = true;
  76307. if (subscription) {
  76308. subscription.unsubscribe();
  76309. this.remove(subscription);
  76310. }
  76311. subscription = subscribeToResult_1.subscribeToResult(this, duration);
  76312. if (!subscription.closed) {
  76313. this.add(this.durationSubscription = subscription);
  76314. }
  76315. };
  76316. DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  76317. this.emitValue();
  76318. };
  76319. DebounceSubscriber.prototype.notifyComplete = function () {
  76320. this.emitValue();
  76321. };
  76322. DebounceSubscriber.prototype.emitValue = function () {
  76323. if (this.hasValue) {
  76324. var value = this.value;
  76325. var subscription = this.durationSubscription;
  76326. if (subscription) {
  76327. this.durationSubscription = null;
  76328. subscription.unsubscribe();
  76329. this.remove(subscription);
  76330. }
  76331. this.value = null;
  76332. this.hasValue = false;
  76333. _super.prototype._next.call(this, value);
  76334. }
  76335. };
  76336. return DebounceSubscriber;
  76337. }(OuterSubscriber_1.OuterSubscriber));
  76338. //# sourceMappingURL=debounce.js.map
  76339. /***/ }),
  76340. /* 232 */
  76341. /***/ (function(module, exports, __webpack_require__) {
  76342. "use strict";
  76343. var __extends = (this && this.__extends) || function (d, b) {
  76344. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76345. function __() { this.constructor = d; }
  76346. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76347. };
  76348. var Subscriber_1 = __webpack_require__(4);
  76349. var async_1 = __webpack_require__(10);
  76350. /**
  76351. * Emits a value from the source Observable only after a particular time span
  76352. * has passed without another source emission.
  76353. *
  76354. * <span class="informal">It's like {@link delay}, but passes only the most
  76355. * recent value from each burst of emissions.</span>
  76356. *
  76357. * <img src="./img/debounceTime.png" width="100%">
  76358. *
  76359. * `debounceTime` delays values emitted by the source Observable, but drops
  76360. * previous pending delayed emissions if a new value arrives on the source
  76361. * Observable. This operator keeps track of the most recent value from the
  76362. * source Observable, and emits that only when `dueTime` enough time has passed
  76363. * without any other value appearing on the source Observable. If a new value
  76364. * appears before `dueTime` silence occurs, the previous value will be dropped
  76365. * and will not be emitted on the output Observable.
  76366. *
  76367. * This is a rate-limiting operator, because it is impossible for more than one
  76368. * value to be emitted in any time window of duration `dueTime`, but it is also
  76369. * a delay-like operator since output emissions do not occur at the same time as
  76370. * they did on the source Observable. Optionally takes a {@link IScheduler} for
  76371. * managing timers.
  76372. *
  76373. * @example <caption>Emit the most recent click after a burst of clicks</caption>
  76374. * var clicks = Rx.Observable.fromEvent(document, 'click');
  76375. * var result = clicks.debounceTime(1000);
  76376. * result.subscribe(x => console.log(x));
  76377. *
  76378. * @see {@link auditTime}
  76379. * @see {@link debounce}
  76380. * @see {@link delay}
  76381. * @see {@link sampleTime}
  76382. * @see {@link throttleTime}
  76383. *
  76384. * @param {number} dueTime The timeout duration in milliseconds (or the time
  76385. * unit determined internally by the optional `scheduler`) for the window of
  76386. * time required to wait for emission silence before emitting the most recent
  76387. * source value.
  76388. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  76389. * managing the timers that handle the timeout for each value.
  76390. * @return {Observable} An Observable that delays the emissions of the source
  76391. * Observable by the specified `dueTime`, and may drop some values if they occur
  76392. * too frequently.
  76393. * @method debounceTime
  76394. * @owner Observable
  76395. */
  76396. function debounceTime(dueTime, scheduler) {
  76397. if (scheduler === void 0) { scheduler = async_1.async; }
  76398. return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
  76399. }
  76400. exports.debounceTime = debounceTime;
  76401. var DebounceTimeOperator = (function () {
  76402. function DebounceTimeOperator(dueTime, scheduler) {
  76403. this.dueTime = dueTime;
  76404. this.scheduler = scheduler;
  76405. }
  76406. DebounceTimeOperator.prototype.call = function (subscriber, source) {
  76407. return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
  76408. };
  76409. return DebounceTimeOperator;
  76410. }());
  76411. /**
  76412. * We need this JSDoc comment for affecting ESDoc.
  76413. * @ignore
  76414. * @extends {Ignored}
  76415. */
  76416. var DebounceTimeSubscriber = (function (_super) {
  76417. __extends(DebounceTimeSubscriber, _super);
  76418. function DebounceTimeSubscriber(destination, dueTime, scheduler) {
  76419. _super.call(this, destination);
  76420. this.dueTime = dueTime;
  76421. this.scheduler = scheduler;
  76422. this.debouncedSubscription = null;
  76423. this.lastValue = null;
  76424. this.hasValue = false;
  76425. }
  76426. DebounceTimeSubscriber.prototype._next = function (value) {
  76427. this.clearDebounce();
  76428. this.lastValue = value;
  76429. this.hasValue = true;
  76430. this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
  76431. };
  76432. DebounceTimeSubscriber.prototype._complete = function () {
  76433. this.debouncedNext();
  76434. this.destination.complete();
  76435. };
  76436. DebounceTimeSubscriber.prototype.debouncedNext = function () {
  76437. this.clearDebounce();
  76438. if (this.hasValue) {
  76439. this.destination.next(this.lastValue);
  76440. this.lastValue = null;
  76441. this.hasValue = false;
  76442. }
  76443. };
  76444. DebounceTimeSubscriber.prototype.clearDebounce = function () {
  76445. var debouncedSubscription = this.debouncedSubscription;
  76446. if (debouncedSubscription !== null) {
  76447. this.remove(debouncedSubscription);
  76448. debouncedSubscription.unsubscribe();
  76449. this.debouncedSubscription = null;
  76450. }
  76451. };
  76452. return DebounceTimeSubscriber;
  76453. }(Subscriber_1.Subscriber));
  76454. function dispatchNext(subscriber) {
  76455. subscriber.debouncedNext();
  76456. }
  76457. //# sourceMappingURL=debounceTime.js.map
  76458. /***/ }),
  76459. /* 233 */
  76460. /***/ (function(module, exports, __webpack_require__) {
  76461. "use strict";
  76462. var __extends = (this && this.__extends) || function (d, b) {
  76463. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76464. function __() { this.constructor = d; }
  76465. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76466. };
  76467. var async_1 = __webpack_require__(10);
  76468. var isDate_1 = __webpack_require__(76);
  76469. var Subscriber_1 = __webpack_require__(4);
  76470. var Notification_1 = __webpack_require__(55);
  76471. /**
  76472. * Delays the emission of items from the source Observable by a given timeout or
  76473. * until a given Date.
  76474. *
  76475. * <span class="informal">Time shifts each item by some specified amount of
  76476. * milliseconds.</span>
  76477. *
  76478. * <img src="./img/delay.png" width="100%">
  76479. *
  76480. * If the delay argument is a Number, this operator time shifts the source
  76481. * Observable by that amount of time expressed in milliseconds. The relative
  76482. * time intervals between the values are preserved.
  76483. *
  76484. * If the delay argument is a Date, this operator time shifts the start of the
  76485. * Observable execution until the given date occurs.
  76486. *
  76487. * @example <caption>Delay each click by one second</caption>
  76488. * var clicks = Rx.Observable.fromEvent(document, 'click');
  76489. * var delayedClicks = clicks.delay(1000); // each click emitted after 1 second
  76490. * delayedClicks.subscribe(x => console.log(x));
  76491. *
  76492. * @example <caption>Delay all clicks until a future date happens</caption>
  76493. * var clicks = Rx.Observable.fromEvent(document, 'click');
  76494. * var date = new Date('March 15, 2050 12:00:00'); // in the future
  76495. * var delayedClicks = clicks.delay(date); // click emitted only after that date
  76496. * delayedClicks.subscribe(x => console.log(x));
  76497. *
  76498. * @see {@link debounceTime}
  76499. * @see {@link delayWhen}
  76500. *
  76501. * @param {number|Date} delay The delay duration in milliseconds (a `number`) or
  76502. * a `Date` until which the emission of the source items is delayed.
  76503. * @param {Scheduler} [scheduler=async] The IScheduler to use for
  76504. * managing the timers that handle the time-shift for each item.
  76505. * @return {Observable} An Observable that delays the emissions of the source
  76506. * Observable by the specified timeout or Date.
  76507. * @method delay
  76508. * @owner Observable
  76509. */
  76510. function delay(delay, scheduler) {
  76511. if (scheduler === void 0) { scheduler = async_1.async; }
  76512. var absoluteDelay = isDate_1.isDate(delay);
  76513. var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
  76514. return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
  76515. }
  76516. exports.delay = delay;
  76517. var DelayOperator = (function () {
  76518. function DelayOperator(delay, scheduler) {
  76519. this.delay = delay;
  76520. this.scheduler = scheduler;
  76521. }
  76522. DelayOperator.prototype.call = function (subscriber, source) {
  76523. return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
  76524. };
  76525. return DelayOperator;
  76526. }());
  76527. /**
  76528. * We need this JSDoc comment for affecting ESDoc.
  76529. * @ignore
  76530. * @extends {Ignored}
  76531. */
  76532. var DelaySubscriber = (function (_super) {
  76533. __extends(DelaySubscriber, _super);
  76534. function DelaySubscriber(destination, delay, scheduler) {
  76535. _super.call(this, destination);
  76536. this.delay = delay;
  76537. this.scheduler = scheduler;
  76538. this.queue = [];
  76539. this.active = false;
  76540. this.errored = false;
  76541. }
  76542. DelaySubscriber.dispatch = function (state) {
  76543. var source = state.source;
  76544. var queue = source.queue;
  76545. var scheduler = state.scheduler;
  76546. var destination = state.destination;
  76547. while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
  76548. queue.shift().notification.observe(destination);
  76549. }
  76550. if (queue.length > 0) {
  76551. var delay_1 = Math.max(0, queue[0].time - scheduler.now());
  76552. this.schedule(state, delay_1);
  76553. }
  76554. else {
  76555. this.unsubscribe();
  76556. source.active = false;
  76557. }
  76558. };
  76559. DelaySubscriber.prototype._schedule = function (scheduler) {
  76560. this.active = true;
  76561. this.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
  76562. source: this, destination: this.destination, scheduler: scheduler
  76563. }));
  76564. };
  76565. DelaySubscriber.prototype.scheduleNotification = function (notification) {
  76566. if (this.errored === true) {
  76567. return;
  76568. }
  76569. var scheduler = this.scheduler;
  76570. var message = new DelayMessage(scheduler.now() + this.delay, notification);
  76571. this.queue.push(message);
  76572. if (this.active === false) {
  76573. this._schedule(scheduler);
  76574. }
  76575. };
  76576. DelaySubscriber.prototype._next = function (value) {
  76577. this.scheduleNotification(Notification_1.Notification.createNext(value));
  76578. };
  76579. DelaySubscriber.prototype._error = function (err) {
  76580. this.errored = true;
  76581. this.queue = [];
  76582. this.destination.error(err);
  76583. };
  76584. DelaySubscriber.prototype._complete = function () {
  76585. this.scheduleNotification(Notification_1.Notification.createComplete());
  76586. };
  76587. return DelaySubscriber;
  76588. }(Subscriber_1.Subscriber));
  76589. var DelayMessage = (function () {
  76590. function DelayMessage(time, notification) {
  76591. this.time = time;
  76592. this.notification = notification;
  76593. }
  76594. return DelayMessage;
  76595. }());
  76596. //# sourceMappingURL=delay.js.map
  76597. /***/ }),
  76598. /* 234 */
  76599. /***/ (function(module, exports, __webpack_require__) {
  76600. "use strict";
  76601. var __extends = (this && this.__extends) || function (d, b) {
  76602. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76603. function __() { this.constructor = d; }
  76604. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76605. };
  76606. var Subscriber_1 = __webpack_require__(4);
  76607. var Observable_1 = __webpack_require__(0);
  76608. var OuterSubscriber_1 = __webpack_require__(6);
  76609. var subscribeToResult_1 = __webpack_require__(5);
  76610. /**
  76611. * Delays the emission of items from the source Observable by a given time span
  76612. * determined by the emissions of another Observable.
  76613. *
  76614. * <span class="informal">It's like {@link delay}, but the time span of the
  76615. * delay duration is determined by a second Observable.</span>
  76616. *
  76617. * <img src="./img/delayWhen.png" width="100%">
  76618. *
  76619. * `delayWhen` time shifts each emitted value from the source Observable by a
  76620. * time span determined by another Observable. When the source emits a value,
  76621. * the `delayDurationSelector` function is called with the source value as
  76622. * argument, and should return an Observable, called the "duration" Observable.
  76623. * The source value is emitted on the output Observable only when the duration
  76624. * Observable emits a value or completes.
  76625. *
  76626. * Optionally, `delayWhen` takes a second argument, `subscriptionDelay`, which
  76627. * is an Observable. When `subscriptionDelay` emits its first value or
  76628. * completes, the source Observable is subscribed to and starts behaving like
  76629. * described in the previous paragraph. If `subscriptionDelay` is not provided,
  76630. * `delayWhen` will subscribe to the source Observable as soon as the output
  76631. * Observable is subscribed.
  76632. *
  76633. * @example <caption>Delay each click by a random amount of time, between 0 and 5 seconds</caption>
  76634. * var clicks = Rx.Observable.fromEvent(document, 'click');
  76635. * var delayedClicks = clicks.delayWhen(event =>
  76636. * Rx.Observable.interval(Math.random() * 5000)
  76637. * );
  76638. * delayedClicks.subscribe(x => console.log(x));
  76639. *
  76640. * @see {@link debounce}
  76641. * @see {@link delay}
  76642. *
  76643. * @param {function(value: T): Observable} delayDurationSelector A function that
  76644. * returns an Observable for each value emitted by the source Observable, which
  76645. * is then used to delay the emission of that item on the output Observable
  76646. * until the Observable returned from this function emits a value.
  76647. * @param {Observable} subscriptionDelay An Observable that triggers the
  76648. * subscription to the source Observable once it emits any value.
  76649. * @return {Observable} An Observable that delays the emissions of the source
  76650. * Observable by an amount of time specified by the Observable returned by
  76651. * `delayDurationSelector`.
  76652. * @method delayWhen
  76653. * @owner Observable
  76654. */
  76655. function delayWhen(delayDurationSelector, subscriptionDelay) {
  76656. if (subscriptionDelay) {
  76657. return function (source) {
  76658. return new SubscriptionDelayObservable(source, subscriptionDelay)
  76659. .lift(new DelayWhenOperator(delayDurationSelector));
  76660. };
  76661. }
  76662. return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
  76663. }
  76664. exports.delayWhen = delayWhen;
  76665. var DelayWhenOperator = (function () {
  76666. function DelayWhenOperator(delayDurationSelector) {
  76667. this.delayDurationSelector = delayDurationSelector;
  76668. }
  76669. DelayWhenOperator.prototype.call = function (subscriber, source) {
  76670. return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
  76671. };
  76672. return DelayWhenOperator;
  76673. }());
  76674. /**
  76675. * We need this JSDoc comment for affecting ESDoc.
  76676. * @ignore
  76677. * @extends {Ignored}
  76678. */
  76679. var DelayWhenSubscriber = (function (_super) {
  76680. __extends(DelayWhenSubscriber, _super);
  76681. function DelayWhenSubscriber(destination, delayDurationSelector) {
  76682. _super.call(this, destination);
  76683. this.delayDurationSelector = delayDurationSelector;
  76684. this.completed = false;
  76685. this.delayNotifierSubscriptions = [];
  76686. this.values = [];
  76687. }
  76688. DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  76689. this.destination.next(outerValue);
  76690. this.removeSubscription(innerSub);
  76691. this.tryComplete();
  76692. };
  76693. DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
  76694. this._error(error);
  76695. };
  76696. DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
  76697. var value = this.removeSubscription(innerSub);
  76698. if (value) {
  76699. this.destination.next(value);
  76700. }
  76701. this.tryComplete();
  76702. };
  76703. DelayWhenSubscriber.prototype._next = function (value) {
  76704. try {
  76705. var delayNotifier = this.delayDurationSelector(value);
  76706. if (delayNotifier) {
  76707. this.tryDelay(delayNotifier, value);
  76708. }
  76709. }
  76710. catch (err) {
  76711. this.destination.error(err);
  76712. }
  76713. };
  76714. DelayWhenSubscriber.prototype._complete = function () {
  76715. this.completed = true;
  76716. this.tryComplete();
  76717. };
  76718. DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
  76719. subscription.unsubscribe();
  76720. var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
  76721. var value = null;
  76722. if (subscriptionIdx !== -1) {
  76723. value = this.values[subscriptionIdx];
  76724. this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
  76725. this.values.splice(subscriptionIdx, 1);
  76726. }
  76727. return value;
  76728. };
  76729. DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
  76730. var notifierSubscription = subscribeToResult_1.subscribeToResult(this, delayNotifier, value);
  76731. if (notifierSubscription && !notifierSubscription.closed) {
  76732. this.add(notifierSubscription);
  76733. this.delayNotifierSubscriptions.push(notifierSubscription);
  76734. }
  76735. this.values.push(value);
  76736. };
  76737. DelayWhenSubscriber.prototype.tryComplete = function () {
  76738. if (this.completed && this.delayNotifierSubscriptions.length === 0) {
  76739. this.destination.complete();
  76740. }
  76741. };
  76742. return DelayWhenSubscriber;
  76743. }(OuterSubscriber_1.OuterSubscriber));
  76744. /**
  76745. * We need this JSDoc comment for affecting ESDoc.
  76746. * @ignore
  76747. * @extends {Ignored}
  76748. */
  76749. var SubscriptionDelayObservable = (function (_super) {
  76750. __extends(SubscriptionDelayObservable, _super);
  76751. function SubscriptionDelayObservable(/** @deprecated internal use only */ source, subscriptionDelay) {
  76752. _super.call(this);
  76753. this.source = source;
  76754. this.subscriptionDelay = subscriptionDelay;
  76755. }
  76756. /** @deprecated internal use only */ SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
  76757. this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
  76758. };
  76759. return SubscriptionDelayObservable;
  76760. }(Observable_1.Observable));
  76761. /**
  76762. * We need this JSDoc comment for affecting ESDoc.
  76763. * @ignore
  76764. * @extends {Ignored}
  76765. */
  76766. var SubscriptionDelaySubscriber = (function (_super) {
  76767. __extends(SubscriptionDelaySubscriber, _super);
  76768. function SubscriptionDelaySubscriber(parent, source) {
  76769. _super.call(this);
  76770. this.parent = parent;
  76771. this.source = source;
  76772. this.sourceSubscribed = false;
  76773. }
  76774. SubscriptionDelaySubscriber.prototype._next = function (unused) {
  76775. this.subscribeToSource();
  76776. };
  76777. SubscriptionDelaySubscriber.prototype._error = function (err) {
  76778. this.unsubscribe();
  76779. this.parent.error(err);
  76780. };
  76781. SubscriptionDelaySubscriber.prototype._complete = function () {
  76782. this.subscribeToSource();
  76783. };
  76784. SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
  76785. if (!this.sourceSubscribed) {
  76786. this.sourceSubscribed = true;
  76787. this.unsubscribe();
  76788. this.source.subscribe(this.parent);
  76789. }
  76790. };
  76791. return SubscriptionDelaySubscriber;
  76792. }(Subscriber_1.Subscriber));
  76793. //# sourceMappingURL=delayWhen.js.map
  76794. /***/ }),
  76795. /* 235 */
  76796. /***/ (function(module, exports, __webpack_require__) {
  76797. "use strict";
  76798. var __extends = (this && this.__extends) || function (d, b) {
  76799. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76800. function __() { this.constructor = d; }
  76801. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76802. };
  76803. var OuterSubscriber_1 = __webpack_require__(6);
  76804. var subscribeToResult_1 = __webpack_require__(5);
  76805. var Set_1 = __webpack_require__(481);
  76806. /**
  76807. * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.
  76808. *
  76809. * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will
  76810. * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the
  76811. * source observable directly with an equality check against previous values.
  76812. *
  76813. * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.
  76814. *
  76815. * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the
  76816. * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`
  76817. * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so
  76818. * that the internal `Set` can be "flushed", basically clearing it of values.
  76819. *
  76820. * @example <caption>A simple example with numbers</caption>
  76821. * Observable.of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)
  76822. * .distinct()
  76823. * .subscribe(x => console.log(x)); // 1, 2, 3, 4
  76824. *
  76825. * @example <caption>An example using a keySelector function</caption>
  76826. * interface Person {
  76827. * age: number,
  76828. * name: string
  76829. * }
  76830. *
  76831. * Observable.of<Person>(
  76832. * { age: 4, name: 'Foo'},
  76833. * { age: 7, name: 'Bar'},
  76834. * { age: 5, name: 'Foo'})
  76835. * .distinct((p: Person) => p.name)
  76836. * .subscribe(x => console.log(x));
  76837. *
  76838. * // displays:
  76839. * // { age: 4, name: 'Foo' }
  76840. * // { age: 7, name: 'Bar' }
  76841. *
  76842. * @see {@link distinctUntilChanged}
  76843. * @see {@link distinctUntilKeyChanged}
  76844. *
  76845. * @param {function} [keySelector] Optional function to select which value you want to check as distinct.
  76846. * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.
  76847. * @return {Observable} An Observable that emits items from the source Observable with distinct values.
  76848. * @method distinct
  76849. * @owner Observable
  76850. */
  76851. function distinct(keySelector, flushes) {
  76852. return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
  76853. }
  76854. exports.distinct = distinct;
  76855. var DistinctOperator = (function () {
  76856. function DistinctOperator(keySelector, flushes) {
  76857. this.keySelector = keySelector;
  76858. this.flushes = flushes;
  76859. }
  76860. DistinctOperator.prototype.call = function (subscriber, source) {
  76861. return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
  76862. };
  76863. return DistinctOperator;
  76864. }());
  76865. /**
  76866. * We need this JSDoc comment for affecting ESDoc.
  76867. * @ignore
  76868. * @extends {Ignored}
  76869. */
  76870. var DistinctSubscriber = (function (_super) {
  76871. __extends(DistinctSubscriber, _super);
  76872. function DistinctSubscriber(destination, keySelector, flushes) {
  76873. _super.call(this, destination);
  76874. this.keySelector = keySelector;
  76875. this.values = new Set_1.Set();
  76876. if (flushes) {
  76877. this.add(subscribeToResult_1.subscribeToResult(this, flushes));
  76878. }
  76879. }
  76880. DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  76881. this.values.clear();
  76882. };
  76883. DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
  76884. this._error(error);
  76885. };
  76886. DistinctSubscriber.prototype._next = function (value) {
  76887. if (this.keySelector) {
  76888. this._useKeySelector(value);
  76889. }
  76890. else {
  76891. this._finalizeNext(value, value);
  76892. }
  76893. };
  76894. DistinctSubscriber.prototype._useKeySelector = function (value) {
  76895. var key;
  76896. var destination = this.destination;
  76897. try {
  76898. key = this.keySelector(value);
  76899. }
  76900. catch (err) {
  76901. destination.error(err);
  76902. return;
  76903. }
  76904. this._finalizeNext(key, value);
  76905. };
  76906. DistinctSubscriber.prototype._finalizeNext = function (key, value) {
  76907. var values = this.values;
  76908. if (!values.has(key)) {
  76909. values.add(key);
  76910. this.destination.next(value);
  76911. }
  76912. };
  76913. return DistinctSubscriber;
  76914. }(OuterSubscriber_1.OuterSubscriber));
  76915. exports.DistinctSubscriber = DistinctSubscriber;
  76916. //# sourceMappingURL=distinct.js.map
  76917. /***/ }),
  76918. /* 236 */
  76919. /***/ (function(module, exports, __webpack_require__) {
  76920. "use strict";
  76921. var distinctUntilChanged_1 = __webpack_require__(119);
  76922. /* tslint:enable:max-line-length */
  76923. /**
  76924. * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item,
  76925. * using a property accessed by using the key provided to check if the two items are distinct.
  76926. *
  76927. * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
  76928. *
  76929. * If a comparator function is not provided, an equality check is used by default.
  76930. *
  76931. * @example <caption>An example comparing the name of persons</caption>
  76932. *
  76933. * interface Person {
  76934. * age: number,
  76935. * name: string
  76936. * }
  76937. *
  76938. * Observable.of<Person>(
  76939. * { age: 4, name: 'Foo'},
  76940. * { age: 7, name: 'Bar'},
  76941. * { age: 5, name: 'Foo'},
  76942. * { age: 6, name: 'Foo'})
  76943. * .distinctUntilKeyChanged('name')
  76944. * .subscribe(x => console.log(x));
  76945. *
  76946. * // displays:
  76947. * // { age: 4, name: 'Foo' }
  76948. * // { age: 7, name: 'Bar' }
  76949. * // { age: 5, name: 'Foo' }
  76950. *
  76951. * @example <caption>An example comparing the first letters of the name</caption>
  76952. *
  76953. * interface Person {
  76954. * age: number,
  76955. * name: string
  76956. * }
  76957. *
  76958. * Observable.of<Person>(
  76959. * { age: 4, name: 'Foo1'},
  76960. * { age: 7, name: 'Bar'},
  76961. * { age: 5, name: 'Foo2'},
  76962. * { age: 6, name: 'Foo3'})
  76963. * .distinctUntilKeyChanged('name', (x: string, y: string) => x.substring(0, 3) === y.substring(0, 3))
  76964. * .subscribe(x => console.log(x));
  76965. *
  76966. * // displays:
  76967. * // { age: 4, name: 'Foo1' }
  76968. * // { age: 7, name: 'Bar' }
  76969. * // { age: 5, name: 'Foo2' }
  76970. *
  76971. * @see {@link distinct}
  76972. * @see {@link distinctUntilChanged}
  76973. *
  76974. * @param {string} key String key for object property lookup on each item.
  76975. * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
  76976. * @return {Observable} An Observable that emits items from the source Observable with distinct values based on the key specified.
  76977. * @method distinctUntilKeyChanged
  76978. * @owner Observable
  76979. */
  76980. function distinctUntilKeyChanged(key, compare) {
  76981. return distinctUntilChanged_1.distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
  76982. }
  76983. exports.distinctUntilKeyChanged = distinctUntilKeyChanged;
  76984. //# sourceMappingURL=distinctUntilKeyChanged.js.map
  76985. /***/ }),
  76986. /* 237 */
  76987. /***/ (function(module, exports, __webpack_require__) {
  76988. "use strict";
  76989. var __extends = (this && this.__extends) || function (d, b) {
  76990. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  76991. function __() { this.constructor = d; }
  76992. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  76993. };
  76994. var Subscriber_1 = __webpack_require__(4);
  76995. /* tslint:enable:max-line-length */
  76996. /**
  76997. * Perform a side effect for every emission on the source Observable, but return
  76998. * an Observable that is identical to the source.
  76999. *
  77000. * <span class="informal">Intercepts each emission on the source and runs a
  77001. * function, but returns an output which is identical to the source as long as errors don't occur.</span>
  77002. *
  77003. * <img src="./img/do.png" width="100%">
  77004. *
  77005. * Returns a mirrored Observable of the source Observable, but modified so that
  77006. * the provided Observer is called to perform a side effect for every value,
  77007. * error, and completion emitted by the source. Any errors that are thrown in
  77008. * the aforementioned Observer or handlers are safely sent down the error path
  77009. * of the output Observable.
  77010. *
  77011. * This operator is useful for debugging your Observables for the correct values
  77012. * or performing other side effects.
  77013. *
  77014. * Note: this is different to a `subscribe` on the Observable. If the Observable
  77015. * returned by `do` is not subscribed, the side effects specified by the
  77016. * Observer will never happen. `do` therefore simply spies on existing
  77017. * execution, it does not trigger an execution to happen like `subscribe` does.
  77018. *
  77019. * @example <caption>Map every click to the clientX position of that click, while also logging the click event</caption>
  77020. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77021. * var positions = clicks
  77022. * .do(ev => console.log(ev))
  77023. * .map(ev => ev.clientX);
  77024. * positions.subscribe(x => console.log(x));
  77025. *
  77026. * @see {@link map}
  77027. * @see {@link subscribe}
  77028. *
  77029. * @param {Observer|function} [nextOrObserver] A normal Observer object or a
  77030. * callback for `next`.
  77031. * @param {function} [error] Callback for errors in the source.
  77032. * @param {function} [complete] Callback for the completion of the source.
  77033. * @return {Observable} An Observable identical to the source, but runs the
  77034. * specified Observer or callback(s) for each item.
  77035. * @name tap
  77036. */
  77037. function tap(nextOrObserver, error, complete) {
  77038. return function tapOperatorFunction(source) {
  77039. return source.lift(new DoOperator(nextOrObserver, error, complete));
  77040. };
  77041. }
  77042. exports.tap = tap;
  77043. var DoOperator = (function () {
  77044. function DoOperator(nextOrObserver, error, complete) {
  77045. this.nextOrObserver = nextOrObserver;
  77046. this.error = error;
  77047. this.complete = complete;
  77048. }
  77049. DoOperator.prototype.call = function (subscriber, source) {
  77050. return source.subscribe(new DoSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
  77051. };
  77052. return DoOperator;
  77053. }());
  77054. /**
  77055. * We need this JSDoc comment for affecting ESDoc.
  77056. * @ignore
  77057. * @extends {Ignored}
  77058. */
  77059. var DoSubscriber = (function (_super) {
  77060. __extends(DoSubscriber, _super);
  77061. function DoSubscriber(destination, nextOrObserver, error, complete) {
  77062. _super.call(this, destination);
  77063. var safeSubscriber = new Subscriber_1.Subscriber(nextOrObserver, error, complete);
  77064. safeSubscriber.syncErrorThrowable = true;
  77065. this.add(safeSubscriber);
  77066. this.safeSubscriber = safeSubscriber;
  77067. }
  77068. DoSubscriber.prototype._next = function (value) {
  77069. var safeSubscriber = this.safeSubscriber;
  77070. safeSubscriber.next(value);
  77071. if (safeSubscriber.syncErrorThrown) {
  77072. this.destination.error(safeSubscriber.syncErrorValue);
  77073. }
  77074. else {
  77075. this.destination.next(value);
  77076. }
  77077. };
  77078. DoSubscriber.prototype._error = function (err) {
  77079. var safeSubscriber = this.safeSubscriber;
  77080. safeSubscriber.error(err);
  77081. if (safeSubscriber.syncErrorThrown) {
  77082. this.destination.error(safeSubscriber.syncErrorValue);
  77083. }
  77084. else {
  77085. this.destination.error(err);
  77086. }
  77087. };
  77088. DoSubscriber.prototype._complete = function () {
  77089. var safeSubscriber = this.safeSubscriber;
  77090. safeSubscriber.complete();
  77091. if (safeSubscriber.syncErrorThrown) {
  77092. this.destination.error(safeSubscriber.syncErrorValue);
  77093. }
  77094. else {
  77095. this.destination.complete();
  77096. }
  77097. };
  77098. return DoSubscriber;
  77099. }(Subscriber_1.Subscriber));
  77100. //# sourceMappingURL=tap.js.map
  77101. /***/ }),
  77102. /* 238 */
  77103. /***/ (function(module, exports, __webpack_require__) {
  77104. "use strict";
  77105. var __extends = (this && this.__extends) || function (d, b) {
  77106. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77107. function __() { this.constructor = d; }
  77108. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77109. };
  77110. var OuterSubscriber_1 = __webpack_require__(6);
  77111. var subscribeToResult_1 = __webpack_require__(5);
  77112. /**
  77113. * Converts a higher-order Observable into a first-order Observable by dropping
  77114. * inner Observables while the previous inner Observable has not yet completed.
  77115. *
  77116. * <span class="informal">Flattens an Observable-of-Observables by dropping the
  77117. * next inner Observables while the current inner is still executing.</span>
  77118. *
  77119. * <img src="./img/exhaust.png" width="100%">
  77120. *
  77121. * `exhaust` subscribes to an Observable that emits Observables, also known as a
  77122. * higher-order Observable. Each time it observes one of these emitted inner
  77123. * Observables, the output Observable begins emitting the items emitted by that
  77124. * inner Observable. So far, it behaves like {@link mergeAll}. However,
  77125. * `exhaust` ignores every new inner Observable if the previous Observable has
  77126. * not yet completed. Once that one completes, it will accept and flatten the
  77127. * next inner Observable and repeat this process.
  77128. *
  77129. * @example <caption>Run a finite timer for each click, only if there is no currently active timer</caption>
  77130. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77131. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(5));
  77132. * var result = higherOrder.exhaust();
  77133. * result.subscribe(x => console.log(x));
  77134. *
  77135. * @see {@link combineAll}
  77136. * @see {@link concatAll}
  77137. * @see {@link switch}
  77138. * @see {@link mergeAll}
  77139. * @see {@link exhaustMap}
  77140. * @see {@link zipAll}
  77141. *
  77142. * @return {Observable} An Observable that takes a source of Observables and propagates the first observable
  77143. * exclusively until it completes before subscribing to the next.
  77144. * @method exhaust
  77145. * @owner Observable
  77146. */
  77147. function exhaust() {
  77148. return function (source) { return source.lift(new SwitchFirstOperator()); };
  77149. }
  77150. exports.exhaust = exhaust;
  77151. var SwitchFirstOperator = (function () {
  77152. function SwitchFirstOperator() {
  77153. }
  77154. SwitchFirstOperator.prototype.call = function (subscriber, source) {
  77155. return source.subscribe(new SwitchFirstSubscriber(subscriber));
  77156. };
  77157. return SwitchFirstOperator;
  77158. }());
  77159. /**
  77160. * We need this JSDoc comment for affecting ESDoc.
  77161. * @ignore
  77162. * @extends {Ignored}
  77163. */
  77164. var SwitchFirstSubscriber = (function (_super) {
  77165. __extends(SwitchFirstSubscriber, _super);
  77166. function SwitchFirstSubscriber(destination) {
  77167. _super.call(this, destination);
  77168. this.hasCompleted = false;
  77169. this.hasSubscription = false;
  77170. }
  77171. SwitchFirstSubscriber.prototype._next = function (value) {
  77172. if (!this.hasSubscription) {
  77173. this.hasSubscription = true;
  77174. this.add(subscribeToResult_1.subscribeToResult(this, value));
  77175. }
  77176. };
  77177. SwitchFirstSubscriber.prototype._complete = function () {
  77178. this.hasCompleted = true;
  77179. if (!this.hasSubscription) {
  77180. this.destination.complete();
  77181. }
  77182. };
  77183. SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) {
  77184. this.remove(innerSub);
  77185. this.hasSubscription = false;
  77186. if (this.hasCompleted) {
  77187. this.destination.complete();
  77188. }
  77189. };
  77190. return SwitchFirstSubscriber;
  77191. }(OuterSubscriber_1.OuterSubscriber));
  77192. //# sourceMappingURL=exhaust.js.map
  77193. /***/ }),
  77194. /* 239 */
  77195. /***/ (function(module, exports, __webpack_require__) {
  77196. "use strict";
  77197. var __extends = (this && this.__extends) || function (d, b) {
  77198. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77199. function __() { this.constructor = d; }
  77200. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77201. };
  77202. var OuterSubscriber_1 = __webpack_require__(6);
  77203. var subscribeToResult_1 = __webpack_require__(5);
  77204. /* tslint:enable:max-line-length */
  77205. /**
  77206. * Projects each source value to an Observable which is merged in the output
  77207. * Observable only if the previous projected Observable has completed.
  77208. *
  77209. * <span class="informal">Maps each value to an Observable, then flattens all of
  77210. * these inner Observables using {@link exhaust}.</span>
  77211. *
  77212. * <img src="./img/exhaustMap.png" width="100%">
  77213. *
  77214. * Returns an Observable that emits items based on applying a function that you
  77215. * supply to each item emitted by the source Observable, where that function
  77216. * returns an (so-called "inner") Observable. When it projects a source value to
  77217. * an Observable, the output Observable begins emitting the items emitted by
  77218. * that projected Observable. However, `exhaustMap` ignores every new projected
  77219. * Observable if the previous projected Observable has not yet completed. Once
  77220. * that one completes, it will accept and flatten the next projected Observable
  77221. * and repeat this process.
  77222. *
  77223. * @example <caption>Run a finite timer for each click, only if there is no currently active timer</caption>
  77224. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77225. * var result = clicks.exhaustMap((ev) => Rx.Observable.interval(1000).take(5));
  77226. * result.subscribe(x => console.log(x));
  77227. *
  77228. * @see {@link concatMap}
  77229. * @see {@link exhaust}
  77230. * @see {@link mergeMap}
  77231. * @see {@link switchMap}
  77232. *
  77233. * @param {function(value: T, ?index: number): ObservableInput} project A function
  77234. * that, when applied to an item emitted by the source Observable, returns an
  77235. * Observable.
  77236. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  77237. * A function to produce the value on the output Observable based on the values
  77238. * and the indices of the source (outer) emission and the inner Observable
  77239. * emission. The arguments passed to this function are:
  77240. * - `outerValue`: the value that came from the source
  77241. * - `innerValue`: the value that came from the projected Observable
  77242. * - `outerIndex`: the "index" of the value that came from the source
  77243. * - `innerIndex`: the "index" of the value from the projected Observable
  77244. * @return {Observable} An Observable containing projected Observables
  77245. * of each item of the source, ignoring projected Observables that start before
  77246. * their preceding Observable has completed.
  77247. * @method exhaustMap
  77248. * @owner Observable
  77249. */
  77250. function exhaustMap(project, resultSelector) {
  77251. return function (source) { return source.lift(new SwitchFirstMapOperator(project, resultSelector)); };
  77252. }
  77253. exports.exhaustMap = exhaustMap;
  77254. var SwitchFirstMapOperator = (function () {
  77255. function SwitchFirstMapOperator(project, resultSelector) {
  77256. this.project = project;
  77257. this.resultSelector = resultSelector;
  77258. }
  77259. SwitchFirstMapOperator.prototype.call = function (subscriber, source) {
  77260. return source.subscribe(new SwitchFirstMapSubscriber(subscriber, this.project, this.resultSelector));
  77261. };
  77262. return SwitchFirstMapOperator;
  77263. }());
  77264. /**
  77265. * We need this JSDoc comment for affecting ESDoc.
  77266. * @ignore
  77267. * @extends {Ignored}
  77268. */
  77269. var SwitchFirstMapSubscriber = (function (_super) {
  77270. __extends(SwitchFirstMapSubscriber, _super);
  77271. function SwitchFirstMapSubscriber(destination, project, resultSelector) {
  77272. _super.call(this, destination);
  77273. this.project = project;
  77274. this.resultSelector = resultSelector;
  77275. this.hasSubscription = false;
  77276. this.hasCompleted = false;
  77277. this.index = 0;
  77278. }
  77279. SwitchFirstMapSubscriber.prototype._next = function (value) {
  77280. if (!this.hasSubscription) {
  77281. this.tryNext(value);
  77282. }
  77283. };
  77284. SwitchFirstMapSubscriber.prototype.tryNext = function (value) {
  77285. var index = this.index++;
  77286. var destination = this.destination;
  77287. try {
  77288. var result = this.project(value, index);
  77289. this.hasSubscription = true;
  77290. this.add(subscribeToResult_1.subscribeToResult(this, result, value, index));
  77291. }
  77292. catch (err) {
  77293. destination.error(err);
  77294. }
  77295. };
  77296. SwitchFirstMapSubscriber.prototype._complete = function () {
  77297. this.hasCompleted = true;
  77298. if (!this.hasSubscription) {
  77299. this.destination.complete();
  77300. }
  77301. };
  77302. SwitchFirstMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  77303. var _a = this, resultSelector = _a.resultSelector, destination = _a.destination;
  77304. if (resultSelector) {
  77305. this.trySelectResult(outerValue, innerValue, outerIndex, innerIndex);
  77306. }
  77307. else {
  77308. destination.next(innerValue);
  77309. }
  77310. };
  77311. SwitchFirstMapSubscriber.prototype.trySelectResult = function (outerValue, innerValue, outerIndex, innerIndex) {
  77312. var _a = this, resultSelector = _a.resultSelector, destination = _a.destination;
  77313. try {
  77314. var result = resultSelector(outerValue, innerValue, outerIndex, innerIndex);
  77315. destination.next(result);
  77316. }
  77317. catch (err) {
  77318. destination.error(err);
  77319. }
  77320. };
  77321. SwitchFirstMapSubscriber.prototype.notifyError = function (err) {
  77322. this.destination.error(err);
  77323. };
  77324. SwitchFirstMapSubscriber.prototype.notifyComplete = function (innerSub) {
  77325. this.remove(innerSub);
  77326. this.hasSubscription = false;
  77327. if (this.hasCompleted) {
  77328. this.destination.complete();
  77329. }
  77330. };
  77331. return SwitchFirstMapSubscriber;
  77332. }(OuterSubscriber_1.OuterSubscriber));
  77333. //# sourceMappingURL=exhaustMap.js.map
  77334. /***/ }),
  77335. /* 240 */
  77336. /***/ (function(module, exports, __webpack_require__) {
  77337. "use strict";
  77338. var __extends = (this && this.__extends) || function (d, b) {
  77339. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77340. function __() { this.constructor = d; }
  77341. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77342. };
  77343. var tryCatch_1 = __webpack_require__(17);
  77344. var errorObject_1 = __webpack_require__(16);
  77345. var OuterSubscriber_1 = __webpack_require__(6);
  77346. var subscribeToResult_1 = __webpack_require__(5);
  77347. /* tslint:enable:max-line-length */
  77348. /**
  77349. * Recursively projects each source value to an Observable which is merged in
  77350. * the output Observable.
  77351. *
  77352. * <span class="informal">It's similar to {@link mergeMap}, but applies the
  77353. * projection function to every source value as well as every output value.
  77354. * It's recursive.</span>
  77355. *
  77356. * <img src="./img/expand.png" width="100%">
  77357. *
  77358. * Returns an Observable that emits items based on applying a function that you
  77359. * supply to each item emitted by the source Observable, where that function
  77360. * returns an Observable, and then merging those resulting Observables and
  77361. * emitting the results of this merger. *Expand* will re-emit on the output
  77362. * Observable every source value. Then, each output value is given to the
  77363. * `project` function which returns an inner Observable to be merged on the
  77364. * output Observable. Those output values resulting from the projection are also
  77365. * given to the `project` function to produce new output values. This is how
  77366. * *expand* behaves recursively.
  77367. *
  77368. * @example <caption>Start emitting the powers of two on every click, at most 10 of them</caption>
  77369. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77370. * var powersOfTwo = clicks
  77371. * .mapTo(1)
  77372. * .expand(x => Rx.Observable.of(2 * x).delay(1000))
  77373. * .take(10);
  77374. * powersOfTwo.subscribe(x => console.log(x));
  77375. *
  77376. * @see {@link mergeMap}
  77377. * @see {@link mergeScan}
  77378. *
  77379. * @param {function(value: T, index: number) => Observable} project A function
  77380. * that, when applied to an item emitted by the source or the output Observable,
  77381. * returns an Observable.
  77382. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  77383. * Observables being subscribed to concurrently.
  77384. * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to
  77385. * each projected inner Observable.
  77386. * @return {Observable} An Observable that emits the source values and also
  77387. * result of applying the projection function to each value emitted on the
  77388. * output Observable and and merging the results of the Observables obtained
  77389. * from this transformation.
  77390. * @method expand
  77391. * @owner Observable
  77392. */
  77393. function expand(project, concurrent, scheduler) {
  77394. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  77395. if (scheduler === void 0) { scheduler = undefined; }
  77396. concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
  77397. return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
  77398. }
  77399. exports.expand = expand;
  77400. var ExpandOperator = (function () {
  77401. function ExpandOperator(project, concurrent, scheduler) {
  77402. this.project = project;
  77403. this.concurrent = concurrent;
  77404. this.scheduler = scheduler;
  77405. }
  77406. ExpandOperator.prototype.call = function (subscriber, source) {
  77407. return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
  77408. };
  77409. return ExpandOperator;
  77410. }());
  77411. exports.ExpandOperator = ExpandOperator;
  77412. /**
  77413. * We need this JSDoc comment for affecting ESDoc.
  77414. * @ignore
  77415. * @extends {Ignored}
  77416. */
  77417. var ExpandSubscriber = (function (_super) {
  77418. __extends(ExpandSubscriber, _super);
  77419. function ExpandSubscriber(destination, project, concurrent, scheduler) {
  77420. _super.call(this, destination);
  77421. this.project = project;
  77422. this.concurrent = concurrent;
  77423. this.scheduler = scheduler;
  77424. this.index = 0;
  77425. this.active = 0;
  77426. this.hasCompleted = false;
  77427. if (concurrent < Number.POSITIVE_INFINITY) {
  77428. this.buffer = [];
  77429. }
  77430. }
  77431. ExpandSubscriber.dispatch = function (arg) {
  77432. var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
  77433. subscriber.subscribeToProjection(result, value, index);
  77434. };
  77435. ExpandSubscriber.prototype._next = function (value) {
  77436. var destination = this.destination;
  77437. if (destination.closed) {
  77438. this._complete();
  77439. return;
  77440. }
  77441. var index = this.index++;
  77442. if (this.active < this.concurrent) {
  77443. destination.next(value);
  77444. var result = tryCatch_1.tryCatch(this.project)(value, index);
  77445. if (result === errorObject_1.errorObject) {
  77446. destination.error(errorObject_1.errorObject.e);
  77447. }
  77448. else if (!this.scheduler) {
  77449. this.subscribeToProjection(result, value, index);
  77450. }
  77451. else {
  77452. var state = { subscriber: this, result: result, value: value, index: index };
  77453. this.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
  77454. }
  77455. }
  77456. else {
  77457. this.buffer.push(value);
  77458. }
  77459. };
  77460. ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
  77461. this.active++;
  77462. this.add(subscribeToResult_1.subscribeToResult(this, result, value, index));
  77463. };
  77464. ExpandSubscriber.prototype._complete = function () {
  77465. this.hasCompleted = true;
  77466. if (this.hasCompleted && this.active === 0) {
  77467. this.destination.complete();
  77468. }
  77469. };
  77470. ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  77471. this._next(innerValue);
  77472. };
  77473. ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
  77474. var buffer = this.buffer;
  77475. this.remove(innerSub);
  77476. this.active--;
  77477. if (buffer && buffer.length > 0) {
  77478. this._next(buffer.shift());
  77479. }
  77480. if (this.hasCompleted && this.active === 0) {
  77481. this.destination.complete();
  77482. }
  77483. };
  77484. return ExpandSubscriber;
  77485. }(OuterSubscriber_1.OuterSubscriber));
  77486. exports.ExpandSubscriber = ExpandSubscriber;
  77487. //# sourceMappingURL=expand.js.map
  77488. /***/ }),
  77489. /* 241 */
  77490. /***/ (function(module, exports, __webpack_require__) {
  77491. "use strict";
  77492. var __extends = (this && this.__extends) || function (d, b) {
  77493. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77494. function __() { this.constructor = d; }
  77495. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77496. };
  77497. var Subscriber_1 = __webpack_require__(4);
  77498. var ArgumentOutOfRangeError_1 = __webpack_require__(59);
  77499. /**
  77500. * Emits the single value at the specified `index` in a sequence of emissions
  77501. * from the source Observable.
  77502. *
  77503. * <span class="informal">Emits only the i-th value, then completes.</span>
  77504. *
  77505. * <img src="./img/elementAt.png" width="100%">
  77506. *
  77507. * `elementAt` returns an Observable that emits the item at the specified
  77508. * `index` in the source Observable, or a default value if that `index` is out
  77509. * of range and the `default` argument is provided. If the `default` argument is
  77510. * not given and the `index` is out of range, the output Observable will emit an
  77511. * `ArgumentOutOfRangeError` error.
  77512. *
  77513. * @example <caption>Emit only the third click event</caption>
  77514. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77515. * var result = clicks.elementAt(2);
  77516. * result.subscribe(x => console.log(x));
  77517. *
  77518. * // Results in:
  77519. * // click 1 = nothing
  77520. * // click 2 = nothing
  77521. * // click 3 = MouseEvent object logged to console
  77522. *
  77523. * @see {@link first}
  77524. * @see {@link last}
  77525. * @see {@link skip}
  77526. * @see {@link single}
  77527. * @see {@link take}
  77528. *
  77529. * @throws {ArgumentOutOfRangeError} When using `elementAt(i)`, it delivers an
  77530. * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0` or the
  77531. * Observable has completed before emitting the i-th `next` notification.
  77532. *
  77533. * @param {number} index Is the number `i` for the i-th source emission that has
  77534. * happened since the subscription, starting from the number `0`.
  77535. * @param {T} [defaultValue] The default value returned for missing indices.
  77536. * @return {Observable} An Observable that emits a single item, if it is found.
  77537. * Otherwise, will emit the default value if given. If not, then emits an error.
  77538. * @method elementAt
  77539. * @owner Observable
  77540. */
  77541. function elementAt(index, defaultValue) {
  77542. return function (source) { return source.lift(new ElementAtOperator(index, defaultValue)); };
  77543. }
  77544. exports.elementAt = elementAt;
  77545. var ElementAtOperator = (function () {
  77546. function ElementAtOperator(index, defaultValue) {
  77547. this.index = index;
  77548. this.defaultValue = defaultValue;
  77549. if (index < 0) {
  77550. throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
  77551. }
  77552. }
  77553. ElementAtOperator.prototype.call = function (subscriber, source) {
  77554. return source.subscribe(new ElementAtSubscriber(subscriber, this.index, this.defaultValue));
  77555. };
  77556. return ElementAtOperator;
  77557. }());
  77558. /**
  77559. * We need this JSDoc comment for affecting ESDoc.
  77560. * @ignore
  77561. * @extends {Ignored}
  77562. */
  77563. var ElementAtSubscriber = (function (_super) {
  77564. __extends(ElementAtSubscriber, _super);
  77565. function ElementAtSubscriber(destination, index, defaultValue) {
  77566. _super.call(this, destination);
  77567. this.index = index;
  77568. this.defaultValue = defaultValue;
  77569. }
  77570. ElementAtSubscriber.prototype._next = function (x) {
  77571. if (this.index-- === 0) {
  77572. this.destination.next(x);
  77573. this.destination.complete();
  77574. }
  77575. };
  77576. ElementAtSubscriber.prototype._complete = function () {
  77577. var destination = this.destination;
  77578. if (this.index >= 0) {
  77579. if (typeof this.defaultValue !== 'undefined') {
  77580. destination.next(this.defaultValue);
  77581. }
  77582. else {
  77583. destination.error(new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError);
  77584. }
  77585. }
  77586. destination.complete();
  77587. };
  77588. return ElementAtSubscriber;
  77589. }(Subscriber_1.Subscriber));
  77590. //# sourceMappingURL=elementAt.js.map
  77591. /***/ }),
  77592. /* 242 */
  77593. /***/ (function(module, exports, __webpack_require__) {
  77594. "use strict";
  77595. var __extends = (this && this.__extends) || function (d, b) {
  77596. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77597. function __() { this.constructor = d; }
  77598. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77599. };
  77600. var Subscriber_1 = __webpack_require__(4);
  77601. var Subscription_1 = __webpack_require__(14);
  77602. /**
  77603. * Returns an Observable that mirrors the source Observable, but will call a specified function when
  77604. * the source terminates on complete or error.
  77605. * @param {function} callback Function to be called when source terminates.
  77606. * @return {Observable} An Observable that mirrors the source, but will call the specified function on termination.
  77607. * @method finally
  77608. * @owner Observable
  77609. */
  77610. function finalize(callback) {
  77611. return function (source) { return source.lift(new FinallyOperator(callback)); };
  77612. }
  77613. exports.finalize = finalize;
  77614. var FinallyOperator = (function () {
  77615. function FinallyOperator(callback) {
  77616. this.callback = callback;
  77617. }
  77618. FinallyOperator.prototype.call = function (subscriber, source) {
  77619. return source.subscribe(new FinallySubscriber(subscriber, this.callback));
  77620. };
  77621. return FinallyOperator;
  77622. }());
  77623. /**
  77624. * We need this JSDoc comment for affecting ESDoc.
  77625. * @ignore
  77626. * @extends {Ignored}
  77627. */
  77628. var FinallySubscriber = (function (_super) {
  77629. __extends(FinallySubscriber, _super);
  77630. function FinallySubscriber(destination, callback) {
  77631. _super.call(this, destination);
  77632. this.add(new Subscription_1.Subscription(callback));
  77633. }
  77634. return FinallySubscriber;
  77635. }(Subscriber_1.Subscriber));
  77636. //# sourceMappingURL=finalize.js.map
  77637. /***/ }),
  77638. /* 243 */
  77639. /***/ (function(module, exports, __webpack_require__) {
  77640. "use strict";
  77641. var find_1 = __webpack_require__(121);
  77642. /**
  77643. * Emits only the index of the first value emitted by the source Observable that
  77644. * meets some condition.
  77645. *
  77646. * <span class="informal">It's like {@link find}, but emits the index of the
  77647. * found value, not the value itself.</span>
  77648. *
  77649. * <img src="./img/findIndex.png" width="100%">
  77650. *
  77651. * `findIndex` searches for the first item in the source Observable that matches
  77652. * the specified condition embodied by the `predicate`, and returns the
  77653. * (zero-based) index of the first occurrence in the source. Unlike
  77654. * {@link first}, the `predicate` is required in `findIndex`, and does not emit
  77655. * an error if a valid value is not found.
  77656. *
  77657. * @example <caption>Emit the index of first click that happens on a DIV element</caption>
  77658. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77659. * var result = clicks.findIndex(ev => ev.target.tagName === 'DIV');
  77660. * result.subscribe(x => console.log(x));
  77661. *
  77662. * @see {@link filter}
  77663. * @see {@link find}
  77664. * @see {@link first}
  77665. * @see {@link take}
  77666. *
  77667. * @param {function(value: T, index: number, source: Observable<T>): boolean} predicate
  77668. * A function called with each item to test for condition matching.
  77669. * @param {any} [thisArg] An optional argument to determine the value of `this`
  77670. * in the `predicate` function.
  77671. * @return {Observable} An Observable of the index of the first item that
  77672. * matches the condition.
  77673. * @method find
  77674. * @owner Observable
  77675. */
  77676. function findIndex(predicate, thisArg) {
  77677. return function (source) { return source.lift(new find_1.FindValueOperator(predicate, source, true, thisArg)); };
  77678. }
  77679. exports.findIndex = findIndex;
  77680. //# sourceMappingURL=findIndex.js.map
  77681. /***/ }),
  77682. /* 244 */
  77683. /***/ (function(module, exports, __webpack_require__) {
  77684. "use strict";
  77685. var __extends = (this && this.__extends) || function (d, b) {
  77686. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77687. function __() { this.constructor = d; }
  77688. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77689. };
  77690. var Subscriber_1 = __webpack_require__(4);
  77691. var EmptyError_1 = __webpack_require__(79);
  77692. /**
  77693. * Emits only the first value (or the first value that meets some condition)
  77694. * emitted by the source Observable.
  77695. *
  77696. * <span class="informal">Emits only the first value. Or emits only the first
  77697. * value that passes some test.</span>
  77698. *
  77699. * <img src="./img/first.png" width="100%">
  77700. *
  77701. * If called with no arguments, `first` emits the first value of the source
  77702. * Observable, then completes. If called with a `predicate` function, `first`
  77703. * emits the first value of the source that matches the specified condition. It
  77704. * may also take a `resultSelector` function to produce the output value from
  77705. * the input value, and a `defaultValue` to emit in case the source completes
  77706. * before it is able to emit a valid value. Throws an error if `defaultValue`
  77707. * was not provided and a matching element is not found.
  77708. *
  77709. * @example <caption>Emit only the first click that happens on the DOM</caption>
  77710. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77711. * var result = clicks.first();
  77712. * result.subscribe(x => console.log(x));
  77713. *
  77714. * @example <caption>Emits the first click that happens on a DIV</caption>
  77715. * var clicks = Rx.Observable.fromEvent(document, 'click');
  77716. * var result = clicks.first(ev => ev.target.tagName === 'DIV');
  77717. * result.subscribe(x => console.log(x));
  77718. *
  77719. * @see {@link filter}
  77720. * @see {@link find}
  77721. * @see {@link take}
  77722. *
  77723. * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
  77724. * callback if the Observable completes before any `next` notification was sent.
  77725. *
  77726. * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]
  77727. * An optional function called with each item to test for condition matching.
  77728. * @param {function(value: T, index: number): R} [resultSelector] A function to
  77729. * produce the value on the output Observable based on the values
  77730. * and the indices of the source Observable. The arguments passed to this
  77731. * function are:
  77732. * - `value`: the value that was emitted on the source.
  77733. * - `index`: the "index" of the value from the source.
  77734. * @param {R} [defaultValue] The default value emitted in case no valid value
  77735. * was found on the source.
  77736. * @return {Observable<T|R>} An Observable of the first item that matches the
  77737. * condition.
  77738. * @method first
  77739. * @owner Observable
  77740. */
  77741. function first(predicate, resultSelector, defaultValue) {
  77742. return function (source) { return source.lift(new FirstOperator(predicate, resultSelector, defaultValue, source)); };
  77743. }
  77744. exports.first = first;
  77745. var FirstOperator = (function () {
  77746. function FirstOperator(predicate, resultSelector, defaultValue, source) {
  77747. this.predicate = predicate;
  77748. this.resultSelector = resultSelector;
  77749. this.defaultValue = defaultValue;
  77750. this.source = source;
  77751. }
  77752. FirstOperator.prototype.call = function (observer, source) {
  77753. return source.subscribe(new FirstSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));
  77754. };
  77755. return FirstOperator;
  77756. }());
  77757. /**
  77758. * We need this JSDoc comment for affecting ESDoc.
  77759. * @ignore
  77760. * @extends {Ignored}
  77761. */
  77762. var FirstSubscriber = (function (_super) {
  77763. __extends(FirstSubscriber, _super);
  77764. function FirstSubscriber(destination, predicate, resultSelector, defaultValue, source) {
  77765. _super.call(this, destination);
  77766. this.predicate = predicate;
  77767. this.resultSelector = resultSelector;
  77768. this.defaultValue = defaultValue;
  77769. this.source = source;
  77770. this.index = 0;
  77771. this.hasCompleted = false;
  77772. this._emitted = false;
  77773. }
  77774. FirstSubscriber.prototype._next = function (value) {
  77775. var index = this.index++;
  77776. if (this.predicate) {
  77777. this._tryPredicate(value, index);
  77778. }
  77779. else {
  77780. this._emit(value, index);
  77781. }
  77782. };
  77783. FirstSubscriber.prototype._tryPredicate = function (value, index) {
  77784. var result;
  77785. try {
  77786. result = this.predicate(value, index, this.source);
  77787. }
  77788. catch (err) {
  77789. this.destination.error(err);
  77790. return;
  77791. }
  77792. if (result) {
  77793. this._emit(value, index);
  77794. }
  77795. };
  77796. FirstSubscriber.prototype._emit = function (value, index) {
  77797. if (this.resultSelector) {
  77798. this._tryResultSelector(value, index);
  77799. return;
  77800. }
  77801. this._emitFinal(value);
  77802. };
  77803. FirstSubscriber.prototype._tryResultSelector = function (value, index) {
  77804. var result;
  77805. try {
  77806. result = this.resultSelector(value, index);
  77807. }
  77808. catch (err) {
  77809. this.destination.error(err);
  77810. return;
  77811. }
  77812. this._emitFinal(result);
  77813. };
  77814. FirstSubscriber.prototype._emitFinal = function (value) {
  77815. var destination = this.destination;
  77816. if (!this._emitted) {
  77817. this._emitted = true;
  77818. destination.next(value);
  77819. destination.complete();
  77820. this.hasCompleted = true;
  77821. }
  77822. };
  77823. FirstSubscriber.prototype._complete = function () {
  77824. var destination = this.destination;
  77825. if (!this.hasCompleted && typeof this.defaultValue !== 'undefined') {
  77826. destination.next(this.defaultValue);
  77827. destination.complete();
  77828. }
  77829. else if (!this.hasCompleted) {
  77830. destination.error(new EmptyError_1.EmptyError);
  77831. }
  77832. };
  77833. return FirstSubscriber;
  77834. }(Subscriber_1.Subscriber));
  77835. //# sourceMappingURL=first.js.map
  77836. /***/ }),
  77837. /* 245 */
  77838. /***/ (function(module, exports, __webpack_require__) {
  77839. "use strict";
  77840. var __extends = (this && this.__extends) || function (d, b) {
  77841. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  77842. function __() { this.constructor = d; }
  77843. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  77844. };
  77845. var Subscriber_1 = __webpack_require__(4);
  77846. var Subscription_1 = __webpack_require__(14);
  77847. var Observable_1 = __webpack_require__(0);
  77848. var Subject_1 = __webpack_require__(12);
  77849. var Map_1 = __webpack_require__(508);
  77850. var FastMap_1 = __webpack_require__(510);
  77851. /* tslint:enable:max-line-length */
  77852. /**
  77853. * Groups the items emitted by an Observable according to a specified criterion,
  77854. * and emits these grouped items as `GroupedObservables`, one
  77855. * {@link GroupedObservable} per group.
  77856. *
  77857. * <img src="./img/groupBy.png" width="100%">
  77858. *
  77859. * @example <caption>Group objects by id and return as array</caption>
  77860. * Observable.of<Obj>({id: 1, name: 'aze1'},
  77861. * {id: 2, name: 'sf2'},
  77862. * {id: 2, name: 'dg2'},
  77863. * {id: 1, name: 'erg1'},
  77864. * {id: 1, name: 'df1'},
  77865. * {id: 2, name: 'sfqfb2'},
  77866. * {id: 3, name: 'qfs3'},
  77867. * {id: 2, name: 'qsgqsfg2'}
  77868. * )
  77869. * .groupBy(p => p.id)
  77870. * .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], []))
  77871. * .subscribe(p => console.log(p));
  77872. *
  77873. * // displays:
  77874. * // [ { id: 1, name: 'aze1' },
  77875. * // { id: 1, name: 'erg1' },
  77876. * // { id: 1, name: 'df1' } ]
  77877. * //
  77878. * // [ { id: 2, name: 'sf2' },
  77879. * // { id: 2, name: 'dg2' },
  77880. * // { id: 2, name: 'sfqfb2' },
  77881. * // { id: 2, name: 'qsgqsfg2' } ]
  77882. * //
  77883. * // [ { id: 3, name: 'qfs3' } ]
  77884. *
  77885. * @example <caption>Pivot data on the id field</caption>
  77886. * Observable.of<Obj>({id: 1, name: 'aze1'},
  77887. * {id: 2, name: 'sf2'},
  77888. * {id: 2, name: 'dg2'},
  77889. * {id: 1, name: 'erg1'},
  77890. * {id: 1, name: 'df1'},
  77891. * {id: 2, name: 'sfqfb2'},
  77892. * {id: 3, name: 'qfs1'},
  77893. * {id: 2, name: 'qsgqsfg2'}
  77894. * )
  77895. * .groupBy(p => p.id, p => p.name)
  77896. * .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], ["" + group$.key]))
  77897. * .map(arr => ({'id': parseInt(arr[0]), 'values': arr.slice(1)}))
  77898. * .subscribe(p => console.log(p));
  77899. *
  77900. * // displays:
  77901. * // { id: 1, values: [ 'aze1', 'erg1', 'df1' ] }
  77902. * // { id: 2, values: [ 'sf2', 'dg2', 'sfqfb2', 'qsgqsfg2' ] }
  77903. * // { id: 3, values: [ 'qfs1' ] }
  77904. *
  77905. * @param {function(value: T): K} keySelector A function that extracts the key
  77906. * for each item.
  77907. * @param {function(value: T): R} [elementSelector] A function that extracts the
  77908. * return element for each item.
  77909. * @param {function(grouped: GroupedObservable<K,R>): Observable<any>} [durationSelector]
  77910. * A function that returns an Observable to determine how long each group should
  77911. * exist.
  77912. * @return {Observable<GroupedObservable<K,R>>} An Observable that emits
  77913. * GroupedObservables, each of which corresponds to a unique key value and each
  77914. * of which emits those items from the source Observable that share that key
  77915. * value.
  77916. * @method groupBy
  77917. * @owner Observable
  77918. */
  77919. function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
  77920. return function (source) {
  77921. return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
  77922. };
  77923. }
  77924. exports.groupBy = groupBy;
  77925. var GroupByOperator = (function () {
  77926. function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
  77927. this.keySelector = keySelector;
  77928. this.elementSelector = elementSelector;
  77929. this.durationSelector = durationSelector;
  77930. this.subjectSelector = subjectSelector;
  77931. }
  77932. GroupByOperator.prototype.call = function (subscriber, source) {
  77933. return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
  77934. };
  77935. return GroupByOperator;
  77936. }());
  77937. /**
  77938. * We need this JSDoc comment for affecting ESDoc.
  77939. * @ignore
  77940. * @extends {Ignored}
  77941. */
  77942. var GroupBySubscriber = (function (_super) {
  77943. __extends(GroupBySubscriber, _super);
  77944. function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
  77945. _super.call(this, destination);
  77946. this.keySelector = keySelector;
  77947. this.elementSelector = elementSelector;
  77948. this.durationSelector = durationSelector;
  77949. this.subjectSelector = subjectSelector;
  77950. this.groups = null;
  77951. this.attemptedToUnsubscribe = false;
  77952. this.count = 0;
  77953. }
  77954. GroupBySubscriber.prototype._next = function (value) {
  77955. var key;
  77956. try {
  77957. key = this.keySelector(value);
  77958. }
  77959. catch (err) {
  77960. this.error(err);
  77961. return;
  77962. }
  77963. this._group(value, key);
  77964. };
  77965. GroupBySubscriber.prototype._group = function (value, key) {
  77966. var groups = this.groups;
  77967. if (!groups) {
  77968. groups = this.groups = typeof key === 'string' ? new FastMap_1.FastMap() : new Map_1.Map();
  77969. }
  77970. var group = groups.get(key);
  77971. var element;
  77972. if (this.elementSelector) {
  77973. try {
  77974. element = this.elementSelector(value);
  77975. }
  77976. catch (err) {
  77977. this.error(err);
  77978. }
  77979. }
  77980. else {
  77981. element = value;
  77982. }
  77983. if (!group) {
  77984. group = this.subjectSelector ? this.subjectSelector() : new Subject_1.Subject();
  77985. groups.set(key, group);
  77986. var groupedObservable = new GroupedObservable(key, group, this);
  77987. this.destination.next(groupedObservable);
  77988. if (this.durationSelector) {
  77989. var duration = void 0;
  77990. try {
  77991. duration = this.durationSelector(new GroupedObservable(key, group));
  77992. }
  77993. catch (err) {
  77994. this.error(err);
  77995. return;
  77996. }
  77997. this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
  77998. }
  77999. }
  78000. if (!group.closed) {
  78001. group.next(element);
  78002. }
  78003. };
  78004. GroupBySubscriber.prototype._error = function (err) {
  78005. var groups = this.groups;
  78006. if (groups) {
  78007. groups.forEach(function (group, key) {
  78008. group.error(err);
  78009. });
  78010. groups.clear();
  78011. }
  78012. this.destination.error(err);
  78013. };
  78014. GroupBySubscriber.prototype._complete = function () {
  78015. var groups = this.groups;
  78016. if (groups) {
  78017. groups.forEach(function (group, key) {
  78018. group.complete();
  78019. });
  78020. groups.clear();
  78021. }
  78022. this.destination.complete();
  78023. };
  78024. GroupBySubscriber.prototype.removeGroup = function (key) {
  78025. this.groups.delete(key);
  78026. };
  78027. GroupBySubscriber.prototype.unsubscribe = function () {
  78028. if (!this.closed) {
  78029. this.attemptedToUnsubscribe = true;
  78030. if (this.count === 0) {
  78031. _super.prototype.unsubscribe.call(this);
  78032. }
  78033. }
  78034. };
  78035. return GroupBySubscriber;
  78036. }(Subscriber_1.Subscriber));
  78037. /**
  78038. * We need this JSDoc comment for affecting ESDoc.
  78039. * @ignore
  78040. * @extends {Ignored}
  78041. */
  78042. var GroupDurationSubscriber = (function (_super) {
  78043. __extends(GroupDurationSubscriber, _super);
  78044. function GroupDurationSubscriber(key, group, parent) {
  78045. _super.call(this, group);
  78046. this.key = key;
  78047. this.group = group;
  78048. this.parent = parent;
  78049. }
  78050. GroupDurationSubscriber.prototype._next = function (value) {
  78051. this.complete();
  78052. };
  78053. /** @deprecated internal use only */ GroupDurationSubscriber.prototype._unsubscribe = function () {
  78054. var _a = this, parent = _a.parent, key = _a.key;
  78055. this.key = this.parent = null;
  78056. if (parent) {
  78057. parent.removeGroup(key);
  78058. }
  78059. };
  78060. return GroupDurationSubscriber;
  78061. }(Subscriber_1.Subscriber));
  78062. /**
  78063. * An Observable representing values belonging to the same group represented by
  78064. * a common key. The values emitted by a GroupedObservable come from the source
  78065. * Observable. The common key is available as the field `key` on a
  78066. * GroupedObservable instance.
  78067. *
  78068. * @class GroupedObservable<K, T>
  78069. */
  78070. var GroupedObservable = (function (_super) {
  78071. __extends(GroupedObservable, _super);
  78072. function GroupedObservable(key, groupSubject, refCountSubscription) {
  78073. _super.call(this);
  78074. this.key = key;
  78075. this.groupSubject = groupSubject;
  78076. this.refCountSubscription = refCountSubscription;
  78077. }
  78078. /** @deprecated internal use only */ GroupedObservable.prototype._subscribe = function (subscriber) {
  78079. var subscription = new Subscription_1.Subscription();
  78080. var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
  78081. if (refCountSubscription && !refCountSubscription.closed) {
  78082. subscription.add(new InnerRefCountSubscription(refCountSubscription));
  78083. }
  78084. subscription.add(groupSubject.subscribe(subscriber));
  78085. return subscription;
  78086. };
  78087. return GroupedObservable;
  78088. }(Observable_1.Observable));
  78089. exports.GroupedObservable = GroupedObservable;
  78090. /**
  78091. * We need this JSDoc comment for affecting ESDoc.
  78092. * @ignore
  78093. * @extends {Ignored}
  78094. */
  78095. var InnerRefCountSubscription = (function (_super) {
  78096. __extends(InnerRefCountSubscription, _super);
  78097. function InnerRefCountSubscription(parent) {
  78098. _super.call(this);
  78099. this.parent = parent;
  78100. parent.count++;
  78101. }
  78102. InnerRefCountSubscription.prototype.unsubscribe = function () {
  78103. var parent = this.parent;
  78104. if (!parent.closed && !this.closed) {
  78105. _super.prototype.unsubscribe.call(this);
  78106. parent.count -= 1;
  78107. if (parent.count === 0 && parent.attemptedToUnsubscribe) {
  78108. parent.unsubscribe();
  78109. }
  78110. }
  78111. };
  78112. return InnerRefCountSubscription;
  78113. }(Subscription_1.Subscription));
  78114. //# sourceMappingURL=groupBy.js.map
  78115. /***/ }),
  78116. /* 246 */
  78117. /***/ (function(module, exports, __webpack_require__) {
  78118. "use strict";
  78119. var __extends = (this && this.__extends) || function (d, b) {
  78120. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78121. function __() { this.constructor = d; }
  78122. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78123. };
  78124. var Subscriber_1 = __webpack_require__(4);
  78125. var noop_1 = __webpack_require__(88);
  78126. /**
  78127. * Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.
  78128. *
  78129. * <img src="./img/ignoreElements.png" width="100%">
  78130. *
  78131. * @return {Observable} An empty Observable that only calls `complete`
  78132. * or `error`, based on which one is called by the source Observable.
  78133. * @method ignoreElements
  78134. * @owner Observable
  78135. */
  78136. function ignoreElements() {
  78137. return function ignoreElementsOperatorFunction(source) {
  78138. return source.lift(new IgnoreElementsOperator());
  78139. };
  78140. }
  78141. exports.ignoreElements = ignoreElements;
  78142. var IgnoreElementsOperator = (function () {
  78143. function IgnoreElementsOperator() {
  78144. }
  78145. IgnoreElementsOperator.prototype.call = function (subscriber, source) {
  78146. return source.subscribe(new IgnoreElementsSubscriber(subscriber));
  78147. };
  78148. return IgnoreElementsOperator;
  78149. }());
  78150. /**
  78151. * We need this JSDoc comment for affecting ESDoc.
  78152. * @ignore
  78153. * @extends {Ignored}
  78154. */
  78155. var IgnoreElementsSubscriber = (function (_super) {
  78156. __extends(IgnoreElementsSubscriber, _super);
  78157. function IgnoreElementsSubscriber() {
  78158. _super.apply(this, arguments);
  78159. }
  78160. IgnoreElementsSubscriber.prototype._next = function (unused) {
  78161. noop_1.noop();
  78162. };
  78163. return IgnoreElementsSubscriber;
  78164. }(Subscriber_1.Subscriber));
  78165. //# sourceMappingURL=ignoreElements.js.map
  78166. /***/ }),
  78167. /* 247 */
  78168. /***/ (function(module, exports, __webpack_require__) {
  78169. "use strict";
  78170. var __extends = (this && this.__extends) || function (d, b) {
  78171. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78172. function __() { this.constructor = d; }
  78173. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78174. };
  78175. var Subscriber_1 = __webpack_require__(4);
  78176. function isEmpty() {
  78177. return function (source) { return source.lift(new IsEmptyOperator()); };
  78178. }
  78179. exports.isEmpty = isEmpty;
  78180. var IsEmptyOperator = (function () {
  78181. function IsEmptyOperator() {
  78182. }
  78183. IsEmptyOperator.prototype.call = function (observer, source) {
  78184. return source.subscribe(new IsEmptySubscriber(observer));
  78185. };
  78186. return IsEmptyOperator;
  78187. }());
  78188. /**
  78189. * We need this JSDoc comment for affecting ESDoc.
  78190. * @ignore
  78191. * @extends {Ignored}
  78192. */
  78193. var IsEmptySubscriber = (function (_super) {
  78194. __extends(IsEmptySubscriber, _super);
  78195. function IsEmptySubscriber(destination) {
  78196. _super.call(this, destination);
  78197. }
  78198. IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
  78199. var destination = this.destination;
  78200. destination.next(isEmpty);
  78201. destination.complete();
  78202. };
  78203. IsEmptySubscriber.prototype._next = function (value) {
  78204. this.notifyComplete(false);
  78205. };
  78206. IsEmptySubscriber.prototype._complete = function () {
  78207. this.notifyComplete(true);
  78208. };
  78209. return IsEmptySubscriber;
  78210. }(Subscriber_1.Subscriber));
  78211. //# sourceMappingURL=isEmpty.js.map
  78212. /***/ }),
  78213. /* 248 */
  78214. /***/ (function(module, exports, __webpack_require__) {
  78215. "use strict";
  78216. var async_1 = __webpack_require__(10);
  78217. var audit_1 = __webpack_require__(122);
  78218. var timer_1 = __webpack_require__(216);
  78219. /**
  78220. * Ignores source values for `duration` milliseconds, then emits the most recent
  78221. * value from the source Observable, then repeats this process.
  78222. *
  78223. * <span class="informal">When it sees a source values, it ignores that plus
  78224. * the next ones for `duration` milliseconds, and then it emits the most recent
  78225. * value from the source.</span>
  78226. *
  78227. * <img src="./img/auditTime.png" width="100%">
  78228. *
  78229. * `auditTime` is similar to `throttleTime`, but emits the last value from the
  78230. * silenced time window, instead of the first value. `auditTime` emits the most
  78231. * recent value from the source Observable on the output Observable as soon as
  78232. * its internal timer becomes disabled, and ignores source values while the
  78233. * timer is enabled. Initially, the timer is disabled. As soon as the first
  78234. * source value arrives, the timer is enabled. After `duration` milliseconds (or
  78235. * the time unit determined internally by the optional `scheduler`) has passed,
  78236. * the timer is disabled, then the most recent source value is emitted on the
  78237. * output Observable, and this process repeats for the next source value.
  78238. * Optionally takes a {@link IScheduler} for managing timers.
  78239. *
  78240. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  78241. * var clicks = Rx.Observable.fromEvent(document, 'click');
  78242. * var result = clicks.auditTime(1000);
  78243. * result.subscribe(x => console.log(x));
  78244. *
  78245. * @see {@link audit}
  78246. * @see {@link debounceTime}
  78247. * @see {@link delay}
  78248. * @see {@link sampleTime}
  78249. * @see {@link throttleTime}
  78250. *
  78251. * @param {number} duration Time to wait before emitting the most recent source
  78252. * value, measured in milliseconds or the time unit determined internally
  78253. * by the optional `scheduler`.
  78254. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  78255. * managing the timers that handle the rate-limiting behavior.
  78256. * @return {Observable<T>} An Observable that performs rate-limiting of
  78257. * emissions from the source Observable.
  78258. * @method auditTime
  78259. * @owner Observable
  78260. */
  78261. function auditTime(duration, scheduler) {
  78262. if (scheduler === void 0) { scheduler = async_1.async; }
  78263. return audit_1.audit(function () { return timer_1.timer(duration, scheduler); });
  78264. }
  78265. exports.auditTime = auditTime;
  78266. //# sourceMappingURL=auditTime.js.map
  78267. /***/ }),
  78268. /* 249 */
  78269. /***/ (function(module, exports, __webpack_require__) {
  78270. "use strict";
  78271. var __extends = (this && this.__extends) || function (d, b) {
  78272. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78273. function __() { this.constructor = d; }
  78274. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78275. };
  78276. var Subscriber_1 = __webpack_require__(4);
  78277. var EmptyError_1 = __webpack_require__(79);
  78278. /* tslint:enable:max-line-length */
  78279. /**
  78280. * Returns an Observable that emits only the last item emitted by the source Observable.
  78281. * It optionally takes a predicate function as a parameter, in which case, rather than emitting
  78282. * the last item from the source Observable, the resulting Observable will emit the last item
  78283. * from the source Observable that satisfies the predicate.
  78284. *
  78285. * <img src="./img/last.png" width="100%">
  78286. *
  78287. * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
  78288. * callback if the Observable completes before any `next` notification was sent.
  78289. * @param {function} predicate - The condition any source emitted item has to satisfy.
  78290. * @return {Observable} An Observable that emits only the last item satisfying the given condition
  78291. * from the source, or an NoSuchElementException if no such items are emitted.
  78292. * @throws - Throws if no items that match the predicate are emitted by the source Observable.
  78293. * @method last
  78294. * @owner Observable
  78295. */
  78296. function last(predicate, resultSelector, defaultValue) {
  78297. return function (source) { return source.lift(new LastOperator(predicate, resultSelector, defaultValue, source)); };
  78298. }
  78299. exports.last = last;
  78300. var LastOperator = (function () {
  78301. function LastOperator(predicate, resultSelector, defaultValue, source) {
  78302. this.predicate = predicate;
  78303. this.resultSelector = resultSelector;
  78304. this.defaultValue = defaultValue;
  78305. this.source = source;
  78306. }
  78307. LastOperator.prototype.call = function (observer, source) {
  78308. return source.subscribe(new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));
  78309. };
  78310. return LastOperator;
  78311. }());
  78312. /**
  78313. * We need this JSDoc comment for affecting ESDoc.
  78314. * @ignore
  78315. * @extends {Ignored}
  78316. */
  78317. var LastSubscriber = (function (_super) {
  78318. __extends(LastSubscriber, _super);
  78319. function LastSubscriber(destination, predicate, resultSelector, defaultValue, source) {
  78320. _super.call(this, destination);
  78321. this.predicate = predicate;
  78322. this.resultSelector = resultSelector;
  78323. this.defaultValue = defaultValue;
  78324. this.source = source;
  78325. this.hasValue = false;
  78326. this.index = 0;
  78327. if (typeof defaultValue !== 'undefined') {
  78328. this.lastValue = defaultValue;
  78329. this.hasValue = true;
  78330. }
  78331. }
  78332. LastSubscriber.prototype._next = function (value) {
  78333. var index = this.index++;
  78334. if (this.predicate) {
  78335. this._tryPredicate(value, index);
  78336. }
  78337. else {
  78338. if (this.resultSelector) {
  78339. this._tryResultSelector(value, index);
  78340. return;
  78341. }
  78342. this.lastValue = value;
  78343. this.hasValue = true;
  78344. }
  78345. };
  78346. LastSubscriber.prototype._tryPredicate = function (value, index) {
  78347. var result;
  78348. try {
  78349. result = this.predicate(value, index, this.source);
  78350. }
  78351. catch (err) {
  78352. this.destination.error(err);
  78353. return;
  78354. }
  78355. if (result) {
  78356. if (this.resultSelector) {
  78357. this._tryResultSelector(value, index);
  78358. return;
  78359. }
  78360. this.lastValue = value;
  78361. this.hasValue = true;
  78362. }
  78363. };
  78364. LastSubscriber.prototype._tryResultSelector = function (value, index) {
  78365. var result;
  78366. try {
  78367. result = this.resultSelector(value, index);
  78368. }
  78369. catch (err) {
  78370. this.destination.error(err);
  78371. return;
  78372. }
  78373. this.lastValue = result;
  78374. this.hasValue = true;
  78375. };
  78376. LastSubscriber.prototype._complete = function () {
  78377. var destination = this.destination;
  78378. if (this.hasValue) {
  78379. destination.next(this.lastValue);
  78380. destination.complete();
  78381. }
  78382. else {
  78383. destination.error(new EmptyError_1.EmptyError);
  78384. }
  78385. };
  78386. return LastSubscriber;
  78387. }(Subscriber_1.Subscriber));
  78388. //# sourceMappingURL=last.js.map
  78389. /***/ }),
  78390. /* 250 */
  78391. /***/ (function(module, exports, __webpack_require__) {
  78392. "use strict";
  78393. var __extends = (this && this.__extends) || function (d, b) {
  78394. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78395. function __() { this.constructor = d; }
  78396. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78397. };
  78398. var Subscriber_1 = __webpack_require__(4);
  78399. /**
  78400. * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.
  78401. *
  78402. * @example <caption>A simple example emitting true if all elements are less than 5, false otherwise</caption>
  78403. * Observable.of(1, 2, 3, 4, 5, 6)
  78404. * .every(x => x < 5)
  78405. * .subscribe(x => console.log(x)); // -> false
  78406. *
  78407. * @param {function} predicate A function for determining if an item meets a specified condition.
  78408. * @param {any} [thisArg] Optional object to use for `this` in the callback.
  78409. * @return {Observable} An Observable of booleans that determines if all items of the source Observable meet the condition specified.
  78410. * @method every
  78411. * @owner Observable
  78412. */
  78413. function every(predicate, thisArg) {
  78414. return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
  78415. }
  78416. exports.every = every;
  78417. var EveryOperator = (function () {
  78418. function EveryOperator(predicate, thisArg, source) {
  78419. this.predicate = predicate;
  78420. this.thisArg = thisArg;
  78421. this.source = source;
  78422. }
  78423. EveryOperator.prototype.call = function (observer, source) {
  78424. return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
  78425. };
  78426. return EveryOperator;
  78427. }());
  78428. /**
  78429. * We need this JSDoc comment for affecting ESDoc.
  78430. * @ignore
  78431. * @extends {Ignored}
  78432. */
  78433. var EverySubscriber = (function (_super) {
  78434. __extends(EverySubscriber, _super);
  78435. function EverySubscriber(destination, predicate, thisArg, source) {
  78436. _super.call(this, destination);
  78437. this.predicate = predicate;
  78438. this.thisArg = thisArg;
  78439. this.source = source;
  78440. this.index = 0;
  78441. this.thisArg = thisArg || this;
  78442. }
  78443. EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
  78444. this.destination.next(everyValueMatch);
  78445. this.destination.complete();
  78446. };
  78447. EverySubscriber.prototype._next = function (value) {
  78448. var result = false;
  78449. try {
  78450. result = this.predicate.call(this.thisArg, value, this.index++, this.source);
  78451. }
  78452. catch (err) {
  78453. this.destination.error(err);
  78454. return;
  78455. }
  78456. if (!result) {
  78457. this.notifyComplete(false);
  78458. }
  78459. };
  78460. EverySubscriber.prototype._complete = function () {
  78461. this.notifyComplete(true);
  78462. };
  78463. return EverySubscriber;
  78464. }(Subscriber_1.Subscriber));
  78465. //# sourceMappingURL=every.js.map
  78466. /***/ }),
  78467. /* 251 */
  78468. /***/ (function(module, exports, __webpack_require__) {
  78469. "use strict";
  78470. var Observable_1 = __webpack_require__(0);
  78471. var map_1 = __webpack_require__(180);
  78472. Observable_1.Observable.prototype.map = map_1.map;
  78473. //# sourceMappingURL=map.js.map
  78474. /***/ }),
  78475. /* 252 */
  78476. /***/ (function(module, exports, __webpack_require__) {
  78477. "use strict";
  78478. var __extends = (this && this.__extends) || function (d, b) {
  78479. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78480. function __() { this.constructor = d; }
  78481. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78482. };
  78483. var Subscriber_1 = __webpack_require__(4);
  78484. /**
  78485. * Emits the given constant value on the output Observable every time the source
  78486. * Observable emits a value.
  78487. *
  78488. * <span class="informal">Like {@link map}, but it maps every source value to
  78489. * the same output value every time.</span>
  78490. *
  78491. * <img src="./img/mapTo.png" width="100%">
  78492. *
  78493. * Takes a constant `value` as argument, and emits that whenever the source
  78494. * Observable emits a value. In other words, ignores the actual source value,
  78495. * and simply uses the emission moment to know when to emit the given `value`.
  78496. *
  78497. * @example <caption>Map every click to the string 'Hi'</caption>
  78498. * var clicks = Rx.Observable.fromEvent(document, 'click');
  78499. * var greetings = clicks.mapTo('Hi');
  78500. * greetings.subscribe(x => console.log(x));
  78501. *
  78502. * @see {@link map}
  78503. *
  78504. * @param {any} value The value to map each source value to.
  78505. * @return {Observable} An Observable that emits the given `value` every time
  78506. * the source Observable emits something.
  78507. * @method mapTo
  78508. * @owner Observable
  78509. */
  78510. function mapTo(value) {
  78511. return function (source) { return source.lift(new MapToOperator(value)); };
  78512. }
  78513. exports.mapTo = mapTo;
  78514. var MapToOperator = (function () {
  78515. function MapToOperator(value) {
  78516. this.value = value;
  78517. }
  78518. MapToOperator.prototype.call = function (subscriber, source) {
  78519. return source.subscribe(new MapToSubscriber(subscriber, this.value));
  78520. };
  78521. return MapToOperator;
  78522. }());
  78523. /**
  78524. * We need this JSDoc comment for affecting ESDoc.
  78525. * @ignore
  78526. * @extends {Ignored}
  78527. */
  78528. var MapToSubscriber = (function (_super) {
  78529. __extends(MapToSubscriber, _super);
  78530. function MapToSubscriber(destination, value) {
  78531. _super.call(this, destination);
  78532. this.value = value;
  78533. }
  78534. MapToSubscriber.prototype._next = function (x) {
  78535. this.destination.next(this.value);
  78536. };
  78537. return MapToSubscriber;
  78538. }(Subscriber_1.Subscriber));
  78539. //# sourceMappingURL=mapTo.js.map
  78540. /***/ }),
  78541. /* 253 */
  78542. /***/ (function(module, exports, __webpack_require__) {
  78543. "use strict";
  78544. var __extends = (this && this.__extends) || function (d, b) {
  78545. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78546. function __() { this.constructor = d; }
  78547. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78548. };
  78549. var Subscriber_1 = __webpack_require__(4);
  78550. var Notification_1 = __webpack_require__(55);
  78551. /**
  78552. * Represents all of the notifications from the source Observable as `next`
  78553. * emissions marked with their original types within {@link Notification}
  78554. * objects.
  78555. *
  78556. * <span class="informal">Wraps `next`, `error` and `complete` emissions in
  78557. * {@link Notification} objects, emitted as `next` on the output Observable.
  78558. * </span>
  78559. *
  78560. * <img src="./img/materialize.png" width="100%">
  78561. *
  78562. * `materialize` returns an Observable that emits a `next` notification for each
  78563. * `next`, `error`, or `complete` emission of the source Observable. When the
  78564. * source Observable emits `complete`, the output Observable will emit `next` as
  78565. * a Notification of type "complete", and then it will emit `complete` as well.
  78566. * When the source Observable emits `error`, the output will emit `next` as a
  78567. * Notification of type "error", and then `complete`.
  78568. *
  78569. * This operator is useful for producing metadata of the source Observable, to
  78570. * be consumed as `next` emissions. Use it in conjunction with
  78571. * {@link dematerialize}.
  78572. *
  78573. * @example <caption>Convert a faulty Observable to an Observable of Notifications</caption>
  78574. * var letters = Rx.Observable.of('a', 'b', 13, 'd');
  78575. * var upperCase = letters.map(x => x.toUpperCase());
  78576. * var materialized = upperCase.materialize();
  78577. * materialized.subscribe(x => console.log(x));
  78578. *
  78579. * // Results in the following:
  78580. * // - Notification {kind: "N", value: "A", error: undefined, hasValue: true}
  78581. * // - Notification {kind: "N", value: "B", error: undefined, hasValue: true}
  78582. * // - Notification {kind: "E", value: undefined, error: TypeError:
  78583. * // x.toUpperCase is not a function at MapSubscriber.letters.map.x
  78584. * // [as project] (http://1…, hasValue: false}
  78585. *
  78586. * @see {@link Notification}
  78587. * @see {@link dematerialize}
  78588. *
  78589. * @return {Observable<Notification<T>>} An Observable that emits
  78590. * {@link Notification} objects that wrap the original emissions from the source
  78591. * Observable with metadata.
  78592. * @method materialize
  78593. * @owner Observable
  78594. */
  78595. function materialize() {
  78596. return function materializeOperatorFunction(source) {
  78597. return source.lift(new MaterializeOperator());
  78598. };
  78599. }
  78600. exports.materialize = materialize;
  78601. var MaterializeOperator = (function () {
  78602. function MaterializeOperator() {
  78603. }
  78604. MaterializeOperator.prototype.call = function (subscriber, source) {
  78605. return source.subscribe(new MaterializeSubscriber(subscriber));
  78606. };
  78607. return MaterializeOperator;
  78608. }());
  78609. /**
  78610. * We need this JSDoc comment for affecting ESDoc.
  78611. * @ignore
  78612. * @extends {Ignored}
  78613. */
  78614. var MaterializeSubscriber = (function (_super) {
  78615. __extends(MaterializeSubscriber, _super);
  78616. function MaterializeSubscriber(destination) {
  78617. _super.call(this, destination);
  78618. }
  78619. MaterializeSubscriber.prototype._next = function (value) {
  78620. this.destination.next(Notification_1.Notification.createNext(value));
  78621. };
  78622. MaterializeSubscriber.prototype._error = function (err) {
  78623. var destination = this.destination;
  78624. destination.next(Notification_1.Notification.createError(err));
  78625. destination.complete();
  78626. };
  78627. MaterializeSubscriber.prototype._complete = function () {
  78628. var destination = this.destination;
  78629. destination.next(Notification_1.Notification.createComplete());
  78630. destination.complete();
  78631. };
  78632. return MaterializeSubscriber;
  78633. }(Subscriber_1.Subscriber));
  78634. //# sourceMappingURL=materialize.js.map
  78635. /***/ }),
  78636. /* 254 */
  78637. /***/ (function(module, exports, __webpack_require__) {
  78638. "use strict";
  78639. var reduce_1 = __webpack_require__(60);
  78640. /**
  78641. * The Max operator operates on an Observable that emits numbers (or items that can be compared with a provided function),
  78642. * and when source Observable completes it emits a single item: the item with the largest value.
  78643. *
  78644. * <img src="./img/max.png" width="100%">
  78645. *
  78646. * @example <caption>Get the maximal value of a series of numbers</caption>
  78647. * Rx.Observable.of(5, 4, 7, 2, 8)
  78648. * .max()
  78649. * .subscribe(x => console.log(x)); // -> 8
  78650. *
  78651. * @example <caption>Use a comparer function to get the maximal item</caption>
  78652. * interface Person {
  78653. * age: number,
  78654. * name: string
  78655. * }
  78656. * Observable.of<Person>({age: 7, name: 'Foo'},
  78657. * {age: 5, name: 'Bar'},
  78658. * {age: 9, name: 'Beer'})
  78659. * .max<Person>((a: Person, b: Person) => a.age < b.age ? -1 : 1)
  78660. * .subscribe((x: Person) => console.log(x.name)); // -> 'Beer'
  78661. * }
  78662. *
  78663. * @see {@link min}
  78664. *
  78665. * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the
  78666. * value of two items.
  78667. * @return {Observable} An Observable that emits item with the largest value.
  78668. * @method max
  78669. * @owner Observable
  78670. */
  78671. function max(comparer) {
  78672. var max = (typeof comparer === 'function')
  78673. ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
  78674. : function (x, y) { return x > y ? x : y; };
  78675. return reduce_1.reduce(max);
  78676. }
  78677. exports.max = max;
  78678. //# sourceMappingURL=max.js.map
  78679. /***/ }),
  78680. /* 255 */
  78681. /***/ (function(module, exports, __webpack_require__) {
  78682. "use strict";
  78683. var merge_1 = __webpack_require__(44);
  78684. var merge_2 = __webpack_require__(44);
  78685. exports.mergeStatic = merge_2.merge;
  78686. /* tslint:enable:max-line-length */
  78687. /**
  78688. * Creates an output Observable which concurrently emits all values from every
  78689. * given input Observable.
  78690. *
  78691. * <span class="informal">Flattens multiple Observables together by blending
  78692. * their values into one Observable.</span>
  78693. *
  78694. * <img src="./img/merge.png" width="100%">
  78695. *
  78696. * `merge` subscribes to each given input Observable (either the source or an
  78697. * Observable given as argument), and simply forwards (without doing any
  78698. * transformation) all the values from all the input Observables to the output
  78699. * Observable. The output Observable only completes once all input Observables
  78700. * have completed. Any error delivered by an input Observable will be immediately
  78701. * emitted on the output Observable.
  78702. *
  78703. * @example <caption>Merge together two Observables: 1s interval and clicks</caption>
  78704. * var clicks = Rx.Observable.fromEvent(document, 'click');
  78705. * var timer = Rx.Observable.interval(1000);
  78706. * var clicksOrTimer = clicks.merge(timer);
  78707. * clicksOrTimer.subscribe(x => console.log(x));
  78708. *
  78709. * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>
  78710. * var timer1 = Rx.Observable.interval(1000).take(10);
  78711. * var timer2 = Rx.Observable.interval(2000).take(6);
  78712. * var timer3 = Rx.Observable.interval(500).take(10);
  78713. * var concurrent = 2; // the argument
  78714. * var merged = timer1.merge(timer2, timer3, concurrent);
  78715. * merged.subscribe(x => console.log(x));
  78716. *
  78717. * @see {@link mergeAll}
  78718. * @see {@link mergeMap}
  78719. * @see {@link mergeMapTo}
  78720. * @see {@link mergeScan}
  78721. *
  78722. * @param {ObservableInput} other An input Observable to merge with the source
  78723. * Observable. More than one input Observables may be given as argument.
  78724. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  78725. * Observables being subscribed to concurrently.
  78726. * @param {Scheduler} [scheduler=null] The IScheduler to use for managing
  78727. * concurrency of input Observables.
  78728. * @return {Observable} An Observable that emits items that are the result of
  78729. * every input Observable.
  78730. * @method merge
  78731. * @owner Observable
  78732. */
  78733. function merge() {
  78734. var observables = [];
  78735. for (var _i = 0; _i < arguments.length; _i++) {
  78736. observables[_i - 0] = arguments[_i];
  78737. }
  78738. return function (source) { return source.lift.call(merge_1.merge.apply(void 0, [source].concat(observables))); };
  78739. }
  78740. exports.merge = merge;
  78741. //# sourceMappingURL=merge.js.map
  78742. /***/ }),
  78743. /* 256 */
  78744. /***/ (function(module, exports, __webpack_require__) {
  78745. "use strict";
  78746. var __extends = (this && this.__extends) || function (d, b) {
  78747. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78748. function __() { this.constructor = d; }
  78749. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78750. };
  78751. var OuterSubscriber_1 = __webpack_require__(6);
  78752. var subscribeToResult_1 = __webpack_require__(5);
  78753. /* tslint:enable:max-line-length */
  78754. /**
  78755. * Projects each source value to the same Observable which is merged multiple
  78756. * times in the output Observable.
  78757. *
  78758. * <span class="informal">It's like {@link mergeMap}, but maps each value always
  78759. * to the same inner Observable.</span>
  78760. *
  78761. * <img src="./img/mergeMapTo.png" width="100%">
  78762. *
  78763. * Maps each source value to the given Observable `innerObservable` regardless
  78764. * of the source value, and then merges those resulting Observables into one
  78765. * single Observable, which is the output Observable.
  78766. *
  78767. * @example <caption>For each click event, start an interval Observable ticking every 1 second</caption>
  78768. * var clicks = Rx.Observable.fromEvent(document, 'click');
  78769. * var result = clicks.mergeMapTo(Rx.Observable.interval(1000));
  78770. * result.subscribe(x => console.log(x));
  78771. *
  78772. * @see {@link concatMapTo}
  78773. * @see {@link merge}
  78774. * @see {@link mergeAll}
  78775. * @see {@link mergeMap}
  78776. * @see {@link mergeScan}
  78777. * @see {@link switchMapTo}
  78778. *
  78779. * @param {ObservableInput} innerObservable An Observable to replace each value from
  78780. * the source Observable.
  78781. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  78782. * A function to produce the value on the output Observable based on the values
  78783. * and the indices of the source (outer) emission and the inner Observable
  78784. * emission. The arguments passed to this function are:
  78785. * - `outerValue`: the value that came from the source
  78786. * - `innerValue`: the value that came from the projected Observable
  78787. * - `outerIndex`: the "index" of the value that came from the source
  78788. * - `innerIndex`: the "index" of the value from the projected Observable
  78789. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  78790. * Observables being subscribed to concurrently.
  78791. * @return {Observable} An Observable that emits items from the given
  78792. * `innerObservable` (and optionally transformed through `resultSelector`) every
  78793. * time a value is emitted on the source Observable.
  78794. * @method mergeMapTo
  78795. * @owner Observable
  78796. */
  78797. function mergeMapTo(innerObservable, resultSelector, concurrent) {
  78798. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  78799. if (typeof resultSelector === 'number') {
  78800. concurrent = resultSelector;
  78801. resultSelector = null;
  78802. }
  78803. return function (source) { return source.lift(new MergeMapToOperator(innerObservable, resultSelector, concurrent)); };
  78804. }
  78805. exports.mergeMapTo = mergeMapTo;
  78806. // TODO: Figure out correct signature here: an Operator<Observable<T>, R>
  78807. // needs to implement call(observer: Subscriber<R>): Subscriber<Observable<T>>
  78808. var MergeMapToOperator = (function () {
  78809. function MergeMapToOperator(ish, resultSelector, concurrent) {
  78810. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  78811. this.ish = ish;
  78812. this.resultSelector = resultSelector;
  78813. this.concurrent = concurrent;
  78814. }
  78815. MergeMapToOperator.prototype.call = function (observer, source) {
  78816. return source.subscribe(new MergeMapToSubscriber(observer, this.ish, this.resultSelector, this.concurrent));
  78817. };
  78818. return MergeMapToOperator;
  78819. }());
  78820. exports.MergeMapToOperator = MergeMapToOperator;
  78821. /**
  78822. * We need this JSDoc comment for affecting ESDoc.
  78823. * @ignore
  78824. * @extends {Ignored}
  78825. */
  78826. var MergeMapToSubscriber = (function (_super) {
  78827. __extends(MergeMapToSubscriber, _super);
  78828. function MergeMapToSubscriber(destination, ish, resultSelector, concurrent) {
  78829. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  78830. _super.call(this, destination);
  78831. this.ish = ish;
  78832. this.resultSelector = resultSelector;
  78833. this.concurrent = concurrent;
  78834. this.hasCompleted = false;
  78835. this.buffer = [];
  78836. this.active = 0;
  78837. this.index = 0;
  78838. }
  78839. MergeMapToSubscriber.prototype._next = function (value) {
  78840. if (this.active < this.concurrent) {
  78841. var resultSelector = this.resultSelector;
  78842. var index = this.index++;
  78843. var ish = this.ish;
  78844. var destination = this.destination;
  78845. this.active++;
  78846. this._innerSub(ish, destination, resultSelector, value, index);
  78847. }
  78848. else {
  78849. this.buffer.push(value);
  78850. }
  78851. };
  78852. MergeMapToSubscriber.prototype._innerSub = function (ish, destination, resultSelector, value, index) {
  78853. this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));
  78854. };
  78855. MergeMapToSubscriber.prototype._complete = function () {
  78856. this.hasCompleted = true;
  78857. if (this.active === 0 && this.buffer.length === 0) {
  78858. this.destination.complete();
  78859. }
  78860. };
  78861. MergeMapToSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  78862. var _a = this, resultSelector = _a.resultSelector, destination = _a.destination;
  78863. if (resultSelector) {
  78864. this.trySelectResult(outerValue, innerValue, outerIndex, innerIndex);
  78865. }
  78866. else {
  78867. destination.next(innerValue);
  78868. }
  78869. };
  78870. MergeMapToSubscriber.prototype.trySelectResult = function (outerValue, innerValue, outerIndex, innerIndex) {
  78871. var _a = this, resultSelector = _a.resultSelector, destination = _a.destination;
  78872. var result;
  78873. try {
  78874. result = resultSelector(outerValue, innerValue, outerIndex, innerIndex);
  78875. }
  78876. catch (err) {
  78877. destination.error(err);
  78878. return;
  78879. }
  78880. destination.next(result);
  78881. };
  78882. MergeMapToSubscriber.prototype.notifyError = function (err) {
  78883. this.destination.error(err);
  78884. };
  78885. MergeMapToSubscriber.prototype.notifyComplete = function (innerSub) {
  78886. var buffer = this.buffer;
  78887. this.remove(innerSub);
  78888. this.active--;
  78889. if (buffer.length > 0) {
  78890. this._next(buffer.shift());
  78891. }
  78892. else if (this.active === 0 && this.hasCompleted) {
  78893. this.destination.complete();
  78894. }
  78895. };
  78896. return MergeMapToSubscriber;
  78897. }(OuterSubscriber_1.OuterSubscriber));
  78898. exports.MergeMapToSubscriber = MergeMapToSubscriber;
  78899. //# sourceMappingURL=mergeMapTo.js.map
  78900. /***/ }),
  78901. /* 257 */
  78902. /***/ (function(module, exports, __webpack_require__) {
  78903. "use strict";
  78904. var __extends = (this && this.__extends) || function (d, b) {
  78905. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  78906. function __() { this.constructor = d; }
  78907. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  78908. };
  78909. var tryCatch_1 = __webpack_require__(17);
  78910. var errorObject_1 = __webpack_require__(16);
  78911. var subscribeToResult_1 = __webpack_require__(5);
  78912. var OuterSubscriber_1 = __webpack_require__(6);
  78913. /**
  78914. * Applies an accumulator function over the source Observable where the
  78915. * accumulator function itself returns an Observable, then each intermediate
  78916. * Observable returned is merged into the output Observable.
  78917. *
  78918. * <span class="informal">It's like {@link scan}, but the Observables returned
  78919. * by the accumulator are merged into the outer Observable.</span>
  78920. *
  78921. * @example <caption>Count the number of click events</caption>
  78922. * const click$ = Rx.Observable.fromEvent(document, 'click');
  78923. * const one$ = click$.mapTo(1);
  78924. * const seed = 0;
  78925. * const count$ = one$.mergeScan((acc, one) => Rx.Observable.of(acc + one), seed);
  78926. * count$.subscribe(x => console.log(x));
  78927. *
  78928. * // Results:
  78929. * 1
  78930. * 2
  78931. * 3
  78932. * 4
  78933. * // ...and so on for each click
  78934. *
  78935. * @param {function(acc: R, value: T): Observable<R>} accumulator
  78936. * The accumulator function called on each source value.
  78937. * @param seed The initial accumulation value.
  78938. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of
  78939. * input Observables being subscribed to concurrently.
  78940. * @return {Observable<R>} An observable of the accumulated values.
  78941. * @method mergeScan
  78942. * @owner Observable
  78943. */
  78944. function mergeScan(accumulator, seed, concurrent) {
  78945. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  78946. return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
  78947. }
  78948. exports.mergeScan = mergeScan;
  78949. var MergeScanOperator = (function () {
  78950. function MergeScanOperator(accumulator, seed, concurrent) {
  78951. this.accumulator = accumulator;
  78952. this.seed = seed;
  78953. this.concurrent = concurrent;
  78954. }
  78955. MergeScanOperator.prototype.call = function (subscriber, source) {
  78956. return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
  78957. };
  78958. return MergeScanOperator;
  78959. }());
  78960. exports.MergeScanOperator = MergeScanOperator;
  78961. /**
  78962. * We need this JSDoc comment for affecting ESDoc.
  78963. * @ignore
  78964. * @extends {Ignored}
  78965. */
  78966. var MergeScanSubscriber = (function (_super) {
  78967. __extends(MergeScanSubscriber, _super);
  78968. function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
  78969. _super.call(this, destination);
  78970. this.accumulator = accumulator;
  78971. this.acc = acc;
  78972. this.concurrent = concurrent;
  78973. this.hasValue = false;
  78974. this.hasCompleted = false;
  78975. this.buffer = [];
  78976. this.active = 0;
  78977. this.index = 0;
  78978. }
  78979. MergeScanSubscriber.prototype._next = function (value) {
  78980. if (this.active < this.concurrent) {
  78981. var index = this.index++;
  78982. var ish = tryCatch_1.tryCatch(this.accumulator)(this.acc, value);
  78983. var destination = this.destination;
  78984. if (ish === errorObject_1.errorObject) {
  78985. destination.error(errorObject_1.errorObject.e);
  78986. }
  78987. else {
  78988. this.active++;
  78989. this._innerSub(ish, value, index);
  78990. }
  78991. }
  78992. else {
  78993. this.buffer.push(value);
  78994. }
  78995. };
  78996. MergeScanSubscriber.prototype._innerSub = function (ish, value, index) {
  78997. this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));
  78998. };
  78999. MergeScanSubscriber.prototype._complete = function () {
  79000. this.hasCompleted = true;
  79001. if (this.active === 0 && this.buffer.length === 0) {
  79002. if (this.hasValue === false) {
  79003. this.destination.next(this.acc);
  79004. }
  79005. this.destination.complete();
  79006. }
  79007. };
  79008. MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  79009. var destination = this.destination;
  79010. this.acc = innerValue;
  79011. this.hasValue = true;
  79012. destination.next(innerValue);
  79013. };
  79014. MergeScanSubscriber.prototype.notifyComplete = function (innerSub) {
  79015. var buffer = this.buffer;
  79016. this.remove(innerSub);
  79017. this.active--;
  79018. if (buffer.length > 0) {
  79019. this._next(buffer.shift());
  79020. }
  79021. else if (this.active === 0 && this.hasCompleted) {
  79022. if (this.hasValue === false) {
  79023. this.destination.next(this.acc);
  79024. }
  79025. this.destination.complete();
  79026. }
  79027. };
  79028. return MergeScanSubscriber;
  79029. }(OuterSubscriber_1.OuterSubscriber));
  79030. exports.MergeScanSubscriber = MergeScanSubscriber;
  79031. //# sourceMappingURL=mergeScan.js.map
  79032. /***/ }),
  79033. /* 258 */
  79034. /***/ (function(module, exports, __webpack_require__) {
  79035. "use strict";
  79036. var reduce_1 = __webpack_require__(60);
  79037. /**
  79038. * The Min operator operates on an Observable that emits numbers (or items that can be compared with a provided function),
  79039. * and when source Observable completes it emits a single item: the item with the smallest value.
  79040. *
  79041. * <img src="./img/min.png" width="100%">
  79042. *
  79043. * @example <caption>Get the minimal value of a series of numbers</caption>
  79044. * Rx.Observable.of(5, 4, 7, 2, 8)
  79045. * .min()
  79046. * .subscribe(x => console.log(x)); // -> 2
  79047. *
  79048. * @example <caption>Use a comparer function to get the minimal item</caption>
  79049. * interface Person {
  79050. * age: number,
  79051. * name: string
  79052. * }
  79053. * Observable.of<Person>({age: 7, name: 'Foo'},
  79054. * {age: 5, name: 'Bar'},
  79055. * {age: 9, name: 'Beer'})
  79056. * .min<Person>( (a: Person, b: Person) => a.age < b.age ? -1 : 1)
  79057. * .subscribe((x: Person) => console.log(x.name)); // -> 'Bar'
  79058. * }
  79059. *
  79060. * @see {@link max}
  79061. *
  79062. * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the
  79063. * value of two items.
  79064. * @return {Observable<R>} An Observable that emits item with the smallest value.
  79065. * @method min
  79066. * @owner Observable
  79067. */
  79068. function min(comparer) {
  79069. var min = (typeof comparer === 'function')
  79070. ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
  79071. : function (x, y) { return x < y ? x : y; };
  79072. return reduce_1.reduce(min);
  79073. }
  79074. exports.min = min;
  79075. //# sourceMappingURL=min.js.map
  79076. /***/ }),
  79077. /* 259 */
  79078. /***/ (function(module, exports, __webpack_require__) {
  79079. "use strict";
  79080. var __extends = (this && this.__extends) || function (d, b) {
  79081. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79082. function __() { this.constructor = d; }
  79083. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79084. };
  79085. var Subscriber_1 = __webpack_require__(4);
  79086. /**
  79087. * Groups pairs of consecutive emissions together and emits them as an array of
  79088. * two values.
  79089. *
  79090. * <span class="informal">Puts the current value and previous value together as
  79091. * an array, and emits that.</span>
  79092. *
  79093. * <img src="./img/pairwise.png" width="100%">
  79094. *
  79095. * The Nth emission from the source Observable will cause the output Observable
  79096. * to emit an array [(N-1)th, Nth] of the previous and the current value, as a
  79097. * pair. For this reason, `pairwise` emits on the second and subsequent
  79098. * emissions from the source Observable, but not on the first emission, because
  79099. * there is no previous value in that case.
  79100. *
  79101. * @example <caption>On every click (starting from the second), emit the relative distance to the previous click</caption>
  79102. * var clicks = Rx.Observable.fromEvent(document, 'click');
  79103. * var pairs = clicks.pairwise();
  79104. * var distance = pairs.map(pair => {
  79105. * var x0 = pair[0].clientX;
  79106. * var y0 = pair[0].clientY;
  79107. * var x1 = pair[1].clientX;
  79108. * var y1 = pair[1].clientY;
  79109. * return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));
  79110. * });
  79111. * distance.subscribe(x => console.log(x));
  79112. *
  79113. * @see {@link buffer}
  79114. * @see {@link bufferCount}
  79115. *
  79116. * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of
  79117. * consecutive values from the source Observable.
  79118. * @method pairwise
  79119. * @owner Observable
  79120. */
  79121. function pairwise() {
  79122. return function (source) { return source.lift(new PairwiseOperator()); };
  79123. }
  79124. exports.pairwise = pairwise;
  79125. var PairwiseOperator = (function () {
  79126. function PairwiseOperator() {
  79127. }
  79128. PairwiseOperator.prototype.call = function (subscriber, source) {
  79129. return source.subscribe(new PairwiseSubscriber(subscriber));
  79130. };
  79131. return PairwiseOperator;
  79132. }());
  79133. /**
  79134. * We need this JSDoc comment for affecting ESDoc.
  79135. * @ignore
  79136. * @extends {Ignored}
  79137. */
  79138. var PairwiseSubscriber = (function (_super) {
  79139. __extends(PairwiseSubscriber, _super);
  79140. function PairwiseSubscriber(destination) {
  79141. _super.call(this, destination);
  79142. this.hasPrev = false;
  79143. }
  79144. PairwiseSubscriber.prototype._next = function (value) {
  79145. if (this.hasPrev) {
  79146. this.destination.next([this.prev, value]);
  79147. }
  79148. else {
  79149. this.hasPrev = true;
  79150. }
  79151. this.prev = value;
  79152. };
  79153. return PairwiseSubscriber;
  79154. }(Subscriber_1.Subscriber));
  79155. //# sourceMappingURL=pairwise.js.map
  79156. /***/ }),
  79157. /* 260 */
  79158. /***/ (function(module, exports, __webpack_require__) {
  79159. "use strict";
  79160. var not_1 = __webpack_require__(553);
  79161. var filter_1 = __webpack_require__(120);
  79162. /**
  79163. * Splits the source Observable into two, one with values that satisfy a
  79164. * predicate, and another with values that don't satisfy the predicate.
  79165. *
  79166. * <span class="informal">It's like {@link filter}, but returns two Observables:
  79167. * one like the output of {@link filter}, and the other with values that did not
  79168. * pass the condition.</span>
  79169. *
  79170. * <img src="./img/partition.png" width="100%">
  79171. *
  79172. * `partition` outputs an array with two Observables that partition the values
  79173. * from the source Observable through the given `predicate` function. The first
  79174. * Observable in that array emits source values for which the predicate argument
  79175. * returns true. The second Observable emits source values for which the
  79176. * predicate returns false. The first behaves like {@link filter} and the second
  79177. * behaves like {@link filter} with the predicate negated.
  79178. *
  79179. * @example <caption>Partition click events into those on DIV elements and those elsewhere</caption>
  79180. * var clicks = Rx.Observable.fromEvent(document, 'click');
  79181. * var parts = clicks.partition(ev => ev.target.tagName === 'DIV');
  79182. * var clicksOnDivs = parts[0];
  79183. * var clicksElsewhere = parts[1];
  79184. * clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));
  79185. * clicksElsewhere.subscribe(x => console.log('Other clicked: ', x));
  79186. *
  79187. * @see {@link filter}
  79188. *
  79189. * @param {function(value: T, index: number): boolean} predicate A function that
  79190. * evaluates each value emitted by the source Observable. If it returns `true`,
  79191. * the value is emitted on the first Observable in the returned array, if
  79192. * `false` the value is emitted on the second Observable in the array. The
  79193. * `index` parameter is the number `i` for the i-th source emission that has
  79194. * happened since the subscription, starting from the number `0`.
  79195. * @param {any} [thisArg] An optional argument to determine the value of `this`
  79196. * in the `predicate` function.
  79197. * @return {[Observable<T>, Observable<T>]} An array with two Observables: one
  79198. * with values that passed the predicate, and another with values that did not
  79199. * pass the predicate.
  79200. * @method partition
  79201. * @owner Observable
  79202. */
  79203. function partition(predicate, thisArg) {
  79204. return function (source) { return [
  79205. filter_1.filter(predicate, thisArg)(source),
  79206. filter_1.filter(not_1.not(predicate, thisArg))(source)
  79207. ]; };
  79208. }
  79209. exports.partition = partition;
  79210. //# sourceMappingURL=partition.js.map
  79211. /***/ }),
  79212. /* 261 */
  79213. /***/ (function(module, exports, __webpack_require__) {
  79214. "use strict";
  79215. var map_1 = __webpack_require__(49);
  79216. /**
  79217. * Maps each source value (an object) to its specified nested property.
  79218. *
  79219. * <span class="informal">Like {@link map}, but meant only for picking one of
  79220. * the nested properties of every emitted object.</span>
  79221. *
  79222. * <img src="./img/pluck.png" width="100%">
  79223. *
  79224. * Given a list of strings describing a path to an object property, retrieves
  79225. * the value of a specified nested property from all values in the source
  79226. * Observable. If a property can't be resolved, it will return `undefined` for
  79227. * that value.
  79228. *
  79229. * @example <caption>Map every click to the tagName of the clicked target element</caption>
  79230. * var clicks = Rx.Observable.fromEvent(document, 'click');
  79231. * var tagNames = clicks.pluck('target', 'tagName');
  79232. * tagNames.subscribe(x => console.log(x));
  79233. *
  79234. * @see {@link map}
  79235. *
  79236. * @param {...string} properties The nested properties to pluck from each source
  79237. * value (an object).
  79238. * @return {Observable} A new Observable of property values from the source values.
  79239. * @method pluck
  79240. * @owner Observable
  79241. */
  79242. function pluck() {
  79243. var properties = [];
  79244. for (var _i = 0; _i < arguments.length; _i++) {
  79245. properties[_i - 0] = arguments[_i];
  79246. }
  79247. var length = properties.length;
  79248. if (length === 0) {
  79249. throw new Error('list of properties cannot be empty.');
  79250. }
  79251. return function (source) { return map_1.map(plucker(properties, length))(source); };
  79252. }
  79253. exports.pluck = pluck;
  79254. function plucker(props, length) {
  79255. var mapper = function (x) {
  79256. var currentProp = x;
  79257. for (var i = 0; i < length; i++) {
  79258. var p = currentProp[props[i]];
  79259. if (typeof p !== 'undefined') {
  79260. currentProp = p;
  79261. }
  79262. else {
  79263. return undefined;
  79264. }
  79265. }
  79266. return currentProp;
  79267. };
  79268. return mapper;
  79269. }
  79270. //# sourceMappingURL=pluck.js.map
  79271. /***/ }),
  79272. /* 262 */
  79273. /***/ (function(module, exports, __webpack_require__) {
  79274. "use strict";
  79275. var Subject_1 = __webpack_require__(12);
  79276. var multicast_1 = __webpack_require__(39);
  79277. /* tslint:enable:max-line-length */
  79278. /**
  79279. * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called
  79280. * before it begins emitting items to those Observers that have subscribed to it.
  79281. *
  79282. * <img src="./img/publish.png" width="100%">
  79283. *
  79284. * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times
  79285. * as needed, without causing multiple subscriptions to the source sequence.
  79286. * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.
  79287. * @return A ConnectableObservable that upon connection causes the source Observable to emit items to its Observers.
  79288. * @method publish
  79289. * @owner Observable
  79290. */
  79291. function publish(selector) {
  79292. return selector ?
  79293. multicast_1.multicast(function () { return new Subject_1.Subject(); }, selector) :
  79294. multicast_1.multicast(new Subject_1.Subject());
  79295. }
  79296. exports.publish = publish;
  79297. //# sourceMappingURL=publish.js.map
  79298. /***/ }),
  79299. /* 263 */
  79300. /***/ (function(module, exports, __webpack_require__) {
  79301. "use strict";
  79302. var BehaviorSubject_1 = __webpack_require__(264);
  79303. var multicast_1 = __webpack_require__(39);
  79304. /**
  79305. * @param value
  79306. * @return {ConnectableObservable<T>}
  79307. * @method publishBehavior
  79308. * @owner Observable
  79309. */
  79310. function publishBehavior(value) {
  79311. return function (source) { return multicast_1.multicast(new BehaviorSubject_1.BehaviorSubject(value))(source); };
  79312. }
  79313. exports.publishBehavior = publishBehavior;
  79314. //# sourceMappingURL=publishBehavior.js.map
  79315. /***/ }),
  79316. /* 264 */
  79317. /***/ (function(module, exports, __webpack_require__) {
  79318. "use strict";
  79319. var __extends = (this && this.__extends) || function (d, b) {
  79320. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79321. function __() { this.constructor = d; }
  79322. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79323. };
  79324. var Subject_1 = __webpack_require__(12);
  79325. var ObjectUnsubscribedError_1 = __webpack_require__(66);
  79326. /**
  79327. * @class BehaviorSubject<T>
  79328. */
  79329. var BehaviorSubject = (function (_super) {
  79330. __extends(BehaviorSubject, _super);
  79331. function BehaviorSubject(_value) {
  79332. _super.call(this);
  79333. this._value = _value;
  79334. }
  79335. Object.defineProperty(BehaviorSubject.prototype, "value", {
  79336. get: function () {
  79337. return this.getValue();
  79338. },
  79339. enumerable: true,
  79340. configurable: true
  79341. });
  79342. /** @deprecated internal use only */ BehaviorSubject.prototype._subscribe = function (subscriber) {
  79343. var subscription = _super.prototype._subscribe.call(this, subscriber);
  79344. if (subscription && !subscription.closed) {
  79345. subscriber.next(this._value);
  79346. }
  79347. return subscription;
  79348. };
  79349. BehaviorSubject.prototype.getValue = function () {
  79350. if (this.hasError) {
  79351. throw this.thrownError;
  79352. }
  79353. else if (this.closed) {
  79354. throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
  79355. }
  79356. else {
  79357. return this._value;
  79358. }
  79359. };
  79360. BehaviorSubject.prototype.next = function (value) {
  79361. _super.prototype.next.call(this, this._value = value);
  79362. };
  79363. return BehaviorSubject;
  79364. }(Subject_1.Subject));
  79365. exports.BehaviorSubject = BehaviorSubject;
  79366. //# sourceMappingURL=BehaviorSubject.js.map
  79367. /***/ }),
  79368. /* 265 */
  79369. /***/ (function(module, exports, __webpack_require__) {
  79370. "use strict";
  79371. var ReplaySubject_1 = __webpack_require__(78);
  79372. var multicast_1 = __webpack_require__(39);
  79373. /* tslint:enable:max-line-length */
  79374. function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
  79375. if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
  79376. scheduler = selectorOrScheduler;
  79377. }
  79378. var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
  79379. var subject = new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler);
  79380. return function (source) { return multicast_1.multicast(function () { return subject; }, selector)(source); };
  79381. }
  79382. exports.publishReplay = publishReplay;
  79383. //# sourceMappingURL=publishReplay.js.map
  79384. /***/ }),
  79385. /* 266 */
  79386. /***/ (function(module, exports, __webpack_require__) {
  79387. "use strict";
  79388. var AsyncSubject_1 = __webpack_require__(73);
  79389. var multicast_1 = __webpack_require__(39);
  79390. function publishLast() {
  79391. return function (source) { return multicast_1.multicast(new AsyncSubject_1.AsyncSubject())(source); };
  79392. }
  79393. exports.publishLast = publishLast;
  79394. //# sourceMappingURL=publishLast.js.map
  79395. /***/ }),
  79396. /* 267 */
  79397. /***/ (function(module, exports, __webpack_require__) {
  79398. "use strict";
  79399. var isArray_1 = __webpack_require__(26);
  79400. var race_1 = __webpack_require__(115);
  79401. /* tslint:enable:max-line-length */
  79402. /**
  79403. * Returns an Observable that mirrors the first source Observable to emit an item
  79404. * from the combination of this Observable and supplied Observables.
  79405. * @param {...Observables} ...observables Sources used to race for which Observable emits first.
  79406. * @return {Observable} An Observable that mirrors the output of the first Observable to emit an item.
  79407. * @method race
  79408. * @owner Observable
  79409. */
  79410. function race() {
  79411. var observables = [];
  79412. for (var _i = 0; _i < arguments.length; _i++) {
  79413. observables[_i - 0] = arguments[_i];
  79414. }
  79415. return function raceOperatorFunction(source) {
  79416. // if the only argument is an array, it was most likely called with
  79417. // `pair([obs1, obs2, ...])`
  79418. if (observables.length === 1 && isArray_1.isArray(observables[0])) {
  79419. observables = observables[0];
  79420. }
  79421. return source.lift.call(race_1.race.apply(void 0, [source].concat(observables)));
  79422. };
  79423. }
  79424. exports.race = race;
  79425. //# sourceMappingURL=race.js.map
  79426. /***/ }),
  79427. /* 268 */
  79428. /***/ (function(module, exports, __webpack_require__) {
  79429. "use strict";
  79430. var __extends = (this && this.__extends) || function (d, b) {
  79431. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79432. function __() { this.constructor = d; }
  79433. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79434. };
  79435. var Subscriber_1 = __webpack_require__(4);
  79436. var EmptyObservable_1 = __webpack_require__(33);
  79437. /**
  79438. * Returns an Observable that repeats the stream of items emitted by the source Observable at most count times.
  79439. *
  79440. * <img src="./img/repeat.png" width="100%">
  79441. *
  79442. * @param {number} [count] The number of times the source Observable items are repeated, a count of 0 will yield
  79443. * an empty Observable.
  79444. * @return {Observable} An Observable that repeats the stream of items emitted by the source Observable at most
  79445. * count times.
  79446. * @method repeat
  79447. * @owner Observable
  79448. */
  79449. function repeat(count) {
  79450. if (count === void 0) { count = -1; }
  79451. return function (source) {
  79452. if (count === 0) {
  79453. return new EmptyObservable_1.EmptyObservable();
  79454. }
  79455. else if (count < 0) {
  79456. return source.lift(new RepeatOperator(-1, source));
  79457. }
  79458. else {
  79459. return source.lift(new RepeatOperator(count - 1, source));
  79460. }
  79461. };
  79462. }
  79463. exports.repeat = repeat;
  79464. var RepeatOperator = (function () {
  79465. function RepeatOperator(count, source) {
  79466. this.count = count;
  79467. this.source = source;
  79468. }
  79469. RepeatOperator.prototype.call = function (subscriber, source) {
  79470. return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
  79471. };
  79472. return RepeatOperator;
  79473. }());
  79474. /**
  79475. * We need this JSDoc comment for affecting ESDoc.
  79476. * @ignore
  79477. * @extends {Ignored}
  79478. */
  79479. var RepeatSubscriber = (function (_super) {
  79480. __extends(RepeatSubscriber, _super);
  79481. function RepeatSubscriber(destination, count, source) {
  79482. _super.call(this, destination);
  79483. this.count = count;
  79484. this.source = source;
  79485. }
  79486. RepeatSubscriber.prototype.complete = function () {
  79487. if (!this.isStopped) {
  79488. var _a = this, source = _a.source, count = _a.count;
  79489. if (count === 0) {
  79490. return _super.prototype.complete.call(this);
  79491. }
  79492. else if (count > -1) {
  79493. this.count = count - 1;
  79494. }
  79495. source.subscribe(this._unsubscribeAndRecycle());
  79496. }
  79497. };
  79498. return RepeatSubscriber;
  79499. }(Subscriber_1.Subscriber));
  79500. //# sourceMappingURL=repeat.js.map
  79501. /***/ }),
  79502. /* 269 */
  79503. /***/ (function(module, exports, __webpack_require__) {
  79504. "use strict";
  79505. var __extends = (this && this.__extends) || function (d, b) {
  79506. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79507. function __() { this.constructor = d; }
  79508. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79509. };
  79510. var Subject_1 = __webpack_require__(12);
  79511. var tryCatch_1 = __webpack_require__(17);
  79512. var errorObject_1 = __webpack_require__(16);
  79513. var OuterSubscriber_1 = __webpack_require__(6);
  79514. var subscribeToResult_1 = __webpack_require__(5);
  79515. /**
  79516. * Returns an Observable that mirrors the source Observable with the exception of a `complete`. If the source
  79517. * Observable calls `complete`, this method will emit to the Observable returned from `notifier`. If that Observable
  79518. * calls `complete` or `error`, then this method will call `complete` or `error` on the child subscription. Otherwise
  79519. * this method will resubscribe to the source Observable.
  79520. *
  79521. * <img src="./img/repeatWhen.png" width="100%">
  79522. *
  79523. * @param {function(notifications: Observable): Observable} notifier - Receives an Observable of notifications with
  79524. * which a user can `complete` or `error`, aborting the repetition.
  79525. * @return {Observable} The source Observable modified with repeat logic.
  79526. * @method repeatWhen
  79527. * @owner Observable
  79528. */
  79529. function repeatWhen(notifier) {
  79530. return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
  79531. }
  79532. exports.repeatWhen = repeatWhen;
  79533. var RepeatWhenOperator = (function () {
  79534. function RepeatWhenOperator(notifier) {
  79535. this.notifier = notifier;
  79536. }
  79537. RepeatWhenOperator.prototype.call = function (subscriber, source) {
  79538. return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
  79539. };
  79540. return RepeatWhenOperator;
  79541. }());
  79542. /**
  79543. * We need this JSDoc comment for affecting ESDoc.
  79544. * @ignore
  79545. * @extends {Ignored}
  79546. */
  79547. var RepeatWhenSubscriber = (function (_super) {
  79548. __extends(RepeatWhenSubscriber, _super);
  79549. function RepeatWhenSubscriber(destination, notifier, source) {
  79550. _super.call(this, destination);
  79551. this.notifier = notifier;
  79552. this.source = source;
  79553. this.sourceIsBeingSubscribedTo = true;
  79554. }
  79555. RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  79556. this.sourceIsBeingSubscribedTo = true;
  79557. this.source.subscribe(this);
  79558. };
  79559. RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
  79560. if (this.sourceIsBeingSubscribedTo === false) {
  79561. return _super.prototype.complete.call(this);
  79562. }
  79563. };
  79564. RepeatWhenSubscriber.prototype.complete = function () {
  79565. this.sourceIsBeingSubscribedTo = false;
  79566. if (!this.isStopped) {
  79567. if (!this.retries) {
  79568. this.subscribeToRetries();
  79569. }
  79570. if (!this.retriesSubscription || this.retriesSubscription.closed) {
  79571. return _super.prototype.complete.call(this);
  79572. }
  79573. this._unsubscribeAndRecycle();
  79574. this.notifications.next();
  79575. }
  79576. };
  79577. /** @deprecated internal use only */ RepeatWhenSubscriber.prototype._unsubscribe = function () {
  79578. var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
  79579. if (notifications) {
  79580. notifications.unsubscribe();
  79581. this.notifications = null;
  79582. }
  79583. if (retriesSubscription) {
  79584. retriesSubscription.unsubscribe();
  79585. this.retriesSubscription = null;
  79586. }
  79587. this.retries = null;
  79588. };
  79589. /** @deprecated internal use only */ RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
  79590. var _a = this, notifications = _a.notifications, retries = _a.retries, retriesSubscription = _a.retriesSubscription;
  79591. this.notifications = null;
  79592. this.retries = null;
  79593. this.retriesSubscription = null;
  79594. _super.prototype._unsubscribeAndRecycle.call(this);
  79595. this.notifications = notifications;
  79596. this.retries = retries;
  79597. this.retriesSubscription = retriesSubscription;
  79598. return this;
  79599. };
  79600. RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
  79601. this.notifications = new Subject_1.Subject();
  79602. var retries = tryCatch_1.tryCatch(this.notifier)(this.notifications);
  79603. if (retries === errorObject_1.errorObject) {
  79604. return _super.prototype.complete.call(this);
  79605. }
  79606. this.retries = retries;
  79607. this.retriesSubscription = subscribeToResult_1.subscribeToResult(this, retries);
  79608. };
  79609. return RepeatWhenSubscriber;
  79610. }(OuterSubscriber_1.OuterSubscriber));
  79611. //# sourceMappingURL=repeatWhen.js.map
  79612. /***/ }),
  79613. /* 270 */
  79614. /***/ (function(module, exports, __webpack_require__) {
  79615. "use strict";
  79616. var __extends = (this && this.__extends) || function (d, b) {
  79617. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79618. function __() { this.constructor = d; }
  79619. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79620. };
  79621. var Subscriber_1 = __webpack_require__(4);
  79622. /**
  79623. * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable
  79624. * calls `error`, this method will resubscribe to the source Observable for a maximum of `count` resubscriptions (given
  79625. * as a number parameter) rather than propagating the `error` call.
  79626. *
  79627. * <img src="./img/retry.png" width="100%">
  79628. *
  79629. * Any and all items emitted by the source Observable will be emitted by the resulting Observable, even those emitted
  79630. * during failed subscriptions. For example, if an Observable fails at first but emits [1, 2] then succeeds the second
  79631. * time and emits: [1, 2, 3, 4, 5] then the complete stream of emissions and notifications
  79632. * would be: [1, 2, 1, 2, 3, 4, 5, `complete`].
  79633. * @param {number} count - Number of retry attempts before failing.
  79634. * @return {Observable} The source Observable modified with the retry logic.
  79635. * @method retry
  79636. * @owner Observable
  79637. */
  79638. function retry(count) {
  79639. if (count === void 0) { count = -1; }
  79640. return function (source) { return source.lift(new RetryOperator(count, source)); };
  79641. }
  79642. exports.retry = retry;
  79643. var RetryOperator = (function () {
  79644. function RetryOperator(count, source) {
  79645. this.count = count;
  79646. this.source = source;
  79647. }
  79648. RetryOperator.prototype.call = function (subscriber, source) {
  79649. return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
  79650. };
  79651. return RetryOperator;
  79652. }());
  79653. /**
  79654. * We need this JSDoc comment for affecting ESDoc.
  79655. * @ignore
  79656. * @extends {Ignored}
  79657. */
  79658. var RetrySubscriber = (function (_super) {
  79659. __extends(RetrySubscriber, _super);
  79660. function RetrySubscriber(destination, count, source) {
  79661. _super.call(this, destination);
  79662. this.count = count;
  79663. this.source = source;
  79664. }
  79665. RetrySubscriber.prototype.error = function (err) {
  79666. if (!this.isStopped) {
  79667. var _a = this, source = _a.source, count = _a.count;
  79668. if (count === 0) {
  79669. return _super.prototype.error.call(this, err);
  79670. }
  79671. else if (count > -1) {
  79672. this.count = count - 1;
  79673. }
  79674. source.subscribe(this._unsubscribeAndRecycle());
  79675. }
  79676. };
  79677. return RetrySubscriber;
  79678. }(Subscriber_1.Subscriber));
  79679. //# sourceMappingURL=retry.js.map
  79680. /***/ }),
  79681. /* 271 */
  79682. /***/ (function(module, exports, __webpack_require__) {
  79683. "use strict";
  79684. var __extends = (this && this.__extends) || function (d, b) {
  79685. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79686. function __() { this.constructor = d; }
  79687. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79688. };
  79689. var Subject_1 = __webpack_require__(12);
  79690. var tryCatch_1 = __webpack_require__(17);
  79691. var errorObject_1 = __webpack_require__(16);
  79692. var OuterSubscriber_1 = __webpack_require__(6);
  79693. var subscribeToResult_1 = __webpack_require__(5);
  79694. /**
  79695. * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable
  79696. * calls `error`, this method will emit the Throwable that caused the error to the Observable returned from `notifier`.
  79697. * If that Observable calls `complete` or `error` then this method will call `complete` or `error` on the child
  79698. * subscription. Otherwise this method will resubscribe to the source Observable.
  79699. *
  79700. * <img src="./img/retryWhen.png" width="100%">
  79701. *
  79702. * @param {function(errors: Observable): Observable} notifier - Receives an Observable of notifications with which a
  79703. * user can `complete` or `error`, aborting the retry.
  79704. * @return {Observable} The source Observable modified with retry logic.
  79705. * @method retryWhen
  79706. * @owner Observable
  79707. */
  79708. function retryWhen(notifier) {
  79709. return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
  79710. }
  79711. exports.retryWhen = retryWhen;
  79712. var RetryWhenOperator = (function () {
  79713. function RetryWhenOperator(notifier, source) {
  79714. this.notifier = notifier;
  79715. this.source = source;
  79716. }
  79717. RetryWhenOperator.prototype.call = function (subscriber, source) {
  79718. return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
  79719. };
  79720. return RetryWhenOperator;
  79721. }());
  79722. /**
  79723. * We need this JSDoc comment for affecting ESDoc.
  79724. * @ignore
  79725. * @extends {Ignored}
  79726. */
  79727. var RetryWhenSubscriber = (function (_super) {
  79728. __extends(RetryWhenSubscriber, _super);
  79729. function RetryWhenSubscriber(destination, notifier, source) {
  79730. _super.call(this, destination);
  79731. this.notifier = notifier;
  79732. this.source = source;
  79733. }
  79734. RetryWhenSubscriber.prototype.error = function (err) {
  79735. if (!this.isStopped) {
  79736. var errors = this.errors;
  79737. var retries = this.retries;
  79738. var retriesSubscription = this.retriesSubscription;
  79739. if (!retries) {
  79740. errors = new Subject_1.Subject();
  79741. retries = tryCatch_1.tryCatch(this.notifier)(errors);
  79742. if (retries === errorObject_1.errorObject) {
  79743. return _super.prototype.error.call(this, errorObject_1.errorObject.e);
  79744. }
  79745. retriesSubscription = subscribeToResult_1.subscribeToResult(this, retries);
  79746. }
  79747. else {
  79748. this.errors = null;
  79749. this.retriesSubscription = null;
  79750. }
  79751. this._unsubscribeAndRecycle();
  79752. this.errors = errors;
  79753. this.retries = retries;
  79754. this.retriesSubscription = retriesSubscription;
  79755. errors.next(err);
  79756. }
  79757. };
  79758. /** @deprecated internal use only */ RetryWhenSubscriber.prototype._unsubscribe = function () {
  79759. var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
  79760. if (errors) {
  79761. errors.unsubscribe();
  79762. this.errors = null;
  79763. }
  79764. if (retriesSubscription) {
  79765. retriesSubscription.unsubscribe();
  79766. this.retriesSubscription = null;
  79767. }
  79768. this.retries = null;
  79769. };
  79770. RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  79771. var _a = this, errors = _a.errors, retries = _a.retries, retriesSubscription = _a.retriesSubscription;
  79772. this.errors = null;
  79773. this.retries = null;
  79774. this.retriesSubscription = null;
  79775. this._unsubscribeAndRecycle();
  79776. this.errors = errors;
  79777. this.retries = retries;
  79778. this.retriesSubscription = retriesSubscription;
  79779. this.source.subscribe(this);
  79780. };
  79781. return RetryWhenSubscriber;
  79782. }(OuterSubscriber_1.OuterSubscriber));
  79783. //# sourceMappingURL=retryWhen.js.map
  79784. /***/ }),
  79785. /* 272 */
  79786. /***/ (function(module, exports, __webpack_require__) {
  79787. "use strict";
  79788. var __extends = (this && this.__extends) || function (d, b) {
  79789. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79790. function __() { this.constructor = d; }
  79791. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79792. };
  79793. var OuterSubscriber_1 = __webpack_require__(6);
  79794. var subscribeToResult_1 = __webpack_require__(5);
  79795. /**
  79796. * Emits the most recently emitted value from the source Observable whenever
  79797. * another Observable, the `notifier`, emits.
  79798. *
  79799. * <span class="informal">It's like {@link sampleTime}, but samples whenever
  79800. * the `notifier` Observable emits something.</span>
  79801. *
  79802. * <img src="./img/sample.png" width="100%">
  79803. *
  79804. * Whenever the `notifier` Observable emits a value or completes, `sample`
  79805. * looks at the source Observable and emits whichever value it has most recently
  79806. * emitted since the previous sampling, unless the source has not emitted
  79807. * anything since the previous sampling. The `notifier` is subscribed to as soon
  79808. * as the output Observable is subscribed.
  79809. *
  79810. * @example <caption>On every click, sample the most recent "seconds" timer</caption>
  79811. * var seconds = Rx.Observable.interval(1000);
  79812. * var clicks = Rx.Observable.fromEvent(document, 'click');
  79813. * var result = seconds.sample(clicks);
  79814. * result.subscribe(x => console.log(x));
  79815. *
  79816. * @see {@link audit}
  79817. * @see {@link debounce}
  79818. * @see {@link sampleTime}
  79819. * @see {@link throttle}
  79820. *
  79821. * @param {Observable<any>} notifier The Observable to use for sampling the
  79822. * source Observable.
  79823. * @return {Observable<T>} An Observable that emits the results of sampling the
  79824. * values emitted by the source Observable whenever the notifier Observable
  79825. * emits value or completes.
  79826. * @method sample
  79827. * @owner Observable
  79828. */
  79829. function sample(notifier) {
  79830. return function (source) { return source.lift(new SampleOperator(notifier)); };
  79831. }
  79832. exports.sample = sample;
  79833. var SampleOperator = (function () {
  79834. function SampleOperator(notifier) {
  79835. this.notifier = notifier;
  79836. }
  79837. SampleOperator.prototype.call = function (subscriber, source) {
  79838. var sampleSubscriber = new SampleSubscriber(subscriber);
  79839. var subscription = source.subscribe(sampleSubscriber);
  79840. subscription.add(subscribeToResult_1.subscribeToResult(sampleSubscriber, this.notifier));
  79841. return subscription;
  79842. };
  79843. return SampleOperator;
  79844. }());
  79845. /**
  79846. * We need this JSDoc comment for affecting ESDoc.
  79847. * @ignore
  79848. * @extends {Ignored}
  79849. */
  79850. var SampleSubscriber = (function (_super) {
  79851. __extends(SampleSubscriber, _super);
  79852. function SampleSubscriber() {
  79853. _super.apply(this, arguments);
  79854. this.hasValue = false;
  79855. }
  79856. SampleSubscriber.prototype._next = function (value) {
  79857. this.value = value;
  79858. this.hasValue = true;
  79859. };
  79860. SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  79861. this.emitValue();
  79862. };
  79863. SampleSubscriber.prototype.notifyComplete = function () {
  79864. this.emitValue();
  79865. };
  79866. SampleSubscriber.prototype.emitValue = function () {
  79867. if (this.hasValue) {
  79868. this.hasValue = false;
  79869. this.destination.next(this.value);
  79870. }
  79871. };
  79872. return SampleSubscriber;
  79873. }(OuterSubscriber_1.OuterSubscriber));
  79874. //# sourceMappingURL=sample.js.map
  79875. /***/ }),
  79876. /* 273 */
  79877. /***/ (function(module, exports, __webpack_require__) {
  79878. "use strict";
  79879. var __extends = (this && this.__extends) || function (d, b) {
  79880. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79881. function __() { this.constructor = d; }
  79882. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79883. };
  79884. var Subscriber_1 = __webpack_require__(4);
  79885. var async_1 = __webpack_require__(10);
  79886. /**
  79887. * Emits the most recently emitted value from the source Observable within
  79888. * periodic time intervals.
  79889. *
  79890. * <span class="informal">Samples the source Observable at periodic time
  79891. * intervals, emitting what it samples.</span>
  79892. *
  79893. * <img src="./img/sampleTime.png" width="100%">
  79894. *
  79895. * `sampleTime` periodically looks at the source Observable and emits whichever
  79896. * value it has most recently emitted since the previous sampling, unless the
  79897. * source has not emitted anything since the previous sampling. The sampling
  79898. * happens periodically in time every `period` milliseconds (or the time unit
  79899. * defined by the optional `scheduler` argument). The sampling starts as soon as
  79900. * the output Observable is subscribed.
  79901. *
  79902. * @example <caption>Every second, emit the most recent click at most once</caption>
  79903. * var clicks = Rx.Observable.fromEvent(document, 'click');
  79904. * var result = clicks.sampleTime(1000);
  79905. * result.subscribe(x => console.log(x));
  79906. *
  79907. * @see {@link auditTime}
  79908. * @see {@link debounceTime}
  79909. * @see {@link delay}
  79910. * @see {@link sample}
  79911. * @see {@link throttleTime}
  79912. *
  79913. * @param {number} period The sampling period expressed in milliseconds or the
  79914. * time unit determined internally by the optional `scheduler`.
  79915. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  79916. * managing the timers that handle the sampling.
  79917. * @return {Observable<T>} An Observable that emits the results of sampling the
  79918. * values emitted by the source Observable at the specified time interval.
  79919. * @method sampleTime
  79920. * @owner Observable
  79921. */
  79922. function sampleTime(period, scheduler) {
  79923. if (scheduler === void 0) { scheduler = async_1.async; }
  79924. return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
  79925. }
  79926. exports.sampleTime = sampleTime;
  79927. var SampleTimeOperator = (function () {
  79928. function SampleTimeOperator(period, scheduler) {
  79929. this.period = period;
  79930. this.scheduler = scheduler;
  79931. }
  79932. SampleTimeOperator.prototype.call = function (subscriber, source) {
  79933. return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
  79934. };
  79935. return SampleTimeOperator;
  79936. }());
  79937. /**
  79938. * We need this JSDoc comment for affecting ESDoc.
  79939. * @ignore
  79940. * @extends {Ignored}
  79941. */
  79942. var SampleTimeSubscriber = (function (_super) {
  79943. __extends(SampleTimeSubscriber, _super);
  79944. function SampleTimeSubscriber(destination, period, scheduler) {
  79945. _super.call(this, destination);
  79946. this.period = period;
  79947. this.scheduler = scheduler;
  79948. this.hasValue = false;
  79949. this.add(scheduler.schedule(dispatchNotification, period, { subscriber: this, period: period }));
  79950. }
  79951. SampleTimeSubscriber.prototype._next = function (value) {
  79952. this.lastValue = value;
  79953. this.hasValue = true;
  79954. };
  79955. SampleTimeSubscriber.prototype.notifyNext = function () {
  79956. if (this.hasValue) {
  79957. this.hasValue = false;
  79958. this.destination.next(this.lastValue);
  79959. }
  79960. };
  79961. return SampleTimeSubscriber;
  79962. }(Subscriber_1.Subscriber));
  79963. function dispatchNotification(state) {
  79964. var subscriber = state.subscriber, period = state.period;
  79965. subscriber.notifyNext();
  79966. this.schedule(state, period);
  79967. }
  79968. //# sourceMappingURL=sampleTime.js.map
  79969. /***/ }),
  79970. /* 274 */
  79971. /***/ (function(module, exports, __webpack_require__) {
  79972. "use strict";
  79973. var __extends = (this && this.__extends) || function (d, b) {
  79974. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  79975. function __() { this.constructor = d; }
  79976. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  79977. };
  79978. var Subscriber_1 = __webpack_require__(4);
  79979. var tryCatch_1 = __webpack_require__(17);
  79980. var errorObject_1 = __webpack_require__(16);
  79981. /**
  79982. * Compares all values of two observables in sequence using an optional comparor function
  79983. * and returns an observable of a single boolean value representing whether or not the two sequences
  79984. * are equal.
  79985. *
  79986. * <span class="informal">Checks to see of all values emitted by both observables are equal, in order.</span>
  79987. *
  79988. * <img src="./img/sequenceEqual.png" width="100%">
  79989. *
  79990. * `sequenceEqual` subscribes to two observables and buffers incoming values from each observable. Whenever either
  79991. * observable emits a value, the value is buffered and the buffers are shifted and compared from the bottom
  79992. * up; If any value pair doesn't match, the returned observable will emit `false` and complete. If one of the
  79993. * observables completes, the operator will wait for the other observable to complete; If the other
  79994. * observable emits before completing, the returned observable will emit `false` and complete. If one observable never
  79995. * completes or emits after the other complets, the returned observable will never complete.
  79996. *
  79997. * @example <caption>figure out if the Konami code matches</caption>
  79998. * var code = Rx.Observable.from([
  79999. * "ArrowUp",
  80000. * "ArrowUp",
  80001. * "ArrowDown",
  80002. * "ArrowDown",
  80003. * "ArrowLeft",
  80004. * "ArrowRight",
  80005. * "ArrowLeft",
  80006. * "ArrowRight",
  80007. * "KeyB",
  80008. * "KeyA",
  80009. * "Enter" // no start key, clearly.
  80010. * ]);
  80011. *
  80012. * var keys = Rx.Observable.fromEvent(document, 'keyup')
  80013. * .map(e => e.code);
  80014. * var matches = keys.bufferCount(11, 1)
  80015. * .mergeMap(
  80016. * last11 =>
  80017. * Rx.Observable.from(last11)
  80018. * .sequenceEqual(code)
  80019. * );
  80020. * matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));
  80021. *
  80022. * @see {@link combineLatest}
  80023. * @see {@link zip}
  80024. * @see {@link withLatestFrom}
  80025. *
  80026. * @param {Observable} compareTo The observable sequence to compare the source sequence to.
  80027. * @param {function} [comparor] An optional function to compare each value pair
  80028. * @return {Observable} An Observable of a single boolean value representing whether or not
  80029. * the values emitted by both observables were equal in sequence.
  80030. * @method sequenceEqual
  80031. * @owner Observable
  80032. */
  80033. function sequenceEqual(compareTo, comparor) {
  80034. return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparor)); };
  80035. }
  80036. exports.sequenceEqual = sequenceEqual;
  80037. var SequenceEqualOperator = (function () {
  80038. function SequenceEqualOperator(compareTo, comparor) {
  80039. this.compareTo = compareTo;
  80040. this.comparor = comparor;
  80041. }
  80042. SequenceEqualOperator.prototype.call = function (subscriber, source) {
  80043. return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparor));
  80044. };
  80045. return SequenceEqualOperator;
  80046. }());
  80047. exports.SequenceEqualOperator = SequenceEqualOperator;
  80048. /**
  80049. * We need this JSDoc comment for affecting ESDoc.
  80050. * @ignore
  80051. * @extends {Ignored}
  80052. */
  80053. var SequenceEqualSubscriber = (function (_super) {
  80054. __extends(SequenceEqualSubscriber, _super);
  80055. function SequenceEqualSubscriber(destination, compareTo, comparor) {
  80056. _super.call(this, destination);
  80057. this.compareTo = compareTo;
  80058. this.comparor = comparor;
  80059. this._a = [];
  80060. this._b = [];
  80061. this._oneComplete = false;
  80062. this.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, this)));
  80063. }
  80064. SequenceEqualSubscriber.prototype._next = function (value) {
  80065. if (this._oneComplete && this._b.length === 0) {
  80066. this.emit(false);
  80067. }
  80068. else {
  80069. this._a.push(value);
  80070. this.checkValues();
  80071. }
  80072. };
  80073. SequenceEqualSubscriber.prototype._complete = function () {
  80074. if (this._oneComplete) {
  80075. this.emit(this._a.length === 0 && this._b.length === 0);
  80076. }
  80077. else {
  80078. this._oneComplete = true;
  80079. }
  80080. };
  80081. SequenceEqualSubscriber.prototype.checkValues = function () {
  80082. var _c = this, _a = _c._a, _b = _c._b, comparor = _c.comparor;
  80083. while (_a.length > 0 && _b.length > 0) {
  80084. var a = _a.shift();
  80085. var b = _b.shift();
  80086. var areEqual = false;
  80087. if (comparor) {
  80088. areEqual = tryCatch_1.tryCatch(comparor)(a, b);
  80089. if (areEqual === errorObject_1.errorObject) {
  80090. this.destination.error(errorObject_1.errorObject.e);
  80091. }
  80092. }
  80093. else {
  80094. areEqual = a === b;
  80095. }
  80096. if (!areEqual) {
  80097. this.emit(false);
  80098. }
  80099. }
  80100. };
  80101. SequenceEqualSubscriber.prototype.emit = function (value) {
  80102. var destination = this.destination;
  80103. destination.next(value);
  80104. destination.complete();
  80105. };
  80106. SequenceEqualSubscriber.prototype.nextB = function (value) {
  80107. if (this._oneComplete && this._a.length === 0) {
  80108. this.emit(false);
  80109. }
  80110. else {
  80111. this._b.push(value);
  80112. this.checkValues();
  80113. }
  80114. };
  80115. return SequenceEqualSubscriber;
  80116. }(Subscriber_1.Subscriber));
  80117. exports.SequenceEqualSubscriber = SequenceEqualSubscriber;
  80118. var SequenceEqualCompareToSubscriber = (function (_super) {
  80119. __extends(SequenceEqualCompareToSubscriber, _super);
  80120. function SequenceEqualCompareToSubscriber(destination, parent) {
  80121. _super.call(this, destination);
  80122. this.parent = parent;
  80123. }
  80124. SequenceEqualCompareToSubscriber.prototype._next = function (value) {
  80125. this.parent.nextB(value);
  80126. };
  80127. SequenceEqualCompareToSubscriber.prototype._error = function (err) {
  80128. this.parent.error(err);
  80129. };
  80130. SequenceEqualCompareToSubscriber.prototype._complete = function () {
  80131. this.parent._complete();
  80132. };
  80133. return SequenceEqualCompareToSubscriber;
  80134. }(Subscriber_1.Subscriber));
  80135. //# sourceMappingURL=sequenceEqual.js.map
  80136. /***/ }),
  80137. /* 275 */
  80138. /***/ (function(module, exports, __webpack_require__) {
  80139. "use strict";
  80140. var ReplaySubject_1 = __webpack_require__(78);
  80141. /**
  80142. * @method shareReplay
  80143. * @owner Observable
  80144. */
  80145. function shareReplay(bufferSize, windowTime, scheduler) {
  80146. return function (source) { return source.lift(shareReplayOperator(bufferSize, windowTime, scheduler)); };
  80147. }
  80148. exports.shareReplay = shareReplay;
  80149. function shareReplayOperator(bufferSize, windowTime, scheduler) {
  80150. var subject;
  80151. var refCount = 0;
  80152. var subscription;
  80153. var hasError = false;
  80154. var isComplete = false;
  80155. return function shareReplayOperation(source) {
  80156. refCount++;
  80157. if (!subject || hasError) {
  80158. hasError = false;
  80159. subject = new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler);
  80160. subscription = source.subscribe({
  80161. next: function (value) { subject.next(value); },
  80162. error: function (err) {
  80163. hasError = true;
  80164. subject.error(err);
  80165. },
  80166. complete: function () {
  80167. isComplete = true;
  80168. subject.complete();
  80169. },
  80170. });
  80171. }
  80172. var innerSub = subject.subscribe(this);
  80173. return function () {
  80174. refCount--;
  80175. innerSub.unsubscribe();
  80176. if (subscription && refCount === 0 && isComplete) {
  80177. subscription.unsubscribe();
  80178. }
  80179. };
  80180. };
  80181. }
  80182. ;
  80183. //# sourceMappingURL=shareReplay.js.map
  80184. /***/ }),
  80185. /* 276 */
  80186. /***/ (function(module, exports, __webpack_require__) {
  80187. "use strict";
  80188. var __extends = (this && this.__extends) || function (d, b) {
  80189. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80190. function __() { this.constructor = d; }
  80191. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80192. };
  80193. var Subscriber_1 = __webpack_require__(4);
  80194. var EmptyError_1 = __webpack_require__(79);
  80195. /**
  80196. * Returns an Observable that emits the single item emitted by the source Observable that matches a specified
  80197. * predicate, if that Observable emits one such item. If the source Observable emits more than one such item or no
  80198. * such items, notify of an IllegalArgumentException or NoSuchElementException respectively.
  80199. *
  80200. * <img src="./img/single.png" width="100%">
  80201. *
  80202. * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
  80203. * callback if the Observable completes before any `next` notification was sent.
  80204. * @param {Function} predicate - A predicate function to evaluate items emitted by the source Observable.
  80205. * @return {Observable<T>} An Observable that emits the single item emitted by the source Observable that matches
  80206. * the predicate.
  80207. .
  80208. * @method single
  80209. * @owner Observable
  80210. */
  80211. function single(predicate) {
  80212. return function (source) { return source.lift(new SingleOperator(predicate, source)); };
  80213. }
  80214. exports.single = single;
  80215. var SingleOperator = (function () {
  80216. function SingleOperator(predicate, source) {
  80217. this.predicate = predicate;
  80218. this.source = source;
  80219. }
  80220. SingleOperator.prototype.call = function (subscriber, source) {
  80221. return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
  80222. };
  80223. return SingleOperator;
  80224. }());
  80225. /**
  80226. * We need this JSDoc comment for affecting ESDoc.
  80227. * @ignore
  80228. * @extends {Ignored}
  80229. */
  80230. var SingleSubscriber = (function (_super) {
  80231. __extends(SingleSubscriber, _super);
  80232. function SingleSubscriber(destination, predicate, source) {
  80233. _super.call(this, destination);
  80234. this.predicate = predicate;
  80235. this.source = source;
  80236. this.seenValue = false;
  80237. this.index = 0;
  80238. }
  80239. SingleSubscriber.prototype.applySingleValue = function (value) {
  80240. if (this.seenValue) {
  80241. this.destination.error('Sequence contains more than one element');
  80242. }
  80243. else {
  80244. this.seenValue = true;
  80245. this.singleValue = value;
  80246. }
  80247. };
  80248. SingleSubscriber.prototype._next = function (value) {
  80249. var index = this.index++;
  80250. if (this.predicate) {
  80251. this.tryNext(value, index);
  80252. }
  80253. else {
  80254. this.applySingleValue(value);
  80255. }
  80256. };
  80257. SingleSubscriber.prototype.tryNext = function (value, index) {
  80258. try {
  80259. if (this.predicate(value, index, this.source)) {
  80260. this.applySingleValue(value);
  80261. }
  80262. }
  80263. catch (err) {
  80264. this.destination.error(err);
  80265. }
  80266. };
  80267. SingleSubscriber.prototype._complete = function () {
  80268. var destination = this.destination;
  80269. if (this.index > 0) {
  80270. destination.next(this.seenValue ? this.singleValue : undefined);
  80271. destination.complete();
  80272. }
  80273. else {
  80274. destination.error(new EmptyError_1.EmptyError);
  80275. }
  80276. };
  80277. return SingleSubscriber;
  80278. }(Subscriber_1.Subscriber));
  80279. //# sourceMappingURL=single.js.map
  80280. /***/ }),
  80281. /* 277 */
  80282. /***/ (function(module, exports, __webpack_require__) {
  80283. "use strict";
  80284. var __extends = (this && this.__extends) || function (d, b) {
  80285. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80286. function __() { this.constructor = d; }
  80287. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80288. };
  80289. var Subscriber_1 = __webpack_require__(4);
  80290. /**
  80291. * Returns an Observable that skips the first `count` items emitted by the source Observable.
  80292. *
  80293. * <img src="./img/skip.png" width="100%">
  80294. *
  80295. * @param {Number} count - The number of times, items emitted by source Observable should be skipped.
  80296. * @return {Observable} An Observable that skips values emitted by the source Observable.
  80297. *
  80298. * @method skip
  80299. * @owner Observable
  80300. */
  80301. function skip(count) {
  80302. return function (source) { return source.lift(new SkipOperator(count)); };
  80303. }
  80304. exports.skip = skip;
  80305. var SkipOperator = (function () {
  80306. function SkipOperator(total) {
  80307. this.total = total;
  80308. }
  80309. SkipOperator.prototype.call = function (subscriber, source) {
  80310. return source.subscribe(new SkipSubscriber(subscriber, this.total));
  80311. };
  80312. return SkipOperator;
  80313. }());
  80314. /**
  80315. * We need this JSDoc comment for affecting ESDoc.
  80316. * @ignore
  80317. * @extends {Ignored}
  80318. */
  80319. var SkipSubscriber = (function (_super) {
  80320. __extends(SkipSubscriber, _super);
  80321. function SkipSubscriber(destination, total) {
  80322. _super.call(this, destination);
  80323. this.total = total;
  80324. this.count = 0;
  80325. }
  80326. SkipSubscriber.prototype._next = function (x) {
  80327. if (++this.count > this.total) {
  80328. this.destination.next(x);
  80329. }
  80330. };
  80331. return SkipSubscriber;
  80332. }(Subscriber_1.Subscriber));
  80333. //# sourceMappingURL=skip.js.map
  80334. /***/ }),
  80335. /* 278 */
  80336. /***/ (function(module, exports, __webpack_require__) {
  80337. "use strict";
  80338. var __extends = (this && this.__extends) || function (d, b) {
  80339. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80340. function __() { this.constructor = d; }
  80341. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80342. };
  80343. var Subscriber_1 = __webpack_require__(4);
  80344. var ArgumentOutOfRangeError_1 = __webpack_require__(59);
  80345. /**
  80346. * Skip the last `count` values emitted by the source Observable.
  80347. *
  80348. * <img src="./img/skipLast.png" width="100%">
  80349. *
  80350. * `skipLast` returns an Observable that accumulates a queue with a length
  80351. * enough to store the first `count` values. As more values are received,
  80352. * values are taken from the front of the queue and produced on the result
  80353. * sequence. This causes values to be delayed.
  80354. *
  80355. * @example <caption>Skip the last 2 values of an Observable with many values</caption>
  80356. * var many = Rx.Observable.range(1, 5);
  80357. * var skipLastTwo = many.skipLast(2);
  80358. * skipLastTwo.subscribe(x => console.log(x));
  80359. *
  80360. * // Results in:
  80361. * // 1 2 3
  80362. *
  80363. * @see {@link skip}
  80364. * @see {@link skipUntil}
  80365. * @see {@link skipWhile}
  80366. * @see {@link take}
  80367. *
  80368. * @throws {ArgumentOutOfRangeError} When using `skipLast(i)`, it throws
  80369. * ArgumentOutOrRangeError if `i < 0`.
  80370. *
  80371. * @param {number} count Number of elements to skip from the end of the source Observable.
  80372. * @returns {Observable<T>} An Observable that skips the last count values
  80373. * emitted by the source Observable.
  80374. * @method skipLast
  80375. * @owner Observable
  80376. */
  80377. function skipLast(count) {
  80378. return function (source) { return source.lift(new SkipLastOperator(count)); };
  80379. }
  80380. exports.skipLast = skipLast;
  80381. var SkipLastOperator = (function () {
  80382. function SkipLastOperator(_skipCount) {
  80383. this._skipCount = _skipCount;
  80384. if (this._skipCount < 0) {
  80385. throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
  80386. }
  80387. }
  80388. SkipLastOperator.prototype.call = function (subscriber, source) {
  80389. if (this._skipCount === 0) {
  80390. // If we don't want to skip any values then just subscribe
  80391. // to Subscriber without any further logic.
  80392. return source.subscribe(new Subscriber_1.Subscriber(subscriber));
  80393. }
  80394. else {
  80395. return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
  80396. }
  80397. };
  80398. return SkipLastOperator;
  80399. }());
  80400. /**
  80401. * We need this JSDoc comment for affecting ESDoc.
  80402. * @ignore
  80403. * @extends {Ignored}
  80404. */
  80405. var SkipLastSubscriber = (function (_super) {
  80406. __extends(SkipLastSubscriber, _super);
  80407. function SkipLastSubscriber(destination, _skipCount) {
  80408. _super.call(this, destination);
  80409. this._skipCount = _skipCount;
  80410. this._count = 0;
  80411. this._ring = new Array(_skipCount);
  80412. }
  80413. SkipLastSubscriber.prototype._next = function (value) {
  80414. var skipCount = this._skipCount;
  80415. var count = this._count++;
  80416. if (count < skipCount) {
  80417. this._ring[count] = value;
  80418. }
  80419. else {
  80420. var currentIndex = count % skipCount;
  80421. var ring = this._ring;
  80422. var oldValue = ring[currentIndex];
  80423. ring[currentIndex] = value;
  80424. this.destination.next(oldValue);
  80425. }
  80426. };
  80427. return SkipLastSubscriber;
  80428. }(Subscriber_1.Subscriber));
  80429. //# sourceMappingURL=skipLast.js.map
  80430. /***/ }),
  80431. /* 279 */
  80432. /***/ (function(module, exports, __webpack_require__) {
  80433. "use strict";
  80434. var __extends = (this && this.__extends) || function (d, b) {
  80435. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80436. function __() { this.constructor = d; }
  80437. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80438. };
  80439. var OuterSubscriber_1 = __webpack_require__(6);
  80440. var subscribeToResult_1 = __webpack_require__(5);
  80441. /**
  80442. * Returns an Observable that skips items emitted by the source Observable until a second Observable emits an item.
  80443. *
  80444. * <img src="./img/skipUntil.png" width="100%">
  80445. *
  80446. * @param {Observable} notifier - The second Observable that has to emit an item before the source Observable's elements begin to
  80447. * be mirrored by the resulting Observable.
  80448. * @return {Observable<T>} An Observable that skips items from the source Observable until the second Observable emits
  80449. * an item, then emits the remaining items.
  80450. * @method skipUntil
  80451. * @owner Observable
  80452. */
  80453. function skipUntil(notifier) {
  80454. return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
  80455. }
  80456. exports.skipUntil = skipUntil;
  80457. var SkipUntilOperator = (function () {
  80458. function SkipUntilOperator(notifier) {
  80459. this.notifier = notifier;
  80460. }
  80461. SkipUntilOperator.prototype.call = function (subscriber, source) {
  80462. return source.subscribe(new SkipUntilSubscriber(subscriber, this.notifier));
  80463. };
  80464. return SkipUntilOperator;
  80465. }());
  80466. /**
  80467. * We need this JSDoc comment for affecting ESDoc.
  80468. * @ignore
  80469. * @extends {Ignored}
  80470. */
  80471. var SkipUntilSubscriber = (function (_super) {
  80472. __extends(SkipUntilSubscriber, _super);
  80473. function SkipUntilSubscriber(destination, notifier) {
  80474. _super.call(this, destination);
  80475. this.hasValue = false;
  80476. this.isInnerStopped = false;
  80477. this.add(subscribeToResult_1.subscribeToResult(this, notifier));
  80478. }
  80479. SkipUntilSubscriber.prototype._next = function (value) {
  80480. if (this.hasValue) {
  80481. _super.prototype._next.call(this, value);
  80482. }
  80483. };
  80484. SkipUntilSubscriber.prototype._complete = function () {
  80485. if (this.isInnerStopped) {
  80486. _super.prototype._complete.call(this);
  80487. }
  80488. else {
  80489. this.unsubscribe();
  80490. }
  80491. };
  80492. SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  80493. this.hasValue = true;
  80494. };
  80495. SkipUntilSubscriber.prototype.notifyComplete = function () {
  80496. this.isInnerStopped = true;
  80497. if (this.isStopped) {
  80498. _super.prototype._complete.call(this);
  80499. }
  80500. };
  80501. return SkipUntilSubscriber;
  80502. }(OuterSubscriber_1.OuterSubscriber));
  80503. //# sourceMappingURL=skipUntil.js.map
  80504. /***/ }),
  80505. /* 280 */
  80506. /***/ (function(module, exports, __webpack_require__) {
  80507. "use strict";
  80508. var __extends = (this && this.__extends) || function (d, b) {
  80509. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80510. function __() { this.constructor = d; }
  80511. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80512. };
  80513. var Subscriber_1 = __webpack_require__(4);
  80514. /**
  80515. * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds
  80516. * true, but emits all further source items as soon as the condition becomes false.
  80517. *
  80518. * <img src="./img/skipWhile.png" width="100%">
  80519. *
  80520. * @param {Function} predicate - A function to test each item emitted from the source Observable.
  80521. * @return {Observable<T>} An Observable that begins emitting items emitted by the source Observable when the
  80522. * specified predicate becomes false.
  80523. * @method skipWhile
  80524. * @owner Observable
  80525. */
  80526. function skipWhile(predicate) {
  80527. return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
  80528. }
  80529. exports.skipWhile = skipWhile;
  80530. var SkipWhileOperator = (function () {
  80531. function SkipWhileOperator(predicate) {
  80532. this.predicate = predicate;
  80533. }
  80534. SkipWhileOperator.prototype.call = function (subscriber, source) {
  80535. return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
  80536. };
  80537. return SkipWhileOperator;
  80538. }());
  80539. /**
  80540. * We need this JSDoc comment for affecting ESDoc.
  80541. * @ignore
  80542. * @extends {Ignored}
  80543. */
  80544. var SkipWhileSubscriber = (function (_super) {
  80545. __extends(SkipWhileSubscriber, _super);
  80546. function SkipWhileSubscriber(destination, predicate) {
  80547. _super.call(this, destination);
  80548. this.predicate = predicate;
  80549. this.skipping = true;
  80550. this.index = 0;
  80551. }
  80552. SkipWhileSubscriber.prototype._next = function (value) {
  80553. var destination = this.destination;
  80554. if (this.skipping) {
  80555. this.tryCallPredicate(value);
  80556. }
  80557. if (!this.skipping) {
  80558. destination.next(value);
  80559. }
  80560. };
  80561. SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
  80562. try {
  80563. var result = this.predicate(value, this.index++);
  80564. this.skipping = Boolean(result);
  80565. }
  80566. catch (err) {
  80567. this.destination.error(err);
  80568. }
  80569. };
  80570. return SkipWhileSubscriber;
  80571. }(Subscriber_1.Subscriber));
  80572. //# sourceMappingURL=skipWhile.js.map
  80573. /***/ }),
  80574. /* 281 */
  80575. /***/ (function(module, exports, __webpack_require__) {
  80576. "use strict";
  80577. var ArrayObservable_1 = __webpack_require__(32);
  80578. var ScalarObservable_1 = __webpack_require__(89);
  80579. var EmptyObservable_1 = __webpack_require__(33);
  80580. var concat_1 = __webpack_require__(54);
  80581. var isScheduler_1 = __webpack_require__(22);
  80582. /* tslint:enable:max-line-length */
  80583. /**
  80584. * Returns an Observable that emits the items you specify as arguments before it begins to emit
  80585. * items emitted by the source Observable.
  80586. *
  80587. * <img src="./img/startWith.png" width="100%">
  80588. *
  80589. * @param {...T} values - Items you want the modified Observable to emit first.
  80590. * @param {Scheduler} [scheduler] - A {@link IScheduler} to use for scheduling
  80591. * the emissions of the `next` notifications.
  80592. * @return {Observable} An Observable that emits the items in the specified Iterable and then emits the items
  80593. * emitted by the source Observable.
  80594. * @method startWith
  80595. * @owner Observable
  80596. */
  80597. function startWith() {
  80598. var array = [];
  80599. for (var _i = 0; _i < arguments.length; _i++) {
  80600. array[_i - 0] = arguments[_i];
  80601. }
  80602. return function (source) {
  80603. var scheduler = array[array.length - 1];
  80604. if (isScheduler_1.isScheduler(scheduler)) {
  80605. array.pop();
  80606. }
  80607. else {
  80608. scheduler = null;
  80609. }
  80610. var len = array.length;
  80611. if (len === 1) {
  80612. return concat_1.concat(new ScalarObservable_1.ScalarObservable(array[0], scheduler), source);
  80613. }
  80614. else if (len > 1) {
  80615. return concat_1.concat(new ArrayObservable_1.ArrayObservable(array, scheduler), source);
  80616. }
  80617. else {
  80618. return concat_1.concat(new EmptyObservable_1.EmptyObservable(scheduler), source);
  80619. }
  80620. };
  80621. }
  80622. exports.startWith = startWith;
  80623. //# sourceMappingURL=startWith.js.map
  80624. /***/ }),
  80625. /* 282 */
  80626. /***/ (function(module, exports, __webpack_require__) {
  80627. "use strict";
  80628. var AsapAction_1 = __webpack_require__(603);
  80629. var AsapScheduler_1 = __webpack_require__(607);
  80630. /**
  80631. *
  80632. * Asap Scheduler
  80633. *
  80634. * <span class="informal">Perform task as fast as it can be performed asynchronously</span>
  80635. *
  80636. * `asap` scheduler behaves the same as {@link async} scheduler when you use it to delay task
  80637. * in time. If however you set delay to `0`, `asap` will wait for current synchronously executing
  80638. * code to end and then it will try to execute given task as fast as possible.
  80639. *
  80640. * `asap` scheduler will do its best to minimize time between end of currently executing code
  80641. * and start of scheduled task. This makes it best candidate for performing so called "deferring".
  80642. * Traditionally this was achieved by calling `setTimeout(deferredTask, 0)`, but that technique involves
  80643. * some (although minimal) unwanted delay.
  80644. *
  80645. * Note that using `asap` scheduler does not necessarily mean that your task will be first to process
  80646. * after currently executing code. In particular, if some task was also scheduled with `asap` before,
  80647. * that task will execute first. That being said, if you need to schedule task asynchronously, but
  80648. * as soon as possible, `asap` scheduler is your best bet.
  80649. *
  80650. * @example <caption>Compare async and asap scheduler</caption>
  80651. *
  80652. * Rx.Scheduler.async.schedule(() => console.log('async')); // scheduling 'async' first...
  80653. * Rx.Scheduler.asap.schedule(() => console.log('asap'));
  80654. *
  80655. * // Logs:
  80656. * // "asap"
  80657. * // "async"
  80658. * // ... but 'asap' goes first!
  80659. *
  80660. * @static true
  80661. * @name asap
  80662. * @owner Scheduler
  80663. */
  80664. exports.asap = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction);
  80665. //# sourceMappingURL=asap.js.map
  80666. /***/ }),
  80667. /* 283 */
  80668. /***/ (function(module, exports, __webpack_require__) {
  80669. /* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
  80670. (typeof self !== "undefined" && self) ||
  80671. window;
  80672. var apply = Function.prototype.apply;
  80673. // DOM APIs, for completeness
  80674. exports.setTimeout = function() {
  80675. return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
  80676. };
  80677. exports.setInterval = function() {
  80678. return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
  80679. };
  80680. exports.clearTimeout =
  80681. exports.clearInterval = function(timeout) {
  80682. if (timeout) {
  80683. timeout.close();
  80684. }
  80685. };
  80686. function Timeout(id, clearFn) {
  80687. this._id = id;
  80688. this._clearFn = clearFn;
  80689. }
  80690. Timeout.prototype.unref = Timeout.prototype.ref = function() {};
  80691. Timeout.prototype.close = function() {
  80692. this._clearFn.call(scope, this._id);
  80693. };
  80694. // Does not start the time, just sets up the members needed.
  80695. exports.enroll = function(item, msecs) {
  80696. clearTimeout(item._idleTimeoutId);
  80697. item._idleTimeout = msecs;
  80698. };
  80699. exports.unenroll = function(item) {
  80700. clearTimeout(item._idleTimeoutId);
  80701. item._idleTimeout = -1;
  80702. };
  80703. exports._unrefActive = exports.active = function(item) {
  80704. clearTimeout(item._idleTimeoutId);
  80705. var msecs = item._idleTimeout;
  80706. if (msecs >= 0) {
  80707. item._idleTimeoutId = setTimeout(function onTimeout() {
  80708. if (item._onTimeout)
  80709. item._onTimeout();
  80710. }, msecs);
  80711. }
  80712. };
  80713. // setimmediate attaches itself to the global object
  80714. __webpack_require__(605);
  80715. // On some exotic environments, it's not clear which object `setimmediate` was
  80716. // able to install onto. Search each possibility in the same order as the
  80717. // `setimmediate` library.
  80718. exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
  80719. (typeof global !== "undefined" && global.setImmediate) ||
  80720. (this && this.setImmediate);
  80721. exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
  80722. (typeof global !== "undefined" && global.clearImmediate) ||
  80723. (this && this.clearImmediate);
  80724. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(61)))
  80725. /***/ }),
  80726. /* 284 */
  80727. /***/ (function(module, exports, __webpack_require__) {
  80728. "use strict";
  80729. var switchMap_1 = __webpack_require__(125);
  80730. var identity_1 = __webpack_require__(159);
  80731. function switchAll() {
  80732. return switchMap_1.switchMap(identity_1.identity);
  80733. }
  80734. exports.switchAll = switchAll;
  80735. //# sourceMappingURL=switchAll.js.map
  80736. /***/ }),
  80737. /* 285 */
  80738. /***/ (function(module, exports, __webpack_require__) {
  80739. "use strict";
  80740. var __extends = (this && this.__extends) || function (d, b) {
  80741. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80742. function __() { this.constructor = d; }
  80743. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80744. };
  80745. var OuterSubscriber_1 = __webpack_require__(6);
  80746. var subscribeToResult_1 = __webpack_require__(5);
  80747. /* tslint:enable:max-line-length */
  80748. /**
  80749. * Projects each source value to the same Observable which is flattened multiple
  80750. * times with {@link switch} in the output Observable.
  80751. *
  80752. * <span class="informal">It's like {@link switchMap}, but maps each value
  80753. * always to the same inner Observable.</span>
  80754. *
  80755. * <img src="./img/switchMapTo.png" width="100%">
  80756. *
  80757. * Maps each source value to the given Observable `innerObservable` regardless
  80758. * of the source value, and then flattens those resulting Observables into one
  80759. * single Observable, which is the output Observable. The output Observables
  80760. * emits values only from the most recently emitted instance of
  80761. * `innerObservable`.
  80762. *
  80763. * @example <caption>Rerun an interval Observable on every click event</caption>
  80764. * var clicks = Rx.Observable.fromEvent(document, 'click');
  80765. * var result = clicks.switchMapTo(Rx.Observable.interval(1000));
  80766. * result.subscribe(x => console.log(x));
  80767. *
  80768. * @see {@link concatMapTo}
  80769. * @see {@link switch}
  80770. * @see {@link switchMap}
  80771. * @see {@link mergeMapTo}
  80772. *
  80773. * @param {ObservableInput} innerObservable An Observable to replace each value from
  80774. * the source Observable.
  80775. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  80776. * A function to produce the value on the output Observable based on the values
  80777. * and the indices of the source (outer) emission and the inner Observable
  80778. * emission. The arguments passed to this function are:
  80779. * - `outerValue`: the value that came from the source
  80780. * - `innerValue`: the value that came from the projected Observable
  80781. * - `outerIndex`: the "index" of the value that came from the source
  80782. * - `innerIndex`: the "index" of the value from the projected Observable
  80783. * @return {Observable} An Observable that emits items from the given
  80784. * `innerObservable` (and optionally transformed through `resultSelector`) every
  80785. * time a value is emitted on the source Observable, and taking only the values
  80786. * from the most recently projected inner Observable.
  80787. * @method switchMapTo
  80788. * @owner Observable
  80789. */
  80790. function switchMapTo(innerObservable, resultSelector) {
  80791. return function (source) { return source.lift(new SwitchMapToOperator(innerObservable, resultSelector)); };
  80792. }
  80793. exports.switchMapTo = switchMapTo;
  80794. var SwitchMapToOperator = (function () {
  80795. function SwitchMapToOperator(observable, resultSelector) {
  80796. this.observable = observable;
  80797. this.resultSelector = resultSelector;
  80798. }
  80799. SwitchMapToOperator.prototype.call = function (subscriber, source) {
  80800. return source.subscribe(new SwitchMapToSubscriber(subscriber, this.observable, this.resultSelector));
  80801. };
  80802. return SwitchMapToOperator;
  80803. }());
  80804. /**
  80805. * We need this JSDoc comment for affecting ESDoc.
  80806. * @ignore
  80807. * @extends {Ignored}
  80808. */
  80809. var SwitchMapToSubscriber = (function (_super) {
  80810. __extends(SwitchMapToSubscriber, _super);
  80811. function SwitchMapToSubscriber(destination, inner, resultSelector) {
  80812. _super.call(this, destination);
  80813. this.inner = inner;
  80814. this.resultSelector = resultSelector;
  80815. this.index = 0;
  80816. }
  80817. SwitchMapToSubscriber.prototype._next = function (value) {
  80818. var innerSubscription = this.innerSubscription;
  80819. if (innerSubscription) {
  80820. innerSubscription.unsubscribe();
  80821. }
  80822. this.add(this.innerSubscription = subscribeToResult_1.subscribeToResult(this, this.inner, value, this.index++));
  80823. };
  80824. SwitchMapToSubscriber.prototype._complete = function () {
  80825. var innerSubscription = this.innerSubscription;
  80826. if (!innerSubscription || innerSubscription.closed) {
  80827. _super.prototype._complete.call(this);
  80828. }
  80829. };
  80830. /** @deprecated internal use only */ SwitchMapToSubscriber.prototype._unsubscribe = function () {
  80831. this.innerSubscription = null;
  80832. };
  80833. SwitchMapToSubscriber.prototype.notifyComplete = function (innerSub) {
  80834. this.remove(innerSub);
  80835. this.innerSubscription = null;
  80836. if (this.isStopped) {
  80837. _super.prototype._complete.call(this);
  80838. }
  80839. };
  80840. SwitchMapToSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  80841. var _a = this, resultSelector = _a.resultSelector, destination = _a.destination;
  80842. if (resultSelector) {
  80843. this.tryResultSelector(outerValue, innerValue, outerIndex, innerIndex);
  80844. }
  80845. else {
  80846. destination.next(innerValue);
  80847. }
  80848. };
  80849. SwitchMapToSubscriber.prototype.tryResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {
  80850. var _a = this, resultSelector = _a.resultSelector, destination = _a.destination;
  80851. var result;
  80852. try {
  80853. result = resultSelector(outerValue, innerValue, outerIndex, innerIndex);
  80854. }
  80855. catch (err) {
  80856. destination.error(err);
  80857. return;
  80858. }
  80859. destination.next(result);
  80860. };
  80861. return SwitchMapToSubscriber;
  80862. }(OuterSubscriber_1.OuterSubscriber));
  80863. //# sourceMappingURL=switchMapTo.js.map
  80864. /***/ }),
  80865. /* 286 */
  80866. /***/ (function(module, exports, __webpack_require__) {
  80867. "use strict";
  80868. var __extends = (this && this.__extends) || function (d, b) {
  80869. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80870. function __() { this.constructor = d; }
  80871. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80872. };
  80873. var Subscriber_1 = __webpack_require__(4);
  80874. var ArgumentOutOfRangeError_1 = __webpack_require__(59);
  80875. var EmptyObservable_1 = __webpack_require__(33);
  80876. /**
  80877. * Emits only the first `count` values emitted by the source Observable.
  80878. *
  80879. * <span class="informal">Takes the first `count` values from the source, then
  80880. * completes.</span>
  80881. *
  80882. * <img src="./img/take.png" width="100%">
  80883. *
  80884. * `take` returns an Observable that emits only the first `count` values emitted
  80885. * by the source Observable. If the source emits fewer than `count` values then
  80886. * all of its values are emitted. After that, it completes, regardless if the
  80887. * source completes.
  80888. *
  80889. * @example <caption>Take the first 5 seconds of an infinite 1-second interval Observable</caption>
  80890. * var interval = Rx.Observable.interval(1000);
  80891. * var five = interval.take(5);
  80892. * five.subscribe(x => console.log(x));
  80893. *
  80894. * @see {@link takeLast}
  80895. * @see {@link takeUntil}
  80896. * @see {@link takeWhile}
  80897. * @see {@link skip}
  80898. *
  80899. * @throws {ArgumentOutOfRangeError} When using `take(i)`, it delivers an
  80900. * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.
  80901. *
  80902. * @param {number} count The maximum number of `next` values to emit.
  80903. * @return {Observable<T>} An Observable that emits only the first `count`
  80904. * values emitted by the source Observable, or all of the values from the source
  80905. * if the source emits fewer than `count` values.
  80906. * @method take
  80907. * @owner Observable
  80908. */
  80909. function take(count) {
  80910. return function (source) {
  80911. if (count === 0) {
  80912. return new EmptyObservable_1.EmptyObservable();
  80913. }
  80914. else {
  80915. return source.lift(new TakeOperator(count));
  80916. }
  80917. };
  80918. }
  80919. exports.take = take;
  80920. var TakeOperator = (function () {
  80921. function TakeOperator(total) {
  80922. this.total = total;
  80923. if (this.total < 0) {
  80924. throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
  80925. }
  80926. }
  80927. TakeOperator.prototype.call = function (subscriber, source) {
  80928. return source.subscribe(new TakeSubscriber(subscriber, this.total));
  80929. };
  80930. return TakeOperator;
  80931. }());
  80932. /**
  80933. * We need this JSDoc comment for affecting ESDoc.
  80934. * @ignore
  80935. * @extends {Ignored}
  80936. */
  80937. var TakeSubscriber = (function (_super) {
  80938. __extends(TakeSubscriber, _super);
  80939. function TakeSubscriber(destination, total) {
  80940. _super.call(this, destination);
  80941. this.total = total;
  80942. this.count = 0;
  80943. }
  80944. TakeSubscriber.prototype._next = function (value) {
  80945. var total = this.total;
  80946. var count = ++this.count;
  80947. if (count <= total) {
  80948. this.destination.next(value);
  80949. if (count === total) {
  80950. this.destination.complete();
  80951. this.unsubscribe();
  80952. }
  80953. }
  80954. };
  80955. return TakeSubscriber;
  80956. }(Subscriber_1.Subscriber));
  80957. //# sourceMappingURL=take.js.map
  80958. /***/ }),
  80959. /* 287 */
  80960. /***/ (function(module, exports, __webpack_require__) {
  80961. "use strict";
  80962. var __extends = (this && this.__extends) || function (d, b) {
  80963. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  80964. function __() { this.constructor = d; }
  80965. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  80966. };
  80967. var Subscriber_1 = __webpack_require__(4);
  80968. /**
  80969. * Emits values emitted by the source Observable so long as each value satisfies
  80970. * the given `predicate`, and then completes as soon as this `predicate` is not
  80971. * satisfied.
  80972. *
  80973. * <span class="informal">Takes values from the source only while they pass the
  80974. * condition given. When the first value does not satisfy, it completes.</span>
  80975. *
  80976. * <img src="./img/takeWhile.png" width="100%">
  80977. *
  80978. * `takeWhile` subscribes and begins mirroring the source Observable. Each value
  80979. * emitted on the source is given to the `predicate` function which returns a
  80980. * boolean, representing a condition to be satisfied by the source values. The
  80981. * output Observable emits the source values until such time as the `predicate`
  80982. * returns false, at which point `takeWhile` stops mirroring the source
  80983. * Observable and completes the output Observable.
  80984. *
  80985. * @example <caption>Emit click events only while the clientX property is greater than 200</caption>
  80986. * var clicks = Rx.Observable.fromEvent(document, 'click');
  80987. * var result = clicks.takeWhile(ev => ev.clientX > 200);
  80988. * result.subscribe(x => console.log(x));
  80989. *
  80990. * @see {@link take}
  80991. * @see {@link takeLast}
  80992. * @see {@link takeUntil}
  80993. * @see {@link skip}
  80994. *
  80995. * @param {function(value: T, index: number): boolean} predicate A function that
  80996. * evaluates a value emitted by the source Observable and returns a boolean.
  80997. * Also takes the (zero-based) index as the second argument.
  80998. * @return {Observable<T>} An Observable that emits the values from the source
  80999. * Observable so long as each value satisfies the condition defined by the
  81000. * `predicate`, then completes.
  81001. * @method takeWhile
  81002. * @owner Observable
  81003. */
  81004. function takeWhile(predicate) {
  81005. return function (source) { return source.lift(new TakeWhileOperator(predicate)); };
  81006. }
  81007. exports.takeWhile = takeWhile;
  81008. var TakeWhileOperator = (function () {
  81009. function TakeWhileOperator(predicate) {
  81010. this.predicate = predicate;
  81011. }
  81012. TakeWhileOperator.prototype.call = function (subscriber, source) {
  81013. return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate));
  81014. };
  81015. return TakeWhileOperator;
  81016. }());
  81017. /**
  81018. * We need this JSDoc comment for affecting ESDoc.
  81019. * @ignore
  81020. * @extends {Ignored}
  81021. */
  81022. var TakeWhileSubscriber = (function (_super) {
  81023. __extends(TakeWhileSubscriber, _super);
  81024. function TakeWhileSubscriber(destination, predicate) {
  81025. _super.call(this, destination);
  81026. this.predicate = predicate;
  81027. this.index = 0;
  81028. }
  81029. TakeWhileSubscriber.prototype._next = function (value) {
  81030. var destination = this.destination;
  81031. var result;
  81032. try {
  81033. result = this.predicate(value, this.index++);
  81034. }
  81035. catch (err) {
  81036. destination.error(err);
  81037. return;
  81038. }
  81039. this.nextOrComplete(value, result);
  81040. };
  81041. TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
  81042. var destination = this.destination;
  81043. if (Boolean(predicateResult)) {
  81044. destination.next(value);
  81045. }
  81046. else {
  81047. destination.complete();
  81048. }
  81049. };
  81050. return TakeWhileSubscriber;
  81051. }(Subscriber_1.Subscriber));
  81052. //# sourceMappingURL=takeWhile.js.map
  81053. /***/ }),
  81054. /* 288 */
  81055. /***/ (function(module, exports, __webpack_require__) {
  81056. "use strict";
  81057. var __extends = (this && this.__extends) || function (d, b) {
  81058. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81059. function __() { this.constructor = d; }
  81060. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81061. };
  81062. var Subscriber_1 = __webpack_require__(4);
  81063. var async_1 = __webpack_require__(10);
  81064. var throttle_1 = __webpack_require__(80);
  81065. /**
  81066. * Emits a value from the source Observable, then ignores subsequent source
  81067. * values for `duration` milliseconds, then repeats this process.
  81068. *
  81069. * <span class="informal">Lets a value pass, then ignores source values for the
  81070. * next `duration` milliseconds.</span>
  81071. *
  81072. * <img src="./img/throttleTime.png" width="100%">
  81073. *
  81074. * `throttleTime` emits the source Observable values on the output Observable
  81075. * when its internal timer is disabled, and ignores source values when the timer
  81076. * is enabled. Initially, the timer is disabled. As soon as the first source
  81077. * value arrives, it is forwarded to the output Observable, and then the timer
  81078. * is enabled. After `duration` milliseconds (or the time unit determined
  81079. * internally by the optional `scheduler`) has passed, the timer is disabled,
  81080. * and this process repeats for the next source value. Optionally takes a
  81081. * {@link IScheduler} for managing timers.
  81082. *
  81083. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  81084. * var clicks = Rx.Observable.fromEvent(document, 'click');
  81085. * var result = clicks.throttleTime(1000);
  81086. * result.subscribe(x => console.log(x));
  81087. *
  81088. * @see {@link auditTime}
  81089. * @see {@link debounceTime}
  81090. * @see {@link delay}
  81091. * @see {@link sampleTime}
  81092. * @see {@link throttle}
  81093. *
  81094. * @param {number} duration Time to wait before emitting another value after
  81095. * emitting the last value, measured in milliseconds or the time unit determined
  81096. * internally by the optional `scheduler`.
  81097. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  81098. * managing the timers that handle the throttling.
  81099. * @return {Observable<T>} An Observable that performs the throttle operation to
  81100. * limit the rate of emissions from the source.
  81101. * @method throttleTime
  81102. * @owner Observable
  81103. */
  81104. function throttleTime(duration, scheduler, config) {
  81105. if (scheduler === void 0) { scheduler = async_1.async; }
  81106. if (config === void 0) { config = throttle_1.defaultThrottleConfig; }
  81107. return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
  81108. }
  81109. exports.throttleTime = throttleTime;
  81110. var ThrottleTimeOperator = (function () {
  81111. function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
  81112. this.duration = duration;
  81113. this.scheduler = scheduler;
  81114. this.leading = leading;
  81115. this.trailing = trailing;
  81116. }
  81117. ThrottleTimeOperator.prototype.call = function (subscriber, source) {
  81118. return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
  81119. };
  81120. return ThrottleTimeOperator;
  81121. }());
  81122. /**
  81123. * We need this JSDoc comment for affecting ESDoc.
  81124. * @ignore
  81125. * @extends {Ignored}
  81126. */
  81127. var ThrottleTimeSubscriber = (function (_super) {
  81128. __extends(ThrottleTimeSubscriber, _super);
  81129. function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
  81130. _super.call(this, destination);
  81131. this.duration = duration;
  81132. this.scheduler = scheduler;
  81133. this.leading = leading;
  81134. this.trailing = trailing;
  81135. this._hasTrailingValue = false;
  81136. this._trailingValue = null;
  81137. }
  81138. ThrottleTimeSubscriber.prototype._next = function (value) {
  81139. if (this.throttled) {
  81140. if (this.trailing) {
  81141. this._trailingValue = value;
  81142. this._hasTrailingValue = true;
  81143. }
  81144. }
  81145. else {
  81146. this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
  81147. if (this.leading) {
  81148. this.destination.next(value);
  81149. }
  81150. }
  81151. };
  81152. ThrottleTimeSubscriber.prototype.clearThrottle = function () {
  81153. var throttled = this.throttled;
  81154. if (throttled) {
  81155. if (this.trailing && this._hasTrailingValue) {
  81156. this.destination.next(this._trailingValue);
  81157. this._trailingValue = null;
  81158. this._hasTrailingValue = false;
  81159. }
  81160. throttled.unsubscribe();
  81161. this.remove(throttled);
  81162. this.throttled = null;
  81163. }
  81164. };
  81165. return ThrottleTimeSubscriber;
  81166. }(Subscriber_1.Subscriber));
  81167. function dispatchNext(arg) {
  81168. var subscriber = arg.subscriber;
  81169. subscriber.clearThrottle();
  81170. }
  81171. //# sourceMappingURL=throttleTime.js.map
  81172. /***/ }),
  81173. /* 289 */
  81174. /***/ (function(module, exports, __webpack_require__) {
  81175. "use strict";
  81176. var async_1 = __webpack_require__(10);
  81177. var timeInterval_1 = __webpack_require__(290);
  81178. exports.TimeInterval = timeInterval_1.TimeInterval;
  81179. /**
  81180. * @param scheduler
  81181. * @return {Observable<TimeInterval<any>>|WebSocketSubject<T>|Observable<T>}
  81182. * @method timeInterval
  81183. * @owner Observable
  81184. */
  81185. function timeInterval(scheduler) {
  81186. if (scheduler === void 0) { scheduler = async_1.async; }
  81187. return timeInterval_1.timeInterval(scheduler)(this);
  81188. }
  81189. exports.timeInterval = timeInterval;
  81190. //# sourceMappingURL=timeInterval.js.map
  81191. /***/ }),
  81192. /* 290 */
  81193. /***/ (function(module, exports, __webpack_require__) {
  81194. "use strict";
  81195. var __extends = (this && this.__extends) || function (d, b) {
  81196. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81197. function __() { this.constructor = d; }
  81198. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81199. };
  81200. var Subscriber_1 = __webpack_require__(4);
  81201. var async_1 = __webpack_require__(10);
  81202. function timeInterval(scheduler) {
  81203. if (scheduler === void 0) { scheduler = async_1.async; }
  81204. return function (source) { return source.lift(new TimeIntervalOperator(scheduler)); };
  81205. }
  81206. exports.timeInterval = timeInterval;
  81207. var TimeInterval = (function () {
  81208. function TimeInterval(value, interval) {
  81209. this.value = value;
  81210. this.interval = interval;
  81211. }
  81212. return TimeInterval;
  81213. }());
  81214. exports.TimeInterval = TimeInterval;
  81215. ;
  81216. var TimeIntervalOperator = (function () {
  81217. function TimeIntervalOperator(scheduler) {
  81218. this.scheduler = scheduler;
  81219. }
  81220. TimeIntervalOperator.prototype.call = function (observer, source) {
  81221. return source.subscribe(new TimeIntervalSubscriber(observer, this.scheduler));
  81222. };
  81223. return TimeIntervalOperator;
  81224. }());
  81225. /**
  81226. * We need this JSDoc comment for affecting ESDoc.
  81227. * @ignore
  81228. * @extends {Ignored}
  81229. */
  81230. var TimeIntervalSubscriber = (function (_super) {
  81231. __extends(TimeIntervalSubscriber, _super);
  81232. function TimeIntervalSubscriber(destination, scheduler) {
  81233. _super.call(this, destination);
  81234. this.scheduler = scheduler;
  81235. this.lastTime = 0;
  81236. this.lastTime = scheduler.now();
  81237. }
  81238. TimeIntervalSubscriber.prototype._next = function (value) {
  81239. var now = this.scheduler.now();
  81240. var span = now - this.lastTime;
  81241. this.lastTime = now;
  81242. this.destination.next(new TimeInterval(value, span));
  81243. };
  81244. return TimeIntervalSubscriber;
  81245. }(Subscriber_1.Subscriber));
  81246. //# sourceMappingURL=timeInterval.js.map
  81247. /***/ }),
  81248. /* 291 */
  81249. /***/ (function(module, exports, __webpack_require__) {
  81250. "use strict";
  81251. var __extends = (this && this.__extends) || function (d, b) {
  81252. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81253. function __() { this.constructor = d; }
  81254. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81255. };
  81256. var async_1 = __webpack_require__(10);
  81257. var isDate_1 = __webpack_require__(76);
  81258. var Subscriber_1 = __webpack_require__(4);
  81259. var TimeoutError_1 = __webpack_require__(292);
  81260. /**
  81261. *
  81262. * Errors if Observable does not emit a value in given time span.
  81263. *
  81264. * <span class="informal">Timeouts on Observable that doesn't emit values fast enough.</span>
  81265. *
  81266. * <img src="./img/timeout.png" width="100%">
  81267. *
  81268. * `timeout` operator accepts as an argument either a number or a Date.
  81269. *
  81270. * If number was provided, it returns an Observable that behaves like a source
  81271. * Observable, unless there is a period of time where there is no value emitted.
  81272. * So if you provide `100` as argument and first value comes after 50ms from
  81273. * the moment of subscription, this value will be simply re-emitted by the resulting
  81274. * Observable. If however after that 100ms passes without a second value being emitted,
  81275. * stream will end with an error and source Observable will be unsubscribed.
  81276. * These checks are performed throughout whole lifecycle of Observable - from the moment
  81277. * it was subscribed to, until it completes or errors itself. Thus every value must be
  81278. * emitted within specified period since previous value.
  81279. *
  81280. * If provided argument was Date, returned Observable behaves differently. It throws
  81281. * if Observable did not complete before provided Date. This means that periods between
  81282. * emission of particular values do not matter in this case. If Observable did not complete
  81283. * before provided Date, source Observable will be unsubscribed. Other than that, resulting
  81284. * stream behaves just as source Observable.
  81285. *
  81286. * `timeout` accepts also a Scheduler as a second parameter. It is used to schedule moment (or moments)
  81287. * when returned Observable will check if source stream emitted value or completed.
  81288. *
  81289. * @example <caption>Check if ticks are emitted within certain timespan</caption>
  81290. * const seconds = Rx.Observable.interval(1000);
  81291. *
  81292. * seconds.timeout(1100) // Let's use bigger timespan to be safe,
  81293. * // since `interval` might fire a bit later then scheduled.
  81294. * .subscribe(
  81295. * value => console.log(value), // Will emit numbers just as regular `interval` would.
  81296. * err => console.log(err) // Will never be called.
  81297. * );
  81298. *
  81299. * seconds.timeout(900).subscribe(
  81300. * value => console.log(value), // Will never be called.
  81301. * err => console.log(err) // Will emit error before even first value is emitted,
  81302. * // since it did not arrive within 900ms period.
  81303. * );
  81304. *
  81305. * @example <caption>Use Date to check if Observable completed</caption>
  81306. * const seconds = Rx.Observable.interval(1000);
  81307. *
  81308. * seconds.timeout(new Date("December 17, 2020 03:24:00"))
  81309. * .subscribe(
  81310. * value => console.log(value), // Will emit values as regular `interval` would
  81311. * // until December 17, 2020 at 03:24:00.
  81312. * err => console.log(err) // On December 17, 2020 at 03:24:00 it will emit an error,
  81313. * // since Observable did not complete by then.
  81314. * );
  81315. *
  81316. * @see {@link timeoutWith}
  81317. *
  81318. * @param {number|Date} due Number specifying period within which Observable must emit values
  81319. * or Date specifying before when Observable should complete
  81320. * @param {Scheduler} [scheduler] Scheduler controlling when timeout checks occur.
  81321. * @return {Observable<T>} Observable that mirrors behaviour of source, unless timeout checks fail.
  81322. * @method timeout
  81323. * @owner Observable
  81324. */
  81325. function timeout(due, scheduler) {
  81326. if (scheduler === void 0) { scheduler = async_1.async; }
  81327. var absoluteTimeout = isDate_1.isDate(due);
  81328. var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
  81329. return function (source) { return source.lift(new TimeoutOperator(waitFor, absoluteTimeout, scheduler, new TimeoutError_1.TimeoutError())); };
  81330. }
  81331. exports.timeout = timeout;
  81332. var TimeoutOperator = (function () {
  81333. function TimeoutOperator(waitFor, absoluteTimeout, scheduler, errorInstance) {
  81334. this.waitFor = waitFor;
  81335. this.absoluteTimeout = absoluteTimeout;
  81336. this.scheduler = scheduler;
  81337. this.errorInstance = errorInstance;
  81338. }
  81339. TimeoutOperator.prototype.call = function (subscriber, source) {
  81340. return source.subscribe(new TimeoutSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.scheduler, this.errorInstance));
  81341. };
  81342. return TimeoutOperator;
  81343. }());
  81344. /**
  81345. * We need this JSDoc comment for affecting ESDoc.
  81346. * @ignore
  81347. * @extends {Ignored}
  81348. */
  81349. var TimeoutSubscriber = (function (_super) {
  81350. __extends(TimeoutSubscriber, _super);
  81351. function TimeoutSubscriber(destination, absoluteTimeout, waitFor, scheduler, errorInstance) {
  81352. _super.call(this, destination);
  81353. this.absoluteTimeout = absoluteTimeout;
  81354. this.waitFor = waitFor;
  81355. this.scheduler = scheduler;
  81356. this.errorInstance = errorInstance;
  81357. this.action = null;
  81358. this.scheduleTimeout();
  81359. }
  81360. TimeoutSubscriber.dispatchTimeout = function (subscriber) {
  81361. subscriber.error(subscriber.errorInstance);
  81362. };
  81363. TimeoutSubscriber.prototype.scheduleTimeout = function () {
  81364. var action = this.action;
  81365. if (action) {
  81366. // Recycle the action if we've already scheduled one. All the production
  81367. // Scheduler Actions mutate their state/delay time and return themeselves.
  81368. // VirtualActions are immutable, so they create and return a clone. In this
  81369. // case, we need to set the action reference to the most recent VirtualAction,
  81370. // to ensure that's the one we clone from next time.
  81371. this.action = action.schedule(this, this.waitFor);
  81372. }
  81373. else {
  81374. this.add(this.action = this.scheduler.schedule(TimeoutSubscriber.dispatchTimeout, this.waitFor, this));
  81375. }
  81376. };
  81377. TimeoutSubscriber.prototype._next = function (value) {
  81378. if (!this.absoluteTimeout) {
  81379. this.scheduleTimeout();
  81380. }
  81381. _super.prototype._next.call(this, value);
  81382. };
  81383. /** @deprecated internal use only */ TimeoutSubscriber.prototype._unsubscribe = function () {
  81384. this.action = null;
  81385. this.scheduler = null;
  81386. this.errorInstance = null;
  81387. };
  81388. return TimeoutSubscriber;
  81389. }(Subscriber_1.Subscriber));
  81390. //# sourceMappingURL=timeout.js.map
  81391. /***/ }),
  81392. /* 292 */
  81393. /***/ (function(module, exports, __webpack_require__) {
  81394. "use strict";
  81395. var __extends = (this && this.__extends) || function (d, b) {
  81396. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81397. function __() { this.constructor = d; }
  81398. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81399. };
  81400. /**
  81401. * An error thrown when duetime elapses.
  81402. *
  81403. * @see {@link timeout}
  81404. *
  81405. * @class TimeoutError
  81406. */
  81407. var TimeoutError = (function (_super) {
  81408. __extends(TimeoutError, _super);
  81409. function TimeoutError() {
  81410. var err = _super.call(this, 'Timeout has occurred');
  81411. this.name = err.name = 'TimeoutError';
  81412. this.stack = err.stack;
  81413. this.message = err.message;
  81414. }
  81415. return TimeoutError;
  81416. }(Error));
  81417. exports.TimeoutError = TimeoutError;
  81418. //# sourceMappingURL=TimeoutError.js.map
  81419. /***/ }),
  81420. /* 293 */
  81421. /***/ (function(module, exports, __webpack_require__) {
  81422. "use strict";
  81423. var __extends = (this && this.__extends) || function (d, b) {
  81424. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81425. function __() { this.constructor = d; }
  81426. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81427. };
  81428. var async_1 = __webpack_require__(10);
  81429. var isDate_1 = __webpack_require__(76);
  81430. var OuterSubscriber_1 = __webpack_require__(6);
  81431. var subscribeToResult_1 = __webpack_require__(5);
  81432. /* tslint:enable:max-line-length */
  81433. /**
  81434. *
  81435. * Errors if Observable does not emit a value in given time span, in case of which
  81436. * subscribes to the second Observable.
  81437. *
  81438. * <span class="informal">It's a version of `timeout` operator that let's you specify fallback Observable.</span>
  81439. *
  81440. * <img src="./img/timeoutWith.png" width="100%">
  81441. *
  81442. * `timeoutWith` is a variation of `timeout` operator. It behaves exactly the same,
  81443. * still accepting as a first argument either a number or a Date, which control - respectively -
  81444. * when values of source Observable should be emitted or when it should complete.
  81445. *
  81446. * The only difference is that it accepts a second, required parameter. This parameter
  81447. * should be an Observable which will be subscribed when source Observable fails any timeout check.
  81448. * So whenever regular `timeout` would emit an error, `timeoutWith` will instead start re-emitting
  81449. * values from second Observable. Note that this fallback Observable is not checked for timeouts
  81450. * itself, so it can emit values and complete at arbitrary points in time. From the moment of a second
  81451. * subscription, Observable returned from `timeoutWith` simply mirrors fallback stream. When that
  81452. * stream completes, it completes as well.
  81453. *
  81454. * Scheduler, which in case of `timeout` is provided as as second argument, can be still provided
  81455. * here - as a third, optional parameter. It still is used to schedule timeout checks and -
  81456. * as a consequence - when second Observable will be subscribed, since subscription happens
  81457. * immediately after failing check.
  81458. *
  81459. * @example <caption>Add fallback observable</caption>
  81460. * const seconds = Rx.Observable.interval(1000);
  81461. * const minutes = Rx.Observable.interval(60 * 1000);
  81462. *
  81463. * seconds.timeoutWith(900, minutes)
  81464. * .subscribe(
  81465. * value => console.log(value), // After 900ms, will start emitting `minutes`,
  81466. * // since first value of `seconds` will not arrive fast enough.
  81467. * err => console.log(err) // Would be called after 900ms in case of `timeout`,
  81468. * // but here will never be called.
  81469. * );
  81470. *
  81471. * @param {number|Date} due Number specifying period within which Observable must emit values
  81472. * or Date specifying before when Observable should complete
  81473. * @param {Observable<T>} withObservable Observable which will be subscribed if source fails timeout check.
  81474. * @param {Scheduler} [scheduler] Scheduler controlling when timeout checks occur.
  81475. * @return {Observable<T>} Observable that mirrors behaviour of source or, when timeout check fails, of an Observable
  81476. * passed as a second parameter.
  81477. * @method timeoutWith
  81478. * @owner Observable
  81479. */
  81480. function timeoutWith(due, withObservable, scheduler) {
  81481. if (scheduler === void 0) { scheduler = async_1.async; }
  81482. return function (source) {
  81483. var absoluteTimeout = isDate_1.isDate(due);
  81484. var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
  81485. return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
  81486. };
  81487. }
  81488. exports.timeoutWith = timeoutWith;
  81489. var TimeoutWithOperator = (function () {
  81490. function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
  81491. this.waitFor = waitFor;
  81492. this.absoluteTimeout = absoluteTimeout;
  81493. this.withObservable = withObservable;
  81494. this.scheduler = scheduler;
  81495. }
  81496. TimeoutWithOperator.prototype.call = function (subscriber, source) {
  81497. return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
  81498. };
  81499. return TimeoutWithOperator;
  81500. }());
  81501. /**
  81502. * We need this JSDoc comment for affecting ESDoc.
  81503. * @ignore
  81504. * @extends {Ignored}
  81505. */
  81506. var TimeoutWithSubscriber = (function (_super) {
  81507. __extends(TimeoutWithSubscriber, _super);
  81508. function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
  81509. _super.call(this, destination);
  81510. this.absoluteTimeout = absoluteTimeout;
  81511. this.waitFor = waitFor;
  81512. this.withObservable = withObservable;
  81513. this.scheduler = scheduler;
  81514. this.action = null;
  81515. this.scheduleTimeout();
  81516. }
  81517. TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
  81518. var withObservable = subscriber.withObservable;
  81519. subscriber._unsubscribeAndRecycle();
  81520. subscriber.add(subscribeToResult_1.subscribeToResult(subscriber, withObservable));
  81521. };
  81522. TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
  81523. var action = this.action;
  81524. if (action) {
  81525. // Recycle the action if we've already scheduled one. All the production
  81526. // Scheduler Actions mutate their state/delay time and return themeselves.
  81527. // VirtualActions are immutable, so they create and return a clone. In this
  81528. // case, we need to set the action reference to the most recent VirtualAction,
  81529. // to ensure that's the one we clone from next time.
  81530. this.action = action.schedule(this, this.waitFor);
  81531. }
  81532. else {
  81533. this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
  81534. }
  81535. };
  81536. TimeoutWithSubscriber.prototype._next = function (value) {
  81537. if (!this.absoluteTimeout) {
  81538. this.scheduleTimeout();
  81539. }
  81540. _super.prototype._next.call(this, value);
  81541. };
  81542. /** @deprecated internal use only */ TimeoutWithSubscriber.prototype._unsubscribe = function () {
  81543. this.action = null;
  81544. this.scheduler = null;
  81545. this.withObservable = null;
  81546. };
  81547. return TimeoutWithSubscriber;
  81548. }(OuterSubscriber_1.OuterSubscriber));
  81549. //# sourceMappingURL=timeoutWith.js.map
  81550. /***/ }),
  81551. /* 294 */
  81552. /***/ (function(module, exports, __webpack_require__) {
  81553. "use strict";
  81554. var reduce_1 = __webpack_require__(60);
  81555. function toArrayReducer(arr, item, index) {
  81556. if (index === 0) {
  81557. return [item];
  81558. }
  81559. arr.push(item);
  81560. return arr;
  81561. }
  81562. function toArray() {
  81563. return reduce_1.reduce(toArrayReducer, []);
  81564. }
  81565. exports.toArray = toArray;
  81566. //# sourceMappingURL=toArray.js.map
  81567. /***/ }),
  81568. /* 295 */
  81569. /***/ (function(module, exports, __webpack_require__) {
  81570. "use strict";
  81571. var __extends = (this && this.__extends) || function (d, b) {
  81572. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81573. function __() { this.constructor = d; }
  81574. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81575. };
  81576. var Subject_1 = __webpack_require__(12);
  81577. var OuterSubscriber_1 = __webpack_require__(6);
  81578. var subscribeToResult_1 = __webpack_require__(5);
  81579. /**
  81580. * Branch out the source Observable values as a nested Observable whenever
  81581. * `windowBoundaries` emits.
  81582. *
  81583. * <span class="informal">It's like {@link buffer}, but emits a nested Observable
  81584. * instead of an array.</span>
  81585. *
  81586. * <img src="./img/window.png" width="100%">
  81587. *
  81588. * Returns an Observable that emits windows of items it collects from the source
  81589. * Observable. The output Observable emits connected, non-overlapping
  81590. * windows. It emits the current window and opens a new one whenever the
  81591. * Observable `windowBoundaries` emits an item. Because each window is an
  81592. * Observable, the output is a higher-order Observable.
  81593. *
  81594. * @example <caption>In every window of 1 second each, emit at most 2 click events</caption>
  81595. * var clicks = Rx.Observable.fromEvent(document, 'click');
  81596. * var interval = Rx.Observable.interval(1000);
  81597. * var result = clicks.window(interval)
  81598. * .map(win => win.take(2)) // each window has at most 2 emissions
  81599. * .mergeAll(); // flatten the Observable-of-Observables
  81600. * result.subscribe(x => console.log(x));
  81601. *
  81602. * @see {@link windowCount}
  81603. * @see {@link windowTime}
  81604. * @see {@link windowToggle}
  81605. * @see {@link windowWhen}
  81606. * @see {@link buffer}
  81607. *
  81608. * @param {Observable<any>} windowBoundaries An Observable that completes the
  81609. * previous window and starts a new window.
  81610. * @return {Observable<Observable<T>>} An Observable of windows, which are
  81611. * Observables emitting values of the source Observable.
  81612. * @method window
  81613. * @owner Observable
  81614. */
  81615. function window(windowBoundaries) {
  81616. return function windowOperatorFunction(source) {
  81617. return source.lift(new WindowOperator(windowBoundaries));
  81618. };
  81619. }
  81620. exports.window = window;
  81621. var WindowOperator = (function () {
  81622. function WindowOperator(windowBoundaries) {
  81623. this.windowBoundaries = windowBoundaries;
  81624. }
  81625. WindowOperator.prototype.call = function (subscriber, source) {
  81626. var windowSubscriber = new WindowSubscriber(subscriber);
  81627. var sourceSubscription = source.subscribe(windowSubscriber);
  81628. if (!sourceSubscription.closed) {
  81629. windowSubscriber.add(subscribeToResult_1.subscribeToResult(windowSubscriber, this.windowBoundaries));
  81630. }
  81631. return sourceSubscription;
  81632. };
  81633. return WindowOperator;
  81634. }());
  81635. /**
  81636. * We need this JSDoc comment for affecting ESDoc.
  81637. * @ignore
  81638. * @extends {Ignored}
  81639. */
  81640. var WindowSubscriber = (function (_super) {
  81641. __extends(WindowSubscriber, _super);
  81642. function WindowSubscriber(destination) {
  81643. _super.call(this, destination);
  81644. this.window = new Subject_1.Subject();
  81645. destination.next(this.window);
  81646. }
  81647. WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  81648. this.openWindow();
  81649. };
  81650. WindowSubscriber.prototype.notifyError = function (error, innerSub) {
  81651. this._error(error);
  81652. };
  81653. WindowSubscriber.prototype.notifyComplete = function (innerSub) {
  81654. this._complete();
  81655. };
  81656. WindowSubscriber.prototype._next = function (value) {
  81657. this.window.next(value);
  81658. };
  81659. WindowSubscriber.prototype._error = function (err) {
  81660. this.window.error(err);
  81661. this.destination.error(err);
  81662. };
  81663. WindowSubscriber.prototype._complete = function () {
  81664. this.window.complete();
  81665. this.destination.complete();
  81666. };
  81667. /** @deprecated internal use only */ WindowSubscriber.prototype._unsubscribe = function () {
  81668. this.window = null;
  81669. };
  81670. WindowSubscriber.prototype.openWindow = function () {
  81671. var prevWindow = this.window;
  81672. if (prevWindow) {
  81673. prevWindow.complete();
  81674. }
  81675. var destination = this.destination;
  81676. var newWindow = this.window = new Subject_1.Subject();
  81677. destination.next(newWindow);
  81678. };
  81679. return WindowSubscriber;
  81680. }(OuterSubscriber_1.OuterSubscriber));
  81681. //# sourceMappingURL=window.js.map
  81682. /***/ }),
  81683. /* 296 */
  81684. /***/ (function(module, exports, __webpack_require__) {
  81685. "use strict";
  81686. var __extends = (this && this.__extends) || function (d, b) {
  81687. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81688. function __() { this.constructor = d; }
  81689. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81690. };
  81691. var Subscriber_1 = __webpack_require__(4);
  81692. var Subject_1 = __webpack_require__(12);
  81693. /**
  81694. * Branch out the source Observable values as a nested Observable with each
  81695. * nested Observable emitting at most `windowSize` values.
  81696. *
  81697. * <span class="informal">It's like {@link bufferCount}, but emits a nested
  81698. * Observable instead of an array.</span>
  81699. *
  81700. * <img src="./img/windowCount.png" width="100%">
  81701. *
  81702. * Returns an Observable that emits windows of items it collects from the source
  81703. * Observable. The output Observable emits windows every `startWindowEvery`
  81704. * items, each containing no more than `windowSize` items. When the source
  81705. * Observable completes or encounters an error, the output Observable emits
  81706. * the current window and propagates the notification from the source
  81707. * Observable. If `startWindowEvery` is not provided, then new windows are
  81708. * started immediately at the start of the source and when each window completes
  81709. * with size `windowSize`.
  81710. *
  81711. * @example <caption>Ignore every 3rd click event, starting from the first one</caption>
  81712. * var clicks = Rx.Observable.fromEvent(document, 'click');
  81713. * var result = clicks.windowCount(3)
  81714. * .map(win => win.skip(1)) // skip first of every 3 clicks
  81715. * .mergeAll(); // flatten the Observable-of-Observables
  81716. * result.subscribe(x => console.log(x));
  81717. *
  81718. * @example <caption>Ignore every 3rd click event, starting from the third one</caption>
  81719. * var clicks = Rx.Observable.fromEvent(document, 'click');
  81720. * var result = clicks.windowCount(2, 3)
  81721. * .mergeAll(); // flatten the Observable-of-Observables
  81722. * result.subscribe(x => console.log(x));
  81723. *
  81724. * @see {@link window}
  81725. * @see {@link windowTime}
  81726. * @see {@link windowToggle}
  81727. * @see {@link windowWhen}
  81728. * @see {@link bufferCount}
  81729. *
  81730. * @param {number} windowSize The maximum number of values emitted by each
  81731. * window.
  81732. * @param {number} [startWindowEvery] Interval at which to start a new window.
  81733. * For example if `startWindowEvery` is `2`, then a new window will be started
  81734. * on every other value from the source. A new window is started at the
  81735. * beginning of the source by default.
  81736. * @return {Observable<Observable<T>>} An Observable of windows, which in turn
  81737. * are Observable of values.
  81738. * @method windowCount
  81739. * @owner Observable
  81740. */
  81741. function windowCount(windowSize, startWindowEvery) {
  81742. if (startWindowEvery === void 0) { startWindowEvery = 0; }
  81743. return function windowCountOperatorFunction(source) {
  81744. return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
  81745. };
  81746. }
  81747. exports.windowCount = windowCount;
  81748. var WindowCountOperator = (function () {
  81749. function WindowCountOperator(windowSize, startWindowEvery) {
  81750. this.windowSize = windowSize;
  81751. this.startWindowEvery = startWindowEvery;
  81752. }
  81753. WindowCountOperator.prototype.call = function (subscriber, source) {
  81754. return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
  81755. };
  81756. return WindowCountOperator;
  81757. }());
  81758. /**
  81759. * We need this JSDoc comment for affecting ESDoc.
  81760. * @ignore
  81761. * @extends {Ignored}
  81762. */
  81763. var WindowCountSubscriber = (function (_super) {
  81764. __extends(WindowCountSubscriber, _super);
  81765. function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
  81766. _super.call(this, destination);
  81767. this.destination = destination;
  81768. this.windowSize = windowSize;
  81769. this.startWindowEvery = startWindowEvery;
  81770. this.windows = [new Subject_1.Subject()];
  81771. this.count = 0;
  81772. destination.next(this.windows[0]);
  81773. }
  81774. WindowCountSubscriber.prototype._next = function (value) {
  81775. var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
  81776. var destination = this.destination;
  81777. var windowSize = this.windowSize;
  81778. var windows = this.windows;
  81779. var len = windows.length;
  81780. for (var i = 0; i < len && !this.closed; i++) {
  81781. windows[i].next(value);
  81782. }
  81783. var c = this.count - windowSize + 1;
  81784. if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
  81785. windows.shift().complete();
  81786. }
  81787. if (++this.count % startWindowEvery === 0 && !this.closed) {
  81788. var window_1 = new Subject_1.Subject();
  81789. windows.push(window_1);
  81790. destination.next(window_1);
  81791. }
  81792. };
  81793. WindowCountSubscriber.prototype._error = function (err) {
  81794. var windows = this.windows;
  81795. if (windows) {
  81796. while (windows.length > 0 && !this.closed) {
  81797. windows.shift().error(err);
  81798. }
  81799. }
  81800. this.destination.error(err);
  81801. };
  81802. WindowCountSubscriber.prototype._complete = function () {
  81803. var windows = this.windows;
  81804. if (windows) {
  81805. while (windows.length > 0 && !this.closed) {
  81806. windows.shift().complete();
  81807. }
  81808. }
  81809. this.destination.complete();
  81810. };
  81811. /** @deprecated internal use only */ WindowCountSubscriber.prototype._unsubscribe = function () {
  81812. this.count = 0;
  81813. this.windows = null;
  81814. };
  81815. return WindowCountSubscriber;
  81816. }(Subscriber_1.Subscriber));
  81817. //# sourceMappingURL=windowCount.js.map
  81818. /***/ }),
  81819. /* 297 */
  81820. /***/ (function(module, exports, __webpack_require__) {
  81821. "use strict";
  81822. var __extends = (this && this.__extends) || function (d, b) {
  81823. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81824. function __() { this.constructor = d; }
  81825. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81826. };
  81827. var Subject_1 = __webpack_require__(12);
  81828. var async_1 = __webpack_require__(10);
  81829. var Subscriber_1 = __webpack_require__(4);
  81830. var isNumeric_1 = __webpack_require__(56);
  81831. var isScheduler_1 = __webpack_require__(22);
  81832. function windowTime(windowTimeSpan) {
  81833. var scheduler = async_1.async;
  81834. var windowCreationInterval = null;
  81835. var maxWindowSize = Number.POSITIVE_INFINITY;
  81836. if (isScheduler_1.isScheduler(arguments[3])) {
  81837. scheduler = arguments[3];
  81838. }
  81839. if (isScheduler_1.isScheduler(arguments[2])) {
  81840. scheduler = arguments[2];
  81841. }
  81842. else if (isNumeric_1.isNumeric(arguments[2])) {
  81843. maxWindowSize = arguments[2];
  81844. }
  81845. if (isScheduler_1.isScheduler(arguments[1])) {
  81846. scheduler = arguments[1];
  81847. }
  81848. else if (isNumeric_1.isNumeric(arguments[1])) {
  81849. windowCreationInterval = arguments[1];
  81850. }
  81851. return function windowTimeOperatorFunction(source) {
  81852. return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
  81853. };
  81854. }
  81855. exports.windowTime = windowTime;
  81856. var WindowTimeOperator = (function () {
  81857. function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
  81858. this.windowTimeSpan = windowTimeSpan;
  81859. this.windowCreationInterval = windowCreationInterval;
  81860. this.maxWindowSize = maxWindowSize;
  81861. this.scheduler = scheduler;
  81862. }
  81863. WindowTimeOperator.prototype.call = function (subscriber, source) {
  81864. return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
  81865. };
  81866. return WindowTimeOperator;
  81867. }());
  81868. var CountedSubject = (function (_super) {
  81869. __extends(CountedSubject, _super);
  81870. function CountedSubject() {
  81871. _super.apply(this, arguments);
  81872. this._numberOfNextedValues = 0;
  81873. }
  81874. CountedSubject.prototype.next = function (value) {
  81875. this._numberOfNextedValues++;
  81876. _super.prototype.next.call(this, value);
  81877. };
  81878. Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
  81879. get: function () {
  81880. return this._numberOfNextedValues;
  81881. },
  81882. enumerable: true,
  81883. configurable: true
  81884. });
  81885. return CountedSubject;
  81886. }(Subject_1.Subject));
  81887. /**
  81888. * We need this JSDoc comment for affecting ESDoc.
  81889. * @ignore
  81890. * @extends {Ignored}
  81891. */
  81892. var WindowTimeSubscriber = (function (_super) {
  81893. __extends(WindowTimeSubscriber, _super);
  81894. function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
  81895. _super.call(this, destination);
  81896. this.destination = destination;
  81897. this.windowTimeSpan = windowTimeSpan;
  81898. this.windowCreationInterval = windowCreationInterval;
  81899. this.maxWindowSize = maxWindowSize;
  81900. this.scheduler = scheduler;
  81901. this.windows = [];
  81902. var window = this.openWindow();
  81903. if (windowCreationInterval !== null && windowCreationInterval >= 0) {
  81904. var closeState = { subscriber: this, window: window, context: null };
  81905. var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: this, scheduler: scheduler };
  81906. this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
  81907. this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
  81908. }
  81909. else {
  81910. var timeSpanOnlyState = { subscriber: this, window: window, windowTimeSpan: windowTimeSpan };
  81911. this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
  81912. }
  81913. }
  81914. WindowTimeSubscriber.prototype._next = function (value) {
  81915. var windows = this.windows;
  81916. var len = windows.length;
  81917. for (var i = 0; i < len; i++) {
  81918. var window_1 = windows[i];
  81919. if (!window_1.closed) {
  81920. window_1.next(value);
  81921. if (window_1.numberOfNextedValues >= this.maxWindowSize) {
  81922. this.closeWindow(window_1);
  81923. }
  81924. }
  81925. }
  81926. };
  81927. WindowTimeSubscriber.prototype._error = function (err) {
  81928. var windows = this.windows;
  81929. while (windows.length > 0) {
  81930. windows.shift().error(err);
  81931. }
  81932. this.destination.error(err);
  81933. };
  81934. WindowTimeSubscriber.prototype._complete = function () {
  81935. var windows = this.windows;
  81936. while (windows.length > 0) {
  81937. var window_2 = windows.shift();
  81938. if (!window_2.closed) {
  81939. window_2.complete();
  81940. }
  81941. }
  81942. this.destination.complete();
  81943. };
  81944. WindowTimeSubscriber.prototype.openWindow = function () {
  81945. var window = new CountedSubject();
  81946. this.windows.push(window);
  81947. var destination = this.destination;
  81948. destination.next(window);
  81949. return window;
  81950. };
  81951. WindowTimeSubscriber.prototype.closeWindow = function (window) {
  81952. window.complete();
  81953. var windows = this.windows;
  81954. windows.splice(windows.indexOf(window), 1);
  81955. };
  81956. return WindowTimeSubscriber;
  81957. }(Subscriber_1.Subscriber));
  81958. function dispatchWindowTimeSpanOnly(state) {
  81959. var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
  81960. if (window) {
  81961. subscriber.closeWindow(window);
  81962. }
  81963. state.window = subscriber.openWindow();
  81964. this.schedule(state, windowTimeSpan);
  81965. }
  81966. function dispatchWindowCreation(state) {
  81967. var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
  81968. var window = subscriber.openWindow();
  81969. var action = this;
  81970. var context = { action: action, subscription: null };
  81971. var timeSpanState = { subscriber: subscriber, window: window, context: context };
  81972. context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
  81973. action.add(context.subscription);
  81974. action.schedule(state, windowCreationInterval);
  81975. }
  81976. function dispatchWindowClose(state) {
  81977. var subscriber = state.subscriber, window = state.window, context = state.context;
  81978. if (context && context.action && context.subscription) {
  81979. context.action.remove(context.subscription);
  81980. }
  81981. subscriber.closeWindow(window);
  81982. }
  81983. //# sourceMappingURL=windowTime.js.map
  81984. /***/ }),
  81985. /* 298 */
  81986. /***/ (function(module, exports, __webpack_require__) {
  81987. "use strict";
  81988. var __extends = (this && this.__extends) || function (d, b) {
  81989. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  81990. function __() { this.constructor = d; }
  81991. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  81992. };
  81993. var Subject_1 = __webpack_require__(12);
  81994. var Subscription_1 = __webpack_require__(14);
  81995. var tryCatch_1 = __webpack_require__(17);
  81996. var errorObject_1 = __webpack_require__(16);
  81997. var OuterSubscriber_1 = __webpack_require__(6);
  81998. var subscribeToResult_1 = __webpack_require__(5);
  81999. /**
  82000. * Branch out the source Observable values as a nested Observable starting from
  82001. * an emission from `openings` and ending when the output of `closingSelector`
  82002. * emits.
  82003. *
  82004. * <span class="informal">It's like {@link bufferToggle}, but emits a nested
  82005. * Observable instead of an array.</span>
  82006. *
  82007. * <img src="./img/windowToggle.png" width="100%">
  82008. *
  82009. * Returns an Observable that emits windows of items it collects from the source
  82010. * Observable. The output Observable emits windows that contain those items
  82011. * emitted by the source Observable between the time when the `openings`
  82012. * Observable emits an item and when the Observable returned by
  82013. * `closingSelector` emits an item.
  82014. *
  82015. * @example <caption>Every other second, emit the click events from the next 500ms</caption>
  82016. * var clicks = Rx.Observable.fromEvent(document, 'click');
  82017. * var openings = Rx.Observable.interval(1000);
  82018. * var result = clicks.windowToggle(openings, i =>
  82019. * i % 2 ? Rx.Observable.interval(500) : Rx.Observable.empty()
  82020. * ).mergeAll();
  82021. * result.subscribe(x => console.log(x));
  82022. *
  82023. * @see {@link window}
  82024. * @see {@link windowCount}
  82025. * @see {@link windowTime}
  82026. * @see {@link windowWhen}
  82027. * @see {@link bufferToggle}
  82028. *
  82029. * @param {Observable<O>} openings An observable of notifications to start new
  82030. * windows.
  82031. * @param {function(value: O): Observable} closingSelector A function that takes
  82032. * the value emitted by the `openings` observable and returns an Observable,
  82033. * which, when it emits (either `next` or `complete`), signals that the
  82034. * associated window should complete.
  82035. * @return {Observable<Observable<T>>} An observable of windows, which in turn
  82036. * are Observables.
  82037. * @method windowToggle
  82038. * @owner Observable
  82039. */
  82040. function windowToggle(openings, closingSelector) {
  82041. return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
  82042. }
  82043. exports.windowToggle = windowToggle;
  82044. var WindowToggleOperator = (function () {
  82045. function WindowToggleOperator(openings, closingSelector) {
  82046. this.openings = openings;
  82047. this.closingSelector = closingSelector;
  82048. }
  82049. WindowToggleOperator.prototype.call = function (subscriber, source) {
  82050. return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
  82051. };
  82052. return WindowToggleOperator;
  82053. }());
  82054. /**
  82055. * We need this JSDoc comment for affecting ESDoc.
  82056. * @ignore
  82057. * @extends {Ignored}
  82058. */
  82059. var WindowToggleSubscriber = (function (_super) {
  82060. __extends(WindowToggleSubscriber, _super);
  82061. function WindowToggleSubscriber(destination, openings, closingSelector) {
  82062. _super.call(this, destination);
  82063. this.openings = openings;
  82064. this.closingSelector = closingSelector;
  82065. this.contexts = [];
  82066. this.add(this.openSubscription = subscribeToResult_1.subscribeToResult(this, openings, openings));
  82067. }
  82068. WindowToggleSubscriber.prototype._next = function (value) {
  82069. var contexts = this.contexts;
  82070. if (contexts) {
  82071. var len = contexts.length;
  82072. for (var i = 0; i < len; i++) {
  82073. contexts[i].window.next(value);
  82074. }
  82075. }
  82076. };
  82077. WindowToggleSubscriber.prototype._error = function (err) {
  82078. var contexts = this.contexts;
  82079. this.contexts = null;
  82080. if (contexts) {
  82081. var len = contexts.length;
  82082. var index = -1;
  82083. while (++index < len) {
  82084. var context = contexts[index];
  82085. context.window.error(err);
  82086. context.subscription.unsubscribe();
  82087. }
  82088. }
  82089. _super.prototype._error.call(this, err);
  82090. };
  82091. WindowToggleSubscriber.prototype._complete = function () {
  82092. var contexts = this.contexts;
  82093. this.contexts = null;
  82094. if (contexts) {
  82095. var len = contexts.length;
  82096. var index = -1;
  82097. while (++index < len) {
  82098. var context = contexts[index];
  82099. context.window.complete();
  82100. context.subscription.unsubscribe();
  82101. }
  82102. }
  82103. _super.prototype._complete.call(this);
  82104. };
  82105. /** @deprecated internal use only */ WindowToggleSubscriber.prototype._unsubscribe = function () {
  82106. var contexts = this.contexts;
  82107. this.contexts = null;
  82108. if (contexts) {
  82109. var len = contexts.length;
  82110. var index = -1;
  82111. while (++index < len) {
  82112. var context = contexts[index];
  82113. context.window.unsubscribe();
  82114. context.subscription.unsubscribe();
  82115. }
  82116. }
  82117. };
  82118. WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  82119. if (outerValue === this.openings) {
  82120. var closingSelector = this.closingSelector;
  82121. var closingNotifier = tryCatch_1.tryCatch(closingSelector)(innerValue);
  82122. if (closingNotifier === errorObject_1.errorObject) {
  82123. return this.error(errorObject_1.errorObject.e);
  82124. }
  82125. else {
  82126. var window_1 = new Subject_1.Subject();
  82127. var subscription = new Subscription_1.Subscription();
  82128. var context = { window: window_1, subscription: subscription };
  82129. this.contexts.push(context);
  82130. var innerSubscription = subscribeToResult_1.subscribeToResult(this, closingNotifier, context);
  82131. if (innerSubscription.closed) {
  82132. this.closeWindow(this.contexts.length - 1);
  82133. }
  82134. else {
  82135. innerSubscription.context = context;
  82136. subscription.add(innerSubscription);
  82137. }
  82138. this.destination.next(window_1);
  82139. }
  82140. }
  82141. else {
  82142. this.closeWindow(this.contexts.indexOf(outerValue));
  82143. }
  82144. };
  82145. WindowToggleSubscriber.prototype.notifyError = function (err) {
  82146. this.error(err);
  82147. };
  82148. WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
  82149. if (inner !== this.openSubscription) {
  82150. this.closeWindow(this.contexts.indexOf(inner.context));
  82151. }
  82152. };
  82153. WindowToggleSubscriber.prototype.closeWindow = function (index) {
  82154. if (index === -1) {
  82155. return;
  82156. }
  82157. var contexts = this.contexts;
  82158. var context = contexts[index];
  82159. var window = context.window, subscription = context.subscription;
  82160. contexts.splice(index, 1);
  82161. window.complete();
  82162. subscription.unsubscribe();
  82163. };
  82164. return WindowToggleSubscriber;
  82165. }(OuterSubscriber_1.OuterSubscriber));
  82166. //# sourceMappingURL=windowToggle.js.map
  82167. /***/ }),
  82168. /* 299 */
  82169. /***/ (function(module, exports, __webpack_require__) {
  82170. "use strict";
  82171. var __extends = (this && this.__extends) || function (d, b) {
  82172. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  82173. function __() { this.constructor = d; }
  82174. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  82175. };
  82176. var Subject_1 = __webpack_require__(12);
  82177. var tryCatch_1 = __webpack_require__(17);
  82178. var errorObject_1 = __webpack_require__(16);
  82179. var OuterSubscriber_1 = __webpack_require__(6);
  82180. var subscribeToResult_1 = __webpack_require__(5);
  82181. /**
  82182. * Branch out the source Observable values as a nested Observable using a
  82183. * factory function of closing Observables to determine when to start a new
  82184. * window.
  82185. *
  82186. * <span class="informal">It's like {@link bufferWhen}, but emits a nested
  82187. * Observable instead of an array.</span>
  82188. *
  82189. * <img src="./img/windowWhen.png" width="100%">
  82190. *
  82191. * Returns an Observable that emits windows of items it collects from the source
  82192. * Observable. The output Observable emits connected, non-overlapping windows.
  82193. * It emits the current window and opens a new one whenever the Observable
  82194. * produced by the specified `closingSelector` function emits an item. The first
  82195. * window is opened immediately when subscribing to the output Observable.
  82196. *
  82197. * @example <caption>Emit only the first two clicks events in every window of [1-5] random seconds</caption>
  82198. * var clicks = Rx.Observable.fromEvent(document, 'click');
  82199. * var result = clicks
  82200. * .windowWhen(() => Rx.Observable.interval(1000 + Math.random() * 4000))
  82201. * .map(win => win.take(2)) // each window has at most 2 emissions
  82202. * .mergeAll(); // flatten the Observable-of-Observables
  82203. * result.subscribe(x => console.log(x));
  82204. *
  82205. * @see {@link window}
  82206. * @see {@link windowCount}
  82207. * @see {@link windowTime}
  82208. * @see {@link windowToggle}
  82209. * @see {@link bufferWhen}
  82210. *
  82211. * @param {function(): Observable} closingSelector A function that takes no
  82212. * arguments and returns an Observable that signals (on either `next` or
  82213. * `complete`) when to close the previous window and start a new one.
  82214. * @return {Observable<Observable<T>>} An observable of windows, which in turn
  82215. * are Observables.
  82216. * @method windowWhen
  82217. * @owner Observable
  82218. */
  82219. function windowWhen(closingSelector) {
  82220. return function windowWhenOperatorFunction(source) {
  82221. return source.lift(new WindowOperator(closingSelector));
  82222. };
  82223. }
  82224. exports.windowWhen = windowWhen;
  82225. var WindowOperator = (function () {
  82226. function WindowOperator(closingSelector) {
  82227. this.closingSelector = closingSelector;
  82228. }
  82229. WindowOperator.prototype.call = function (subscriber, source) {
  82230. return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
  82231. };
  82232. return WindowOperator;
  82233. }());
  82234. /**
  82235. * We need this JSDoc comment for affecting ESDoc.
  82236. * @ignore
  82237. * @extends {Ignored}
  82238. */
  82239. var WindowSubscriber = (function (_super) {
  82240. __extends(WindowSubscriber, _super);
  82241. function WindowSubscriber(destination, closingSelector) {
  82242. _super.call(this, destination);
  82243. this.destination = destination;
  82244. this.closingSelector = closingSelector;
  82245. this.openWindow();
  82246. }
  82247. WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  82248. this.openWindow(innerSub);
  82249. };
  82250. WindowSubscriber.prototype.notifyError = function (error, innerSub) {
  82251. this._error(error);
  82252. };
  82253. WindowSubscriber.prototype.notifyComplete = function (innerSub) {
  82254. this.openWindow(innerSub);
  82255. };
  82256. WindowSubscriber.prototype._next = function (value) {
  82257. this.window.next(value);
  82258. };
  82259. WindowSubscriber.prototype._error = function (err) {
  82260. this.window.error(err);
  82261. this.destination.error(err);
  82262. this.unsubscribeClosingNotification();
  82263. };
  82264. WindowSubscriber.prototype._complete = function () {
  82265. this.window.complete();
  82266. this.destination.complete();
  82267. this.unsubscribeClosingNotification();
  82268. };
  82269. WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
  82270. if (this.closingNotification) {
  82271. this.closingNotification.unsubscribe();
  82272. }
  82273. };
  82274. WindowSubscriber.prototype.openWindow = function (innerSub) {
  82275. if (innerSub === void 0) { innerSub = null; }
  82276. if (innerSub) {
  82277. this.remove(innerSub);
  82278. innerSub.unsubscribe();
  82279. }
  82280. var prevWindow = this.window;
  82281. if (prevWindow) {
  82282. prevWindow.complete();
  82283. }
  82284. var window = this.window = new Subject_1.Subject();
  82285. this.destination.next(window);
  82286. var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)();
  82287. if (closingNotifier === errorObject_1.errorObject) {
  82288. var err = errorObject_1.errorObject.e;
  82289. this.destination.error(err);
  82290. this.window.error(err);
  82291. }
  82292. else {
  82293. this.add(this.closingNotification = subscribeToResult_1.subscribeToResult(this, closingNotifier));
  82294. }
  82295. };
  82296. return WindowSubscriber;
  82297. }(OuterSubscriber_1.OuterSubscriber));
  82298. //# sourceMappingURL=windowWhen.js.map
  82299. /***/ }),
  82300. /* 300 */
  82301. /***/ (function(module, exports, __webpack_require__) {
  82302. "use strict";
  82303. var __extends = (this && this.__extends) || function (d, b) {
  82304. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  82305. function __() { this.constructor = d; }
  82306. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  82307. };
  82308. var OuterSubscriber_1 = __webpack_require__(6);
  82309. var subscribeToResult_1 = __webpack_require__(5);
  82310. /* tslint:enable:max-line-length */
  82311. /**
  82312. * Combines the source Observable with other Observables to create an Observable
  82313. * whose values are calculated from the latest values of each, only when the
  82314. * source emits.
  82315. *
  82316. * <span class="informal">Whenever the source Observable emits a value, it
  82317. * computes a formula using that value plus the latest values from other input
  82318. * Observables, then emits the output of that formula.</span>
  82319. *
  82320. * <img src="./img/withLatestFrom.png" width="100%">
  82321. *
  82322. * `withLatestFrom` combines each value from the source Observable (the
  82323. * instance) with the latest values from the other input Observables only when
  82324. * the source emits a value, optionally using a `project` function to determine
  82325. * the value to be emitted on the output Observable. All input Observables must
  82326. * emit at least one value before the output Observable will emit a value.
  82327. *
  82328. * @example <caption>On every click event, emit an array with the latest timer event plus the click event</caption>
  82329. * var clicks = Rx.Observable.fromEvent(document, 'click');
  82330. * var timer = Rx.Observable.interval(1000);
  82331. * var result = clicks.withLatestFrom(timer);
  82332. * result.subscribe(x => console.log(x));
  82333. *
  82334. * @see {@link combineLatest}
  82335. *
  82336. * @param {ObservableInput} other An input Observable to combine with the source
  82337. * Observable. More than one input Observables may be given as argument.
  82338. * @param {Function} [project] Projection function for combining values
  82339. * together. Receives all values in order of the Observables passed, where the
  82340. * first parameter is a value from the source Observable. (e.g.
  82341. * `a.withLatestFrom(b, c, (a1, b1, c1) => a1 + b1 + c1)`). If this is not
  82342. * passed, arrays will be emitted on the output Observable.
  82343. * @return {Observable} An Observable of projected values from the most recent
  82344. * values from each input Observable, or an array of the most recent values from
  82345. * each input Observable.
  82346. * @method withLatestFrom
  82347. * @owner Observable
  82348. */
  82349. function withLatestFrom() {
  82350. var args = [];
  82351. for (var _i = 0; _i < arguments.length; _i++) {
  82352. args[_i - 0] = arguments[_i];
  82353. }
  82354. return function (source) {
  82355. var project;
  82356. if (typeof args[args.length - 1] === 'function') {
  82357. project = args.pop();
  82358. }
  82359. var observables = args;
  82360. return source.lift(new WithLatestFromOperator(observables, project));
  82361. };
  82362. }
  82363. exports.withLatestFrom = withLatestFrom;
  82364. var WithLatestFromOperator = (function () {
  82365. function WithLatestFromOperator(observables, project) {
  82366. this.observables = observables;
  82367. this.project = project;
  82368. }
  82369. WithLatestFromOperator.prototype.call = function (subscriber, source) {
  82370. return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
  82371. };
  82372. return WithLatestFromOperator;
  82373. }());
  82374. /**
  82375. * We need this JSDoc comment for affecting ESDoc.
  82376. * @ignore
  82377. * @extends {Ignored}
  82378. */
  82379. var WithLatestFromSubscriber = (function (_super) {
  82380. __extends(WithLatestFromSubscriber, _super);
  82381. function WithLatestFromSubscriber(destination, observables, project) {
  82382. _super.call(this, destination);
  82383. this.observables = observables;
  82384. this.project = project;
  82385. this.toRespond = [];
  82386. var len = observables.length;
  82387. this.values = new Array(len);
  82388. for (var i = 0; i < len; i++) {
  82389. this.toRespond.push(i);
  82390. }
  82391. for (var i = 0; i < len; i++) {
  82392. var observable = observables[i];
  82393. this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));
  82394. }
  82395. }
  82396. WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  82397. this.values[outerIndex] = innerValue;
  82398. var toRespond = this.toRespond;
  82399. if (toRespond.length > 0) {
  82400. var found = toRespond.indexOf(outerIndex);
  82401. if (found !== -1) {
  82402. toRespond.splice(found, 1);
  82403. }
  82404. }
  82405. };
  82406. WithLatestFromSubscriber.prototype.notifyComplete = function () {
  82407. // noop
  82408. };
  82409. WithLatestFromSubscriber.prototype._next = function (value) {
  82410. if (this.toRespond.length === 0) {
  82411. var args = [value].concat(this.values);
  82412. if (this.project) {
  82413. this._tryProject(args);
  82414. }
  82415. else {
  82416. this.destination.next(args);
  82417. }
  82418. }
  82419. };
  82420. WithLatestFromSubscriber.prototype._tryProject = function (args) {
  82421. var result;
  82422. try {
  82423. result = this.project.apply(this, args);
  82424. }
  82425. catch (err) {
  82426. this.destination.error(err);
  82427. return;
  82428. }
  82429. this.destination.next(result);
  82430. };
  82431. return WithLatestFromSubscriber;
  82432. }(OuterSubscriber_1.OuterSubscriber));
  82433. //# sourceMappingURL=withLatestFrom.js.map
  82434. /***/ }),
  82435. /* 301 */
  82436. /***/ (function(module, exports, __webpack_require__) {
  82437. "use strict";
  82438. var zip_1 = __webpack_require__(77);
  82439. function zipAll(project) {
  82440. return function (source) { return source.lift(new zip_1.ZipOperator(project)); };
  82441. }
  82442. exports.zipAll = zipAll;
  82443. //# sourceMappingURL=zipAll.js.map
  82444. /***/ }),
  82445. /* 302 */
  82446. /***/ (function(module, exports, __webpack_require__) {
  82447. "use strict";
  82448. var SubscriptionLog_1 = __webpack_require__(303);
  82449. var SubscriptionLoggable = (function () {
  82450. function SubscriptionLoggable() {
  82451. this.subscriptions = [];
  82452. }
  82453. SubscriptionLoggable.prototype.logSubscribedFrame = function () {
  82454. this.subscriptions.push(new SubscriptionLog_1.SubscriptionLog(this.scheduler.now()));
  82455. return this.subscriptions.length - 1;
  82456. };
  82457. SubscriptionLoggable.prototype.logUnsubscribedFrame = function (index) {
  82458. var subscriptionLogs = this.subscriptions;
  82459. var oldSubscriptionLog = subscriptionLogs[index];
  82460. subscriptionLogs[index] = new SubscriptionLog_1.SubscriptionLog(oldSubscriptionLog.subscribedFrame, this.scheduler.now());
  82461. };
  82462. return SubscriptionLoggable;
  82463. }());
  82464. exports.SubscriptionLoggable = SubscriptionLoggable;
  82465. //# sourceMappingURL=SubscriptionLoggable.js.map
  82466. /***/ }),
  82467. /* 303 */
  82468. /***/ (function(module, exports, __webpack_require__) {
  82469. "use strict";
  82470. var SubscriptionLog = (function () {
  82471. function SubscriptionLog(subscribedFrame, unsubscribedFrame) {
  82472. if (unsubscribedFrame === void 0) { unsubscribedFrame = Number.POSITIVE_INFINITY; }
  82473. this.subscribedFrame = subscribedFrame;
  82474. this.unsubscribedFrame = unsubscribedFrame;
  82475. }
  82476. return SubscriptionLog;
  82477. }());
  82478. exports.SubscriptionLog = SubscriptionLog;
  82479. //# sourceMappingURL=SubscriptionLog.js.map
  82480. /***/ }),
  82481. /* 304 */
  82482. /***/ (function(module, exports, __webpack_require__) {
  82483. "use strict";
  82484. function applyMixins(derivedCtor, baseCtors) {
  82485. for (var i = 0, len = baseCtors.length; i < len; i++) {
  82486. var baseCtor = baseCtors[i];
  82487. var propertyKeys = Object.getOwnPropertyNames(baseCtor.prototype);
  82488. for (var j = 0, len2 = propertyKeys.length; j < len2; j++) {
  82489. var name_1 = propertyKeys[j];
  82490. derivedCtor.prototype[name_1] = baseCtor.prototype[name_1];
  82491. }
  82492. }
  82493. }
  82494. exports.applyMixins = applyMixins;
  82495. //# sourceMappingURL=applyMixins.js.map
  82496. /***/ }),
  82497. /* 305 */
  82498. /***/ (function(module, exports, __webpack_require__) {
  82499. "use strict";
  82500. var __extends = (this && this.__extends) || function (d, b) {
  82501. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  82502. function __() { this.constructor = d; }
  82503. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  82504. };
  82505. var AsyncAction_1 = __webpack_require__(57);
  82506. var AsyncScheduler_1 = __webpack_require__(58);
  82507. var VirtualTimeScheduler = (function (_super) {
  82508. __extends(VirtualTimeScheduler, _super);
  82509. function VirtualTimeScheduler(SchedulerAction, maxFrames) {
  82510. var _this = this;
  82511. if (SchedulerAction === void 0) { SchedulerAction = VirtualAction; }
  82512. if (maxFrames === void 0) { maxFrames = Number.POSITIVE_INFINITY; }
  82513. _super.call(this, SchedulerAction, function () { return _this.frame; });
  82514. this.maxFrames = maxFrames;
  82515. this.frame = 0;
  82516. this.index = -1;
  82517. }
  82518. /**
  82519. * Prompt the Scheduler to execute all of its queued actions, therefore
  82520. * clearing its queue.
  82521. * @return {void}
  82522. */
  82523. VirtualTimeScheduler.prototype.flush = function () {
  82524. var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
  82525. var error, action;
  82526. while ((action = actions.shift()) && (this.frame = action.delay) <= maxFrames) {
  82527. if (error = action.execute(action.state, action.delay)) {
  82528. break;
  82529. }
  82530. }
  82531. if (error) {
  82532. while (action = actions.shift()) {
  82533. action.unsubscribe();
  82534. }
  82535. throw error;
  82536. }
  82537. };
  82538. VirtualTimeScheduler.frameTimeFactor = 10;
  82539. return VirtualTimeScheduler;
  82540. }(AsyncScheduler_1.AsyncScheduler));
  82541. exports.VirtualTimeScheduler = VirtualTimeScheduler;
  82542. /**
  82543. * We need this JSDoc comment for affecting ESDoc.
  82544. * @ignore
  82545. * @extends {Ignored}
  82546. */
  82547. var VirtualAction = (function (_super) {
  82548. __extends(VirtualAction, _super);
  82549. function VirtualAction(scheduler, work, index) {
  82550. if (index === void 0) { index = scheduler.index += 1; }
  82551. _super.call(this, scheduler, work);
  82552. this.scheduler = scheduler;
  82553. this.work = work;
  82554. this.index = index;
  82555. this.active = true;
  82556. this.index = scheduler.index = index;
  82557. }
  82558. VirtualAction.prototype.schedule = function (state, delay) {
  82559. if (delay === void 0) { delay = 0; }
  82560. if (!this.id) {
  82561. return _super.prototype.schedule.call(this, state, delay);
  82562. }
  82563. this.active = false;
  82564. // If an action is rescheduled, we save allocations by mutating its state,
  82565. // pushing it to the end of the scheduler queue, and recycling the action.
  82566. // But since the VirtualTimeScheduler is used for testing, VirtualActions
  82567. // must be immutable so they can be inspected later.
  82568. var action = new VirtualAction(this.scheduler, this.work);
  82569. this.add(action);
  82570. return action.schedule(state, delay);
  82571. };
  82572. VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
  82573. if (delay === void 0) { delay = 0; }
  82574. this.delay = scheduler.frame + delay;
  82575. var actions = scheduler.actions;
  82576. actions.push(this);
  82577. actions.sort(VirtualAction.sortActions);
  82578. return true;
  82579. };
  82580. VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
  82581. if (delay === void 0) { delay = 0; }
  82582. return undefined;
  82583. };
  82584. VirtualAction.prototype._execute = function (state, delay) {
  82585. if (this.active === true) {
  82586. return _super.prototype._execute.call(this, state, delay);
  82587. }
  82588. };
  82589. VirtualAction.sortActions = function (a, b) {
  82590. if (a.delay === b.delay) {
  82591. if (a.index === b.index) {
  82592. return 0;
  82593. }
  82594. else if (a.index > b.index) {
  82595. return 1;
  82596. }
  82597. else {
  82598. return -1;
  82599. }
  82600. }
  82601. else if (a.delay > b.delay) {
  82602. return 1;
  82603. }
  82604. else {
  82605. return -1;
  82606. }
  82607. };
  82608. return VirtualAction;
  82609. }(AsyncAction_1.AsyncAction));
  82610. exports.VirtualAction = VirtualAction;
  82611. //# sourceMappingURL=VirtualTimeScheduler.js.map
  82612. /***/ }),
  82613. /* 306 */
  82614. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  82615. "use strict";
  82616. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ModalController; });
  82617. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  82618. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  82619. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  82620. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__modal__ = __webpack_require__(206);
  82621. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_deep_linker__ = __webpack_require__(24);
  82622. /**
  82623. * @name ModalController
  82624. * @description
  82625. * A Modal is a content pane that goes over the user's current page.
  82626. * Usually it is used for making a choice or editing an item. A modal uses the
  82627. * `NavController` to
  82628. * {@link /docs/api/components/nav/NavController/#present present}
  82629. * itself in the root nav stack. It is added to the stack similar to how
  82630. * {@link /docs/api/components/nav/NavController/#push NavController.push}
  82631. * works.
  82632. *
  82633. * When a modal (or any other overlay such as an alert or actionsheet) is
  82634. * "presented" to a nav controller, the overlay is added to the app's root nav.
  82635. * After the modal has been presented, from within the component instance, the
  82636. * modal can later be closed or "dismissed" by using the ViewController's
  82637. * `dismiss` method. Additionally, you can dismiss any overlay by using `pop`
  82638. * on the root nav controller. Modals are not reusable. When a modal is dismissed
  82639. * it is destroyed.
  82640. *
  82641. * Data can be passed to a new modal through `Modal.create()` as the second
  82642. * argument. The data can then be accessed from the opened page by injecting
  82643. * `NavParams`. Note that the page, which opened as a modal, has no special
  82644. * "modal" logic within it, but uses `NavParams` no differently than a
  82645. * standard page.
  82646. *
  82647. * @usage
  82648. * ```ts
  82649. * import { ModalController, NavParams } from 'ionic-angular';
  82650. *
  82651. * @Component(...)
  82652. * class HomePage {
  82653. *
  82654. * constructor(public modalCtrl: ModalController) { }
  82655. *
  82656. * presentProfileModal() {
  82657. * const profileModal = this.modalCtrl.create(Profile, { userId: 8675309 });
  82658. * profileModal.present();
  82659. * }
  82660. *
  82661. * }
  82662. *
  82663. * @Component(...)
  82664. * class Profile {
  82665. *
  82666. * constructor(params: NavParams) {
  82667. * console.log('UserId', params.get('userId'));
  82668. * }
  82669. *
  82670. * }
  82671. * ```
  82672. *
  82673. * @advanced
  82674. *
  82675. * | Option | Type | Description |
  82676. * |-----------------------|------------|------------------------------------------------------------------------------------------------------------------|
  82677. * | showBackdrop |`boolean` | Whether to show the backdrop. Default true. |
  82678. * | enableBackdropDismiss |`boolean` | Whether the popover should be dismissed by tapping the backdrop. Default true. |
  82679. * | cssClass |`string` | Additional classes for custom styles, separated by spaces. |
  82680. *
  82681. * A modal can also emit data, which is useful when it is used to add or edit
  82682. * data. For example, a profile page could slide up in a modal, and on submit,
  82683. * the submit button could pass the updated profile data, then dismiss the
  82684. * modal.
  82685. *
  82686. * ```ts
  82687. * import { Component } from '@angular/core';
  82688. * import { ModalController, ViewController } from 'ionic-angular';
  82689. *
  82690. * @Component(...)
  82691. * class HomePage {
  82692. *
  82693. * constructor(public modalCtrl: ModalController) {
  82694. *
  82695. * }
  82696. *
  82697. * presentContactModal() {
  82698. * let contactModal = this.modalCtrl.create(ContactUs);
  82699. * contactModal.present();
  82700. * }
  82701. *
  82702. * presentProfileModal() {
  82703. * let profileModal = this.modalCtrl.create(Profile, { userId: 8675309 });
  82704. * profileModal.onDidDismiss(data => {
  82705. * console.log(data);
  82706. * });
  82707. * profileModal.present();
  82708. * }
  82709. *
  82710. * }
  82711. *
  82712. * @Component(...)
  82713. * class Profile {
  82714. *
  82715. * constructor(public viewCtrl: ViewController) {
  82716. *
  82717. * }
  82718. *
  82719. * dismiss() {
  82720. * let data = { 'foo': 'bar' };
  82721. * this.viewCtrl.dismiss(data);
  82722. * }
  82723. *
  82724. * }
  82725. * ```
  82726. *
  82727. * A common issue is that a developer may try to implement navigation in a modal, but when you try NavController.push(),
  82728. * you will notice that the status bar on iOS gets cut off. The proper way to implement navigation in a modal is to
  82729. * make the modal component a navigation container, and set the root page to the page you want to show in your modal.
  82730. *
  82731. * ```ts
  82732. * @Component({
  82733. * template: '<ion-nav [root]="rootPage" [rootParams]="rootParams"></ion-nav>'
  82734. * })
  82735. * export class MyModalWrapper {
  82736. * rootPage = 'MyModalContentPage'; // This is the page you want your modal to display
  82737. * rootParams;
  82738. *
  82739. * constructor(navParams: NavParams, private viewCtrl: ViewController) {
  82740. * this.rootParams = Object.assign({}, navParams.data, {viewCtrl: viewCtrl});
  82741. * // This line will send the view controller into your child views, so you can dismiss the modals from there.
  82742. * }
  82743. * }
  82744. * ```
  82745. * @demo /docs/demos/src/modal/
  82746. * @see {@link /docs/components#modals Modal Component Docs}
  82747. */
  82748. var ModalController = (function () {
  82749. function ModalController(_app, config, deepLinker) {
  82750. this._app = _app;
  82751. this.config = config;
  82752. this.deepLinker = deepLinker;
  82753. }
  82754. /**
  82755. * Create a modal to display. See below for options.
  82756. *
  82757. * @param {object} component The Modal view
  82758. * @param {object} data Any data to pass to the Modal view
  82759. * @param {object} opts Modal options
  82760. */
  82761. ModalController.prototype.create = function (component, data, opts) {
  82762. if (data === void 0) { data = {}; }
  82763. if (opts === void 0) { opts = {}; }
  82764. return new __WEBPACK_IMPORTED_MODULE_3__modal__["a" /* Modal */](this._app, component, data, opts, this.config, this.deepLinker);
  82765. };
  82766. ModalController.decorators = [
  82767. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  82768. ];
  82769. /** @nocollapse */
  82770. ModalController.ctorParameters = function () { return [
  82771. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  82772. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  82773. { type: __WEBPACK_IMPORTED_MODULE_4__navigation_deep_linker__["a" /* DeepLinker */], },
  82774. ]; };
  82775. return ModalController;
  82776. }());
  82777. //# sourceMappingURL=modal-controller.js.map
  82778. /***/ }),
  82779. /* 307 */
  82780. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  82781. "use strict";
  82782. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavPopAnchor; });
  82783. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  82784. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__navigation_deep_linker__ = __webpack_require__(24);
  82785. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__navigation_view_controller__ = __webpack_require__(9);
  82786. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__nav_pop__ = __webpack_require__(127);
  82787. /**
  82788. * @hidden
  82789. */
  82790. var NavPopAnchor = (function () {
  82791. function NavPopAnchor(host, linker, viewCtrl) {
  82792. this.host = host;
  82793. this.linker = linker;
  82794. this.viewCtrl = viewCtrl;
  82795. }
  82796. NavPopAnchor.prototype.updateHref = function () {
  82797. if (this.host && this.viewCtrl) {
  82798. var previousView = this.host._nav.getPrevious(this.viewCtrl);
  82799. this._href = (previousView && this.linker.createUrl(this.host._nav, this.viewCtrl.component, this.viewCtrl.data)) || '#';
  82800. }
  82801. else {
  82802. this._href = '#';
  82803. }
  82804. };
  82805. NavPopAnchor.prototype.ngAfterContentInit = function () {
  82806. this.updateHref();
  82807. };
  82808. NavPopAnchor.decorators = [
  82809. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  82810. selector: 'a[navPop]',
  82811. host: {
  82812. '[attr.href]': '_href'
  82813. }
  82814. },] },
  82815. ];
  82816. /** @nocollapse */
  82817. NavPopAnchor.ctorParameters = function () { return [
  82818. { type: __WEBPACK_IMPORTED_MODULE_3__nav_pop__["a" /* NavPop */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  82819. { type: __WEBPACK_IMPORTED_MODULE_1__navigation_deep_linker__["a" /* DeepLinker */], },
  82820. { type: __WEBPACK_IMPORTED_MODULE_2__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  82821. ]; };
  82822. return NavPopAnchor;
  82823. }());
  82824. //# sourceMappingURL=nav-pop-anchor.js.map
  82825. /***/ }),
  82826. /* 308 */
  82827. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  82828. "use strict";
  82829. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NavPushAnchor; });
  82830. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  82831. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__navigation_deep_linker__ = __webpack_require__(24);
  82832. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__nav_push__ = __webpack_require__(128);
  82833. /**
  82834. * @hidden
  82835. */
  82836. var NavPushAnchor = (function () {
  82837. function NavPushAnchor(host, linker) {
  82838. this.host = host;
  82839. this.linker = linker;
  82840. }
  82841. NavPushAnchor.prototype.updateHref = function () {
  82842. if (this.host && this.linker) {
  82843. this._href = this.linker.createUrl(this.host._nav, this.host.navPush, this.host.navParams) || '#';
  82844. }
  82845. else {
  82846. this._href = '#';
  82847. }
  82848. };
  82849. NavPushAnchor.prototype.ngAfterContentInit = function () {
  82850. this.updateHref();
  82851. };
  82852. NavPushAnchor.decorators = [
  82853. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  82854. selector: 'a[navPush]',
  82855. host: {
  82856. '[attr.href]': '_href'
  82857. }
  82858. },] },
  82859. ];
  82860. /** @nocollapse */
  82861. NavPushAnchor.ctorParameters = function () { return [
  82862. { type: __WEBPACK_IMPORTED_MODULE_2__nav_push__["a" /* NavPush */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["w" /* Host */] },] },
  82863. { type: __WEBPACK_IMPORTED_MODULE_1__navigation_deep_linker__["a" /* DeepLinker */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  82864. ]; };
  82865. return NavPushAnchor;
  82866. }());
  82867. //# sourceMappingURL=nav-push-anchor.js.map
  82868. /***/ }),
  82869. /* 309 */
  82870. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  82871. "use strict";
  82872. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Note; });
  82873. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  82874. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  82875. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  82876. var __extends = (this && this.__extends) || (function () {
  82877. var extendStatics = Object.setPrototypeOf ||
  82878. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  82879. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  82880. return function (d, b) {
  82881. extendStatics(d, b);
  82882. function __() { this.constructor = d; }
  82883. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  82884. };
  82885. })();
  82886. /**
  82887. * @name Note
  82888. * @module ionic
  82889. * @description
  82890. * A note is detailed item in an ion-item. It creates greyed out element that can be on the left or right side of an item.
  82891. * @usage
  82892. *
  82893. * ```html
  82894. * <ion-content>
  82895. * <ion-list>
  82896. * <ion-item>
  82897. * <ion-note item-start>
  82898. * Left Note
  82899. * </ion-note>
  82900. * My Item
  82901. * <ion-note item-end>
  82902. * Right Note
  82903. * </ion-note>
  82904. * </ion-item>
  82905. * </ion-list>
  82906. * </ion-content>
  82907. *```
  82908. * {@link /docs/api/components/api/components/item/item ion-item}
  82909. */
  82910. var Note = (function (_super) {
  82911. __extends(Note, _super);
  82912. function Note(config, elementRef, renderer) {
  82913. return _super.call(this, config, elementRef, renderer, 'note') || this;
  82914. }
  82915. Note.decorators = [
  82916. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  82917. selector: 'ion-note'
  82918. },] },
  82919. ];
  82920. /** @nocollapse */
  82921. Note.ctorParameters = function () { return [
  82922. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  82923. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  82924. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  82925. ]; };
  82926. return Note;
  82927. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  82928. //# sourceMappingURL=note.js.map
  82929. /***/ }),
  82930. /* 310 */
  82931. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  82932. "use strict";
  82933. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PopoverController; });
  82934. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  82935. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  82936. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  82937. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__popover__ = __webpack_require__(130);
  82938. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_deep_linker__ = __webpack_require__(24);
  82939. /**
  82940. * @name PopoverController
  82941. * @description
  82942. * A Popover is a dialog that appears on top of the current page.
  82943. * It can be used for anything, but generally it is used for overflow
  82944. * actions that don't fit in the navigation bar.
  82945. *
  82946. * ### Creating
  82947. * A popover can be created by calling the `create` method. The view
  82948. * to display in the popover should be passed as the first argument.
  82949. * Any data to pass to the popover view can optionally be passed in
  82950. * the second argument. Options for the popover can optionally be
  82951. * passed in the third argument. See the [create](#create) method
  82952. * below for all available options.
  82953. *
  82954. * ### Presenting
  82955. * To present a popover, call the `present` method on a PopoverController instance.
  82956. * In order to position the popover relative to the element clicked, a click event
  82957. * needs to be passed into the options of the the `present method. If the event
  82958. * is not passed, the popover will be positioned in the center of the current
  82959. * view. See the [usage](#usage) section for an example of passing this event.
  82960. *
  82961. * ### Dismissing
  82962. * To dismiss the popover after creation, call the `dismiss()` method on the
  82963. * `Popover` instance. The popover can also be dismissed from within the popover's
  82964. * view by calling the `dismiss()` method on the [ViewController](../../navigation/ViewController).
  82965. * The `dismiss()` call accepts an optional parameter that will be passed to the callback described
  82966. * as follows. The `onDidDismiss(<func>)` function can be called to set up a callback action that will
  82967. * be performed after the popover is dismissed, receiving the parameter passed to `dismiss()`.
  82968. * The popover will dismiss when the backdrop is clicked by implicitly performing `dismiss(null)`,
  82969. * but this can be disabled by setting `enableBackdropDismiss` to `false` in the popover options.
  82970. *
  82971. * > Note that after the component is dismissed, it will not be usable anymore and
  82972. * another one must be created. This can be avoided by wrapping the creation and
  82973. * presentation of the component in a reusable function as shown in the [usage](#usage)
  82974. * section below.
  82975. *
  82976. * @usage
  82977. *
  82978. * To open a popover on the click of a button, pass `$event` to the method
  82979. * which creates and presents the popover:
  82980. *
  82981. * ```html
  82982. * <button ion-button icon-only (click)="presentPopover($event)">
  82983. * <ion-icon name="more"></ion-icon>
  82984. * </button>
  82985. * ```
  82986. *
  82987. * ```ts
  82988. * import { PopoverController } from 'ionic-angular';
  82989. *
  82990. * @Component({})
  82991. * class MyPage {
  82992. * constructor(public popoverCtrl: PopoverController) {}
  82993. *
  82994. * presentPopover(myEvent) {
  82995. * let popover = this.popoverCtrl.create(PopoverPage);
  82996. * popover.present({
  82997. * ev: myEvent
  82998. * });
  82999. * }
  83000. * }
  83001. * ```
  83002. *
  83003. * The `PopoverPage` will display inside of the popover, and
  83004. * can be anything. Below is an example of a page with items
  83005. * that close the popover on click.
  83006. *
  83007. * ```ts
  83008. * @Component({
  83009. * template: `
  83010. * <ion-list>
  83011. * <ion-list-header>Ionic</ion-list-header>
  83012. * <button ion-item (click)="close()">Learn Ionic</button>
  83013. * <button ion-item (click)="close()">Documentation</button>
  83014. * <button ion-item (click)="close()">Showcase</button>
  83015. * <button ion-item (click)="close()">GitHub Repo</button>
  83016. * </ion-list>
  83017. * `
  83018. * })
  83019. * class PopoverPage {
  83020. * constructor(public viewCtrl: ViewController) {}
  83021. *
  83022. * close() {
  83023. * this.viewCtrl.dismiss();
  83024. * }
  83025. * }
  83026. * ```
  83027. * @advanced
  83028. * Popover Options
  83029. *
  83030. * | Option | Type | Description |
  83031. * |-----------------------|------------|------------------------------------------------------------------------------------------------------------------|
  83032. * | cssClass |`string` | Additional classes for custom styles, separated by spaces. |
  83033. * | showBackdrop |`boolean` | Whether to show the backdrop. Default true. |
  83034. * | enableBackdropDismiss |`boolean` | Whether the popover should be dismissed by tapping the backdrop. Default true. |
  83035. *
  83036. *
  83037. *
  83038. * @demo /docs/demos/src/popover/
  83039. */
  83040. var PopoverController = (function () {
  83041. function PopoverController(_app, config, _deepLinker) {
  83042. this._app = _app;
  83043. this.config = config;
  83044. this._deepLinker = _deepLinker;
  83045. }
  83046. /**
  83047. * Present a popover. See below for options
  83048. * @param {object} component The Popover
  83049. * @param {object} data Any data to pass to the Popover view
  83050. * @param {PopoverOptions} opts Popover options
  83051. */
  83052. PopoverController.prototype.create = function (component, data, opts) {
  83053. if (data === void 0) { data = {}; }
  83054. if (opts === void 0) { opts = {}; }
  83055. return new __WEBPACK_IMPORTED_MODULE_3__popover__["a" /* Popover */](this._app, component, data, opts, this.config, this._deepLinker);
  83056. };
  83057. PopoverController.decorators = [
  83058. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  83059. ];
  83060. /** @nocollapse */
  83061. PopoverController.ctorParameters = function () { return [
  83062. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  83063. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  83064. { type: __WEBPACK_IMPORTED_MODULE_4__navigation_deep_linker__["a" /* DeepLinker */], },
  83065. ]; };
  83066. return PopoverController;
  83067. }());
  83068. //# sourceMappingURL=popover-controller.js.map
  83069. /***/ }),
  83070. /* 311 */
  83071. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  83072. "use strict";
  83073. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RadioButton; });
  83074. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  83075. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  83076. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_form__ = __webpack_require__(27);
  83077. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ion__ = __webpack_require__(8);
  83078. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_util__ = __webpack_require__(3);
  83079. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__item_item__ = __webpack_require__(28);
  83080. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__radio_group__ = __webpack_require__(132);
  83081. var __extends = (this && this.__extends) || (function () {
  83082. var extendStatics = Object.setPrototypeOf ||
  83083. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  83084. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  83085. return function (d, b) {
  83086. extendStatics(d, b);
  83087. function __() { this.constructor = d; }
  83088. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  83089. };
  83090. })();
  83091. /**
  83092. * @description
  83093. * A radio button is a button that can be either checked or unchecked. A user can tap
  83094. * the button to check or uncheck it. It can also be checked from the template using
  83095. * the `checked` property.
  83096. *
  83097. * Use an element with a `radio-group` attribute to group a set of radio buttons. When
  83098. * radio buttons are inside a [radio group](../RadioGroup), exactly one radio button
  83099. * in the group can be checked at any time. If a radio button is not placed in a group,
  83100. * they will all have the ability to be checked at the same time.
  83101. *
  83102. * See the [Angular Forms Docs](https://angular.io/docs/ts/latest/guide/forms.html) for
  83103. * more information on forms and input.
  83104. *
  83105. * @usage
  83106. * ```html
  83107. * <ion-list radio-group [(ngModel)]="relationship">
  83108. * <ion-item>
  83109. * <ion-label>Friends</ion-label>
  83110. * <ion-radio value="friends" checked></ion-radio>
  83111. * </ion-item>
  83112. * <ion-item>
  83113. * <ion-label>Family</ion-label>
  83114. * <ion-radio value="family"></ion-radio>
  83115. * </ion-item>
  83116. * <ion-item>
  83117. * <ion-label>Enemies</ion-label>
  83118. * <ion-radio value="enemies" [disabled]="isDisabled"></ion-radio>
  83119. * </ion-item>
  83120. * </ion-list>
  83121. * ```
  83122. * @demo /docs/demos/src/radio/
  83123. * @see {@link /docs/components#radio Radio Component Docs}
  83124. * @see {@link ../RadioGroup RadioGroup API Docs}
  83125. */
  83126. var RadioButton = (function (_super) {
  83127. __extends(RadioButton, _super);
  83128. function RadioButton(_form, config, elementRef, renderer, _item, _group) {
  83129. var _this = _super.call(this, config, elementRef, renderer, 'radio') || this;
  83130. _this._form = _form;
  83131. _this._item = _item;
  83132. _this._group = _group;
  83133. /**
  83134. * @internal
  83135. */
  83136. _this._checked = false;
  83137. /**
  83138. * @internal
  83139. */
  83140. _this._disabled = false;
  83141. /**
  83142. * @internal
  83143. */
  83144. _this._value = null;
  83145. /**
  83146. * @output {any} Emitted when the radio button is selected.
  83147. */
  83148. _this.ionSelect = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  83149. _form.register(_this);
  83150. if (_group) {
  83151. // register with the radiogroup
  83152. _this.id = 'rb-' + _group.add(_this);
  83153. }
  83154. if (_item) {
  83155. // register the input inside of the item
  83156. // reset to the item's id instead of the radiogroup id
  83157. _this.id = 'rb-' + _item.registerInput('radio');
  83158. _this._labelId = 'lbl-' + _item.id;
  83159. _this._item.setElementClass('item-radio', true);
  83160. }
  83161. return _this;
  83162. }
  83163. Object.defineProperty(RadioButton.prototype, "color", {
  83164. /**
  83165. * @input {string} The color to use from your Sass `$colors` map.
  83166. * Default options are: `"primary"`, `"secondary"`, `"danger"`, `"light"`, and `"dark"`.
  83167. * For more information, see [Theming your App](/docs/theming/theming-your-app).
  83168. */
  83169. set: function (val) {
  83170. this._setColor(val);
  83171. if (this._item) {
  83172. this._item._updateColor(val, 'item-radio');
  83173. }
  83174. },
  83175. enumerable: true,
  83176. configurable: true
  83177. });
  83178. Object.defineProperty(RadioButton.prototype, "value", {
  83179. /**
  83180. * @input {any} The value of the radio button. Defaults to the generated id.
  83181. */
  83182. get: function () {
  83183. // if the value is not defined then use it's unique id
  83184. return Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["f" /* isBlank */])(this._value) ? this.id : this._value;
  83185. },
  83186. set: function (val) {
  83187. this._value = val;
  83188. },
  83189. enumerable: true,
  83190. configurable: true
  83191. });
  83192. Object.defineProperty(RadioButton.prototype, "checked", {
  83193. /**
  83194. * @input {boolean} If true, the element is selected, and other buttons in the group are unselected.
  83195. */
  83196. get: function () {
  83197. return this._checked;
  83198. },
  83199. set: function (val) {
  83200. this._checked = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  83201. if (this._item) {
  83202. this._item.setElementClass('item-radio-checked', this._checked);
  83203. }
  83204. },
  83205. enumerable: true,
  83206. configurable: true
  83207. });
  83208. Object.defineProperty(RadioButton.prototype, "disabled", {
  83209. /**
  83210. * @input {boolean} If true, the user cannot interact with this element.
  83211. */
  83212. get: function () {
  83213. return this._disabled || (this._group != null && this._group.disabled);
  83214. },
  83215. set: function (val) {
  83216. this._disabled = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  83217. this._item && this._item.setElementClass('item-radio-disabled', this._disabled);
  83218. },
  83219. enumerable: true,
  83220. configurable: true
  83221. });
  83222. /**
  83223. * @hidden
  83224. */
  83225. RadioButton.prototype.initFocus = function () {
  83226. this._elementRef.nativeElement.querySelector('button').focus();
  83227. };
  83228. /**
  83229. * @internal
  83230. */
  83231. RadioButton.prototype._click = function (ev) {
  83232. (void 0) /* console.debug */;
  83233. ev.preventDefault();
  83234. ev.stopPropagation();
  83235. this.checked = true;
  83236. this.ionSelect.emit(this.value);
  83237. };
  83238. /**
  83239. * @internal
  83240. */
  83241. RadioButton.prototype.ngOnInit = function () {
  83242. if (this._group && Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(this._group.value)) {
  83243. this.checked = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["g" /* isCheckedProperty */])(this._group.value, this.value);
  83244. }
  83245. if (this._group && this._group.disabled) {
  83246. this.disabled = this._group.disabled;
  83247. }
  83248. };
  83249. /**
  83250. * @internal
  83251. */
  83252. RadioButton.prototype.ngOnDestroy = function () {
  83253. this._form.deregister(this);
  83254. this._group && this._group.remove(this);
  83255. };
  83256. RadioButton.decorators = [
  83257. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  83258. selector: 'ion-radio',
  83259. template: '<div class="radio-icon" [class.radio-checked]="_checked"> ' +
  83260. '<div class="radio-inner"></div> ' +
  83261. '</div> ' +
  83262. '<button role="radio" ' +
  83263. 'type="button" ' +
  83264. 'ion-button="item-cover" ' +
  83265. '[id]="id" ' +
  83266. '[attr.aria-checked]="_checked" ' +
  83267. '[attr.aria-labelledby]="_labelId" ' +
  83268. '[attr.aria-disabled]="_disabled" ' +
  83269. 'class="item-cover"> ' +
  83270. '</button>',
  83271. host: {
  83272. '[class.radio-disabled]': '_disabled'
  83273. },
  83274. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  83275. },] },
  83276. ];
  83277. /** @nocollapse */
  83278. RadioButton.ctorParameters = function () { return [
  83279. { type: __WEBPACK_IMPORTED_MODULE_2__util_form__["a" /* Form */], },
  83280. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  83281. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  83282. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  83283. { type: __WEBPACK_IMPORTED_MODULE_5__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  83284. { type: __WEBPACK_IMPORTED_MODULE_6__radio_group__["a" /* RadioGroup */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  83285. ]; };
  83286. RadioButton.propDecorators = {
  83287. 'color': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83288. 'ionSelect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  83289. 'value': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83290. 'checked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83291. 'disabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83292. '_click': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click', ['$event'],] },],
  83293. };
  83294. return RadioButton;
  83295. }(__WEBPACK_IMPORTED_MODULE_3__ion__["a" /* Ion */]));
  83296. //# sourceMappingURL=radio-button.js.map
  83297. /***/ }),
  83298. /* 312 */
  83299. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  83300. "use strict";
  83301. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Range; });
  83302. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  83303. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  83304. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_util__ = __webpack_require__(3);
  83305. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  83306. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__ = __webpack_require__(15);
  83307. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_form__ = __webpack_require__(27);
  83308. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tap_click_haptic__ = __webpack_require__(51);
  83309. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_base_input__ = __webpack_require__(37);
  83310. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__item_item__ = __webpack_require__(28);
  83311. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__platform_platform__ = __webpack_require__(7);
  83312. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__util_dom__ = __webpack_require__(18);
  83313. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__gestures_ui_event_manager__ = __webpack_require__(36);
  83314. var __extends = (this && this.__extends) || (function () {
  83315. var extendStatics = Object.setPrototypeOf ||
  83316. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  83317. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  83318. return function (d, b) {
  83319. extendStatics(d, b);
  83320. function __() { this.constructor = d; }
  83321. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  83322. };
  83323. })();
  83324. /**
  83325. * @name Range
  83326. * @description
  83327. * The Range slider lets users select from a range of values by moving
  83328. * the slider knob. It can accept dual knobs, but by default one knob
  83329. * controls the value of the range.
  83330. *
  83331. * ### Range Labels
  83332. * Labels can be placed on either side of the range by adding the
  83333. * `range-left` or `range-right` property to the element. The element
  83334. * doesn't have to be an `ion-label`, it can be added to any element
  83335. * to place it to the left or right of the range. See [usage](#usage)
  83336. * below for examples.
  83337. *
  83338. *
  83339. * ### Minimum and Maximum Values
  83340. * Minimum and maximum values can be passed to the range through the `min`
  83341. * and `max` properties, respectively. By default, the range sets the `min`
  83342. * to `0` and the `max` to `100`.
  83343. *
  83344. *
  83345. * ### Steps and Snaps
  83346. * The `step` property specifies the value granularity of the range's value.
  83347. * It can be useful to set the `step` when the value isn't in increments of `1`.
  83348. * Setting the `step` property will show tick marks on the range for each step.
  83349. * The `snaps` property can be set to automatically move the knob to the nearest
  83350. * tick mark based on the step property value.
  83351. *
  83352. *
  83353. * ### Dual Knobs
  83354. * Setting the `dualKnobs` property to `true` on the range component will
  83355. * enable two knobs on the range. If the range has two knobs, the value will
  83356. * be an object containing two properties: `lower` and `upper`.
  83357. *
  83358. *
  83359. * @usage
  83360. * ```html
  83361. * <ion-list>
  83362. * <ion-item>
  83363. * <ion-range [(ngModel)]="singleValue" color="danger" pin="true"></ion-range>
  83364. * </ion-item>
  83365. *
  83366. * <ion-item>
  83367. * <ion-range min="-200" max="200" [(ngModel)]="saturation" color="secondary">
  83368. * <ion-label range-left>-200</ion-label>
  83369. * <ion-label range-right>200</ion-label>
  83370. * </ion-range>
  83371. * </ion-item>
  83372. *
  83373. * <ion-item>
  83374. * <ion-range min="20" max="80" step="2" [(ngModel)]="brightness">
  83375. * <ion-icon small range-left name="sunny"></ion-icon>
  83376. * <ion-icon range-right name="sunny"></ion-icon>
  83377. * </ion-range>
  83378. * </ion-item>
  83379. *
  83380. * <ion-item>
  83381. * <ion-label>step=100, snaps, {{singleValue4}}</ion-label>
  83382. * <ion-range min="1000" max="2000" step="100" snaps="true" color="secondary" [(ngModel)]="singleValue4"></ion-range>
  83383. * </ion-item>
  83384. *
  83385. * <ion-item>
  83386. * <ion-label>dual, step=3, snaps, {{dualValue2 | json}}</ion-label>
  83387. * <ion-range dualKnobs="true" [(ngModel)]="dualValue2" min="21" max="72" step="3" snaps="true"></ion-range>
  83388. * </ion-item>
  83389. * </ion-list>
  83390. * ```
  83391. *
  83392. *
  83393. * @demo /docs/demos/src/range/
  83394. */
  83395. var Range = (function (_super) {
  83396. __extends(Range, _super);
  83397. function Range(form, _haptic, item, config, _plt, elementRef, renderer, _dom, _cd) {
  83398. var _this = _super.call(this, config, elementRef, renderer, 'range', 0, form, item, null) || this;
  83399. _this._haptic = _haptic;
  83400. _this._plt = _plt;
  83401. _this._dom = _dom;
  83402. _this._cd = _cd;
  83403. _this._min = 0;
  83404. _this._max = 100;
  83405. _this._step = 1;
  83406. _this._valA = 0;
  83407. _this._valB = 0;
  83408. _this._ratioA = 0;
  83409. _this._ratioB = 0;
  83410. _this._events = new __WEBPACK_IMPORTED_MODULE_11__gestures_ui_event_manager__["a" /* UIEventManager */](_plt);
  83411. return _this;
  83412. }
  83413. Object.defineProperty(Range.prototype, "min", {
  83414. /**
  83415. * @input {number} Minimum integer value of the range. Defaults to `0`.
  83416. */
  83417. get: function () {
  83418. return this._min;
  83419. },
  83420. set: function (val) {
  83421. val = Math.round(val);
  83422. if (!isNaN(val)) {
  83423. this._min = val;
  83424. this._inputUpdated();
  83425. }
  83426. },
  83427. enumerable: true,
  83428. configurable: true
  83429. });
  83430. Object.defineProperty(Range.prototype, "max", {
  83431. /**
  83432. * @input {number} Maximum integer value of the range. Defaults to `100`.
  83433. */
  83434. get: function () {
  83435. return this._max;
  83436. },
  83437. set: function (val) {
  83438. val = Math.round(val);
  83439. if (!isNaN(val)) {
  83440. this._max = val;
  83441. this._inputUpdated();
  83442. }
  83443. },
  83444. enumerable: true,
  83445. configurable: true
  83446. });
  83447. Object.defineProperty(Range.prototype, "step", {
  83448. /**
  83449. * @input {number} Specifies the value granularity. Defaults to `1`.
  83450. */
  83451. get: function () {
  83452. return this._step;
  83453. },
  83454. set: function (val) {
  83455. val = Math.round(val);
  83456. if (!isNaN(val) && val > 0) {
  83457. this._step = val;
  83458. }
  83459. },
  83460. enumerable: true,
  83461. configurable: true
  83462. });
  83463. Object.defineProperty(Range.prototype, "snaps", {
  83464. /**
  83465. * @input {boolean} If true, the knob snaps to tick marks evenly spaced based
  83466. * on the step property value. Defaults to `false`.
  83467. */
  83468. get: function () {
  83469. return this._snaps;
  83470. },
  83471. set: function (val) {
  83472. this._snaps = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["o" /* isTrueProperty */])(val);
  83473. },
  83474. enumerable: true,
  83475. configurable: true
  83476. });
  83477. Object.defineProperty(Range.prototype, "pin", {
  83478. /**
  83479. * @input {boolean} If true, a pin with integer value is shown when the knob
  83480. * is pressed. Defaults to `false`.
  83481. */
  83482. get: function () {
  83483. return this._pin;
  83484. },
  83485. set: function (val) {
  83486. this._pin = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["o" /* isTrueProperty */])(val);
  83487. },
  83488. enumerable: true,
  83489. configurable: true
  83490. });
  83491. Object.defineProperty(Range.prototype, "debounce", {
  83492. /**
  83493. * @input {number} How long, in milliseconds, to wait to trigger the
  83494. * `ionChange` event after each change in the range value. Default `0`.
  83495. */
  83496. get: function () {
  83497. return this._debouncer.wait;
  83498. },
  83499. set: function (val) {
  83500. this._debouncer.wait = val;
  83501. },
  83502. enumerable: true,
  83503. configurable: true
  83504. });
  83505. Object.defineProperty(Range.prototype, "dualKnobs", {
  83506. /**
  83507. * @input {boolean} Show two knobs. Defaults to `false`.
  83508. */
  83509. get: function () {
  83510. return this._dual;
  83511. },
  83512. set: function (val) {
  83513. this._dual = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["o" /* isTrueProperty */])(val);
  83514. },
  83515. enumerable: true,
  83516. configurable: true
  83517. });
  83518. Object.defineProperty(Range.prototype, "ratio", {
  83519. /**
  83520. * Returns the ratio of the knob's is current location, which is a number
  83521. * between `0` and `1`. If two knobs are used, this property represents
  83522. * the lower value.
  83523. */
  83524. get: function () {
  83525. if (this._dual) {
  83526. return Math.min(this._ratioA, this._ratioB);
  83527. }
  83528. return this._ratioA;
  83529. },
  83530. enumerable: true,
  83531. configurable: true
  83532. });
  83533. Object.defineProperty(Range.prototype, "ratioUpper", {
  83534. /**
  83535. * Returns the ratio of the upper value's is current location, which is
  83536. * a number between `0` and `1`. If there is only one knob, then this
  83537. * will return `null`.
  83538. */
  83539. get: function () {
  83540. if (this._dual) {
  83541. return Math.max(this._ratioA, this._ratioB);
  83542. }
  83543. return null;
  83544. },
  83545. enumerable: true,
  83546. configurable: true
  83547. });
  83548. /**
  83549. * @hidden
  83550. */
  83551. Range.prototype.ngAfterContentInit = function () {
  83552. this._initialize();
  83553. // add touchstart/mousedown listeners
  83554. this._events.pointerEvents({
  83555. element: this._slider.nativeElement,
  83556. pointerDown: this._pointerDown.bind(this),
  83557. pointerMove: this._pointerMove.bind(this),
  83558. pointerUp: this._pointerUp.bind(this),
  83559. zone: true
  83560. });
  83561. // build all the ticks if there are any to show
  83562. this._createTicks();
  83563. };
  83564. /** @internal */
  83565. Range.prototype._pointerDown = function (ev) {
  83566. // TODO: we could stop listening for events instead of checking this._disabled.
  83567. // since there are a lot of events involved, this solution is
  83568. // enough for the moment
  83569. if (this._disabled) {
  83570. return false;
  83571. }
  83572. // trigger ionFocus event
  83573. this._fireFocus();
  83574. // prevent default so scrolling does not happen
  83575. ev.preventDefault();
  83576. ev.stopPropagation();
  83577. // get the start coordinates
  83578. var current = Object(__WEBPACK_IMPORTED_MODULE_10__util_dom__["f" /* pointerCoord */])(ev);
  83579. // get the full dimensions of the slider element
  83580. var rect = this._rect = this._plt.getElementBoundingClientRect(this._slider.nativeElement);
  83581. // figure out which knob they started closer to
  83582. var ratio = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["a" /* clamp */])(0, (current.x - rect.left) / (rect.width), 1);
  83583. this._activeB = this._dual && (Math.abs(ratio - this._ratioA) > Math.abs(ratio - this._ratioB));
  83584. // update the active knob's position
  83585. this._update(current, rect, true);
  83586. // trigger a haptic start
  83587. this._haptic.gestureSelectionStart();
  83588. // return true so the pointer events
  83589. // know everything's still valid
  83590. return true;
  83591. };
  83592. /** @internal */
  83593. Range.prototype._pointerMove = function (ev) {
  83594. if (this._disabled) {
  83595. return;
  83596. }
  83597. // prevent default so scrolling does not happen
  83598. ev.preventDefault();
  83599. ev.stopPropagation();
  83600. // update the active knob's position
  83601. var hasChanged = this._update(Object(__WEBPACK_IMPORTED_MODULE_10__util_dom__["f" /* pointerCoord */])(ev), this._rect, true);
  83602. if (hasChanged && this._snaps) {
  83603. // trigger a haptic selection changed event
  83604. // if this is a snap range
  83605. this._haptic.gestureSelectionChanged();
  83606. }
  83607. };
  83608. /** @internal */
  83609. Range.prototype._pointerUp = function (ev) {
  83610. if (this._disabled) {
  83611. return;
  83612. }
  83613. // prevent default so scrolling does not happen
  83614. ev.preventDefault();
  83615. ev.stopPropagation();
  83616. // update the active knob's position
  83617. this._update(Object(__WEBPACK_IMPORTED_MODULE_10__util_dom__["f" /* pointerCoord */])(ev), this._rect, false);
  83618. // trigger a haptic end
  83619. this._haptic.gestureSelectionEnd();
  83620. // trigger ionBlur event
  83621. this._fireBlur();
  83622. };
  83623. /** @internal */
  83624. Range.prototype._update = function (current, rect, isPressed) {
  83625. // figure out where the pointer is currently at
  83626. // update the knob being interacted with
  83627. var ratio = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["a" /* clamp */])(0, (current.x - rect.left) / (rect.width), 1);
  83628. var val = this._ratioToValue(ratio);
  83629. if (this._snaps) {
  83630. // snaps the ratio to the current value
  83631. ratio = this._valueToRatio(val);
  83632. }
  83633. // update which knob is pressed
  83634. this._pressed = isPressed;
  83635. var valChanged = false;
  83636. if (this._activeB) {
  83637. // when the pointer down started it was determined
  83638. // that knob B was the one they were interacting with
  83639. this._pressedB = isPressed;
  83640. this._pressedA = false;
  83641. this._ratioB = ratio;
  83642. valChanged = val === this._valB;
  83643. this._valB = val;
  83644. }
  83645. else {
  83646. // interacting with knob A
  83647. this._pressedA = isPressed;
  83648. this._pressedB = false;
  83649. this._ratioA = ratio;
  83650. valChanged = val === this._valA;
  83651. this._valA = val;
  83652. }
  83653. this._updateBar();
  83654. if (valChanged) {
  83655. return false;
  83656. }
  83657. // value has been updated
  83658. var value;
  83659. if (this._dual) {
  83660. // dual knobs have an lower and upper value
  83661. value = {
  83662. lower: Math.min(this._valA, this._valB),
  83663. upper: Math.max(this._valA, this._valB)
  83664. };
  83665. (void 0) /* console.debug */;
  83666. }
  83667. else {
  83668. // single knob only has one value
  83669. value = this._valA;
  83670. (void 0) /* console.debug */;
  83671. }
  83672. // Update input value
  83673. this.value = value;
  83674. return true;
  83675. };
  83676. /** @internal */
  83677. Range.prototype._updateBar = function () {
  83678. var ratioA = this._ratioA;
  83679. var ratioB = this._ratioB;
  83680. if (this._dual) {
  83681. this._barL = (Math.min(ratioA, ratioB) * 100) + "%";
  83682. this._barR = 100 - (Math.max(ratioA, ratioB) * 100) + "%";
  83683. }
  83684. else {
  83685. this._barL = '';
  83686. this._barR = 100 - (ratioA * 100) + "%";
  83687. }
  83688. this._updateTicks();
  83689. };
  83690. /** @internal */
  83691. Range.prototype._createTicks = function () {
  83692. var _this = this;
  83693. if (this._snaps) {
  83694. this._dom.write(function () {
  83695. // TODO: Fix to not use RAF
  83696. _this._ticks = [];
  83697. for (var value = _this._min; value <= _this._max; value += _this._step) {
  83698. var ratio = _this._valueToRatio(value);
  83699. _this._ticks.push({
  83700. ratio: ratio,
  83701. left: ratio * 100 + "%",
  83702. });
  83703. }
  83704. _this._updateTicks();
  83705. });
  83706. }
  83707. };
  83708. /** @internal */
  83709. Range.prototype._updateTicks = function () {
  83710. var ticks = this._ticks;
  83711. var ratio = this.ratio;
  83712. if (this._snaps && ticks) {
  83713. if (this._dual) {
  83714. var upperRatio = this.ratioUpper;
  83715. ticks.forEach(function (t) {
  83716. t.active = (t.ratio >= ratio && t.ratio <= upperRatio);
  83717. });
  83718. }
  83719. else {
  83720. ticks.forEach(function (t) {
  83721. t.active = (t.ratio <= ratio);
  83722. });
  83723. }
  83724. }
  83725. };
  83726. /** @hidden */
  83727. Range.prototype._keyChg = function (isIncrease, isKnobB) {
  83728. var step = this._step;
  83729. if (isKnobB) {
  83730. if (isIncrease) {
  83731. this._valB += step;
  83732. }
  83733. else {
  83734. this._valB -= step;
  83735. }
  83736. this._valB = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["a" /* clamp */])(this._min, this._valB, this._max);
  83737. this._ratioB = this._valueToRatio(this._valB);
  83738. }
  83739. else {
  83740. if (isIncrease) {
  83741. this._valA += step;
  83742. }
  83743. else {
  83744. this._valA -= step;
  83745. }
  83746. this._valA = Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["a" /* clamp */])(this._min, this._valA, this._max);
  83747. this._ratioA = this._valueToRatio(this._valA);
  83748. }
  83749. this._updateBar();
  83750. };
  83751. /** @internal */
  83752. Range.prototype._ratioToValue = function (ratio) {
  83753. ratio = Math.round(((this._max - this._min) * ratio));
  83754. ratio = Math.round(ratio / this._step) * this._step + this._min;
  83755. return Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["a" /* clamp */])(this._min, ratio, this._max);
  83756. };
  83757. /** @internal */
  83758. Range.prototype._valueToRatio = function (value) {
  83759. value = Math.round((value - this._min) / this._step) * this._step;
  83760. value = value / (this._max - this._min);
  83761. return Object(__WEBPACK_IMPORTED_MODULE_2__util_util__["a" /* clamp */])(0, value, 1);
  83762. };
  83763. Range.prototype._inputNormalize = function (val) {
  83764. if (this._dual) {
  83765. return val;
  83766. }
  83767. else {
  83768. val = parseFloat(val);
  83769. return isNaN(val) ? undefined : val;
  83770. }
  83771. };
  83772. /**
  83773. * @hidden
  83774. */
  83775. Range.prototype._inputUpdated = function () {
  83776. var val = this.value;
  83777. if (this._dual) {
  83778. this._valA = val.lower;
  83779. this._valB = val.upper;
  83780. this._ratioA = this._valueToRatio(val.lower);
  83781. this._ratioB = this._valueToRatio(val.upper);
  83782. }
  83783. else {
  83784. this._valA = val;
  83785. this._ratioA = this._valueToRatio(val);
  83786. }
  83787. this._updateBar();
  83788. this._cd.detectChanges();
  83789. };
  83790. /**
  83791. * @hidden
  83792. */
  83793. Range.prototype.ngOnDestroy = function () {
  83794. _super.prototype.ngOnDestroy.call(this);
  83795. this._events.destroy();
  83796. };
  83797. Range.decorators = [
  83798. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  83799. selector: 'ion-range',
  83800. template: '<ng-content select="[range-left]"></ng-content>' +
  83801. '<div class="range-slider" #slider>' +
  83802. '<div class="range-tick" *ngFor="let t of _ticks" [style.left]="t.left" [class.range-tick-active]="t.active" role="presentation"></div>' +
  83803. '<div class="range-bar" role="presentation"></div>' +
  83804. '<div class="range-bar range-bar-active" [style.left]="_barL" [style.right]="_barR" #bar role="presentation"></div>' +
  83805. '<div class="range-knob-handle" (ionIncrease)="_keyChg(true, false)" (ionDecrease)="_keyChg(false, false)" [ratio]="_ratioA" [val]="_valA" [pin]="_pin" [pressed]="_pressedA" [min]="_min" [max]="_max" [disabled]="_disabled" [labelId]="_labelId"></div>' +
  83806. '<div class="range-knob-handle" (ionIncrease)="_keyChg(true, true)" (ionDecrease)="_keyChg(false, true)" [ratio]="_ratioB" [val]="_valB" [pin]="_pin" [pressed]="_pressedB" [min]="_min" [max]="_max" [disabled]="_disabled" [labelId]="_labelId" *ngIf="_dual"></div>' +
  83807. '</div>' +
  83808. '<ng-content select="[range-right]"></ng-content>',
  83809. host: {
  83810. '[class.range-disabled]': '_disabled',
  83811. '[class.range-pressed]': '_pressed',
  83812. '[class.range-has-pin]': '_pin'
  83813. },
  83814. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["c" /* NG_VALUE_ACCESSOR */], useExisting: Range, multi: true }],
  83815. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  83816. },] },
  83817. ];
  83818. /** @nocollapse */
  83819. Range.ctorParameters = function () { return [
  83820. { type: __WEBPACK_IMPORTED_MODULE_5__util_form__["a" /* Form */], },
  83821. { type: __WEBPACK_IMPORTED_MODULE_6__tap_click_haptic__["a" /* Haptic */], },
  83822. { type: __WEBPACK_IMPORTED_MODULE_8__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  83823. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  83824. { type: __WEBPACK_IMPORTED_MODULE_9__platform_platform__["a" /* Platform */], },
  83825. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  83826. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  83827. { type: __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__["a" /* DomController */], },
  83828. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["j" /* ChangeDetectorRef */], },
  83829. ]; };
  83830. Range.propDecorators = {
  83831. '_slider': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['slider',] },],
  83832. 'min': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83833. 'max': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83834. 'step': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83835. 'snaps': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83836. 'pin': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83837. 'debounce': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83838. 'dualKnobs': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83839. };
  83840. return Range;
  83841. }(__WEBPACK_IMPORTED_MODULE_7__util_base_input__["a" /* BaseInput */]));
  83842. //# sourceMappingURL=range.js.map
  83843. /***/ }),
  83844. /* 313 */
  83845. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  83846. "use strict";
  83847. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RangeKnob; });
  83848. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  83849. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_key__ = __webpack_require__(30);
  83850. /**
  83851. * @hidden
  83852. */
  83853. var RangeKnob = (function () {
  83854. function RangeKnob() {
  83855. this.ionIncrease = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  83856. this.ionDecrease = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  83857. }
  83858. Object.defineProperty(RangeKnob.prototype, "ratio", {
  83859. set: function (r) {
  83860. this._x = r * 100 + "%";
  83861. },
  83862. enumerable: true,
  83863. configurable: true
  83864. });
  83865. RangeKnob.prototype._keyup = function (ev) {
  83866. var keyCode = ev.keyCode;
  83867. if (keyCode === __WEBPACK_IMPORTED_MODULE_1__platform_key__["d" /* KEY_LEFT */] || keyCode === __WEBPACK_IMPORTED_MODULE_1__platform_key__["a" /* KEY_DOWN */]) {
  83868. (void 0) /* console.debug */;
  83869. this.ionDecrease.emit();
  83870. ev.preventDefault();
  83871. ev.stopPropagation();
  83872. }
  83873. else if (keyCode === __WEBPACK_IMPORTED_MODULE_1__platform_key__["e" /* KEY_RIGHT */] || keyCode === __WEBPACK_IMPORTED_MODULE_1__platform_key__["h" /* KEY_UP */]) {
  83874. (void 0) /* console.debug */;
  83875. this.ionIncrease.emit();
  83876. ev.preventDefault();
  83877. ev.stopPropagation();
  83878. }
  83879. };
  83880. RangeKnob.decorators = [
  83881. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  83882. selector: '.range-knob-handle',
  83883. template: '<div class="range-pin" *ngIf="pin" role="presentation">{{val}}</div>' +
  83884. '<div class="range-knob" role="presentation"></div>',
  83885. host: {
  83886. '[class.range-knob-pressed]': 'pressed',
  83887. '[class.range-knob-min]': 'val===min||val===undefined',
  83888. '[class.range-knob-max]': 'val===max',
  83889. '[style.left]': '_x',
  83890. '[attr.aria-valuenow]': 'val',
  83891. '[attr.aria-valuemin]': 'min',
  83892. '[attr.aria-valuemax]': 'max',
  83893. '[attr.aria-disabled]': 'disabled',
  83894. '[attr.aria-labelledby]': 'labelId',
  83895. '[tabindex]': 'disabled?-1:0',
  83896. 'role': 'slider'
  83897. }
  83898. },] },
  83899. ];
  83900. /** @nocollapse */
  83901. RangeKnob.ctorParameters = function () { return []; };
  83902. RangeKnob.propDecorators = {
  83903. 'ratio': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83904. 'pressed': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83905. 'pin': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83906. 'min': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83907. 'max': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83908. 'val': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83909. 'disabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83910. 'labelId': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83911. 'ionIncrease': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  83912. 'ionDecrease': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  83913. '_keyup': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['keydown', ['$event'],] },],
  83914. };
  83915. return RangeKnob;
  83916. }());
  83917. //# sourceMappingURL=range-knob.js.map
  83918. /***/ }),
  83919. /* 314 */
  83920. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  83921. "use strict";
  83922. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RefresherContent; });
  83923. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  83924. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  83925. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__refresher__ = __webpack_require__(133);
  83926. /**
  83927. * @hidden
  83928. */
  83929. var RefresherContent = (function () {
  83930. function RefresherContent(r, _config) {
  83931. this.r = r;
  83932. this._config = _config;
  83933. }
  83934. /**
  83935. * @hidden
  83936. */
  83937. RefresherContent.prototype.ngOnInit = function () {
  83938. if (!this.pullingIcon) {
  83939. this.pullingIcon = this._config.get('ionPullIcon', 'arrow-down');
  83940. }
  83941. if (!this.refreshingSpinner) {
  83942. this.refreshingSpinner = this._config.get('ionRefreshingSpinner', this._config.get('spinner', 'ios'));
  83943. }
  83944. };
  83945. RefresherContent.decorators = [
  83946. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  83947. selector: 'ion-refresher-content',
  83948. template: '<div class="refresher-pulling">' +
  83949. '<div class="refresher-pulling-icon" *ngIf="pullingIcon">' +
  83950. '<ion-icon [name]="pullingIcon"></ion-icon>' +
  83951. '</div>' +
  83952. '<div class="refresher-pulling-text" [innerHTML]="pullingText" *ngIf="pullingText"></div>' +
  83953. '</div>' +
  83954. '<div class="refresher-refreshing">' +
  83955. '<div class="refresher-refreshing-icon">' +
  83956. '<ion-spinner [name]="refreshingSpinner"></ion-spinner>' +
  83957. '</div>' +
  83958. '<div class="refresher-refreshing-text" [innerHTML]="refreshingText" *ngIf="refreshingText"></div>' +
  83959. '</div>',
  83960. host: {
  83961. '[attr.state]': 'r.state'
  83962. },
  83963. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  83964. },] },
  83965. ];
  83966. /** @nocollapse */
  83967. RefresherContent.ctorParameters = function () { return [
  83968. { type: __WEBPACK_IMPORTED_MODULE_2__refresher__["a" /* Refresher */], },
  83969. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  83970. ]; };
  83971. RefresherContent.propDecorators = {
  83972. 'pullingIcon': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83973. 'pullingText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83974. 'refreshingSpinner': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83975. 'refreshingText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  83976. };
  83977. return RefresherContent;
  83978. }());
  83979. //# sourceMappingURL=refresher-content.js.map
  83980. /***/ }),
  83981. /* 315 */
  83982. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  83983. "use strict";
  83984. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Scroll; });
  83985. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  83986. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  83987. /**
  83988. * @name Scroll
  83989. * @description
  83990. * Scroll is a non-flexboxed scroll area that can scroll horizontally or vertically. `ion-Scroll` Can be used in places where you may not need a full page scroller, but a highly customized one, such as image scubber or comment scroller.
  83991. * @usage
  83992. * ```html
  83993. * <ion-scroll scrollX="true">
  83994. * </ion-scroll>
  83995. *
  83996. * <ion-scroll scrollY="true">
  83997. * </ion-scroll>
  83998. *
  83999. * <ion-scroll scrollX="true" scrollY="true">
  84000. * </ion-scroll>
  84001. * ```
  84002. * @demo /docs/demos/src/scroll/
  84003. */
  84004. var Scroll = (function () {
  84005. function Scroll() {
  84006. this._scrollX = false;
  84007. this._scrollY = false;
  84008. this._zoom = false;
  84009. this._maxZoom = 1;
  84010. /**
  84011. * @hidden
  84012. */
  84013. this.maxScale = 3;
  84014. /**
  84015. * @hidden
  84016. */
  84017. this.zoomDuration = 250;
  84018. }
  84019. Object.defineProperty(Scroll.prototype, "scrollX", {
  84020. /**
  84021. * @input {boolean} If true, scrolling along the X axis is enabled.
  84022. */
  84023. get: function () {
  84024. return this._scrollX;
  84025. },
  84026. set: function (val) {
  84027. this._scrollX = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  84028. },
  84029. enumerable: true,
  84030. configurable: true
  84031. });
  84032. Object.defineProperty(Scroll.prototype, "scrollY", {
  84033. /**
  84034. * @input {boolean} If true, scrolling along the Y axis is enabled; requires the following CSS declaration: ion-scroll { white-space: nowrap; }
  84035. */
  84036. get: function () {
  84037. return this._scrollY;
  84038. },
  84039. set: function (val) {
  84040. this._scrollY = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  84041. },
  84042. enumerable: true,
  84043. configurable: true
  84044. });
  84045. Object.defineProperty(Scroll.prototype, "zoom", {
  84046. /**
  84047. * @input {boolean} If true, zooming is enabled.
  84048. */
  84049. get: function () {
  84050. return this._zoom;
  84051. },
  84052. set: function (val) {
  84053. this._zoom = Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["o" /* isTrueProperty */])(val);
  84054. },
  84055. enumerable: true,
  84056. configurable: true
  84057. });
  84058. Object.defineProperty(Scroll.prototype, "maxZoom", {
  84059. /**
  84060. * @input {number} Set the max zoom amount.
  84061. */
  84062. get: function () {
  84063. return this._maxZoom;
  84064. },
  84065. set: function (val) {
  84066. this._maxZoom = val;
  84067. },
  84068. enumerable: true,
  84069. configurable: true
  84070. });
  84071. /**
  84072. * @hidden
  84073. * Add a scroll event handler to the scroll element if it exists.
  84074. * @param {Function} handler The scroll handler to add to the scroll element.
  84075. * @returns {?Function} a function to remove the specified handler, otherwise
  84076. * undefined if the scroll element doesn't exist.
  84077. */
  84078. Scroll.prototype.addScrollEventListener = function (handler) {
  84079. (void 0) /* assert */;
  84080. var ele = this._scrollContent.nativeElement;
  84081. ele.addEventListener('scroll', handler);
  84082. return function () {
  84083. ele.removeEventListener('scroll', handler);
  84084. };
  84085. };
  84086. Scroll.decorators = [
  84087. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  84088. selector: 'ion-scroll',
  84089. template: '<div class="scroll-content" #scrollContent>' +
  84090. '<div class="scroll-zoom-wrapper">' +
  84091. '<ng-content></ng-content>' +
  84092. '</div>' +
  84093. '</div>',
  84094. host: {
  84095. '[class.scroll-x]': 'scrollX',
  84096. '[class.scroll-y]': 'scrollY'
  84097. },
  84098. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  84099. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  84100. },] },
  84101. ];
  84102. /** @nocollapse */
  84103. Scroll.ctorParameters = function () { return []; };
  84104. Scroll.propDecorators = {
  84105. 'scrollX': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84106. 'scrollY': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84107. 'zoom': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84108. 'maxZoom': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84109. '_scrollContent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['scrollContent', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */] },] },],
  84110. };
  84111. return Scroll;
  84112. }());
  84113. //# sourceMappingURL=scroll.js.map
  84114. /***/ }),
  84115. /* 316 */
  84116. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  84117. "use strict";
  84118. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Searchbar; });
  84119. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  84120. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  84121. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  84122. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_base_input__ = __webpack_require__(37);
  84123. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_util__ = __webpack_require__(3);
  84124. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_debouncer__ = __webpack_require__(181);
  84125. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__platform_platform__ = __webpack_require__(7);
  84126. var __extends = (this && this.__extends) || (function () {
  84127. var extendStatics = Object.setPrototypeOf ||
  84128. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  84129. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  84130. return function (d, b) {
  84131. extendStatics(d, b);
  84132. function __() { this.constructor = d; }
  84133. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  84134. };
  84135. })();
  84136. /**
  84137. * @name Searchbar
  84138. * @module ionic
  84139. * @description
  84140. * Manages the display of a Searchbar which can be used to search or filter items.
  84141. *
  84142. * @usage
  84143. * ```html
  84144. * <ion-searchbar
  84145. * [(ngModel)]="myInput"
  84146. * [showCancelButton]="shouldShowCancel"
  84147. * (ionInput)="onInput($event)"
  84148. * (ionCancel)="onCancel($event)">
  84149. * </ion-searchbar>
  84150. * ```
  84151. *
  84152. * @demo /docs/demos/src/searchbar/
  84153. * @see {@link /docs/components#searchbar Searchbar Component Docs}
  84154. */
  84155. var Searchbar = (function (_super) {
  84156. __extends(Searchbar, _super);
  84157. function Searchbar(config, _plt, elementRef, renderer, ngControl) {
  84158. var _this = _super.call(this, config, elementRef, renderer, 'searchbar', '', null, null, ngControl) || this;
  84159. _this._plt = _plt;
  84160. _this._shouldBlur = true;
  84161. _this._shouldAlignLeft = true;
  84162. _this._isCancelVisible = false;
  84163. _this._spellcheck = false;
  84164. _this._autocomplete = 'off';
  84165. _this._autocorrect = 'off';
  84166. _this._isActive = false;
  84167. _this._showCancelButton = false;
  84168. _this._animated = false;
  84169. _this._inputDebouncer = new __WEBPACK_IMPORTED_MODULE_5__util_debouncer__["a" /* TimeoutDebouncer */](0);
  84170. /**
  84171. * @input {string} Set the the cancel button text. Default: `"Cancel"`.
  84172. */
  84173. _this.cancelButtonText = 'Cancel';
  84174. /**
  84175. * @input {string} Set the input's placeholder. Default `"Search"`.
  84176. */
  84177. _this.placeholder = 'Search';
  84178. /**
  84179. * @input {string} Set the type of the input. Values: `"text"`, `"password"`, `"email"`, `"number"`, `"search"`, `"tel"`, `"url"`. Default `"search"`.
  84180. */
  84181. _this.type = 'search';
  84182. /**
  84183. * @output {event} Emitted when the Searchbar input has changed, including when it's cleared.
  84184. */
  84185. _this.ionInput = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  84186. /**
  84187. * @output {event} Emitted when the cancel button is clicked.
  84188. */
  84189. _this.ionCancel = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  84190. /**
  84191. * @output {event} Emitted when the clear input button is clicked.
  84192. */
  84193. _this.ionClear = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  84194. _this.debounce = 250;
  84195. return _this;
  84196. }
  84197. Object.defineProperty(Searchbar.prototype, "showCancelButton", {
  84198. /**
  84199. * @input {boolean} If true, show the cancel button. Default `false`.
  84200. */
  84201. get: function () {
  84202. return this._showCancelButton;
  84203. },
  84204. set: function (val) {
  84205. this._showCancelButton = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  84206. },
  84207. enumerable: true,
  84208. configurable: true
  84209. });
  84210. Object.defineProperty(Searchbar.prototype, "debounce", {
  84211. /**
  84212. * @input {number} How long, in milliseconds, to wait to trigger the `ionInput` event after each keystroke. Default `250`.
  84213. */
  84214. get: function () {
  84215. return this._debouncer.wait;
  84216. },
  84217. set: function (val) {
  84218. this._debouncer.wait = val;
  84219. this._inputDebouncer.wait = val;
  84220. },
  84221. enumerable: true,
  84222. configurable: true
  84223. });
  84224. Object.defineProperty(Searchbar.prototype, "autocomplete", {
  84225. /**
  84226. * @input {string} Set the input's autocomplete property. Values: `"on"`, `"off"`. Default `"off"`.
  84227. */
  84228. set: function (val) {
  84229. this._autocomplete = (val === '' || val === 'on') ? 'on' : this._config.get('autocomplete', 'off');
  84230. },
  84231. enumerable: true,
  84232. configurable: true
  84233. });
  84234. Object.defineProperty(Searchbar.prototype, "autocorrect", {
  84235. /**
  84236. * @input {string} Set the input's autocorrect property. Values: `"on"`, `"off"`. Default `"off"`.
  84237. */
  84238. set: function (val) {
  84239. this._autocorrect = (val === '' || val === 'on') ? 'on' : this._config.get('autocorrect', 'off');
  84240. },
  84241. enumerable: true,
  84242. configurable: true
  84243. });
  84244. Object.defineProperty(Searchbar.prototype, "spellcheck", {
  84245. /**
  84246. * @input {string|boolean} Set the input's spellcheck property. Values: `true`, `false`. Default `false`.
  84247. */
  84248. set: function (val) {
  84249. this._spellcheck = (val === '' || val === 'true' || val === true) ? true : this._config.getBoolean('spellcheck', false);
  84250. },
  84251. enumerable: true,
  84252. configurable: true
  84253. });
  84254. Object.defineProperty(Searchbar.prototype, "animated", {
  84255. /**
  84256. * @input {boolean} If true, enable searchbar animation. Default `false`.
  84257. */
  84258. get: function () {
  84259. return this._animated;
  84260. },
  84261. set: function (val) {
  84262. this._animated = Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["o" /* isTrueProperty */])(val);
  84263. },
  84264. enumerable: true,
  84265. configurable: true
  84266. });
  84267. /**
  84268. * @hidden
  84269. * On Initialization check for attributes
  84270. */
  84271. Searchbar.prototype.ngOnInit = function () {
  84272. var showCancelButton = this.showCancelButton;
  84273. if (typeof showCancelButton === 'string') {
  84274. this.showCancelButton = (showCancelButton === '' || showCancelButton === 'true');
  84275. }
  84276. };
  84277. /**
  84278. * @hidden
  84279. */
  84280. Searchbar.prototype._inputUpdated = function () {
  84281. var ele = this._searchbarInput.nativeElement;
  84282. var value = this._value;
  84283. // It is important not to re-assign the value if it is the same, because,
  84284. // otherwise, the caret is moved to the end of the input
  84285. if (ele.value !== value) {
  84286. ele.value = value;
  84287. }
  84288. this.positionElements();
  84289. };
  84290. /**
  84291. * @hidden
  84292. * Positions the input search icon, placeholder, and the cancel button
  84293. * based on the input value and if it is focused. (ios only)
  84294. */
  84295. Searchbar.prototype.positionElements = function () {
  84296. var isAnimated = this._animated;
  84297. var prevAlignLeft = this._shouldAlignLeft;
  84298. var shouldAlignLeft = (!isAnimated || (this._value && this._value.toString().trim() !== '') || this._isFocus === true);
  84299. this._shouldAlignLeft = shouldAlignLeft;
  84300. if (this._mode !== 'ios') {
  84301. return;
  84302. }
  84303. if (prevAlignLeft !== shouldAlignLeft) {
  84304. this.positionPlaceholder();
  84305. }
  84306. if (isAnimated) {
  84307. this.positionCancelButton();
  84308. }
  84309. };
  84310. Searchbar.prototype.positionPlaceholder = function () {
  84311. var inputEle = this._searchbarInput.nativeElement;
  84312. var iconEle = this._searchbarIcon.nativeElement;
  84313. if (this._shouldAlignLeft) {
  84314. inputEle.removeAttribute('style');
  84315. iconEle.removeAttribute('style');
  84316. }
  84317. else {
  84318. // Create a dummy span to get the placeholder width
  84319. var doc = this._plt.doc();
  84320. var tempSpan = doc.createElement('span');
  84321. tempSpan.innerHTML = this.placeholder;
  84322. doc.body.appendChild(tempSpan);
  84323. // Get the width of the span then remove it
  84324. var textWidth = tempSpan.offsetWidth;
  84325. doc.body.removeChild(tempSpan);
  84326. // Set the input padding start
  84327. var inputLeft = 'calc(50% - ' + (textWidth / 2) + 'px)';
  84328. if (this._plt.isRTL) {
  84329. inputEle.style.paddingRight = inputLeft;
  84330. }
  84331. else {
  84332. inputEle.style.paddingLeft = inputLeft;
  84333. }
  84334. // Set the icon margin start
  84335. var iconLeft = 'calc(50% - ' + ((textWidth / 2) + 30) + 'px)';
  84336. if (this._plt.isRTL) {
  84337. iconEle.style.marginRight = iconLeft;
  84338. }
  84339. else {
  84340. iconEle.style.marginLeft = iconLeft;
  84341. }
  84342. }
  84343. };
  84344. /**
  84345. * @hidden
  84346. * Show the iOS Cancel button on focus, hide it offscreen otherwise
  84347. */
  84348. Searchbar.prototype.positionCancelButton = function () {
  84349. var showShowCancel = this._isFocus;
  84350. if (showShowCancel !== this._isCancelVisible) {
  84351. var cancelStyleEle = this._cancelButton.nativeElement;
  84352. var cancelStyle = cancelStyleEle.style;
  84353. this._isCancelVisible = showShowCancel;
  84354. if (showShowCancel) {
  84355. if (this._plt.isRTL) {
  84356. cancelStyle.marginLeft = '0';
  84357. }
  84358. else {
  84359. cancelStyle.marginRight = '0';
  84360. }
  84361. }
  84362. else {
  84363. var offset = cancelStyleEle.offsetWidth;
  84364. if (offset > 0) {
  84365. if (this._plt.isRTL) {
  84366. cancelStyle.marginLeft = -offset + 'px';
  84367. }
  84368. else {
  84369. cancelStyle.marginRight = -offset + 'px';
  84370. }
  84371. }
  84372. }
  84373. }
  84374. };
  84375. /**
  84376. * @hidden
  84377. * Update the Searchbar input value when the input changes
  84378. */
  84379. Searchbar.prototype.inputChanged = function (ev) {
  84380. var _this = this;
  84381. this.value = ev.target.value;
  84382. this._inputDebouncer.debounce(function () {
  84383. _this.ionInput.emit(ev);
  84384. });
  84385. };
  84386. /**
  84387. * @hidden
  84388. * Sets the Searchbar to focused and active on input focus.
  84389. */
  84390. Searchbar.prototype.inputFocused = function () {
  84391. this._isActive = true;
  84392. this._fireFocus();
  84393. this.positionElements();
  84394. };
  84395. /**
  84396. * @hidden
  84397. * Sets the Searchbar to not focused and checks if it should align left
  84398. * based on whether there is a value in the searchbar or not.
  84399. */
  84400. Searchbar.prototype.inputBlurred = function () {
  84401. // _shouldBlur determines if it should blur
  84402. // if we are clearing the input we still want to stay focused in the input
  84403. if (this._shouldBlur === false) {
  84404. this._searchbarInput.nativeElement.focus();
  84405. this._shouldBlur = true;
  84406. return;
  84407. }
  84408. this._fireBlur();
  84409. this.positionElements();
  84410. };
  84411. /**
  84412. * @hidden
  84413. * Clears the input field and triggers the control change.
  84414. */
  84415. Searchbar.prototype.clearInput = function (ev) {
  84416. var _this = this;
  84417. this.ionClear.emit(ev);
  84418. // setTimeout() fixes https://github.com/ionic-team/ionic/issues/7527
  84419. // wait for 4 frames
  84420. setTimeout(function () {
  84421. var value = _this._value;
  84422. if (Object(__WEBPACK_IMPORTED_MODULE_4__util_util__["l" /* isPresent */])(value) && value !== '') {
  84423. _this.value = ''; // DOM WRITE
  84424. _this.ionInput.emit(ev);
  84425. }
  84426. }, 16 * 4);
  84427. this._shouldBlur = false;
  84428. };
  84429. /**
  84430. * @hidden
  84431. * Clears the input field and tells the input to blur since
  84432. * the clearInput function doesn't want the input to blur
  84433. * then calls the custom cancel function if the user passed one in.
  84434. */
  84435. Searchbar.prototype.cancelSearchbar = function (ev) {
  84436. this.ionCancel.emit(ev);
  84437. this.clearInput(ev);
  84438. this._shouldBlur = true;
  84439. this._isActive = false;
  84440. };
  84441. Searchbar.prototype.setFocus = function () {
  84442. this._renderer.invokeElementMethod(this._searchbarInput.nativeElement, 'focus');
  84443. };
  84444. Searchbar.decorators = [
  84445. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  84446. selector: 'ion-searchbar',
  84447. template: '<div class="searchbar-input-container">' +
  84448. '<button ion-button mode="md" (click)="cancelSearchbar($event)" (mousedown)="cancelSearchbar($event)" clear color="dark" class="searchbar-md-cancel" type="button">' +
  84449. '<ion-icon name="md-arrow-back"></ion-icon>' +
  84450. '</button>' +
  84451. '<div #searchbarIcon class="searchbar-search-icon"></div>' +
  84452. '<input #searchbarInput class="searchbar-input" (input)="inputChanged($event)" (blur)="inputBlurred()" (focus)="inputFocused()" ' +
  84453. 'dir="auto" ' +
  84454. '[attr.placeholder]="placeholder" ' +
  84455. '[attr.type]="type" ' +
  84456. '[attr.autocomplete]="_autocomplete" ' +
  84457. '[attr.autocorrect]="_autocorrect" ' +
  84458. '[attr.spellcheck]="_spellcheck">' +
  84459. '<button ion-button clear class="searchbar-clear-icon" [mode]="_mode" (click)="clearInput($event)" (mousedown)="clearInput($event)" type="button"></button>' +
  84460. '</div>' +
  84461. '<button ion-button #cancelButton mode="ios" [tabindex]="_isActive ? 1 : -1" clear (click)="cancelSearchbar($event)" (mousedown)="cancelSearchbar($event)" class="searchbar-ios-cancel" type="button">{{cancelButtonText}}</button>',
  84462. host: {
  84463. '[class.searchbar-animated]': '_animated',
  84464. '[class.searchbar-has-value]': '_value',
  84465. '[class.searchbar-active]': '_isActive',
  84466. '[class.searchbar-show-cancel]': '_showCancelButton',
  84467. '[class.searchbar-left-aligned]': '_shouldAlignLeft',
  84468. '[class.searchbar-has-focus]': '_isFocus'
  84469. },
  84470. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None
  84471. },] },
  84472. ];
  84473. /** @nocollapse */
  84474. Searchbar.ctorParameters = function () { return [
  84475. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  84476. { type: __WEBPACK_IMPORTED_MODULE_6__platform_platform__["a" /* Platform */], },
  84477. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  84478. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  84479. { type: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["d" /* NgControl */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  84480. ]; };
  84481. Searchbar.propDecorators = {
  84482. 'cancelButtonText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84483. 'showCancelButton': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84484. 'debounce': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84485. 'placeholder': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84486. 'autocomplete': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84487. 'autocorrect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84488. 'spellcheck': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84489. 'type': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84490. 'animated': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  84491. 'ionInput': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  84492. 'ionCancel': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  84493. 'ionClear': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  84494. '_searchbarInput': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['searchbarInput',] },],
  84495. '_searchbarIcon': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['searchbarIcon',] },],
  84496. '_cancelButton': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['cancelButton', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */] },] },],
  84497. };
  84498. return Searchbar;
  84499. }(__WEBPACK_IMPORTED_MODULE_3__util_base_input__["a" /* BaseInput */]));
  84500. //# sourceMappingURL=searchbar.js.map
  84501. /***/ }),
  84502. /* 317 */
  84503. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  84504. "use strict";
  84505. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Segment; });
  84506. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  84507. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  84508. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  84509. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_base_input__ = __webpack_require__(37);
  84510. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__segment_button__ = __webpack_require__(134);
  84511. var __extends = (this && this.__extends) || (function () {
  84512. var extendStatics = Object.setPrototypeOf ||
  84513. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  84514. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  84515. return function (d, b) {
  84516. extendStatics(d, b);
  84517. function __() { this.constructor = d; }
  84518. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  84519. };
  84520. })();
  84521. /**
  84522. * @name Segment
  84523. * @description
  84524. * A Segment is a group of buttons, sometimes known as Segmented Controls, that allow the user to interact with a compact group of a number of controls.
  84525. * Segments provide functionality similar to tabs, selecting one will unselect all others. You should use a tab bar instead of a segmented control when you want to let the user move back and forth between distinct pages in your app.
  84526. * You could use Angular's `ngModel` or `FormBuilder` API. For an overview on how `FormBuilder` works, checkout [Angular Forms](http://learnangular2.com/forms/), or [Angular FormBuilder](https://angular.io/docs/ts/latest/api/forms/index/FormBuilder-class.html)
  84527. *
  84528. *
  84529. * ```html
  84530. * <!-- Segment in a header -->
  84531. * <ion-header>
  84532. * <ion-toolbar>
  84533. * <ion-segment [(ngModel)]="icons" color="secondary">
  84534. * <ion-segment-button value="camera">
  84535. * <ion-icon name="camera"></ion-icon>
  84536. * </ion-segment-button>
  84537. * <ion-segment-button value="bookmark">
  84538. * <ion-icon name="bookmark"></ion-icon>
  84539. * </ion-segment-button>
  84540. * </ion-segment>
  84541. * </ion-toolbar>
  84542. * </ion-header>
  84543. *
  84544. * <ion-content>
  84545. * <!-- Segment in content -->
  84546. * <ion-segment [(ngModel)]="relationship" color="primary" (ionChange)="segmentChanged($event)">
  84547. * <ion-segment-button value="friends">
  84548. * Friends
  84549. * </ion-segment-button>
  84550. * <ion-segment-button value="enemies">
  84551. * Enemies
  84552. * </ion-segment-button>
  84553. * </ion-segment>
  84554. *
  84555. * <!-- Segment in a form -->
  84556. * <form [formGroup]="myForm">
  84557. * <ion-segment formControlName="mapStyle" color="danger">
  84558. * <ion-segment-button value="standard">
  84559. * Standard
  84560. * </ion-segment-button>
  84561. * <ion-segment-button value="hybrid">
  84562. * Hybrid
  84563. * </ion-segment-button>
  84564. * <ion-segment-button value="sat">
  84565. * Satellite
  84566. * </ion-segment-button>
  84567. * </ion-segment>
  84568. * </form>
  84569. * </ion-content>
  84570. * ```
  84571. *
  84572. *
  84573. * @demo /docs/demos/src/segment/
  84574. * @see {@link /docs/components#segment Segment Component Docs}
  84575. * @see [Angular Forms](http://learnangular2.com/forms/)
  84576. */
  84577. var Segment = (function (_super) {
  84578. __extends(Segment, _super);
  84579. function Segment(config, elementRef, renderer, ngControl) {
  84580. return _super.call(this, config, elementRef, renderer, 'segment', null, null, null, ngControl) || this;
  84581. }
  84582. /**
  84583. * @hidden
  84584. */
  84585. Segment.prototype.ngAfterContentInit = function () {
  84586. var _this = this;
  84587. this._initialize();
  84588. this._buttons.forEach(function (button) {
  84589. button.ionSelect.subscribe(function (selectedButton) {
  84590. _this.value = selectedButton.value;
  84591. _this._fireTouched();
  84592. });
  84593. });
  84594. };
  84595. /**
  84596. * @hidden
  84597. * Write a new value to the element.
  84598. */
  84599. Segment.prototype._inputUpdated = function () {
  84600. if (!this._buttons) {
  84601. (void 0) /* assert */;
  84602. return;
  84603. }
  84604. var buttons = this._buttons.toArray();
  84605. var value = this.value;
  84606. for (var _i = 0, buttons_1 = buttons; _i < buttons_1.length; _i++) {
  84607. var button = buttons_1[_i];
  84608. button.isActive = (button.value === value);
  84609. }
  84610. };
  84611. Segment.decorators = [
  84612. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  84613. selector: 'ion-segment',
  84614. host: {
  84615. '[class.segment-disabled]': '_disabled'
  84616. }
  84617. },] },
  84618. ];
  84619. /** @nocollapse */
  84620. Segment.ctorParameters = function () { return [
  84621. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  84622. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  84623. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  84624. { type: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["d" /* NgControl */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  84625. ]; };
  84626. Segment.propDecorators = {
  84627. '_buttons': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_4__segment_button__["a" /* SegmentButton */],] },],
  84628. };
  84629. return Segment;
  84630. }(__WEBPACK_IMPORTED_MODULE_3__util_base_input__["a" /* BaseInput */]));
  84631. //# sourceMappingURL=segment.js.map
  84632. /***/ }),
  84633. /* 318 */
  84634. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  84635. "use strict";
  84636. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Select; });
  84637. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  84638. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  84639. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__action_sheet_action_sheet__ = __webpack_require__(93);
  84640. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__alert_alert__ = __webpack_require__(95);
  84641. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__popover_popover__ = __webpack_require__(130);
  84642. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__app_app__ = __webpack_require__(11);
  84643. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__config_config__ = __webpack_require__(2);
  84644. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__navigation_deep_linker__ = __webpack_require__(24);
  84645. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__util_form__ = __webpack_require__(27);
  84646. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__util_base_input__ = __webpack_require__(37);
  84647. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__util_util__ = __webpack_require__(3);
  84648. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__item_item__ = __webpack_require__(28);
  84649. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__option_option__ = __webpack_require__(129);
  84650. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__select_popover_component__ = __webpack_require__(135);
  84651. var __extends = (this && this.__extends) || (function () {
  84652. var extendStatics = Object.setPrototypeOf ||
  84653. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  84654. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  84655. return function (d, b) {
  84656. extendStatics(d, b);
  84657. function __() { this.constructor = d; }
  84658. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  84659. };
  84660. })();
  84661. /**
  84662. * @name Select
  84663. * @description
  84664. * The `ion-select` component is similar to an HTML `<select>` element, however,
  84665. * Ionic's select component makes it easier for users to sort through and select
  84666. * the preferred option or options. When users tap the select component, a
  84667. * dialog will appear with all of the options in a large, easy to select list
  84668. * for users.
  84669. *
  84670. * The select component takes child `ion-option` components. If `ion-option` is not
  84671. * given a `value` attribute then it will use its text as the value.
  84672. *
  84673. * If `ngModel` is bound to `ion-select`, the selected value will be based on the
  84674. * bound value of the model. Otherwise, the `selected` attribute can be used on
  84675. * `ion-option` components.
  84676. *
  84677. * ### Interfaces
  84678. *
  84679. * By default, the `ion-select` uses the {@link ../../alert/AlertController AlertController API}
  84680. * to open up the overlay of options in an alert. The interface can be changed to use the
  84681. * {@link ../../action-sheet/ActionSheetController ActionSheetController API} or
  84682. * {@link ../../popover/PopoverController PopoverController API} by passing `action-sheet` or `popover`,
  84683. * respectively, to the `interface` property. Read on to the other sections for the limitations
  84684. * of the different interfaces.
  84685. *
  84686. * ### Single Value: Radio Buttons
  84687. *
  84688. * The standard `ion-select` component allows the user to select only one
  84689. * option. When selecting only one option the alert interface presents users with
  84690. * a radio button styled list of options. The action sheet interface can only be
  84691. * used with a single value select. If the number of options exceed 6, it will
  84692. * use the `alert` interface even if `action-sheet` is passed. The `ion-select`
  84693. * component's value receives the value of the selected option's value.
  84694. *
  84695. * ```html
  84696. * <ion-item>
  84697. * <ion-label>Gender</ion-label>
  84698. * <ion-select [(ngModel)]="gender">
  84699. * <ion-option value="f">Female</ion-option>
  84700. * <ion-option value="m">Male</ion-option>
  84701. * </ion-select>
  84702. * </ion-item>
  84703. * ```
  84704. *
  84705. * ### Multiple Value: Checkboxes
  84706. *
  84707. * By adding the `multiple="true"` attribute to `ion-select`, users are able
  84708. * to select multiple options. When multiple options can be selected, the alert
  84709. * overlay presents users with a checkbox styled list of options. The
  84710. * `ion-select multiple="true"` component's value receives an array of all the
  84711. * selected option values. In the example below, because each option is not given
  84712. * a `value`, then it'll use its text as the value instead.
  84713. *
  84714. * Note: the `action-sheet` and `popover` interfaces will not work with a multi-value select.
  84715. *
  84716. * ```html
  84717. * <ion-item>
  84718. * <ion-label>Toppings</ion-label>
  84719. * <ion-select [(ngModel)]="toppings" multiple="true">
  84720. * <ion-option>Bacon</ion-option>
  84721. * <ion-option>Black Olives</ion-option>
  84722. * <ion-option>Extra Cheese</ion-option>
  84723. * <ion-option>Mushrooms</ion-option>
  84724. * <ion-option>Pepperoni</ion-option>
  84725. * <ion-option>Sausage</ion-option>
  84726. * </ion-select>
  84727. * </ion-item>
  84728. * ```
  84729. *
  84730. * ### Select Buttons
  84731. * By default, the two buttons read `Cancel` and `OK`. Each button's text
  84732. * can be customized using the `cancelText` and `okText` attributes:
  84733. *
  84734. * ```html
  84735. * <ion-select okText="Okay" cancelText="Dismiss">
  84736. * ...
  84737. * </ion-select>
  84738. * ```
  84739. *
  84740. * The `action-sheet` and `popover` interfaces do not have an `OK` button, clicking
  84741. * on any of the options will automatically close the overlay and select
  84742. * that value.
  84743. *
  84744. * ### Select Options
  84745. *
  84746. * Since `ion-select` uses the `Alert`, `Action Sheet` and `Popover` interfaces, options can be
  84747. * passed to these components through the `selectOptions` property. This can be used
  84748. * to pass a custom title, subtitle, css class, and more. See the
  84749. * {@link ../../alert/AlertController/#create AlertController API docs},
  84750. * {@link ../../action-sheet/ActionSheetController/#create ActionSheetController API docs}, and
  84751. * {@link ../../popover/PopoverController/#create PopoverController API docs}
  84752. * for the properties that each interface accepts.
  84753. *
  84754. * For example, to change the `mode` of the overlay, pass it into `selectOptions`.
  84755. *
  84756. * ```html
  84757. * <ion-select [selectOptions]="selectOptions">
  84758. * ...
  84759. * </ion-select>
  84760. * ```
  84761. *
  84762. * ```ts
  84763. * this.selectOptions = {
  84764. * title: 'Pizza Toppings',
  84765. * subTitle: 'Select your toppings',
  84766. * mode: 'md'
  84767. * };
  84768. * ```
  84769. *
  84770. * ### Object Value References
  84771. *
  84772. * When using objects for select values, it is possible for the identities of these objects to
  84773. * change if they are coming from a server or database, while the selected value's identity
  84774. * remains the same. For example, this can occur when an existing record with the desired object value
  84775. * is loaded into the select, but the newly retrieved select options now have different identities. This will
  84776. * result in the select appearing to have no value at all, even though the original selection in still intact.
  84777. *
  84778. * Using the `compareWith` `Input` is the solution to this problem
  84779. *
  84780. * ```html
  84781. * <ion-item>
  84782. * <ion-label>Employee</ion-label>
  84783. * <ion-select [(ngModel)]="employee" [compareWith]="compareFn">
  84784. * <ion-option *ngFor="let employee of employees" [value]="employee">{{employee.name}}</ion-option>
  84785. * </ion-select>
  84786. * </ion-item>
  84787. * ```
  84788. *
  84789. * ```ts
  84790. * compareFn(e1: Employee, e2: Employee): boolean {
  84791. * return e1 && e2 ? e1.id === e2.id : e1 === e2;
  84792. * }
  84793. * ```
  84794. *
  84795. * @demo /docs/demos/src/select/
  84796. */
  84797. var Select = (function (_super) {
  84798. __extends(Select, _super);
  84799. function Select(_app, form, config, elementRef, renderer, item, deepLinker) {
  84800. var _this = _super.call(this, config, elementRef, renderer, 'select', [], form, item, null) || this;
  84801. _this._app = _app;
  84802. _this.config = config;
  84803. _this.deepLinker = deepLinker;
  84804. _this._multi = false;
  84805. _this._texts = [];
  84806. _this._text = '';
  84807. _this._compareWith = __WEBPACK_IMPORTED_MODULE_10__util_util__["g" /* isCheckedProperty */];
  84808. /**
  84809. * @input {string} The text to display on the cancel button. Default: `Cancel`.
  84810. */
  84811. _this.cancelText = 'Cancel';
  84812. /**
  84813. * @input {string} The text to display on the ok button. Default: `OK`.
  84814. */
  84815. _this.okText = 'OK';
  84816. /**
  84817. * @input {any} Any additional options that the `alert` or `action-sheet` interface can take.
  84818. * See the [AlertController API docs](../../alert/AlertController/#create) and the
  84819. * [ActionSheetController API docs](../../action-sheet/ActionSheetController/#create) for the
  84820. * create options for each interface.
  84821. */
  84822. _this.selectOptions = {};
  84823. /**
  84824. * @input {string} The interface the select should use: `action-sheet`, `popover` or `alert`. Default: `alert`.
  84825. */
  84826. _this.interface = '';
  84827. /**
  84828. * @input {string} The text to display instead of the selected option's value.
  84829. */
  84830. _this.selectedText = '';
  84831. /**
  84832. * @output {any} Emitted when the selection was cancelled.
  84833. */
  84834. _this.ionCancel = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  84835. return _this;
  84836. }
  84837. Object.defineProperty(Select.prototype, "compareWith", {
  84838. /**
  84839. * @input {Function} The function that will be called to compare object values
  84840. */
  84841. set: function (fn) {
  84842. if (typeof fn !== 'function') {
  84843. throw new Error("compareWith must be a function, but received " + JSON.stringify(fn));
  84844. }
  84845. this._compareWith = fn;
  84846. },
  84847. enumerable: true,
  84848. configurable: true
  84849. });
  84850. Select.prototype._click = function (ev) {
  84851. ev.preventDefault();
  84852. ev.stopPropagation();
  84853. this.open(ev);
  84854. };
  84855. Select.prototype._keyup = function () {
  84856. this.open();
  84857. };
  84858. /**
  84859. * @hidden
  84860. */
  84861. Select.prototype.getValues = function () {
  84862. var values = Array.isArray(this._value) ? this._value : [this._value];
  84863. (void 0) /* assert */;
  84864. return values;
  84865. };
  84866. /**
  84867. * Open the select interface.
  84868. */
  84869. Select.prototype.open = function (ev) {
  84870. var _this = this;
  84871. if (this.isFocus() || this._disabled) {
  84872. return;
  84873. }
  84874. (void 0) /* console.debug */;
  84875. // the user may have assigned some options specifically for the alert
  84876. var selectOptions = Object(__WEBPACK_IMPORTED_MODULE_10__util_util__["b" /* deepCopy */])(this.selectOptions);
  84877. // make sure their buttons array is removed from the options
  84878. // and we create a new array for the alert's two buttons
  84879. selectOptions.buttons = [{
  84880. text: this.cancelText,
  84881. role: 'cancel',
  84882. handler: function () {
  84883. _this.ionCancel.emit(_this);
  84884. }
  84885. }];
  84886. // if the selectOptions didn't provide a title then use the label's text
  84887. if (!selectOptions.title && this._item) {
  84888. selectOptions.title = this._item.getLabelText();
  84889. }
  84890. var options = this._options.toArray();
  84891. if ((this.interface === 'action-sheet' || this.interface === 'popover') && this._multi) {
  84892. console.warn('Interface cannot be "' + this.interface + '" with a multi-value select. Using the "alert" interface.');
  84893. this.interface = 'alert';
  84894. }
  84895. if (this.interface === 'popover' && !ev) {
  84896. console.warn('Interface cannot be "popover" without UIEvent.');
  84897. this.interface = 'alert';
  84898. }
  84899. var overlay;
  84900. if (this.interface === 'action-sheet') {
  84901. selectOptions.buttons = selectOptions.buttons.concat(options.map(function (input) {
  84902. return {
  84903. role: (input.selected ? 'selected' : ''),
  84904. text: input.text,
  84905. handler: function () {
  84906. _this.value = input.value;
  84907. input.ionSelect.emit(input.value);
  84908. }
  84909. };
  84910. }));
  84911. var selectCssClass = 'select-action-sheet';
  84912. // If the user passed a cssClass for the select, add it
  84913. selectCssClass += selectOptions.cssClass ? ' ' + selectOptions.cssClass : '';
  84914. selectOptions.cssClass = selectCssClass;
  84915. overlay = new __WEBPACK_IMPORTED_MODULE_2__action_sheet_action_sheet__["a" /* ActionSheet */](this._app, selectOptions, this.config);
  84916. }
  84917. else if (this.interface === 'popover') {
  84918. var popoverOptions = options.map(function (input) { return ({
  84919. text: input.text,
  84920. checked: input.selected,
  84921. disabled: input.disabled,
  84922. value: input.value,
  84923. handler: function () {
  84924. _this.value = input.value;
  84925. input.ionSelect.emit(input.value);
  84926. }
  84927. }); });
  84928. var popoverCssClass = 'select-popover';
  84929. // If the user passed a cssClass for the select, add it
  84930. popoverCssClass += selectOptions.cssClass ? ' ' + selectOptions.cssClass : '';
  84931. overlay = new __WEBPACK_IMPORTED_MODULE_4__popover_popover__["a" /* Popover */](this._app, __WEBPACK_IMPORTED_MODULE_13__select_popover_component__["a" /* SelectPopover */], {
  84932. options: popoverOptions
  84933. }, {
  84934. cssClass: popoverCssClass
  84935. }, this.config, this.deepLinker);
  84936. // ev.target is readonly.
  84937. // place popover regarding to ion-select instead of .button-inner
  84938. Object.defineProperty(ev, 'target', { value: ev.currentTarget });
  84939. selectOptions.ev = ev;
  84940. }
  84941. else {
  84942. // default to use the alert interface
  84943. this.interface = 'alert';
  84944. // user cannot provide inputs from selectOptions
  84945. // alert inputs must be created by ionic from ion-options
  84946. selectOptions.inputs = this._options.map(function (input) {
  84947. return {
  84948. type: (_this._multi ? 'checkbox' : 'radio'),
  84949. label: input.text,
  84950. value: input.value,
  84951. checked: input.selected,
  84952. disabled: input.disabled,
  84953. handler: function (selectedOption) {
  84954. // Only emit the select event if it is being checked
  84955. // For multi selects this won't emit when unchecking
  84956. if (selectedOption.checked) {
  84957. input.ionSelect.emit(input.value);
  84958. }
  84959. }
  84960. };
  84961. });
  84962. var selectCssClass_1 = 'select-alert';
  84963. // create the alert instance from our built up selectOptions
  84964. overlay = new __WEBPACK_IMPORTED_MODULE_3__alert_alert__["a" /* Alert */](this._app, selectOptions, this.config);
  84965. if (this._multi) {
  84966. // use checkboxes
  84967. selectCssClass_1 += ' multiple-select-alert';
  84968. }
  84969. else {
  84970. // use radio buttons
  84971. selectCssClass_1 += ' single-select-alert';
  84972. }
  84973. // If the user passed a cssClass for the select, add it
  84974. selectCssClass_1 += selectOptions.cssClass ? ' ' + selectOptions.cssClass : '';
  84975. overlay.setCssClass(selectCssClass_1);
  84976. overlay.addButton({
  84977. text: this.okText,
  84978. handler: function (selectedValues) { return _this.value = selectedValues; }
  84979. });
  84980. }
  84981. overlay.present(selectOptions);
  84982. this._fireFocus();
  84983. overlay.onDidDismiss(function () {
  84984. _this._fireBlur();
  84985. _this._overlay = undefined;
  84986. });
  84987. this._overlay = overlay;
  84988. };
  84989. /**
  84990. * Close the select interface.
  84991. */
  84992. Select.prototype.close = function () {
  84993. if (!this._overlay || !this.isFocus()) {
  84994. return;
  84995. }
  84996. return this._overlay.dismiss();
  84997. };
  84998. Object.defineProperty(Select.prototype, "multiple", {
  84999. /**
  85000. * @input {boolean} If true, the element can accept multiple values.
  85001. */
  85002. get: function () {
  85003. return this._multi;
  85004. },
  85005. set: function (val) {
  85006. this._multi = Object(__WEBPACK_IMPORTED_MODULE_10__util_util__["o" /* isTrueProperty */])(val);
  85007. },
  85008. enumerable: true,
  85009. configurable: true
  85010. });
  85011. Object.defineProperty(Select.prototype, "text", {
  85012. /**
  85013. * @hidden
  85014. */
  85015. get: function () {
  85016. return (this._multi ? this._texts : this._texts.join());
  85017. },
  85018. enumerable: true,
  85019. configurable: true
  85020. });
  85021. Object.defineProperty(Select.prototype, "options", {
  85022. /**
  85023. * @private
  85024. */
  85025. set: function (val) {
  85026. this._options = val;
  85027. var values = this.getValues();
  85028. if (values.length === 0) {
  85029. // there are no values set at this point
  85030. // so check to see who should be selected
  85031. // we use writeValue() because we don't want to update ngModel
  85032. this.writeValue(val.filter(function (o) { return o.selected; }).map(function (o) { return o.value; }));
  85033. }
  85034. else {
  85035. this._updateText();
  85036. }
  85037. },
  85038. enumerable: true,
  85039. configurable: true
  85040. });
  85041. Select.prototype._inputShouldChange = function (val) {
  85042. return !Object(__WEBPACK_IMPORTED_MODULE_10__util_util__["c" /* deepEqual */])(this._value, val);
  85043. };
  85044. /**
  85045. * TODO: REMOVE THIS
  85046. * @hidden
  85047. */
  85048. Select.prototype._inputChangeEvent = function () {
  85049. return this.value;
  85050. };
  85051. /**
  85052. * @hidden
  85053. */
  85054. Select.prototype._updateText = function () {
  85055. var _this = this;
  85056. this._texts.length = 0;
  85057. if (this._options) {
  85058. this._options.forEach(function (option) {
  85059. // check this option if the option's value is in the values array
  85060. option.selected = _this.getValues().some(function (selectValue) {
  85061. return _this._compareWith(selectValue, option.value);
  85062. });
  85063. if (option.selected) {
  85064. _this._texts.push(option.text);
  85065. }
  85066. });
  85067. }
  85068. this._text = this._texts.join(', ');
  85069. };
  85070. /**
  85071. * @hidden
  85072. */
  85073. Select.prototype._inputUpdated = function () {
  85074. this._updateText();
  85075. _super.prototype._inputUpdated.call(this);
  85076. };
  85077. Select.decorators = [
  85078. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  85079. selector: 'ion-select',
  85080. template: '<div *ngIf="!_text" class="select-placeholder select-text">{{placeholder}}</div>' +
  85081. '<div *ngIf="_text" class="select-text">{{selectedText || _text}}</div>' +
  85082. '<div class="select-icon">' +
  85083. '<div class="select-icon-inner"></div>' +
  85084. '</div>' +
  85085. '<button aria-haspopup="true" ' +
  85086. 'type="button" ' +
  85087. '[id]="id" ' +
  85088. 'ion-button="item-cover" ' +
  85089. '[attr.aria-labelledby]="_labelId" ' +
  85090. '[attr.aria-disabled]="_disabled" ' +
  85091. 'class="item-cover">' +
  85092. '</button>',
  85093. host: {
  85094. '[class.select-disabled]': '_disabled'
  85095. },
  85096. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["c" /* NG_VALUE_ACCESSOR */], useExisting: Select, multi: true }],
  85097. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  85098. },] },
  85099. ];
  85100. /** @nocollapse */
  85101. Select.ctorParameters = function () { return [
  85102. { type: __WEBPACK_IMPORTED_MODULE_5__app_app__["a" /* App */], },
  85103. { type: __WEBPACK_IMPORTED_MODULE_8__util_form__["a" /* Form */], },
  85104. { type: __WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* Config */], },
  85105. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  85106. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  85107. { type: __WEBPACK_IMPORTED_MODULE_11__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  85108. { type: __WEBPACK_IMPORTED_MODULE_7__navigation_deep_linker__["a" /* DeepLinker */], },
  85109. ]; };
  85110. Select.propDecorators = {
  85111. 'cancelText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85112. 'okText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85113. 'placeholder': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85114. 'selectOptions': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85115. 'interface': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85116. 'selectedText': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85117. 'compareWith': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85118. 'ionCancel': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  85119. '_click': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click', ['$event'],] },],
  85120. '_keyup': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['keyup.space',] },],
  85121. 'multiple': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  85122. 'options': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_12__option_option__["a" /* Option */],] },],
  85123. };
  85124. return Select;
  85125. }(__WEBPACK_IMPORTED_MODULE_9__util_base_input__["a" /* BaseInput */]));
  85126. //# sourceMappingURL=select.js.map
  85127. /***/ }),
  85128. /* 319 */
  85129. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85130. "use strict";
  85131. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ShowWhen; });
  85132. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  85133. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__display_when__ = __webpack_require__(136);
  85134. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__platform_platform__ = __webpack_require__(7);
  85135. var __extends = (this && this.__extends) || (function () {
  85136. var extendStatics = Object.setPrototypeOf ||
  85137. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  85138. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  85139. return function (d, b) {
  85140. extendStatics(d, b);
  85141. function __() { this.constructor = d; }
  85142. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  85143. };
  85144. })();
  85145. /**
  85146. *
  85147. * @name ShowWhen
  85148. * @description
  85149. * The `showWhen` attribute takes a string that represents a platform or screen orientation.
  85150. * The element the attribute is added to will only be shown when that platform or screen orientation is active.
  85151. *
  85152. * Complements the [hideWhen attribute](../HideWhen). If the `showWhen` attribute is used on an
  85153. * element that also has the `hideWhen` attribute, the element will not show if `hideWhen` evaluates
  85154. * to `true` or `showWhen` evaluates to `false`. If the `hidden` attribute is also added, the element
  85155. * will not show if `hidden` evaluates to `true`.
  85156. *
  85157. * View the [Platform API docs](../../../platform/Platform) for more information on the different
  85158. * platforms you can use.
  85159. *
  85160. * @usage
  85161. * ```html
  85162. * <div showWhen="android">
  85163. * I am visible on Android!
  85164. * </div>
  85165. *
  85166. * <div showWhen="ios">
  85167. * I am visible on iOS!
  85168. * </div>
  85169. *
  85170. * <div showWhen="android,ios">
  85171. * I am visible on Android and iOS!
  85172. * </div>
  85173. *
  85174. * <div showWhen="portrait">
  85175. * I am visible on Portrait!
  85176. * </div>
  85177. *
  85178. * <div showWhen="landscape">
  85179. * I am visible on Landscape!
  85180. * </div>
  85181. * ```
  85182. * @demo /docs/demos/src/show-when/
  85183. * @see {@link ../HideWhen HideWhen API Docs}
  85184. * @see {@link ../../../platform/Platform Platform API Docs}
  85185. */
  85186. var ShowWhen = (function (_super) {
  85187. __extends(ShowWhen, _super);
  85188. function ShowWhen(showWhen, plt, zone) {
  85189. return _super.call(this, showWhen, plt, zone) || this;
  85190. }
  85191. // ngOnDestroy is implemented in DisplayWhen
  85192. ShowWhen.decorators = [
  85193. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  85194. selector: '[showWhen]',
  85195. host: {
  85196. '[class.hidden-show-when]': '!isMatch'
  85197. }
  85198. },] },
  85199. ];
  85200. /** @nocollapse */
  85201. ShowWhen.ctorParameters = function () { return [
  85202. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['showWhen',] },] },
  85203. { type: __WEBPACK_IMPORTED_MODULE_2__platform_platform__["a" /* Platform */], },
  85204. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  85205. ]; };
  85206. return ShowWhen;
  85207. }(__WEBPACK_IMPORTED_MODULE_1__display_when__["a" /* DisplayWhen */]));
  85208. //# sourceMappingURL=show-when.js.map
  85209. /***/ }),
  85210. /* 320 */
  85211. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85212. "use strict";
  85213. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return HideWhen; });
  85214. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  85215. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_platform__ = __webpack_require__(7);
  85216. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__display_when__ = __webpack_require__(136);
  85217. var __extends = (this && this.__extends) || (function () {
  85218. var extendStatics = Object.setPrototypeOf ||
  85219. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  85220. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  85221. return function (d, b) {
  85222. extendStatics(d, b);
  85223. function __() { this.constructor = d; }
  85224. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  85225. };
  85226. })();
  85227. /**
  85228. * @name HideWhen
  85229. * @description
  85230. * The `hideWhen` attribute takes a string that represents a plaform or screen orientation.
  85231. * The element the attribute is added to will only be hidden when that platform or screen orientation is active.
  85232. *
  85233. * Complements the [showWhen attribute](../ShowWhen). If the `hideWhen` attribute is used on an
  85234. * element that also has the `showWhen` attribute, the element will not show if `hideWhen` evaluates
  85235. * to `true` or `showWhen` evaluates to `false`. If the `hidden` attribute is also added, the element
  85236. * will not show if `hidden` evaluates to `true`.
  85237. *
  85238. * View the [Platform API docs](../../../platform/Platform) for more information on the different
  85239. * platforms you can use.
  85240. *
  85241. * @usage
  85242. * ```html
  85243. * <div hideWhen="android">
  85244. * I am hidden on Android!
  85245. * </div>
  85246. *
  85247. * <div hideWhen="ios">
  85248. * I am hidden on iOS!
  85249. * </div>
  85250. *
  85251. * <div hideWhen="android,ios">
  85252. * I am hidden on Android and iOS!
  85253. * </div>
  85254. *
  85255. * <div hideWhen="portrait">
  85256. * I am hidden on Portrait!
  85257. * </div>
  85258. *
  85259. * <div hideWhen="landscape">
  85260. * I am hidden on Landscape!
  85261. * </div>
  85262. * ```
  85263. *
  85264. * @demo /docs/demos/src/hide-when/
  85265. * @see {@link ../ShowWhen ShowWhen API Docs}
  85266. * @see {@link ../../../platform/Platform Platform API Docs}
  85267. */
  85268. var HideWhen = (function (_super) {
  85269. __extends(HideWhen, _super);
  85270. function HideWhen(hideWhen, plt, zone) {
  85271. return _super.call(this, hideWhen, plt, zone) || this;
  85272. }
  85273. HideWhen.decorators = [
  85274. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  85275. selector: '[hideWhen]',
  85276. host: {
  85277. '[class.hidden-hide-when]': 'isMatch'
  85278. }
  85279. },] },
  85280. ];
  85281. /** @nocollapse */
  85282. HideWhen.ctorParameters = function () { return [
  85283. { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["g" /* Attribute */], args: ['hideWhen',] },] },
  85284. { type: __WEBPACK_IMPORTED_MODULE_1__platform_platform__["a" /* Platform */], },
  85285. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  85286. ]; };
  85287. return HideWhen;
  85288. }(__WEBPACK_IMPORTED_MODULE_2__display_when__["a" /* DisplayWhen */]));
  85289. //# sourceMappingURL=hide-when.js.map
  85290. /***/ }),
  85291. /* 321 */
  85292. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85293. "use strict";
  85294. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Slide; });
  85295. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  85296. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__slides__ = __webpack_require__(137);
  85297. /**
  85298. * @name Slide
  85299. * @description
  85300. * The Slide component is a child component of [Slides](../Slides). The template
  85301. * should be written as `ion-slide`. Any slide content should be written
  85302. * in this component and it should be used in conjunction with [Slides](../Slides).
  85303. *
  85304. * See the [Slides API Docs](../Slides) for more usage information.
  85305. *
  85306. * @demo /docs/demos/src/slides/
  85307. * @see {@link /docs/api/components/slides/Slides/ Slides API Docs}
  85308. */
  85309. var Slide = (function () {
  85310. function Slide(elementRef, renderer, _slides) {
  85311. this._slides = _slides;
  85312. renderer.setElementClass(elementRef.nativeElement, 'swiper-slide', true);
  85313. _slides.update(10);
  85314. }
  85315. /**
  85316. * @hidden
  85317. */
  85318. Slide.prototype.ngOnDestroy = function () {
  85319. this._slides.update(10);
  85320. };
  85321. Slide.decorators = [
  85322. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  85323. selector: 'ion-slide',
  85324. template: '<div class="slide-zoom">' +
  85325. '<ng-content></ng-content>' +
  85326. '</div>',
  85327. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  85328. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  85329. },] },
  85330. ];
  85331. /** @nocollapse */
  85332. Slide.ctorParameters = function () { return [
  85333. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  85334. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  85335. { type: __WEBPACK_IMPORTED_MODULE_1__slides__["a" /* Slides */], },
  85336. ]; };
  85337. return Slide;
  85338. }());
  85339. //# sourceMappingURL=slide.js.map
  85340. /***/ }),
  85341. /* 322 */
  85342. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85343. "use strict";
  85344. /* harmony export (immutable) */ __webpack_exports__["b"] = parallaxSetTranslate;
  85345. /* harmony export (immutable) */ __webpack_exports__["a"] = parallaxSetTransition;
  85346. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  85347. /*=========================
  85348. Parallax
  85349. ===========================*/
  85350. function setParallaxTransform(s, el, progress) {
  85351. var p;
  85352. var pX;
  85353. var pY;
  85354. var rtlFactor = s._rtl ? -1 : 1;
  85355. p = el.getAttribute('data-swiper-parallax') || '0';
  85356. pX = el.getAttribute('data-swiper-parallax-x');
  85357. pY = el.getAttribute('data-swiper-parallax-y');
  85358. if (pX || pY) {
  85359. pX = pX || '0';
  85360. pY = pY || '0';
  85361. }
  85362. else {
  85363. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  85364. pX = p;
  85365. pY = '0';
  85366. }
  85367. else {
  85368. pY = p;
  85369. pX = '0';
  85370. }
  85371. }
  85372. if ((pX).indexOf('%') >= 0) {
  85373. pX = parseInt(pX, 10) * progress * rtlFactor + '%';
  85374. }
  85375. else {
  85376. pX = pX * progress * rtlFactor + 'px';
  85377. }
  85378. if ((pY).indexOf('%') >= 0) {
  85379. pY = parseInt(pY, 10) * progress + '%';
  85380. }
  85381. else {
  85382. pY = pY * progress + 'px';
  85383. }
  85384. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(el, 'translate3d(' + pX + ', ' + pY + ',0px)');
  85385. }
  85386. function parallaxSetTranslate(s) {
  85387. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s.container, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]', function (el) {
  85388. setParallaxTransform(s, el, s.progress);
  85389. });
  85390. for (var i = 0; i < s._slides.length; i++) {
  85391. var slide = s._slides[i];
  85392. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(slide, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]', function () {
  85393. var progress = Math.min(Math.max(slide.progress, -1), 1);
  85394. setParallaxTransform(s, slide, progress);
  85395. });
  85396. }
  85397. }
  85398. function parallaxSetTransition(s, duration) {
  85399. if (typeof duration === 'undefined')
  85400. duration = s.speed;
  85401. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["c" /* eachChild */])(s.container, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]', function (el) {
  85402. var parallaxDuration = parseInt(el.getAttribute('data-swiper-parallax-duration'), 10) || duration;
  85403. if (duration === 0)
  85404. parallaxDuration = 0;
  85405. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(el, parallaxDuration);
  85406. });
  85407. }
  85408. //# sourceMappingURL=swiper-parallax.js.map
  85409. /***/ }),
  85410. /* 323 */
  85411. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85412. "use strict";
  85413. /* harmony export (immutable) */ __webpack_exports__["a"] = isCordova;
  85414. /* harmony export (immutable) */ __webpack_exports__["b"] = isElectron;
  85415. /* harmony export (immutable) */ __webpack_exports__["c"] = isIos;
  85416. /* harmony export (immutable) */ __webpack_exports__["e"] = isSafari;
  85417. /* unused harmony export isWKWebView */
  85418. /* harmony export (immutable) */ __webpack_exports__["d"] = isIosUIWebView;
  85419. function isCordova(plt) {
  85420. var win = plt.win();
  85421. return !!(win['cordova'] || win['PhoneGap'] || win['phonegap']);
  85422. }
  85423. function isElectron(plt) {
  85424. return plt.testUserAgent('Electron');
  85425. }
  85426. function isIos(plt) {
  85427. // shortcut function to be reused internally
  85428. // checks navigator.platform to see if it's an actual iOS device
  85429. // this does not use the user-agent string because it is often spoofed
  85430. // an actual iPad will return true, a chrome dev tools iPad will return false
  85431. return plt.testNavigatorPlatform('iphone|ipad|ipod');
  85432. }
  85433. function isSafari(plt) {
  85434. return plt.testUserAgent('Safari');
  85435. }
  85436. function isWKWebView(plt) {
  85437. return isIos(plt) && !!plt.win()['webkit'];
  85438. }
  85439. function isIosUIWebView(plt) {
  85440. return isIos(plt) && !isWKWebView(plt) && !isSafari(plt);
  85441. }
  85442. //# sourceMappingURL=platform-utils.js.map
  85443. /***/ }),
  85444. /* 324 */
  85445. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85446. "use strict";
  85447. /* harmony export (immutable) */ __webpack_exports__["a"] = initZoom;
  85448. /* harmony export (immutable) */ __webpack_exports__["b"] = resetZoomEvents;
  85449. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  85450. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper_transition__ = __webpack_require__(138);
  85451. function initZoom(s, plt) {
  85452. s._supportGestures = ('ongesturestart' in plt.win());
  85453. s._zoom = {
  85454. // "Global" Props
  85455. scale: 1,
  85456. currentScale: 1,
  85457. isScaling: false,
  85458. gesture: {
  85459. slide: undefined,
  85460. slideWidth: undefined,
  85461. slideHeight: undefined,
  85462. image: undefined,
  85463. imageWrap: undefined,
  85464. zoomMax: s.zoomMax
  85465. },
  85466. image: {
  85467. isTouched: undefined,
  85468. isMoved: undefined,
  85469. currentX: undefined,
  85470. currentY: undefined,
  85471. minX: undefined,
  85472. minY: undefined,
  85473. maxX: undefined,
  85474. maxY: undefined,
  85475. width: undefined,
  85476. height: undefined,
  85477. startX: undefined,
  85478. startY: undefined,
  85479. touchesStart: {},
  85480. touchesCurrent: {}
  85481. },
  85482. velocity: {
  85483. x: undefined,
  85484. y: undefined,
  85485. prevPositionX: undefined,
  85486. prevPositionY: undefined,
  85487. prevTime: undefined
  85488. },
  85489. unRegs: []
  85490. };
  85491. resetZoomEvents(s, plt);
  85492. return function () {
  85493. detachZoomEvents(s);
  85494. };
  85495. }
  85496. // Calc Scale From Multi-touches
  85497. function getDistanceBetweenTouches(ev) {
  85498. if (ev.targetTouches.length < 2)
  85499. return 1;
  85500. var x1 = ev.targetTouches[0].pageX, y1 = ev.targetTouches[0].pageY, x2 = ev.targetTouches[1].pageX, y2 = ev.targetTouches[1].pageY;
  85501. return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
  85502. }
  85503. // Events
  85504. function onGestureStart(s, _plt, ev) {
  85505. var z = s._zoom;
  85506. s.originalEvent = ev;
  85507. if (!s._supportGestures) {
  85508. if (ev.type !== 'touchstart' || ev.type === 'touchstart' && ev.targetTouches.length < 2) {
  85509. return;
  85510. }
  85511. z.gesture.scaleStart = getDistanceBetweenTouches(ev);
  85512. }
  85513. if (!z.gesture.slide) {
  85514. if (ev.currentTarget && ev.currentTarget.classList.contains(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide)) {
  85515. z.gesture.slide = ev.currentTarget;
  85516. }
  85517. if (!z.gesture.slide) {
  85518. z.gesture.slide = s._slides[s._activeIndex];
  85519. }
  85520. z.gesture.image = z.gesture.slide.querySelector('img, svg, canvas, ion-img');
  85521. if (z.gesture.image) {
  85522. z.gesture.imageWrap = z.gesture.image.closest('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].zoomContainer);
  85523. if (!z.gesture.imageWrap) {
  85524. z.gesture.image = undefined;
  85525. return;
  85526. }
  85527. z.gesture.zoomMax = parseInt(z.gesture.imageWrap.getAttribute('data-swiper-zoom') || s.zoomMax, 10);
  85528. }
  85529. }
  85530. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.image, 0);
  85531. z.isScaling = true;
  85532. }
  85533. function onGestureChange(s, _plt, ev) {
  85534. var z = s._zoom;
  85535. s.originalEvent = ev;
  85536. if (!s._supportGestures) {
  85537. if (ev.type !== 'touchmove' || ev.type === 'touchmove' && ev.targetTouches.length < 2) {
  85538. return;
  85539. }
  85540. z.gesture.scaleMove = getDistanceBetweenTouches(ev);
  85541. }
  85542. if (!z.gesture.image)
  85543. return;
  85544. if (s._supportGestures) {
  85545. z.scale = ev.scale * z.currentScale;
  85546. }
  85547. else {
  85548. z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;
  85549. }
  85550. if (z.scale > z.gesture.zoomMax) {
  85551. z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);
  85552. }
  85553. if (z.scale < s.zoomMin) {
  85554. z.scale = s.zoomMin + 1 - Math.pow((s.zoomMin - z.scale + 1), 0.5);
  85555. }
  85556. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.image, 'translate3d(0,0,0) scale(' + z.scale + ')');
  85557. }
  85558. function onGestureEnd(s, _plt, ev) {
  85559. var z = s._zoom;
  85560. s.originalEvent = ev;
  85561. if (!s._supportGestures) {
  85562. if (ev.type !== 'touchend' || ev.type === 'touchend' && ev.changedTouches.length < 2) {
  85563. return;
  85564. }
  85565. }
  85566. if (!z.gesture.image)
  85567. return;
  85568. z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.zoomMin);
  85569. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.image, s.speed);
  85570. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.image, 'translate3d(0,0,0) scale(' + z.scale + ')');
  85571. z.currentScale = z.scale;
  85572. z.isScaling = false;
  85573. if (z.scale === 1) {
  85574. z.gesture.slide = undefined;
  85575. }
  85576. }
  85577. function onTouchStart(s, plt, ev) {
  85578. var z = s._zoom;
  85579. s.originalEvent = ev;
  85580. if (!z.gesture.image || z.image.isTouched)
  85581. return;
  85582. if (plt.is('android')) {
  85583. ev.preventDefault();
  85584. }
  85585. z.image.isTouched = true;
  85586. z.image.touchesStart.x = ev.type === 'touchstart' ? ev.targetTouches[0].pageX : ev.pageX;
  85587. z.image.touchesStart.y = ev.type === 'touchstart' ? ev.targetTouches[0].pageY : ev.pageY;
  85588. }
  85589. function onTouchMove(s, plt, ev) {
  85590. var z = s._zoom;
  85591. s.originalEvent = ev;
  85592. if (!z.gesture.image)
  85593. return;
  85594. s._allowClick = false;
  85595. if (!z.image.isTouched || !z.gesture.slide)
  85596. return;
  85597. if (!z.image.isMoved) {
  85598. z.image.width = z.gesture.image.offsetWidth;
  85599. z.image.height = z.gesture.image.offsetHeight;
  85600. z.image.startX = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["a" /* getTranslate */])(s, plt, z.gesture.imageWrap, 'x') || 0;
  85601. z.image.startY = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["a" /* getTranslate */])(s, plt, z.gesture.imageWrap, 'y') || 0;
  85602. z.gesture.slideWidth = z.gesture.slide.offsetWidth;
  85603. z.gesture.slideHeight = z.gesture.slide.offsetHeight;
  85604. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.imageWrap, 0);
  85605. if (s._rtl) {
  85606. z.image.startX = -z.image.startX;
  85607. z.image.startY = -z.image.startY;
  85608. }
  85609. }
  85610. // Define if we need image drag
  85611. var scaledWidth = z.image.width * z.scale;
  85612. var scaledHeight = z.image.height * z.scale;
  85613. if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) {
  85614. return;
  85615. }
  85616. z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);
  85617. z.image.maxX = -z.image.minX;
  85618. z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);
  85619. z.image.maxY = -z.image.minY;
  85620. z.image.touchesCurrent.x = ev.type === 'touchmove' ? ev.targetTouches[0].pageX : ev.pageX;
  85621. z.image.touchesCurrent.y = ev.type === 'touchmove' ? ev.targetTouches[0].pageY : ev.pageY;
  85622. if (!z.image.isMoved && !z.isScaling) {
  85623. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) &&
  85624. (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||
  85625. (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)) {
  85626. z.image.isTouched = false;
  85627. return;
  85628. }
  85629. else if (!Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) &&
  85630. (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||
  85631. (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)) {
  85632. z.image.isTouched = false;
  85633. return;
  85634. }
  85635. }
  85636. ev.preventDefault();
  85637. ev.stopPropagation();
  85638. z.image.isMoved = true;
  85639. z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;
  85640. z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;
  85641. if (z.image.currentX < z.image.minX) {
  85642. z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);
  85643. }
  85644. if (z.image.currentX > z.image.maxX) {
  85645. z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);
  85646. }
  85647. if (z.image.currentY < z.image.minY) {
  85648. z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);
  85649. }
  85650. if (z.image.currentY > z.image.maxY) {
  85651. z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);
  85652. }
  85653. // Velocity
  85654. if (!z.velocity.prevPositionX)
  85655. z.velocity.prevPositionX = z.image.touchesCurrent.x;
  85656. if (!z.velocity.prevPositionY)
  85657. z.velocity.prevPositionY = z.image.touchesCurrent.y;
  85658. if (!z.velocity.prevTime)
  85659. z.velocity.prevTime = Date.now();
  85660. z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;
  85661. z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;
  85662. if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2)
  85663. z.velocity.x = 0;
  85664. if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2)
  85665. z.velocity.y = 0;
  85666. z.velocity.prevPositionX = z.image.touchesCurrent.x;
  85667. z.velocity.prevPositionY = z.image.touchesCurrent.y;
  85668. z.velocity.prevTime = Date.now();
  85669. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.imageWrap, 'translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');
  85670. }
  85671. function onTouchEnd(s) {
  85672. var z = s._zoom;
  85673. if (!z.gesture.image)
  85674. return;
  85675. if (!z.image.isTouched || !z.image.isMoved) {
  85676. z.image.isTouched = false;
  85677. z.image.isMoved = false;
  85678. return;
  85679. }
  85680. z.image.isTouched = false;
  85681. z.image.isMoved = false;
  85682. var momentumDurationX = 300;
  85683. var momentumDurationY = 300;
  85684. var momentumDistanceX = z.velocity.x * momentumDurationX;
  85685. var newPositionX = z.image.currentX + momentumDistanceX;
  85686. var momentumDistanceY = z.velocity.y * momentumDurationY;
  85687. var newPositionY = z.image.currentY + momentumDistanceY;
  85688. // Fix duration
  85689. if (z.velocity.x !== 0)
  85690. momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);
  85691. if (z.velocity.y !== 0)
  85692. momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);
  85693. var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
  85694. z.image.currentX = newPositionX;
  85695. z.image.currentY = newPositionY;
  85696. // Define if we need image drag
  85697. var scaledWidth = z.image.width * z.scale;
  85698. var scaledHeight = z.image.height * z.scale;
  85699. z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);
  85700. z.image.maxX = -z.image.minX;
  85701. z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);
  85702. z.image.maxY = -z.image.minY;
  85703. z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);
  85704. z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);
  85705. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.imageWrap, momentumDuration);
  85706. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.imageWrap, 'translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');
  85707. }
  85708. function onTransitionEnd(s) {
  85709. var z = s._zoom;
  85710. if (z.gesture.slide && s._previousIndex !== s._activeIndex) {
  85711. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.image, 'translate3d(0,0,0) scale(1)');
  85712. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.imageWrap, 'translate3d(0,0,0)');
  85713. z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;
  85714. z.scale = z.currentScale = 1;
  85715. }
  85716. }
  85717. function toggleZoom(s, plt) {
  85718. var z = s._zoom;
  85719. var ev = s.originalEvent;
  85720. if (!z.gesture.slide) {
  85721. z.gesture.slide = s.clickedSlide ? s.clickedSlide : s._slides[s._activeIndex];
  85722. z.gesture.image = z.gesture.slide.querySelector('img, svg, canvas, ion-img');
  85723. z.gesture.imageWrap = z.gesture.image && z.gesture.image.closest('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].zoomContainer);
  85724. }
  85725. if (!z.gesture.imageWrap)
  85726. return;
  85727. var touchX;
  85728. var touchY;
  85729. var offsetX;
  85730. var offsetY;
  85731. var diffX;
  85732. var diffY;
  85733. var translateX;
  85734. var translateY;
  85735. var imageWidth;
  85736. var imageHeight;
  85737. var scaledWidth;
  85738. var scaledHeight;
  85739. var translateMinX;
  85740. var translateMinY;
  85741. var translateMaxX;
  85742. var translateMaxY;
  85743. var slideWidth;
  85744. var slideHeight;
  85745. if (typeof z.image.touchesStart.x === 'undefined' && ev) {
  85746. touchX = ev.type === 'touchend' ? ev.changedTouches[0].pageX : ev.pageX;
  85747. touchY = ev.type === 'touchend' ? ev.changedTouches[0].pageY : ev.pageY;
  85748. }
  85749. else {
  85750. touchX = z.image.touchesStart.x;
  85751. touchY = z.image.touchesStart.y;
  85752. }
  85753. if (z.scale && z.scale !== 1) {
  85754. // Zoom Out
  85755. z.scale = z.currentScale = 1;
  85756. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.imageWrap, 300);
  85757. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.imageWrap, 'translate3d(0,0,0)');
  85758. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.image, 300);
  85759. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.image, 'translate3d(0,0,0) scale(1)');
  85760. z.gesture.slide = undefined;
  85761. }
  85762. else {
  85763. // Zoom In
  85764. z.scale = z.currentScale = parseInt(z.gesture.imageWrap.getAttribute('data-swiper-zoom') || s.zoomMax, 10);
  85765. if (ev) {
  85766. slideWidth = z.gesture.slide.offsetWidth;
  85767. slideHeight = z.gesture.slide.offsetHeight;
  85768. var slideOffsets = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["j" /* offset */])(z.gesture.slide, plt);
  85769. offsetX = slideOffsets.left;
  85770. offsetY = slideOffsets.top;
  85771. diffX = offsetX + slideWidth / 2 - touchX;
  85772. diffY = offsetY + slideHeight / 2 - touchY;
  85773. imageWidth = z.gesture.image.offsetWidth;
  85774. imageHeight = z.gesture.image.offsetHeight;
  85775. scaledWidth = imageWidth * z.scale;
  85776. scaledHeight = imageHeight * z.scale;
  85777. translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0);
  85778. translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0);
  85779. translateMaxX = -translateMinX;
  85780. translateMaxY = -translateMinY;
  85781. translateX = diffX * z.scale;
  85782. translateY = diffY * z.scale;
  85783. if (translateX < translateMinX) {
  85784. translateX = translateMinX;
  85785. }
  85786. if (translateX > translateMaxX) {
  85787. translateX = translateMaxX;
  85788. }
  85789. if (translateY < translateMinY) {
  85790. translateY = translateMinY;
  85791. }
  85792. if (translateY > translateMaxY) {
  85793. translateY = translateMaxY;
  85794. }
  85795. }
  85796. else {
  85797. translateX = 0;
  85798. translateY = 0;
  85799. }
  85800. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.imageWrap, 300);
  85801. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.imageWrap, 'translate3d(' + translateX + 'px, ' + translateY + 'px,0)');
  85802. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["o" /* transition */])(z.gesture.image, 300);
  85803. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["n" /* transform */])(z.gesture.image, 'translate3d(0,0,0) scale(' + z.scale + ')');
  85804. }
  85805. }
  85806. function resetZoomEvents(s, plt) {
  85807. detachZoomEvents(s);
  85808. var unRegs = s._zoom.unRegs;
  85809. var evtOpts = { passive: s._touchEvents.start === 'touchstart', zone: false };
  85810. var slides = s._slides;
  85811. var slide;
  85812. // Scale image
  85813. if (s._supportGestures) {
  85814. for (var i = 0; i < slides.length; i++) {
  85815. slide = slides[i];
  85816. // gesturestart
  85817. plt.registerListener(slide, 'gesturestart', function (ev) {
  85818. onGestureStart(s, plt, ev);
  85819. }, evtOpts, unRegs);
  85820. // gesturechange
  85821. plt.registerListener(slide, 'gesturechange', function (ev) {
  85822. onGestureChange(s, plt, ev);
  85823. }, evtOpts, unRegs);
  85824. // gestureend
  85825. plt.registerListener(slide, 'gestureend', function (ev) {
  85826. onGestureEnd(s, plt, ev);
  85827. }, evtOpts, unRegs);
  85828. }
  85829. }
  85830. else if (s._touchEvents.start === 'touchstart') {
  85831. for (var i = 0; i < slides.length; i++) {
  85832. slide = slides[i];
  85833. // touchstart
  85834. plt.registerListener(slide, s._touchEvents.start, function (ev) {
  85835. onGestureStart(s, plt, ev);
  85836. }, evtOpts, unRegs);
  85837. // touchmove
  85838. plt.registerListener(slide, s._touchEvents.move, function (ev) {
  85839. onGestureChange(s, plt, ev);
  85840. }, evtOpts, unRegs);
  85841. // touchend
  85842. plt.registerListener(slide, s._touchEvents.end, function (ev) {
  85843. onGestureEnd(s, plt, ev);
  85844. }, evtOpts, unRegs);
  85845. }
  85846. }
  85847. // Move image
  85848. var touchStartSub = s.ionSlideTouchStart.subscribe(function (ev) {
  85849. onTouchStart(s, plt, ev);
  85850. });
  85851. unRegs.push(function () { touchStartSub.unsubscribe(); });
  85852. for (var i = 0; i < slides.length; i++) {
  85853. slide = slides[i];
  85854. if (slide.querySelector('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].zoomContainer)) {
  85855. plt.registerListener(slide, 's.touchEvents.move', function (ev) {
  85856. onTouchMove(s, plt, ev);
  85857. }, evtOpts, unRegs);
  85858. }
  85859. }
  85860. var touchEndSub = s.ionSlideTouchEnd.subscribe(function () {
  85861. onTouchEnd(s);
  85862. });
  85863. unRegs.push(function () { touchEndSub.unsubscribe(); });
  85864. // Scale Out
  85865. var transEndSub = s.ionSlideTouchEnd.subscribe(function () {
  85866. onTransitionEnd(s);
  85867. });
  85868. unRegs.push(function () { transEndSub.unsubscribe(); });
  85869. if (s.zoomToggle) {
  85870. var doubleTapSub = s.ionSlideDoubleTap.subscribe(function () {
  85871. toggleZoom(s, plt);
  85872. });
  85873. unRegs.push(function () { doubleTapSub.unsubscribe(); });
  85874. }
  85875. }
  85876. function detachZoomEvents(s) {
  85877. s._zoom.unRegs.forEach(function (unReg) {
  85878. unReg();
  85879. });
  85880. s._zoom.unRegs.length = 0;
  85881. }
  85882. //# sourceMappingURL=swiper-zoom.js.map
  85883. /***/ }),
  85884. /* 325 */
  85885. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  85886. "use strict";
  85887. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Spinner; });
  85888. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  85889. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  85890. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  85891. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_util__ = __webpack_require__(3);
  85892. var __extends = (this && this.__extends) || (function () {
  85893. var extendStatics = Object.setPrototypeOf ||
  85894. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  85895. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  85896. return function (d, b) {
  85897. extendStatics(d, b);
  85898. function __() { this.constructor = d; }
  85899. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  85900. };
  85901. })();
  85902. /**
  85903. * @name Spinner
  85904. * @description
  85905. * The `ion-spinner` component provides a variety of animated SVG spinners.
  85906. * Spinners enables you to give users feedback that the app is actively
  85907. * processing/thinking/waiting/chillin’ out, or whatever you’d like it to indicate.
  85908. * By default, the `ion-refresher` feature uses this spinner component while it's
  85909. * the refresher is in the `refreshing` state.
  85910. *
  85911. * Ionic offers a handful of spinners out of the box, and by default, it will use
  85912. * the appropriate spinner for the platform on which it’s running.
  85913. *
  85914. * <table class="table spinner-table">
  85915. * <tr>
  85916. * <th>
  85917. * <code>ios</code>
  85918. * </th>
  85919. * <td>
  85920. * <ion-spinner name="ios"></ion-spinner>
  85921. * </td>
  85922. * </tr>
  85923. * <tr>
  85924. * <th>
  85925. * <code>ios-small</code>
  85926. * </th>
  85927. * <td>
  85928. * <ion-spinner name="ios-small"></ion-spinner>
  85929. * </td>
  85930. * </tr>
  85931. * <tr>
  85932. * <th>
  85933. * <code>bubbles</code>
  85934. * </th>
  85935. * <td>
  85936. * <ion-spinner name="bubbles"></ion-spinner>
  85937. * </td>
  85938. * </tr>
  85939. * <tr>
  85940. * <th>
  85941. * <code>circles</code>
  85942. * </th>
  85943. * <td>
  85944. * <ion-spinner name="circles"></ion-spinner>
  85945. * </td>
  85946. * </tr>
  85947. * <tr>
  85948. * <th>
  85949. * <code>crescent</code>
  85950. * </th>
  85951. * <td>
  85952. * <ion-spinner name="crescent"></ion-spinner>
  85953. * </td>
  85954. * </tr>
  85955. * <tr>
  85956. * <th>
  85957. * <code>dots</code>
  85958. * </th>
  85959. * <td>
  85960. * <ion-spinner name="dots"></ion-spinner>
  85961. * </td>
  85962. * </tr>
  85963. * </table>
  85964. *
  85965. * @usage
  85966. * The following code would use the default spinner for the platform it's
  85967. * running from. If it's neither iOS or Android, it'll default to use `ios`.
  85968. *
  85969. * ```html
  85970. * <ion-spinner></ion-spinner>
  85971. * ```
  85972. *
  85973. * By setting the `name` property, you can specify which predefined spinner to
  85974. * use, no matter what the platform is.
  85975. *
  85976. * ```html
  85977. * <ion-spinner name="bubbles"></ion-spinner>
  85978. * ```
  85979. *
  85980. * ## Styling SVG with CSS
  85981. * One cool thing about SVG is its ability to be styled with CSS! One thing to note
  85982. * is that some of the CSS properties on an SVG element have different names. For
  85983. * example, SVG uses the term `stroke` instead of `border`, and `fill` instead
  85984. * of `background-color`.
  85985. *
  85986. * ```css
  85987. * ion-spinner * {
  85988. * width: 28px;
  85989. * height: 28px;
  85990. * stroke: #444;
  85991. * fill: #222;
  85992. * }
  85993. * ```
  85994. */
  85995. var Spinner = (function (_super) {
  85996. __extends(Spinner, _super);
  85997. function Spinner(config, elementRef, renderer) {
  85998. var _this = _super.call(this, config, elementRef, renderer, 'spinner') || this;
  85999. _this._dur = null;
  86000. _this._paused = false;
  86001. return _this;
  86002. }
  86003. Object.defineProperty(Spinner.prototype, "name", {
  86004. /**
  86005. * @input {string} SVG spinner name.
  86006. */
  86007. get: function () {
  86008. return this._name;
  86009. },
  86010. set: function (val) {
  86011. this._name = val;
  86012. this.load();
  86013. },
  86014. enumerable: true,
  86015. configurable: true
  86016. });
  86017. Object.defineProperty(Spinner.prototype, "duration", {
  86018. /**
  86019. * @input {string} How long it takes it to do one loop.
  86020. */
  86021. get: function () {
  86022. return this._dur;
  86023. },
  86024. set: function (val) {
  86025. this._dur = val;
  86026. this.load();
  86027. },
  86028. enumerable: true,
  86029. configurable: true
  86030. });
  86031. Object.defineProperty(Spinner.prototype, "paused", {
  86032. /**
  86033. * @input {boolean} If true, pause the animation.
  86034. */
  86035. get: function () {
  86036. return this._paused;
  86037. },
  86038. set: function (val) {
  86039. this._paused = Object(__WEBPACK_IMPORTED_MODULE_3__util_util__["o" /* isTrueProperty */])(val);
  86040. },
  86041. enumerable: true,
  86042. configurable: true
  86043. });
  86044. /**
  86045. * @hidden
  86046. */
  86047. Spinner.prototype.ngOnInit = function () {
  86048. this._init = true;
  86049. this.load();
  86050. };
  86051. /**
  86052. * @hidden
  86053. */
  86054. Spinner.prototype.load = function () {
  86055. if (this._init) {
  86056. this._l = [];
  86057. this._c = [];
  86058. var name = this._name || this._config.get('spinner', 'ios');
  86059. var spinner = SPINNERS[name];
  86060. if (spinner) {
  86061. if (spinner.lines) {
  86062. for (var i = 0, l = spinner.lines; i < l; i++) {
  86063. this._l.push(this._loadEle(spinner, i, l));
  86064. }
  86065. }
  86066. else if (spinner.circles) {
  86067. for (var i = 0, l = spinner.circles; i < l; i++) {
  86068. this._c.push(this._loadEle(spinner, i, l));
  86069. }
  86070. }
  86071. this.setElementClass("spinner-" + name, true);
  86072. this.setElementClass("spinner-" + this._mode + "-" + name, true);
  86073. }
  86074. }
  86075. };
  86076. Spinner.prototype._loadEle = function (spinner, index, total) {
  86077. var duration = this._dur || spinner.dur;
  86078. var data = spinner.fn(duration, index, total);
  86079. data.style.animationDuration = duration + 'ms';
  86080. return data;
  86081. };
  86082. Spinner.decorators = [
  86083. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  86084. selector: 'ion-spinner',
  86085. template: '<svg viewBox="0 0 64 64" *ngFor="let i of _c" [ngStyle]="i.style">' +
  86086. '<circle [attr.r]="i.r" transform="translate(32,32)"></circle>' +
  86087. '</svg>' +
  86088. '<svg viewBox="0 0 64 64" *ngFor="let i of _l" [ngStyle]="i.style">' +
  86089. '<line [attr.y1]="i.y1" [attr.y2]="i.y2" transform="translate(32,32)"></line>' +
  86090. '</svg>',
  86091. host: {
  86092. '[class.spinner-paused]': '_paused'
  86093. },
  86094. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  86095. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  86096. },] },
  86097. ];
  86098. /** @nocollapse */
  86099. Spinner.ctorParameters = function () { return [
  86100. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  86101. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  86102. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  86103. ]; };
  86104. Spinner.propDecorators = {
  86105. 'name': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86106. 'duration': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86107. 'paused': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86108. };
  86109. return Spinner;
  86110. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  86111. var SPINNERS = {
  86112. ios: {
  86113. dur: 1000,
  86114. lines: 12,
  86115. fn: function (dur, index, total) {
  86116. var transform = 'rotate(' + (30 * index + (index < 6 ? 180 : -180)) + 'deg)';
  86117. var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
  86118. return {
  86119. y1: 17,
  86120. y2: 29,
  86121. style: {
  86122. transform: transform,
  86123. webkitTransform: transform,
  86124. animationDelay: animationDelay,
  86125. webkitAnimationDelay: animationDelay
  86126. }
  86127. };
  86128. }
  86129. },
  86130. 'ios-small': {
  86131. dur: 1000,
  86132. lines: 12,
  86133. fn: function (dur, index, total) {
  86134. var transform = 'rotate(' + (30 * index + (index < 6 ? 180 : -180)) + 'deg)';
  86135. var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
  86136. return {
  86137. y1: 12,
  86138. y2: 20,
  86139. style: {
  86140. transform: transform,
  86141. webkitTransform: transform,
  86142. animationDelay: animationDelay,
  86143. webkitAnimationDelay: animationDelay
  86144. }
  86145. };
  86146. }
  86147. },
  86148. bubbles: {
  86149. dur: 1000,
  86150. circles: 9,
  86151. fn: function (dur, index, total) {
  86152. var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
  86153. return {
  86154. r: 5,
  86155. style: {
  86156. top: (9 * Math.sin(2 * Math.PI * index / total)) + 'px',
  86157. left: (9 * Math.cos(2 * Math.PI * index / total)) + 'px',
  86158. animationDelay: animationDelay,
  86159. webkitAnimationDelay: animationDelay
  86160. }
  86161. };
  86162. }
  86163. },
  86164. circles: {
  86165. dur: 1000,
  86166. circles: 8,
  86167. fn: function (dur, index, total) {
  86168. var animationDelay = -(dur - ((dur / total) * index)) + 'ms';
  86169. return {
  86170. r: 5,
  86171. style: {
  86172. top: (9 * Math.sin(2 * Math.PI * index / total)) + 'px',
  86173. left: (9 * Math.cos(2 * Math.PI * index / total)) + 'px',
  86174. animationDelay: animationDelay,
  86175. webkitAnimationDelay: animationDelay
  86176. }
  86177. };
  86178. }
  86179. },
  86180. crescent: {
  86181. dur: 750,
  86182. circles: 1,
  86183. fn: function () {
  86184. return {
  86185. r: 26,
  86186. style: {}
  86187. };
  86188. }
  86189. },
  86190. dots: {
  86191. dur: 750,
  86192. circles: 3,
  86193. fn: function (_dur, index) {
  86194. var animationDelay = -(110 * index) + 'ms';
  86195. return {
  86196. r: 6,
  86197. style: {
  86198. left: (9 - (9 * index)) + 'px',
  86199. animationDelay: animationDelay,
  86200. webkitAnimationDelay: animationDelay
  86201. }
  86202. };
  86203. }
  86204. }
  86205. };
  86206. //# sourceMappingURL=spinner.js.map
  86207. /***/ }),
  86208. /* 326 */
  86209. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  86210. "use strict";
  86211. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Tab; });
  86212. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  86213. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  86214. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  86215. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_deep_linker__ = __webpack_require__(24);
  86216. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__ = __webpack_require__(15);
  86217. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__ = __webpack_require__(13);
  86218. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_util__ = __webpack_require__(3);
  86219. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__navigation_nav_controller_base__ = __webpack_require__(69);
  86220. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__platform_platform__ = __webpack_require__(7);
  86221. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__tabs__ = __webpack_require__(142);
  86222. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__transitions_transition_controller__ = __webpack_require__(71);
  86223. var __extends = (this && this.__extends) || (function () {
  86224. var extendStatics = Object.setPrototypeOf ||
  86225. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  86226. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  86227. return function (d, b) {
  86228. extendStatics(d, b);
  86229. function __() { this.constructor = d; }
  86230. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  86231. };
  86232. })();
  86233. /**
  86234. * @name Tab
  86235. * @description
  86236. * The Tab component, written `<ion-tab>`, is styled based on the mode and should
  86237. * be used in conjunction with the [Tabs](../Tabs/) component.
  86238. *
  86239. * Each `ion-tab` is a declarative component for a [NavController](../../../navigation/NavController/).
  86240. * Basically, each tab is a `NavController`. For more information on using
  86241. * navigation controllers take a look at the [NavController API Docs](../../../navigation/NavController/).
  86242. *
  86243. * See the [Tabs API Docs](../Tabs/) for more details on configuring Tabs.
  86244. *
  86245. * @usage
  86246. *
  86247. * To add a basic tab, you can use the following markup where the `root` property
  86248. * is the page you want to load for that tab, `tabTitle` is the optional text to
  86249. * display on the tab, and `tabIcon` is the optional [icon](../../icon/Icon/).
  86250. *
  86251. * ```html
  86252. * <ion-tabs>
  86253. * <ion-tab [root]="chatRoot" tabTitle="Chat" tabIcon="chat"></ion-tab>
  86254. * </ion-tabs>
  86255. * ```
  86256. *
  86257. * Then, in your class you can set `chatRoot` to an imported class:
  86258. *
  86259. * ```ts
  86260. * import { ChatPage } from '../chat/chat';
  86261. *
  86262. * export class Tabs {
  86263. * // here we'll set the property of chatRoot to
  86264. * // the imported class of ChatPage
  86265. * chatRoot = ChatPage;
  86266. *
  86267. * constructor() {
  86268. *
  86269. * }
  86270. * }
  86271. * ```
  86272. *
  86273. * You can also pass some parameters to the root page of the tab through
  86274. * `rootParams`. Below we pass `chatParams` to the Chat tab:
  86275. *
  86276. * ```html
  86277. * <ion-tabs>
  86278. * <ion-tab [root]="chatRoot" [rootParams]="chatParams" tabTitle="Chat" tabIcon="chat"></ion-tab>
  86279. * </ion-tabs>
  86280. * ```
  86281. *
  86282. * ```ts
  86283. * export class Tabs {
  86284. * chatRoot = ChatPage;
  86285. *
  86286. * // set some user information on chatParams
  86287. * chatParams = {
  86288. * user1: 'admin',
  86289. * user2: 'ionic'
  86290. * };
  86291. *
  86292. * constructor() {
  86293. *
  86294. * }
  86295. * }
  86296. * ```
  86297. *
  86298. * And in `ChatPage` you can get the data from `NavParams`:
  86299. *
  86300. * ```ts
  86301. * export class ChatPage {
  86302. * constructor(navParams: NavParams) {
  86303. * console.log('Passed params', navParams.data);
  86304. * }
  86305. * }
  86306. * ```
  86307. *
  86308. * Sometimes you may want to call a method instead of navigating to a new
  86309. * page. You can use the `(ionSelect)` event to call a method on your class when
  86310. * the tab is selected. Below is an example of presenting a modal from one of
  86311. * the tabs.
  86312. *
  86313. * ```html
  86314. * <ion-tabs>
  86315. * <ion-tab (ionSelect)="chat()" tabTitle="Show Modal"></ion-tab>
  86316. * </ion-tabs>pop
  86317. * ```
  86318. *
  86319. * ```ts
  86320. * export class Tabs {
  86321. * constructor(public modalCtrl: ModalController) {
  86322. *
  86323. * }
  86324. *
  86325. * chat() {
  86326. * let modal = this.modalCtrl.create(ChatPage);
  86327. * modal.present();
  86328. * }
  86329. * }
  86330. * ```
  86331. *
  86332. *
  86333. * @demo /docs/demos/src/tabs/
  86334. * @see {@link /docs/components#tabs Tabs Component Docs}
  86335. * @see {@link ../../tabs/Tabs Tabs API Docs}
  86336. * @see {@link ../../nav/Nav Nav API Docs}
  86337. * @see {@link ../../nav/NavController NavController API Docs}
  86338. */
  86339. var Tab = (function (_super) {
  86340. __extends(Tab, _super);
  86341. function Tab(parent, app, config, plt, elementRef, zone, renderer, cfr, _cd, gestureCtrl, transCtrl, linker, _dom, errHandler) {
  86342. var _this =
  86343. // A Tab is a NavController for its child pages
  86344. _super.call(this, parent, app, config, plt, elementRef, zone, renderer, cfr, gestureCtrl, transCtrl, linker, _dom, errHandler) || this;
  86345. _this._cd = _cd;
  86346. _this.linker = linker;
  86347. _this._dom = _dom;
  86348. /**
  86349. * @hidden
  86350. */
  86351. _this._isEnabled = true;
  86352. /**
  86353. * @hidden
  86354. */
  86355. _this._isShown = true;
  86356. /**
  86357. * @output {Tab} Emitted when the current tab is selected.
  86358. */
  86359. _this.ionSelect = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  86360. _this.id = parent.add(_this);
  86361. _this._tabsHideOnSubPages = config.getBoolean('tabsHideOnSubPages');
  86362. _this._tabId = 'tabpanel-' + _this.id;
  86363. _this._btnId = 'tab-' + _this.id;
  86364. return _this;
  86365. }
  86366. Object.defineProperty(Tab.prototype, "enabled", {
  86367. /**
  86368. * @input {boolean} If true, enable the tab. If false,
  86369. * the user cannot interact with this element.
  86370. * Default: `true`.
  86371. */
  86372. get: function () {
  86373. return this._isEnabled;
  86374. },
  86375. set: function (val) {
  86376. this._isEnabled = Object(__WEBPACK_IMPORTED_MODULE_6__util_util__["o" /* isTrueProperty */])(val);
  86377. },
  86378. enumerable: true,
  86379. configurable: true
  86380. });
  86381. Object.defineProperty(Tab.prototype, "show", {
  86382. /**
  86383. * @input {boolean} If true, the tab button is visible within the
  86384. * tabbar. Default: `true`.
  86385. */
  86386. get: function () {
  86387. return this._isShown;
  86388. },
  86389. set: function (val) {
  86390. this._isShown = Object(__WEBPACK_IMPORTED_MODULE_6__util_util__["o" /* isTrueProperty */])(val);
  86391. },
  86392. enumerable: true,
  86393. configurable: true
  86394. });
  86395. Object.defineProperty(Tab.prototype, "tabsHideOnSubPages", {
  86396. /**
  86397. * @input {boolean} If true, hide the tabs on child pages.
  86398. */
  86399. get: function () {
  86400. return this._tabsHideOnSubPages;
  86401. },
  86402. set: function (val) {
  86403. this._tabsHideOnSubPages = Object(__WEBPACK_IMPORTED_MODULE_6__util_util__["o" /* isTrueProperty */])(val);
  86404. },
  86405. enumerable: true,
  86406. configurable: true
  86407. });
  86408. Object.defineProperty(Tab.prototype, "_vp", {
  86409. /**
  86410. * @hidden
  86411. */
  86412. set: function (val) {
  86413. this.setViewport(val);
  86414. },
  86415. enumerable: true,
  86416. configurable: true
  86417. });
  86418. /**
  86419. * @hidden
  86420. */
  86421. Tab.prototype.ngOnInit = function () {
  86422. this.tabBadgeStyle = this.tabBadgeStyle ? this.tabBadgeStyle : 'default';
  86423. };
  86424. /**
  86425. * @hidden
  86426. */
  86427. Tab.prototype.load = function (opts) {
  86428. var _this = this;
  86429. var segment = this._segment;
  86430. if (segment || (!this._loaded && this.root)) {
  86431. this.setElementClass('show-tab', true);
  86432. // okay, first thing we need to do if check if the view already exists
  86433. var nameToUse = segment && segment.name ? segment.name : this.root;
  86434. var dataToUse = segment ? segment.data : this.rootParams;
  86435. var numViews = this.length() - 1;
  86436. for (var i = numViews; i >= 0; i--) {
  86437. var viewController = this.getByIndex(i);
  86438. if (viewController && (viewController.id === nameToUse || viewController.component === nameToUse)) {
  86439. if (i === numViews) {
  86440. // this is the last view in the stack and it's the same
  86441. // as the segment so there's no change needed
  86442. return Promise.resolve();
  86443. }
  86444. else {
  86445. // it's not the exact view as the end
  86446. // let's have this nav go back to this exact view
  86447. return this.popTo(viewController, {
  86448. animate: false,
  86449. updateUrl: false,
  86450. });
  86451. }
  86452. }
  86453. }
  86454. var promise = null;
  86455. if (segment && segment.defaultHistory && segment.defaultHistory.length && this._views.length === 0) {
  86456. promise = this.linker.initViews(segment).then(function (views) {
  86457. return _this.setPages(views, opts);
  86458. });
  86459. }
  86460. else {
  86461. promise = this.push(nameToUse, dataToUse, opts);
  86462. }
  86463. return promise.then(function () {
  86464. _this._segment = null;
  86465. _this._loaded = true;
  86466. });
  86467. }
  86468. else {
  86469. // if this is not the Tab's initial load then we need
  86470. // to refresh the tabbar and content dimensions to be sure
  86471. // they're lined up correctly
  86472. this._dom.read(function () {
  86473. _this.resize();
  86474. });
  86475. return Promise.resolve();
  86476. }
  86477. };
  86478. /**
  86479. * @hidden
  86480. */
  86481. Tab.prototype.resize = function () {
  86482. var active = this.getActive();
  86483. if (!active) {
  86484. return;
  86485. }
  86486. var content = active.getIONContent();
  86487. content && content.resize();
  86488. };
  86489. /**
  86490. * @hidden
  86491. */
  86492. Tab.prototype._viewAttachToDOM = function (viewCtrl, componentRef, viewport) {
  86493. var isTabSubPage = (this._tabsHideOnSubPages && viewCtrl.index > 0);
  86494. if (isTabSubPage) {
  86495. viewport = this.parent.portal;
  86496. }
  86497. _super.prototype._viewAttachToDOM.call(this, viewCtrl, componentRef, viewport);
  86498. if (isTabSubPage) {
  86499. // add the .tab-subpage css class to tabs pages that should act like subpages
  86500. var pageEleRef = viewCtrl.pageRef();
  86501. if (pageEleRef) {
  86502. this._renderer.setElementClass(pageEleRef.nativeElement, 'tab-subpage', true);
  86503. }
  86504. }
  86505. };
  86506. /**
  86507. * @hidden
  86508. */
  86509. Tab.prototype.setSelected = function (isSelected) {
  86510. this.isSelected = isSelected;
  86511. this.setElementClass('show-tab', isSelected);
  86512. this.setElementAttribute('aria-hidden', (!isSelected).toString());
  86513. if (isSelected) {
  86514. // this is the selected tab, detect changes
  86515. this._cd.reattach();
  86516. }
  86517. else {
  86518. // this tab is not selected, do not detect changes
  86519. this._cd.detach();
  86520. }
  86521. };
  86522. Object.defineProperty(Tab.prototype, "index", {
  86523. /**
  86524. * @hidden
  86525. */
  86526. get: function () {
  86527. return this.parent.getIndex(this);
  86528. },
  86529. enumerable: true,
  86530. configurable: true
  86531. });
  86532. /**
  86533. * @hidden
  86534. */
  86535. Tab.prototype.updateHref = function (component, data) {
  86536. if (this.btn && this.linker) {
  86537. var href = this.linker.createUrl(this.parent, component, data) || '#';
  86538. this.btn.updateHref(href);
  86539. }
  86540. };
  86541. /**
  86542. * @hidden
  86543. */
  86544. Tab.prototype.ngOnDestroy = function () {
  86545. this.destroy();
  86546. };
  86547. /**
  86548. * @hidden
  86549. */
  86550. Tab.prototype.getType = function () {
  86551. return 'tab';
  86552. };
  86553. Tab.prototype.goToRoot = function (opts) {
  86554. return this.setRoot(this.root, this.rootParams, opts, null);
  86555. };
  86556. Tab.decorators = [
  86557. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  86558. selector: 'ion-tab',
  86559. template: '<div #viewport></div><div class="nav-decor"></div>',
  86560. host: {
  86561. '[attr.id]': '_tabId',
  86562. '[attr.aria-labelledby]': '_btnId',
  86563. 'role': 'tabpanel'
  86564. },
  86565. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  86566. },] },
  86567. ];
  86568. /** @nocollapse */
  86569. Tab.ctorParameters = function () { return [
  86570. { type: __WEBPACK_IMPORTED_MODULE_9__tabs__["a" /* Tabs */], },
  86571. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  86572. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  86573. { type: __WEBPACK_IMPORTED_MODULE_8__platform_platform__["a" /* Platform */], },
  86574. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  86575. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  86576. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  86577. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */], },
  86578. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["j" /* ChangeDetectorRef */], },
  86579. { type: __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["l" /* GestureController */], },
  86580. { type: __WEBPACK_IMPORTED_MODULE_10__transitions_transition_controller__["a" /* TransitionController */], },
  86581. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_deep_linker__["a" /* DeepLinker */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  86582. { type: __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__["a" /* DomController */], },
  86583. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* ErrorHandler */], },
  86584. ]; };
  86585. Tab.propDecorators = {
  86586. 'root': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86587. 'rootParams': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86588. 'tabUrlPath': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86589. 'tabTitle': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86590. 'tabIcon': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86591. 'tabBadge': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86592. 'tabBadgeStyle': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86593. 'enabled': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86594. 'show': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86595. 'tabsHideOnSubPages': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86596. 'ionSelect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  86597. '_vp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */], args: ['viewport', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_10" /* ViewContainerRef */] },] },],
  86598. };
  86599. return Tab;
  86600. }(__WEBPACK_IMPORTED_MODULE_7__navigation_nav_controller_base__["a" /* NavControllerBase */]));
  86601. //# sourceMappingURL=tab.js.map
  86602. /***/ }),
  86603. /* 327 */
  86604. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  86605. "use strict";
  86606. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TabButton; });
  86607. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  86608. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  86609. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  86610. var __extends = (this && this.__extends) || (function () {
  86611. var extendStatics = Object.setPrototypeOf ||
  86612. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  86613. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  86614. return function (d, b) {
  86615. extendStatics(d, b);
  86616. function __() { this.constructor = d; }
  86617. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  86618. };
  86619. })();
  86620. /**
  86621. * @hidden
  86622. */
  86623. var TabButton = (function (_super) {
  86624. __extends(TabButton, _super);
  86625. function TabButton(config, elementRef, renderer) {
  86626. var _this = _super.call(this, config, elementRef, renderer) || this;
  86627. _this.ionSelect = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["v" /* EventEmitter */]();
  86628. _this.disHover = (config.get('hoverCSS') === false);
  86629. _this.layout = config.get('tabsLayout');
  86630. return _this;
  86631. }
  86632. TabButton.prototype.ngOnInit = function () {
  86633. this.tab.btn = this;
  86634. this.layout = this.tab.parent.tabsLayout || this.layout;
  86635. this.hasTitle = !!this.tab.tabTitle;
  86636. this.hasIcon = !!this.tab.tabIcon && this.layout !== 'icon-hide';
  86637. this.hasTitleOnly = (this.hasTitle && !this.hasIcon);
  86638. this.hasIconOnly = (this.hasIcon && !this.hasTitle);
  86639. this.hasBadge = !!this.tab.tabBadge;
  86640. };
  86641. TabButton.prototype.onClick = function () {
  86642. this.ionSelect.emit(this.tab);
  86643. return false;
  86644. };
  86645. TabButton.prototype.updateHref = function (href) {
  86646. this.setElementAttribute('href', href);
  86647. };
  86648. TabButton.decorators = [
  86649. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  86650. selector: '.tab-button',
  86651. template: '<ion-icon *ngIf="tab.tabIcon" [name]="tab.tabIcon" [isActive]="tab.isSelected" class="tab-button-icon"></ion-icon>' +
  86652. '<span *ngIf="tab.tabTitle" class="tab-button-text">{{tab.tabTitle}}</span>' +
  86653. '<ion-badge *ngIf="tab.tabBadge" class="tab-badge" [color]="tab.tabBadgeStyle">{{tab.tabBadge}}</ion-badge>' +
  86654. '<div class="button-effect"></div>',
  86655. host: {
  86656. '[attr.id]': 'tab._btnId',
  86657. '[attr.aria-controls]': 'tab._tabId',
  86658. '[attr.aria-selected]': 'tab.isSelected',
  86659. '[class.has-title]': 'hasTitle',
  86660. '[class.has-icon]': 'hasIcon',
  86661. '[class.has-title-only]': 'hasTitleOnly',
  86662. '[class.icon-only]': 'hasIconOnly',
  86663. '[class.has-badge]': 'hasBadge',
  86664. '[class.disable-hover]': 'disHover',
  86665. '[class.tab-disabled]': '!tab.enabled',
  86666. '[class.tab-hidden]': '!tab.show',
  86667. }
  86668. },] },
  86669. ];
  86670. /** @nocollapse */
  86671. TabButton.ctorParameters = function () { return [
  86672. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  86673. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  86674. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  86675. ]; };
  86676. TabButton.propDecorators = {
  86677. 'tab': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  86678. 'ionSelect': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["O" /* Output */] },],
  86679. 'onClick': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['click',] },],
  86680. };
  86681. return TabButton;
  86682. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  86683. //# sourceMappingURL=tab-button.js.map
  86684. /***/ }),
  86685. /* 328 */
  86686. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  86687. "use strict";
  86688. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Toast; });
  86689. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  86690. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app_constants__ = __webpack_require__(47);
  86691. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__toast_component__ = __webpack_require__(144);
  86692. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__toast_transitions__ = __webpack_require__(665);
  86693. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__ = __webpack_require__(9);
  86694. var __extends = (this && this.__extends) || (function () {
  86695. var extendStatics = Object.setPrototypeOf ||
  86696. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  86697. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  86698. return function (d, b) {
  86699. extendStatics(d, b);
  86700. function __() { this.constructor = d; }
  86701. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  86702. };
  86703. })();
  86704. /**
  86705. * @hidden
  86706. */
  86707. var Toast = (function (_super) {
  86708. __extends(Toast, _super);
  86709. function Toast(app, opts, config) {
  86710. if (opts === void 0) { opts = {}; }
  86711. var _this = this;
  86712. opts.dismissOnPageChange = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.dismissOnPageChange) ? !!opts.dismissOnPageChange : false;
  86713. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_2__toast_component__["a" /* ToastCmp */], opts, null) || this;
  86714. _this._app = app;
  86715. // set the position to the bottom if not provided
  86716. if (!opts.position || !_this.isValidPosition(opts.position)) {
  86717. opts.position = TOAST_POSITION_BOTTOM;
  86718. }
  86719. _this.isOverlay = true;
  86720. config.setTransition('toast-slide-in', __WEBPACK_IMPORTED_MODULE_3__toast_transitions__["c" /* ToastSlideIn */]);
  86721. config.setTransition('toast-slide-out', __WEBPACK_IMPORTED_MODULE_3__toast_transitions__["d" /* ToastSlideOut */]);
  86722. config.setTransition('toast-md-slide-in', __WEBPACK_IMPORTED_MODULE_3__toast_transitions__["a" /* ToastMdSlideIn */]);
  86723. config.setTransition('toast-md-slide-out', __WEBPACK_IMPORTED_MODULE_3__toast_transitions__["b" /* ToastMdSlideOut */]);
  86724. config.setTransition('toast-wp-slide-out', __WEBPACK_IMPORTED_MODULE_3__toast_transitions__["f" /* ToastWpPopOut */]);
  86725. config.setTransition('toast-wp-slide-in', __WEBPACK_IMPORTED_MODULE_3__toast_transitions__["e" /* ToastWpPopIn */]);
  86726. return _this;
  86727. }
  86728. /**
  86729. * @hidden
  86730. */
  86731. Toast.prototype.getTransitionName = function (direction) {
  86732. var key = 'toast' + (direction === 'back' ? 'Leave' : 'Enter');
  86733. return this._nav && this._nav.config.get(key);
  86734. };
  86735. /**
  86736. * @hidden
  86737. */
  86738. Toast.prototype.isValidPosition = function (position) {
  86739. return position === TOAST_POSITION_TOP || position === TOAST_POSITION_MIDDLE || position === TOAST_POSITION_BOTTOM;
  86740. };
  86741. /**
  86742. * @param {string} message Toast message content
  86743. */
  86744. Toast.prototype.setMessage = function (message) {
  86745. this.data.message = message;
  86746. return this;
  86747. };
  86748. /**
  86749. * @param {number} dur Toast message duration
  86750. */
  86751. Toast.prototype.setDuration = function (dur) {
  86752. this.data.duration = dur;
  86753. return this;
  86754. };
  86755. /**
  86756. * @param {'top'|'middle'|'bottom'} pos Toast message position
  86757. */
  86758. Toast.prototype.setPosition = function (pos) {
  86759. this.data.position = pos;
  86760. return this;
  86761. };
  86762. /**
  86763. * @param {string} cssClass Toast message CSS class
  86764. */
  86765. Toast.prototype.setCssClass = function (cssClass) {
  86766. this.data.cssClass = cssClass;
  86767. return this;
  86768. };
  86769. /**
  86770. * @param {boolean} closeButton Toast message close button
  86771. */
  86772. Toast.prototype.setShowCloseButton = function (closeButton) {
  86773. this.data.showCloseButton = closeButton;
  86774. return this;
  86775. };
  86776. /**
  86777. * Present the toast instance.
  86778. *
  86779. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  86780. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  86781. */
  86782. Toast.prototype.present = function (navOptions) {
  86783. if (navOptions === void 0) { navOptions = {}; }
  86784. navOptions.disableApp = false;
  86785. navOptions.keyboardClose = false;
  86786. return this._app.present(this, navOptions, __WEBPACK_IMPORTED_MODULE_1__app_app_constants__["d" /* PORTAL_TOAST */]);
  86787. };
  86788. /**
  86789. * Dismiss all toast components which have been presented.
  86790. */
  86791. Toast.prototype.dismissAll = function () {
  86792. this._nav && this._nav.popAll();
  86793. };
  86794. return Toast;
  86795. }(__WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__["a" /* ViewController */]));
  86796. var TOAST_POSITION_TOP = 'top';
  86797. var TOAST_POSITION_MIDDLE = 'middle';
  86798. var TOAST_POSITION_BOTTOM = 'bottom';
  86799. //# sourceMappingURL=toast.js.map
  86800. /***/ }),
  86801. /* 329 */
  86802. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  86803. "use strict";
  86804. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToastController; });
  86805. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  86806. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  86807. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  86808. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__toast__ = __webpack_require__(328);
  86809. /**
  86810. * @name ToastController
  86811. * @description
  86812. * A Toast is a subtle notification commonly used in modern applications.
  86813. * It can be used to provide feedback about an operation or to
  86814. * display a system message. The toast appears on top of the app's content,
  86815. * and can be dismissed by the app to resume user interaction with
  86816. * the app.
  86817. *
  86818. * ### Creating
  86819. * All of the toast options should be passed in the first argument of
  86820. * the create method: `create(opts)`. The message to display should be
  86821. * passed in the `message` property. The `showCloseButton` option can be set to
  86822. * true in order to display a close button on the toast. See the [create](#create)
  86823. * method below for all available options.
  86824. *
  86825. * ### Positioning
  86826. * Toasts can be positioned at the top, bottom or middle of the
  86827. * view port. The position can be passed to the `Toast.create(opts)` method.
  86828. * The position option is a string, and the values accepted are `top`, `bottom` and `middle`.
  86829. * If the position is not specified, the toast will be displayed at the bottom of the view port.
  86830. *
  86831. * ### Dismissing
  86832. * The toast can be dismissed automatically after a specific amount of time
  86833. * by passing the number of milliseconds to display it in the `duration` of
  86834. * the toast options. If `showCloseButton` is set to true, then the close button
  86835. * will dismiss the toast. To dismiss the toast after creation, call the `dismiss()`
  86836. * method on the Toast instance. The `onDidDismiss` function can be called to perform an action after the toast
  86837. * is dismissed.
  86838. *
  86839. * @usage
  86840. * ```ts
  86841. * import { ToastController } from 'ionic-angular';
  86842. *
  86843. * constructor(public toastCtrl: ToastController) { }
  86844. *
  86845. * presentToast() {
  86846. * const toast = this.toastCtrl.create({
  86847. * message: 'User was added successfully',
  86848. * duration: 3000,
  86849. * position: 'top'
  86850. * });
  86851. *
  86852. * toast.onDidDismiss(() => {
  86853. * console.log('Dismissed toast');
  86854. * });
  86855. *
  86856. * toast.present();
  86857. * }
  86858. * ```
  86859. * @advanced
  86860. * | Property | Type | Default | Description |
  86861. * |-----------------------|-----------|-----------------|---------------------------------------------------------------------------------------------------------------|
  86862. * | message | `string` | - | The message for the toast. Long strings will wrap and the toast container will expand. |
  86863. * | duration | `number` | - | How many milliseconds to wait before hiding the toast. By default, it will show until `dismiss()` is called. |
  86864. * | position | `string` | "bottom" | The position of the toast on the screen. Accepted values: "top", "middle", "bottom". |
  86865. * | cssClass | `string` | - | Additional classes for custom styles, separated by spaces. |
  86866. * | showCloseButton | `boolean` | false | Whether or not to show a button to close the toast. |
  86867. * | closeButtonText | `string` | "Close" | Text to display in the close button. |
  86868. * | dismissOnPageChange | `boolean` | false | Whether to dismiss the toast when navigating to a new page. |
  86869. *
  86870. * @demo /docs/demos/src/toast/
  86871. */
  86872. var ToastController = (function () {
  86873. function ToastController(_app, config) {
  86874. this._app = _app;
  86875. this.config = config;
  86876. }
  86877. /**
  86878. * Create a new toast component. See options below
  86879. * @param {ToastOptions} opts Toast options. See the below table for available options.
  86880. */
  86881. ToastController.prototype.create = function (opts) {
  86882. if (opts === void 0) { opts = {}; }
  86883. return new __WEBPACK_IMPORTED_MODULE_3__toast__["a" /* Toast */](this._app, opts, this.config);
  86884. };
  86885. ToastController.decorators = [
  86886. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  86887. ];
  86888. /** @nocollapse */
  86889. ToastController.ctorParameters = function () { return [
  86890. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], },
  86891. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  86892. ]; };
  86893. return ToastController;
  86894. }());
  86895. //# sourceMappingURL=toast-controller.js.map
  86896. /***/ }),
  86897. /* 330 */
  86898. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  86899. "use strict";
  86900. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Toggle; });
  86901. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  86902. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(25);
  86903. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  86904. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_dom_controller__ = __webpack_require__(15);
  86905. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_form__ = __webpack_require__(27);
  86906. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__ = __webpack_require__(13);
  86907. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__tap_click_haptic__ = __webpack_require__(51);
  86908. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_util__ = __webpack_require__(3);
  86909. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__util_base_input__ = __webpack_require__(37);
  86910. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__item_item__ = __webpack_require__(28);
  86911. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__platform_key__ = __webpack_require__(30);
  86912. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__platform_platform__ = __webpack_require__(7);
  86913. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__toggle_gesture__ = __webpack_require__(666);
  86914. var __extends = (this && this.__extends) || (function () {
  86915. var extendStatics = Object.setPrototypeOf ||
  86916. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  86917. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  86918. return function (d, b) {
  86919. extendStatics(d, b);
  86920. function __() { this.constructor = d; }
  86921. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  86922. };
  86923. })();
  86924. /**
  86925. * @name Toggle
  86926. * @description
  86927. * A toggle technically is the same thing as an HTML checkbox input,
  86928. * except it looks different and is easier to use on a touch device.
  86929. * Toggles can also have colors assigned to them, by adding any color
  86930. * attribute.
  86931. *
  86932. * See the [Angular Docs](https://angular.io/docs/ts/latest/guide/forms.html)
  86933. * for more info on forms and inputs.
  86934. *
  86935. * @usage
  86936. * ```html
  86937. *
  86938. * <ion-list>
  86939. *
  86940. * <ion-item>
  86941. * <ion-label>Pepperoni</ion-label>
  86942. * <ion-toggle [(ngModel)]="pepperoni"></ion-toggle>
  86943. * </ion-item>
  86944. *
  86945. * <ion-item>
  86946. * <ion-label>Sausage</ion-label>
  86947. * <ion-toggle [(ngModel)]="sausage" disabled="true"></ion-toggle>
  86948. * </ion-item>
  86949. *
  86950. * <ion-item>
  86951. * <ion-label>Mushrooms</ion-label>
  86952. * <ion-toggle [(ngModel)]="mushrooms"></ion-toggle>
  86953. * </ion-item>
  86954. *
  86955. * </ion-list>
  86956. * ```
  86957. *
  86958. * @demo /docs/demos/src/toggle/
  86959. * @see {@link /docs/components#toggle Toggle Component Docs}
  86960. */
  86961. var Toggle = (function (_super) {
  86962. __extends(Toggle, _super);
  86963. function Toggle(form, config, _plt, elementRef, renderer, _haptic, item, _gestureCtrl, _domCtrl, _zone) {
  86964. var _this = _super.call(this, config, elementRef, renderer, 'toggle', false, form, item, null) || this;
  86965. _this._plt = _plt;
  86966. _this._haptic = _haptic;
  86967. _this._gestureCtrl = _gestureCtrl;
  86968. _this._domCtrl = _domCtrl;
  86969. _this._zone = _zone;
  86970. _this._activated = false;
  86971. return _this;
  86972. }
  86973. Object.defineProperty(Toggle.prototype, "checked", {
  86974. /**
  86975. * @input {boolean} If true, the element is selected.
  86976. */
  86977. get: function () {
  86978. return this.value;
  86979. },
  86980. set: function (val) {
  86981. this.value = val;
  86982. },
  86983. enumerable: true,
  86984. configurable: true
  86985. });
  86986. /**
  86987. * @hidden
  86988. */
  86989. Toggle.prototype.ngAfterContentInit = function () {
  86990. this._initialize();
  86991. this._gesture = new __WEBPACK_IMPORTED_MODULE_12__toggle_gesture__["a" /* ToggleGesture */](this._plt, this, this._gestureCtrl, this._domCtrl);
  86992. this._gesture.listen();
  86993. };
  86994. /**
  86995. * @hidden
  86996. */
  86997. Toggle.prototype._inputUpdated = function () { };
  86998. /**
  86999. * @hidden
  87000. */
  87001. Toggle.prototype._inputNormalize = function (val) {
  87002. return Object(__WEBPACK_IMPORTED_MODULE_7__util_util__["o" /* isTrueProperty */])(val);
  87003. };
  87004. /**
  87005. * @hidden
  87006. */
  87007. Toggle.prototype._onDragStart = function (startX) {
  87008. var _this = this;
  87009. (void 0) /* assert */;
  87010. (void 0) /* console.debug */;
  87011. this._zone.run(function () {
  87012. _this._startX = startX;
  87013. _this._fireFocus();
  87014. _this._activated = true;
  87015. });
  87016. };
  87017. /**
  87018. * @hidden
  87019. */
  87020. Toggle.prototype._onDragMove = function (currentX) {
  87021. var _this = this;
  87022. if (!this._startX) {
  87023. (void 0) /* assert */;
  87024. return;
  87025. }
  87026. if (this._shouldToggle(currentX, -15)) {
  87027. this._zone.run(function () {
  87028. _this.value = !_this.value;
  87029. _this._startX = currentX;
  87030. _this._haptic.selection();
  87031. });
  87032. }
  87033. };
  87034. /**
  87035. * @hidden
  87036. */
  87037. Toggle.prototype._onDragEnd = function (endX) {
  87038. var _this = this;
  87039. if (!this._startX) {
  87040. (void 0) /* assert */;
  87041. return;
  87042. }
  87043. (void 0) /* console.debug */;
  87044. this._zone.run(function () {
  87045. if (_this._shouldToggle(endX, 4)) {
  87046. _this.value = !_this.value;
  87047. _this._haptic.selection();
  87048. }
  87049. _this._activated = false;
  87050. _this._fireBlur();
  87051. _this._startX = null;
  87052. });
  87053. };
  87054. /**
  87055. * @hidden
  87056. */
  87057. Toggle.prototype._shouldToggle = function (currentX, margin) {
  87058. var isLTR = !this._plt.isRTL;
  87059. var startX = this._startX;
  87060. if (this._value) {
  87061. return (isLTR && (startX + margin > currentX)) ||
  87062. (!isLTR && (startX - margin < currentX));
  87063. }
  87064. else {
  87065. return (isLTR && (startX - margin < currentX)) ||
  87066. (!isLTR && (startX + margin > currentX));
  87067. }
  87068. };
  87069. /**
  87070. * @hidden
  87071. */
  87072. Toggle.prototype._keyup = function (ev) {
  87073. if (ev.keyCode === __WEBPACK_IMPORTED_MODULE_10__platform_key__["f" /* KEY_SPACE */] || ev.keyCode === __WEBPACK_IMPORTED_MODULE_10__platform_key__["b" /* KEY_ENTER */]) {
  87074. (void 0) /* console.debug */;
  87075. ev.preventDefault();
  87076. ev.stopPropagation();
  87077. this.value = !this.value;
  87078. }
  87079. };
  87080. /**
  87081. * @hidden
  87082. */
  87083. Toggle.prototype.ngOnDestroy = function () {
  87084. _super.prototype.ngOnDestroy.call(this);
  87085. this._gesture && this._gesture.destroy();
  87086. };
  87087. Toggle.decorators = [
  87088. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  87089. selector: 'ion-toggle',
  87090. template: '<div class="toggle-icon">' +
  87091. '<div class="toggle-inner"></div>' +
  87092. '</div>' +
  87093. '<button role="checkbox" ' +
  87094. 'type="button" ' +
  87095. 'ion-button="item-cover" ' +
  87096. '[id]="id" ' +
  87097. '[attr.aria-checked]="_value" ' +
  87098. '[attr.aria-labelledby]="_labelId" ' +
  87099. '[attr.aria-disabled]="_disabled" ' +
  87100. 'class="item-cover" disable-activated>' +
  87101. '</button>',
  87102. host: {
  87103. '[class.toggle-disabled]': '_disabled',
  87104. '[class.toggle-checked]': '_value',
  87105. '[class.toggle-activated]': '_activated',
  87106. },
  87107. providers: [{ provide: __WEBPACK_IMPORTED_MODULE_1__angular_forms__["c" /* NG_VALUE_ACCESSOR */], useExisting: Toggle, multi: true }],
  87108. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  87109. },] },
  87110. ];
  87111. /** @nocollapse */
  87112. Toggle.ctorParameters = function () { return [
  87113. { type: __WEBPACK_IMPORTED_MODULE_4__util_form__["a" /* Form */], },
  87114. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  87115. { type: __WEBPACK_IMPORTED_MODULE_11__platform_platform__["a" /* Platform */], },
  87116. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  87117. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  87118. { type: __WEBPACK_IMPORTED_MODULE_6__tap_click_haptic__["a" /* Haptic */], },
  87119. { type: __WEBPACK_IMPORTED_MODULE_9__item_item__["a" /* Item */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  87120. { type: __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["l" /* GestureController */], },
  87121. { type: __WEBPACK_IMPORTED_MODULE_3__platform_dom_controller__["a" /* DomController */], },
  87122. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  87123. ]; };
  87124. Toggle.propDecorators = {
  87125. 'checked': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  87126. '_keyup': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["y" /* HostListener */], args: ['keyup', ['$event'],] },],
  87127. };
  87128. return Toggle;
  87129. }(__WEBPACK_IMPORTED_MODULE_8__util_base_input__["a" /* BaseInput */]));
  87130. //# sourceMappingURL=toggle.js.map
  87131. /***/ }),
  87132. /* 331 */
  87133. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87134. "use strict";
  87135. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Footer; });
  87136. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87137. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  87138. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  87139. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  87140. var __extends = (this && this.__extends) || (function () {
  87141. var extendStatics = Object.setPrototypeOf ||
  87142. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  87143. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  87144. return function (d, b) {
  87145. extendStatics(d, b);
  87146. function __() { this.constructor = d; }
  87147. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  87148. };
  87149. })();
  87150. /**
  87151. * @name Footer
  87152. * @description
  87153. * Footer is a root component of a page that sits at the bottom of the page.
  87154. * Footer can be a wrapper for `ion-toolbar` to make sure the content area is sized correctly.
  87155. *
  87156. * @usage
  87157. *
  87158. * ```html
  87159. * <ion-content></ion-content>
  87160. *
  87161. * <ion-footer>
  87162. * <ion-toolbar>
  87163. * <ion-title>Footer</ion-title>
  87164. * </ion-toolbar>
  87165. * </ion-footer>
  87166. * ```
  87167. *
  87168. */
  87169. var Footer = (function (_super) {
  87170. __extends(Footer, _super);
  87171. function Footer(config, elementRef, renderer, viewCtrl) {
  87172. var _this = _super.call(this, config, elementRef, renderer, 'footer') || this;
  87173. viewCtrl && viewCtrl._setFooter(_this);
  87174. return _this;
  87175. }
  87176. Footer.decorators = [
  87177. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  87178. selector: 'ion-footer'
  87179. },] },
  87180. ];
  87181. /** @nocollapse */
  87182. Footer.ctorParameters = function () { return [
  87183. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  87184. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  87185. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  87186. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  87187. ]; };
  87188. return Footer;
  87189. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  87190. //# sourceMappingURL=toolbar-footer.js.map
  87191. /***/ }),
  87192. /* 332 */
  87193. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87194. "use strict";
  87195. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Header; });
  87196. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87197. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  87198. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  87199. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  87200. var __extends = (this && this.__extends) || (function () {
  87201. var extendStatics = Object.setPrototypeOf ||
  87202. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  87203. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  87204. return function (d, b) {
  87205. extendStatics(d, b);
  87206. function __() { this.constructor = d; }
  87207. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  87208. };
  87209. })();
  87210. /**
  87211. * @name Header
  87212. * @description
  87213. * Header is a parent component that holds the navbar and toolbar component.
  87214. * It's important to note that `ion-header` needs to be one of the three root elements of a page
  87215. *
  87216. * @usage
  87217. *
  87218. * ```html
  87219. * <ion-header>
  87220. * <ion-navbar>
  87221. * <ion-title>Page1</ion-title>
  87222. * </ion-navbar>
  87223. *
  87224. * <ion-toolbar>
  87225. * <ion-title>Subheader</ion-title>
  87226. * </ion-toolbar>
  87227. * </ion-header>
  87228. *
  87229. * <ion-content></ion-content>
  87230. * ```
  87231. *
  87232. */
  87233. var Header = (function (_super) {
  87234. __extends(Header, _super);
  87235. function Header(config, elementRef, renderer, viewCtrl) {
  87236. var _this = _super.call(this, config, elementRef, renderer, 'header') || this;
  87237. viewCtrl && viewCtrl._setHeader(_this);
  87238. return _this;
  87239. }
  87240. Header.decorators = [
  87241. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  87242. selector: 'ion-header'
  87243. },] },
  87244. ];
  87245. /** @nocollapse */
  87246. Header.ctorParameters = function () { return [
  87247. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  87248. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  87249. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  87250. { type: __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  87251. ]; };
  87252. return Header;
  87253. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  87254. //# sourceMappingURL=toolbar-header.js.map
  87255. /***/ }),
  87256. /* 333 */
  87257. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87258. "use strict";
  87259. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToolbarItem; });
  87260. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87261. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__button_button__ = __webpack_require__(48);
  87262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  87263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ion__ = __webpack_require__(8);
  87264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navbar__ = __webpack_require__(53);
  87265. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__toolbar__ = __webpack_require__(84);
  87266. var __extends = (this && this.__extends) || (function () {
  87267. var extendStatics = Object.setPrototypeOf ||
  87268. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  87269. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  87270. return function (d, b) {
  87271. extendStatics(d, b);
  87272. function __() { this.constructor = d; }
  87273. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  87274. };
  87275. })();
  87276. /**
  87277. * @hidden
  87278. */
  87279. var ToolbarItem = (function (_super) {
  87280. __extends(ToolbarItem, _super);
  87281. function ToolbarItem(config, elementRef, renderer, toolbar, navbar) {
  87282. var _this = _super.call(this, config, elementRef, renderer, 'bar-buttons') || this;
  87283. _this.inToolbar = !!(toolbar || navbar);
  87284. return _this;
  87285. }
  87286. Object.defineProperty(ToolbarItem.prototype, "_buttons", {
  87287. set: function (buttons) {
  87288. if (this.inToolbar) {
  87289. buttons.forEach(function (button) {
  87290. button.setRole('bar-button');
  87291. });
  87292. }
  87293. },
  87294. enumerable: true,
  87295. configurable: true
  87296. });
  87297. ToolbarItem.decorators = [
  87298. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  87299. selector: 'ion-buttons,[menuToggle]'
  87300. },] },
  87301. ];
  87302. /** @nocollapse */
  87303. ToolbarItem.ctorParameters = function () { return [
  87304. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  87305. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  87306. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  87307. { type: __WEBPACK_IMPORTED_MODULE_5__toolbar__["a" /* Toolbar */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  87308. { type: __WEBPACK_IMPORTED_MODULE_4__navbar__["a" /* Navbar */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return __WEBPACK_IMPORTED_MODULE_4__navbar__["a" /* Navbar */]; }),] },] },
  87309. ]; };
  87310. ToolbarItem.propDecorators = {
  87311. '_buttons': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */], args: [__WEBPACK_IMPORTED_MODULE_1__button_button__["a" /* Button */],] },],
  87312. };
  87313. return ToolbarItem;
  87314. }(__WEBPACK_IMPORTED_MODULE_3__ion__["a" /* Ion */]));
  87315. //# sourceMappingURL=toolbar-item.js.map
  87316. /***/ }),
  87317. /* 334 */
  87318. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87319. "use strict";
  87320. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToolbarTitle; });
  87321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87322. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  87323. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  87324. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navbar__ = __webpack_require__(53);
  87325. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__toolbar__ = __webpack_require__(84);
  87326. var __extends = (this && this.__extends) || (function () {
  87327. var extendStatics = Object.setPrototypeOf ||
  87328. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  87329. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  87330. return function (d, b) {
  87331. extendStatics(d, b);
  87332. function __() { this.constructor = d; }
  87333. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  87334. };
  87335. })();
  87336. /**
  87337. * @name Title
  87338. * @description
  87339. * `ion-title` is a component that sets the title of the `Toolbar` or `Navbar`
  87340. *
  87341. * @usage
  87342. *
  87343. * ```html
  87344. * <ion-header>
  87345. *
  87346. * <ion-navbar>
  87347. * <ion-title>Settings</ion-title>
  87348. * </ion-navbar>
  87349. *
  87350. * </ion-header>
  87351. * ```
  87352. *
  87353. * Or to create a navbar with a toolbar as a subheader:
  87354. *
  87355. * ```html
  87356. * <ion-header>
  87357. *
  87358. * <ion-navbar>
  87359. * <ion-title>Main Header</ion-title>
  87360. * </ion-navbar>
  87361. *
  87362. * <ion-toolbar>
  87363. * <ion-title>Subheader</ion-title>
  87364. * </ion-toolbar>
  87365. *
  87366. * </ion-header>
  87367. * ```
  87368. *
  87369. * @demo /docs/demos/src/title/
  87370. */
  87371. var ToolbarTitle = (function (_super) {
  87372. __extends(ToolbarTitle, _super);
  87373. function ToolbarTitle(config, elementRef, renderer, toolbar, navbar) {
  87374. var _this = _super.call(this, config, elementRef, renderer, 'title') || this;
  87375. toolbar && toolbar._setTitle(_this);
  87376. navbar && navbar._setTitle(_this);
  87377. return _this;
  87378. }
  87379. /**
  87380. * @hidden
  87381. */
  87382. ToolbarTitle.prototype.getTitleText = function () {
  87383. return this._elementRef.nativeElement.textContent;
  87384. };
  87385. ToolbarTitle.decorators = [
  87386. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */], args: [{
  87387. selector: 'ion-title',
  87388. template: '<div class="toolbar-title" [ngClass]="\'toolbar-title-\' + _mode">' +
  87389. '<ng-content></ng-content>' +
  87390. '</div>',
  87391. changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__["i" /* ChangeDetectionStrategy */].OnPush,
  87392. encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__["_11" /* ViewEncapsulation */].None,
  87393. },] },
  87394. ];
  87395. /** @nocollapse */
  87396. ToolbarTitle.ctorParameters = function () { return [
  87397. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  87398. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  87399. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  87400. { type: __WEBPACK_IMPORTED_MODULE_4__toolbar__["a" /* Toolbar */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] },] },
  87401. { type: __WEBPACK_IMPORTED_MODULE_3__navbar__["a" /* Navbar */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return __WEBPACK_IMPORTED_MODULE_3__navbar__["a" /* Navbar */]; }),] },] },
  87402. ]; };
  87403. return ToolbarTitle;
  87404. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  87405. //# sourceMappingURL=toolbar-title.js.map
  87406. /***/ }),
  87407. /* 335 */
  87408. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87409. "use strict";
  87410. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Thumbnail; });
  87411. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87412. /**
  87413. * @name Thumbnail
  87414. * @module ionic
  87415. * @description
  87416. * A Thumbnail is a component that creates a squared image for an item.
  87417. * Thumbnails can be place on the left or right side of an item with the `item-start` or `item-end` directive.
  87418. * @see {@link /docs/components/#thumbnail-list Thumbnail Component Docs}
  87419. */
  87420. var Thumbnail = (function () {
  87421. function Thumbnail() {
  87422. }
  87423. Thumbnail.decorators = [
  87424. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  87425. selector: 'ion-thumbnail'
  87426. },] },
  87427. ];
  87428. /** @nocollapse */
  87429. Thumbnail.ctorParameters = function () { return []; };
  87430. return Thumbnail;
  87431. }());
  87432. //# sourceMappingURL=thumbnail.js.map
  87433. /***/ }),
  87434. /* 336 */
  87435. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87436. "use strict";
  87437. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Typography; });
  87438. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87439. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__config_config__ = __webpack_require__(2);
  87440. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ion__ = __webpack_require__(8);
  87441. var __extends = (this && this.__extends) || (function () {
  87442. var extendStatics = Object.setPrototypeOf ||
  87443. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  87444. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  87445. return function (d, b) {
  87446. extendStatics(d, b);
  87447. function __() { this.constructor = d; }
  87448. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  87449. };
  87450. })();
  87451. /**
  87452. * @name Typography
  87453. * @module ionic
  87454. * @description
  87455. *
  87456. * The Typography component is a simple component that can be used to style the text color of any element.
  87457. * The `ion-text` attribute should be added to the element in order to pass a color from the Sass `$colors`
  87458. * map and change the text color of that element.
  87459. *
  87460. * @usage
  87461. *
  87462. * ```html
  87463. * <h1 ion-text color="secondary">H1: The quick brown fox jumps over the lazy dog</h1>
  87464. *
  87465. * <h2 ion-text color="primary">H2: The quick brown fox jumps over the lazy dog</h2>
  87466. *
  87467. * <h3 ion-text color="light">H3: The quick brown fox jumps over the lazy dog</h3>
  87468. *
  87469. * <h4 ion-text color="danger">H4: The quick brown fox jumps over the lazy dog</h4>
  87470. *
  87471. * <h5 ion-text color="dark">H5: The quick brown fox jumps over the lazy dog</h5>
  87472. *
  87473. * <h6 ion-text [color]="dynamicColor">H6: The quick brown fox jumps over the lazy dog</h6>
  87474. *
  87475. * <p>
  87476. * I saw a werewolf with a Chinese menu in his hand.
  87477. * Walking through the <sub ion-text color="danger">streets</sub> of Soho in the rain.
  87478. * He <i ion-text color="primary">was</i> looking for a place called Lee Ho Fook's.
  87479. * Gonna get a <a ion-text color="secondary">big dish of beef chow mein.</a>
  87480. * </p>
  87481. *
  87482. * <p>
  87483. * He's the hairy-handed gent who ran amuck in Kent.
  87484. * Lately he's <sup ion-text color="primary">been</sup> overheard in Mayfair.
  87485. * Better stay away from him.
  87486. * He'll rip your lungs out, Jim.
  87487. * I'd like to meet his tailor.
  87488. * </p>
  87489. * ```
  87490. *
  87491. */
  87492. var Typography = (function (_super) {
  87493. __extends(Typography, _super);
  87494. function Typography(config, elementRef, renderer) {
  87495. return _super.call(this, config, elementRef, renderer, 'text') || this;
  87496. }
  87497. Typography.decorators = [
  87498. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  87499. selector: '[ion-text]'
  87500. },] },
  87501. ];
  87502. /** @nocollapse */
  87503. Typography.ctorParameters = function () { return [
  87504. { type: __WEBPACK_IMPORTED_MODULE_1__config_config__["a" /* Config */], },
  87505. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  87506. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  87507. ]; };
  87508. return Typography;
  87509. }(__WEBPACK_IMPORTED_MODULE_2__ion__["a" /* Ion */]));
  87510. //# sourceMappingURL=typography.js.map
  87511. /***/ }),
  87512. /* 337 */
  87513. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  87514. "use strict";
  87515. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return VirtualScroll; });
  87516. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  87517. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__virtual_util__ = __webpack_require__(667);
  87518. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  87519. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__content_content__ = __webpack_require__(31);
  87520. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__ = __webpack_require__(15);
  87521. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_util__ = __webpack_require__(3);
  87522. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__platform_platform__ = __webpack_require__(7);
  87523. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__navigation_view_controller__ = __webpack_require__(9);
  87524. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__virtual_item__ = __webpack_require__(147);
  87525. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__virtual_footer__ = __webpack_require__(145);
  87526. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__virtual_header__ = __webpack_require__(146);
  87527. /**
  87528. * @name VirtualScroll
  87529. * @description
  87530. * Virtual Scroll displays a virtual, "infinite" list. An array of records
  87531. * is passed to the virtual scroll containing the data to create templates
  87532. * for. The template created for each record, referred to as a cell, can
  87533. * consist of items, headers, and footers.
  87534. *
  87535. * For performance reasons, not every record in the list is rendered at once;
  87536. * instead a small subset of records (enough to fill the viewport) are rendered
  87537. * and reused as the user scrolls.
  87538. *
  87539. * ### The Basics
  87540. *
  87541. * The array of records should be passed to the `virtualScroll` property.
  87542. * The data given to the `virtualScroll` property must be an array. An item
  87543. * template with the `*virtualItem` property is required in the `virtualScroll`.
  87544. * The `virtualScroll` and `*virtualItem` properties can be added to any element.
  87545. *
  87546. * ```html
  87547. * <ion-list [virtualScroll]="items">
  87548. *
  87549. * <ion-item *virtualItem="let item">
  87550. * {% raw %}{{ item }}{% endraw %}
  87551. * </ion-item>
  87552. *
  87553. * </ion-list>
  87554. * ```
  87555. *
  87556. *
  87557. * ### Section Headers and Footers
  87558. *
  87559. * Section headers and footers are optional. They can be dynamically created
  87560. * from developer-defined functions. For example, a large list of contacts
  87561. * usually has a divider for each letter in the alphabet. Developers provide
  87562. * their own custom function to be called on each record. The logic in the
  87563. * custom function should determine whether to create the section template
  87564. * and what data to provide to the template. The custom function should
  87565. * return `null` if a template shouldn't be created.
  87566. *
  87567. * ```html
  87568. * <ion-list [virtualScroll]="items" [headerFn]="myHeaderFn">
  87569. *
  87570. * <ion-item-divider *virtualHeader="let header">
  87571. * Header: {% raw %}{{ header }}{% endraw %}
  87572. * </ion-item-divider>
  87573. *
  87574. * <ion-item *virtualItem="let item">
  87575. * Item: {% raw %}{{ item }}{% endraw %}
  87576. * </ion-item>
  87577. *
  87578. * </ion-list>
  87579. * ```
  87580. *
  87581. * Below is an example of a custom function called on every record. It
  87582. * gets passed the individual record, the record's index number,
  87583. * and the entire array of records. In this example, after every 20
  87584. * records a header will be inserted. So between the 19th and 20th records,
  87585. * between the 39th and 40th, and so on, a `<ion-item-divider>` will
  87586. * be created and the template's data will come from the function's
  87587. * returned data.
  87588. *
  87589. * ```ts
  87590. * myHeaderFn(record, recordIndex, records) {
  87591. * if (recordIndex % 20 === 0) {
  87592. * return 'Header ' + recordIndex;
  87593. * }
  87594. * return null;
  87595. * }
  87596. * ```
  87597. *
  87598. *
  87599. * ### Approximate Widths and Heights
  87600. *
  87601. * If the height of items in the virtual scroll are not close to the
  87602. * default size of 40px, it is extremely important to provide a value for
  87603. * approxItemHeight height. An exact pixel-perfect size is not necessary,
  87604. * but without an estimate the virtual scroll will not render correctly.
  87605. *
  87606. * The approximate width and height of each template is used to help
  87607. * determine how many cells should be created, and to help calculate
  87608. * the height of the scrollable area. Note that the actual rendered size
  87609. * of each cell comes from the app's CSS, whereas this approximation
  87610. * is only used to help calculate initial dimensions.
  87611. *
  87612. * It's also important to know that Ionic's default item sizes have
  87613. * slightly different heights between platforms, which is perfectly fine.
  87614. *
  87615. *
  87616. * ### Images Within Virtual Scroll
  87617. *
  87618. * HTTP requests, image decoding, and image rendering can cause jank while
  87619. * scrolling. In order to better control images, Ionic provides `<ion-img>`
  87620. * to manage HTTP requests and image rendering. While scrolling through items
  87621. * quickly, `<ion-img>` knows when and when not to make requests, when and
  87622. * when not to render images, and only loads the images that are viewable
  87623. * after scrolling. [Read more about `ion-img`.](../../img/Img/)
  87624. *
  87625. * It's also important for app developers to ensure image sizes are locked in,
  87626. * and after images have fully loaded they do not change size and affect any
  87627. * other element sizes. Simply put, to ensure rendering bugs are not introduced,
  87628. * it's vital that elements within a virtual item does not dynamically change.
  87629. *
  87630. * For virtual scrolling, the natural effects of the `<img>` are not desirable
  87631. * features. We recommend using the `<ion-img>` component over the native
  87632. * `<img>` element because when an `<img>` element is added to the DOM, it
  87633. * immediately makes a HTTP request for the image file. Additionally, `<img>`
  87634. * renders whenever it wants which could be while the user is scrolling. However,
  87635. * `<ion-img>` is governed by the containing `ion-content` and does not render
  87636. * images while scrolling quickly.
  87637. *
  87638. * ```html
  87639. * <ion-list [virtualScroll]="items">
  87640. *
  87641. * <ion-item *virtualItem="let item">
  87642. * <ion-avatar item-start>
  87643. * <ion-img [src]="item.avatarUrl"></ion-img>
  87644. * </ion-avatar>
  87645. * {% raw %} {{ item.firstName }} {{ item.lastName }}{% endraw %}
  87646. * </ion-item>
  87647. *
  87648. * </ion-list>
  87649. * ```
  87650. *
  87651. *
  87652. * ### Custom Components
  87653. *
  87654. * If a custom component is going to be used within Virtual Scroll, it's best
  87655. * to wrap it with a good old `<div>` to ensure the component is rendered
  87656. * correctly. Since each custom component's implementation and internals can be
  87657. * quite different, wrapping within a `<div>` is a safe way to make sure
  87658. * dimensions are measured correctly.
  87659. *
  87660. * ```html
  87661. * <ion-list [virtualScroll]="items">
  87662. *
  87663. * <div *virtualItem="let item">
  87664. * <my-custom-item [item]="item">
  87665. * {% raw %} {{ item }}{% endraw %}
  87666. * </my-custom-item>
  87667. * </div>
  87668. *
  87669. * </ion-list>
  87670. * ```
  87671. *
  87672. *
  87673. * ## Virtual Scroll Performance Tips
  87674. *
  87675. * #### iOS Cordova WKWebView
  87676. *
  87677. * When deploying to iOS with Cordova, it's highly recommended to use the
  87678. * [WKWebView plugin](http://blog.ionic.io/cordova-ios-performance-improvements-drop-in-speed-with-wkwebview/)
  87679. * in order to take advantage of iOS's higher performimg webview. Additionally,
  87680. * WKWebView is superior at scrolling efficiently in comparision to the older
  87681. * UIWebView.
  87682. *
  87683. * #### Lock in element dimensions and locations
  87684. *
  87685. * In order for virtual scroll to efficiently size and locate every item, it's
  87686. * very important every element within each virtual item does not dynamically
  87687. * change its dimensions or location. The best way to ensure size and location
  87688. * does not change, it's recommended each virtual item has locked in its size
  87689. * via CSS.
  87690. *
  87691. * #### Use `ion-img` for images
  87692. *
  87693. * When including images within Virtual Scroll, be sure to use
  87694. * [`ion-img`](../img/Img/) rather than the standard `<img>` HTML element.
  87695. * With `ion-img`, images are lazy loaded so only the viewable ones are
  87696. * rendered, and HTTP requests are efficiently controlled while scrolling.
  87697. *
  87698. * #### Set Approximate Widths and Heights
  87699. *
  87700. * As mentioned above, all elements should lock in their dimensions. However,
  87701. * virtual scroll isn't aware of the dimensions until after they have been
  87702. * rendered. For the initial render, virtual scroll still needs to set
  87703. * how many items should be built. With "approx" property inputs, such as
  87704. * `approxItemHeight`, we're able to give virtual scroll an approximate size,
  87705. * therefore allowing virtual scroll to decide how many items should be
  87706. * created.
  87707. *
  87708. * #### Changing dataset should use `virtualTrackBy`
  87709. *
  87710. * It is possible for the identities of elements in the iterator to change
  87711. * while the data does not. This can happen, for example, if the iterator
  87712. * produced from an RPC to the server, and that RPC is re-run. Even if the
  87713. * "data" hasn't changed, the second response will produce objects with
  87714. * different identities, and Ionic will tear down the entire DOM and rebuild
  87715. * it. This is an expensive operation and should be avoided if possible.
  87716. *
  87717. * #### Efficient headers and footer functions
  87718. *
  87719. * Each virtual item must stay extremely efficient, but one way to really
  87720. * kill its performance is to perform any DOM operations within section header
  87721. * and footer functions. These functions are called for every record in the
  87722. * dataset, so please make sure they're performant.
  87723. *
  87724. */
  87725. var VirtualScroll = (function () {
  87726. function VirtualScroll(_iterableDiffers, _elementRef, _renderer, _zone, _cd, _content, _plt, _ctrl, _config, _dom) {
  87727. var _this = this;
  87728. this._iterableDiffers = _iterableDiffers;
  87729. this._elementRef = _elementRef;
  87730. this._renderer = _renderer;
  87731. this._zone = _zone;
  87732. this._cd = _cd;
  87733. this._content = _content;
  87734. this._plt = _plt;
  87735. this._ctrl = _ctrl;
  87736. this._config = _config;
  87737. this._dom = _dom;
  87738. this._init = false;
  87739. this._lastEle = false;
  87740. this._records = [];
  87741. this._cells = [];
  87742. this._nodes = [];
  87743. this._vHeight = 0;
  87744. this._lastCheck = 0;
  87745. this._recordSize = 0;
  87746. this._data = {
  87747. scrollTop: 0,
  87748. };
  87749. this._queue = 1 /* NoChanges */;
  87750. /**
  87751. * @input {number} The buffer ratio is used to decide how many cells
  87752. * should get created when initially rendered. The number is a
  87753. * multiplier against the viewable area's height. For example, if it
  87754. * takes `20` cells to fill up the height of the viewable area, then
  87755. * with a buffer ratio of `3` it will create `60` cells that are
  87756. * available for reuse while scrolling. For better performance, it's
  87757. * better to have more cells than what are required to fill the
  87758. * viewable area. Default is `3`.
  87759. */
  87760. this.bufferRatio = 3;
  87761. /**
  87762. * @input {string} The approximate width of each item template's cell.
  87763. * This dimension is used to help determine how many cells should
  87764. * be created when initialized, and to help calculate the height of
  87765. * the scrollable area. This value can use either `px` or `%` units.
  87766. * Note that the actual rendered size of each cell comes from the
  87767. * app's CSS, whereas this approximation is used to help calculate
  87768. * initial dimensions before the item has been rendered. Default is
  87769. * `100%`.
  87770. */
  87771. this.approxItemWidth = '100%';
  87772. /**
  87773. * @input {string} The approximate width of each header template's cell.
  87774. * This dimension is used to help determine how many cells should
  87775. * be created when initialized, and to help calculate the height of
  87776. * the scrollable area. This value can use either `px` or `%` units.
  87777. * Note that the actual rendered size of each cell comes from the
  87778. * app's CSS, whereas this approximation is used to help calculate
  87779. * initial dimensions. Default is `100%`.
  87780. */
  87781. this.approxHeaderWidth = '100%';
  87782. /**
  87783. * @input {string} The approximate height of each header template's cell.
  87784. * This dimension is used to help determine how many cells should
  87785. * be created when initialized, and to help calculate the height of
  87786. * the scrollable area. This height value can only use `px` units.
  87787. * Note that the actual rendered size of each cell comes from the
  87788. * app's CSS, whereas this approximation is used to help calculate
  87789. * initial dimensions before the item has been rendered. Default is `40px`.
  87790. */
  87791. this.approxHeaderHeight = '40px';
  87792. /**
  87793. * @input {string} The approximate width of each footer template's cell.
  87794. * This dimension is used to help determine how many cells should
  87795. * be created when initialized, and to help calculate the height of
  87796. * the scrollable area. This value can use either `px` or `%` units.
  87797. * Note that the actual rendered size of each cell comes from the
  87798. * app's CSS, whereas this approximation is used to help calculate
  87799. * initial dimensions before the item has been rendered. Default is `100%`.
  87800. */
  87801. this.approxFooterWidth = '100%';
  87802. /**
  87803. * @input {string} The approximate height of each footer template's cell.
  87804. * This dimension is used to help determine how many cells should
  87805. * be created when initialized, and to help calculate the height of
  87806. * the scrollable area. This height value can only use `px` units.
  87807. * Note that the actual rendered size of each cell comes from the
  87808. * app's CSS, whereas this approximation is used to help calculate
  87809. * initial dimensions before the item has been rendered. Default is `40px`.
  87810. */
  87811. this.approxFooterHeight = '40px';
  87812. // hide the virtual scroll element with opacity so we don't
  87813. // see jank as it loads up, but we're still able to read
  87814. // dimensions because it's still rendered and only opacity hidden
  87815. this.setElementClass('virtual-loading', true);
  87816. // wait for the content to be rendered and has readable dimensions
  87817. var readSub = _ctrl.readReady.subscribe(function () {
  87818. readSub.unsubscribe();
  87819. _this.readUpdate(true);
  87820. });
  87821. // wait for the content to be writable
  87822. var writeSub = _ctrl.writeReady.subscribe(function () {
  87823. writeSub.unsubscribe();
  87824. _this._init = true;
  87825. _this.writeUpdate(true);
  87826. _this._listeners();
  87827. });
  87828. }
  87829. Object.defineProperty(VirtualScroll.prototype, "virtualScroll", {
  87830. get: function () {
  87831. return this._records;
  87832. },
  87833. /**
  87834. * @input {array} The data that builds the templates within the virtual scroll.
  87835. * This is the same data that you'd pass to `*ngFor`. It's important to note
  87836. * that when this data has changed, then the entire virtual scroll is reset,
  87837. * which is an expensive operation and should be avoided if possible.
  87838. */
  87839. set: function (val) {
  87840. this._records = val;
  87841. },
  87842. enumerable: true,
  87843. configurable: true
  87844. });
  87845. Object.defineProperty(VirtualScroll.prototype, "headerFn", {
  87846. /**
  87847. * @input {function} Section headers and the data used within its given
  87848. * template can be dynamically created by passing a function to `headerFn`.
  87849. * For example, a large list of contacts usually has dividers between each
  87850. * letter in the alphabet. App's can provide their own custom `headerFn`
  87851. * which is called with each record within the dataset. The logic within
  87852. * the header function can decide if the header template should be used,
  87853. * and what data to give to the header template. The function must return
  87854. * `null` if a header cell shouldn't be created.
  87855. */
  87856. set: function (val) {
  87857. if (Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["i" /* isFunction */])(val)) {
  87858. this._hdrFn = val.bind((this._ctrl._cmp) || this);
  87859. }
  87860. },
  87861. enumerable: true,
  87862. configurable: true
  87863. });
  87864. Object.defineProperty(VirtualScroll.prototype, "footerFn", {
  87865. /**
  87866. * @input {function} Section footers and the data used within its given
  87867. * template can be dynamically created by passing a function to `footerFn`.
  87868. * The logic within the footer function can decide if the footer template
  87869. * should be used, and what data to give to the footer template. The function
  87870. * must return `null` if a footer cell shouldn't be created.
  87871. */
  87872. set: function (val) {
  87873. if (Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["i" /* isFunction */])(val)) {
  87874. this._ftrFn = val.bind((this._ctrl._cmp) || this);
  87875. }
  87876. },
  87877. enumerable: true,
  87878. configurable: true
  87879. });
  87880. /**
  87881. * @hidden
  87882. */
  87883. VirtualScroll.prototype.firstRecord = function () {
  87884. var cells = this._cells;
  87885. return (cells.length > 0) ? cells[0].record : 0;
  87886. };
  87887. /**
  87888. * @hidden
  87889. */
  87890. VirtualScroll.prototype.lastRecord = function () {
  87891. var cells = this._cells;
  87892. return (cells.length > 0) ? cells[cells.length - 1].record : 0;
  87893. };
  87894. /**
  87895. * @hidden
  87896. */
  87897. VirtualScroll.prototype.ngOnChanges = function (changes) {
  87898. if ('virtualScroll' in changes) {
  87899. // React on virtualScroll changes only once all inputs have been initialized
  87900. var value = changes['virtualScroll'].currentValue;
  87901. if (!Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["l" /* isPresent */])(this._differ) && Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["l" /* isPresent */])(value)) {
  87902. try {
  87903. this._differ = this._iterableDiffers.find(value).create(this.virtualTrackBy);
  87904. }
  87905. catch (e) {
  87906. throw new Error("Cannot find a differ supporting object '" + value + "'. VirtualScroll only supports binding to Iterables such as Arrays.");
  87907. }
  87908. }
  87909. }
  87910. };
  87911. /**
  87912. * @hidden
  87913. */
  87914. VirtualScroll.prototype.ngDoCheck = function () {
  87915. // only continue if we've already initialized
  87916. if (!this._init) {
  87917. return;
  87918. }
  87919. // and if there actually are changes
  87920. var changes = Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["l" /* isPresent */])(this._differ) ? this._differ.diff(this.virtualScroll) : null;
  87921. if (!Object(__WEBPACK_IMPORTED_MODULE_5__util_util__["l" /* isPresent */])(changes)) {
  87922. return;
  87923. }
  87924. var needClean = false;
  87925. var lastRecord = this._recordSize;
  87926. changes.forEachOperation(function (_, pindex, cindex) {
  87927. // add new record after current position
  87928. if (pindex === null && (cindex < lastRecord)) {
  87929. (void 0) /* console.debug */;
  87930. needClean = true;
  87931. return;
  87932. }
  87933. // remove record after current position
  87934. if (pindex < lastRecord && cindex === null) {
  87935. (void 0) /* console.debug */;
  87936. needClean = true;
  87937. return;
  87938. }
  87939. });
  87940. this._recordSize = this._records ? this._records.length : 0;
  87941. this.readUpdate(needClean);
  87942. this.writeUpdate(needClean);
  87943. };
  87944. /**
  87945. * @hidden
  87946. */
  87947. VirtualScroll.prototype.readUpdate = function (needClean) {
  87948. if (needClean) {
  87949. // reset everything
  87950. (void 0) /* console.debug */;
  87951. this._cells.length = 0;
  87952. // this._nodes.length = 0;
  87953. // this._itmTmp.viewContainer.clear();
  87954. // ******** DOM READ ****************
  87955. this.calcDimensions();
  87956. }
  87957. else {
  87958. (void 0) /* console.debug */;
  87959. }
  87960. };
  87961. /**
  87962. * @hidden
  87963. */
  87964. VirtualScroll.prototype.writeUpdate = function (needClean) {
  87965. (void 0) /* console.debug */;
  87966. var data = this._data;
  87967. var stopAtHeight = (data.scrollTop + data.renderHeight);
  87968. data.scrollDiff = SCROLL_DIFFERENCE_MINIMUM + 1;
  87969. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["f" /* processRecords */])(stopAtHeight, this._records, this._cells, this._hdrFn, this._ftrFn, this._data);
  87970. // ******** DOM WRITE ****************
  87971. this.renderVirtual(needClean);
  87972. };
  87973. /**
  87974. * @hidden
  87975. */
  87976. VirtualScroll.prototype.calcDimensions = function () {
  87977. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["b" /* calcDimensions */])(this._data, this._elementRef.nativeElement, this.approxItemWidth, this.approxItemHeight, this.approxHeaderWidth, this.approxHeaderHeight, this.approxFooterWidth, this.approxFooterHeight, this.bufferRatio);
  87978. };
  87979. /**
  87980. * @hidden
  87981. * DOM WRITE
  87982. */
  87983. VirtualScroll.prototype.renderVirtual = function (needClean) {
  87984. var _this = this;
  87985. this._plt.raf(function () {
  87986. var nodes = _this._nodes;
  87987. var cells = _this._cells;
  87988. var data = _this._data;
  87989. var records = _this._records;
  87990. if (needClean) {
  87991. // ******** DOM WRITE ****************
  87992. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["g" /* updateDimensions */])(_this._plt, nodes, cells, data, true);
  87993. data.topCell = 0;
  87994. data.bottomCell = (cells.length - 1);
  87995. }
  87996. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["a" /* adjustRendered */])(cells, data);
  87997. _this._zone.run(function () {
  87998. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["e" /* populateNodeData */])(data.topCell, data.bottomCell, true, cells, records, nodes, _this._itmTmp.viewContainer, _this._itmTmp.templateRef, _this._hdrTmp && _this._hdrTmp.templateRef, _this._ftrTmp && _this._ftrTmp.templateRef);
  87999. });
  88000. if (needClean) {
  88001. _this._cd.detectChanges();
  88002. }
  88003. // at this point, this fn was called from within another
  88004. // requestAnimationFrame, so the next dom reads/writes within the next frame
  88005. // wait a frame before trying to read and calculate the dimensions
  88006. // ******** DOM READ ****************
  88007. _this._dom.read(function () { return Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["d" /* initReadNodes */])(_this._plt, nodes, cells, data); });
  88008. _this._dom.write(function () {
  88009. // update the bound context for each node
  88010. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["h" /* updateNodeContext */])(nodes, cells, data);
  88011. // ******** DOM WRITE ****************
  88012. _this._stepChangeDetection();
  88013. // ******** DOM WRITE ****************
  88014. _this._stepDOMWrite();
  88015. // ******** DOM WRITE ****************
  88016. _this._content.imgsUpdate();
  88017. // First time load
  88018. if (!_this._lastEle) {
  88019. // add an element at the end so :last-child css doesn't get messed up
  88020. // ******** DOM WRITE ****************
  88021. var ele = _this._elementRef.nativeElement;
  88022. var lastEle = _this._renderer.createElement(ele, 'div');
  88023. lastEle.className = 'virtual-last';
  88024. _this._lastEle = true;
  88025. // ******** DOM WRITE ****************
  88026. _this.setElementClass('virtual-scroll', true);
  88027. // ******** DOM WRITE ****************
  88028. _this.setElementClass('virtual-loading', false);
  88029. }
  88030. (void 0) /* assert */;
  88031. });
  88032. });
  88033. };
  88034. /**
  88035. * @hidden
  88036. */
  88037. VirtualScroll.prototype.resize = function () {
  88038. // only continue if we've already initialized
  88039. if (!this._init) {
  88040. return;
  88041. }
  88042. // check if component is rendered in the dom currently
  88043. if (this._elementRef.nativeElement.offsetParent === null) {
  88044. return;
  88045. }
  88046. (void 0) /* console.debug */;
  88047. this.calcDimensions();
  88048. this.writeUpdate(false);
  88049. };
  88050. /**
  88051. * @hidden
  88052. */
  88053. VirtualScroll.prototype._stepDOMWrite = function () {
  88054. var cells = this._cells;
  88055. var nodes = this._nodes;
  88056. // ******** DOM WRITE ****************
  88057. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["i" /* writeToNodes */])(this._plt, nodes, cells, this._recordSize);
  88058. // ******** DOM WRITE ****************
  88059. this._setHeight(Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["c" /* estimateHeight */])(this._recordSize, cells[cells.length - 1], this._vHeight, 0.25));
  88060. // we're done here, good work
  88061. this._queue = 1 /* NoChanges */;
  88062. };
  88063. /**
  88064. * @hidden
  88065. */
  88066. VirtualScroll.prototype._stepChangeDetection = function () {
  88067. // we need to do some change detection in this frame
  88068. // we've got work painting do, let's throw it in the
  88069. // domWrite callback so everyone plays nice
  88070. // ******** DOM WRITE ****************
  88071. var nodes = this._nodes;
  88072. for (var i = 0; i < nodes.length; i++) {
  88073. if (nodes[i].hasChanges) {
  88074. nodes[i].view.detectChanges();
  88075. }
  88076. }
  88077. // on the next frame we need write to the dom nodes manually
  88078. this._queue = 3 /* DomWrite */;
  88079. };
  88080. /**
  88081. * @hidden
  88082. */
  88083. VirtualScroll.prototype._stepNoChanges = function () {
  88084. var data = this._data;
  88085. // let's see if we've scroll far enough to require another check
  88086. var diff = data.scrollDiff = (data.scrollTop - this._lastCheck);
  88087. if (Math.abs(diff) < SCROLL_DIFFERENCE_MINIMUM) {
  88088. return;
  88089. }
  88090. var cells = this._cells;
  88091. var nodes = this._nodes;
  88092. var records = this._records;
  88093. // don't bother updating if the scrollTop hasn't changed much
  88094. this._lastCheck = data.scrollTop;
  88095. if (diff > 0) {
  88096. // load data we may not have processed yet
  88097. var stopAtHeight = (data.scrollTop + data.renderHeight);
  88098. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["f" /* processRecords */])(stopAtHeight, records, cells, this._hdrFn, this._ftrFn, data);
  88099. }
  88100. // ******** DOM READ ****************
  88101. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["g" /* updateDimensions */])(this._plt, nodes, cells, data, false);
  88102. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["a" /* adjustRendered */])(cells, data);
  88103. var hasChanges = Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["e" /* populateNodeData */])(data.topCell, data.bottomCell, diff > 0, cells, records, nodes, this._itmTmp.viewContainer, this._itmTmp.templateRef, this._hdrTmp && this._hdrTmp.templateRef, this._ftrTmp && this._ftrTmp.templateRef);
  88104. if (hasChanges) {
  88105. // queue making updates in the next frame
  88106. this._queue = 2 /* ChangeDetection */;
  88107. // update the bound context for each node
  88108. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["h" /* updateNodeContext */])(nodes, cells, data);
  88109. }
  88110. };
  88111. /**
  88112. * @hidden
  88113. */
  88114. VirtualScroll.prototype.scrollUpdate = function (ev) {
  88115. var _this = this;
  88116. // set the scroll top from the scroll event
  88117. this._data.scrollTop = ev.scrollTop;
  88118. // there is a queue system so that we can
  88119. // spread out the work over multiple frames
  88120. var queue = this._queue;
  88121. if (queue === 1 /* NoChanges */) {
  88122. // no dom writes or change detection to take care of
  88123. this._stepNoChanges();
  88124. }
  88125. else if (queue === 2 /* ChangeDetection */) {
  88126. this._dom.write(function () { return _this._stepChangeDetection(); });
  88127. }
  88128. else {
  88129. (void 0) /* assert */;
  88130. // there are DOM writes we need to take care of in this frame
  88131. this._dom.write(function () { return _this._stepDOMWrite(); });
  88132. }
  88133. };
  88134. /**
  88135. * @hidden
  88136. * DOM WRITE
  88137. */
  88138. VirtualScroll.prototype.scrollEnd = function () {
  88139. var _this = this;
  88140. // ******** DOM READ ****************
  88141. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["g" /* updateDimensions */])(this._plt, this._nodes, this._cells, this._data, false);
  88142. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["a" /* adjustRendered */])(this._cells, this._data);
  88143. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["e" /* populateNodeData */])(this._data.topCell, this._data.bottomCell, true, this._cells, this._records, this._nodes, this._itmTmp.viewContainer, this._itmTmp.templateRef, this._hdrTmp && this._hdrTmp.templateRef, this._ftrTmp && this._ftrTmp.templateRef);
  88144. // ******** DOM WRITE ***************
  88145. this._dom.write(function () {
  88146. // update the bound context for each node
  88147. Object(__WEBPACK_IMPORTED_MODULE_1__virtual_util__["h" /* updateNodeContext */])(_this._nodes, _this._cells, _this._data);
  88148. // ******** DOM WRITE ***************
  88149. _this._stepChangeDetection();
  88150. // ******** DOM WRITE ****************
  88151. _this._stepDOMWrite();
  88152. });
  88153. };
  88154. /**
  88155. * @hidden
  88156. * NO DOM
  88157. */
  88158. VirtualScroll.prototype._listeners = function () {
  88159. (void 0) /* assert */;
  88160. if (!this._scrollSub) {
  88161. if (this._config.getBoolean('virtualScrollEventAssist')) {
  88162. // use JS scrolling for iOS UIWebView
  88163. // goal is to completely remove this when iOS
  88164. // fully supports scroll events
  88165. // listen to JS scroll events
  88166. this._content.enableJsScroll();
  88167. }
  88168. this._resizeSub = this._plt.resize.subscribe(this.resize.bind(this));
  88169. this._scrollSub = this._content.ionScroll.subscribe(this.scrollUpdate.bind(this));
  88170. this._scrollEndSub = this._content.ionScrollEnd.subscribe(this.scrollEnd.bind(this));
  88171. }
  88172. };
  88173. /**
  88174. * @hidden
  88175. * DOM WRITE
  88176. */
  88177. VirtualScroll.prototype._setHeight = function (newVirtualHeight) {
  88178. if (newVirtualHeight !== this._vHeight) {
  88179. // ******** DOM WRITE ****************
  88180. this._renderer.setElementStyle(this._elementRef.nativeElement, 'height', newVirtualHeight > 0 ? newVirtualHeight + 'px' : '');
  88181. this._vHeight = newVirtualHeight;
  88182. (void 0) /* console.debug */;
  88183. }
  88184. };
  88185. /**
  88186. * @hidden
  88187. */
  88188. VirtualScroll.prototype.ngAfterContentInit = function () {
  88189. (void 0) /* assert */;
  88190. if (!this.approxItemHeight) {
  88191. this.approxItemHeight = '40px';
  88192. console.warn('Virtual Scroll: Please provide an "approxItemHeight" input to ensure proper virtual scroll rendering');
  88193. }
  88194. };
  88195. /**
  88196. * @hidden
  88197. */
  88198. VirtualScroll.prototype.setElementClass = function (className, add) {
  88199. this._renderer.setElementClass(this._elementRef.nativeElement, className, add);
  88200. };
  88201. /**
  88202. * @hidden
  88203. */
  88204. VirtualScroll.prototype.ngOnDestroy = function () {
  88205. this._resizeSub && this._resizeSub.unsubscribe();
  88206. this._scrollSub && this._scrollSub.unsubscribe();
  88207. this._scrollEndSub && this._scrollEndSub.unsubscribe();
  88208. this._resizeSub = this._scrollEndSub = this._scrollSub = null;
  88209. this._hdrFn = this._ftrFn = this._records = this._cells = this._nodes = this._data = null;
  88210. };
  88211. VirtualScroll.decorators = [
  88212. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  88213. selector: '[virtualScroll]'
  88214. },] },
  88215. ];
  88216. /** @nocollapse */
  88217. VirtualScroll.ctorParameters = function () { return [
  88218. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["E" /* IterableDiffers */], },
  88219. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  88220. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  88221. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */], },
  88222. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["j" /* ChangeDetectorRef */], },
  88223. { type: __WEBPACK_IMPORTED_MODULE_3__content_content__["a" /* Content */], },
  88224. { type: __WEBPACK_IMPORTED_MODULE_6__platform_platform__["a" /* Platform */], },
  88225. { type: __WEBPACK_IMPORTED_MODULE_7__navigation_view_controller__["a" /* ViewController */], },
  88226. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  88227. { type: __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__["a" /* DomController */], },
  88228. ]; };
  88229. VirtualScroll.propDecorators = {
  88230. '_itmTmp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_8__virtual_item__["a" /* VirtualItem */],] },],
  88231. '_hdrTmp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_10__virtual_header__["a" /* VirtualHeader */],] },],
  88232. '_ftrTmp': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["q" /* ContentChild */], args: [__WEBPACK_IMPORTED_MODULE_9__virtual_footer__["a" /* VirtualFooter */],] },],
  88233. 'virtualScroll': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88234. 'bufferRatio': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88235. 'approxItemWidth': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88236. 'approxItemHeight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88237. 'approxHeaderWidth': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88238. 'approxHeaderHeight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88239. 'approxFooterWidth': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88240. 'approxFooterHeight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88241. 'headerFn': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88242. 'footerFn': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88243. 'virtualTrackBy': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */] },],
  88244. };
  88245. return VirtualScroll;
  88246. }());
  88247. var SCROLL_DIFFERENCE_MINIMUM = 40;
  88248. //# sourceMappingURL=virtual-scroll.js.map
  88249. /***/ }),
  88250. /* 338 */
  88251. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  88252. "use strict";
  88253. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TapClick; });
  88254. /* unused harmony export isActivatable */
  88255. /* harmony export (immutable) */ __webpack_exports__["b"] = setupTapClick;
  88256. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  88257. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__activator__ = __webpack_require__(339);
  88258. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_app_app__ = __webpack_require__(11);
  88259. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__config_config__ = __webpack_require__(2);
  88260. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__ = __webpack_require__(15);
  88261. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__ = __webpack_require__(13);
  88262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__platform_platform__ = __webpack_require__(7);
  88263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_dom__ = __webpack_require__(18);
  88264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__gestures_pointer_events__ = __webpack_require__(167);
  88265. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__ripple__ = __webpack_require__(669);
  88266. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__gestures_ui_event_manager__ = __webpack_require__(36);
  88267. /**
  88268. * @hidden
  88269. */
  88270. var TapClick = (function () {
  88271. function TapClick(config, plt, dom, app, gestureCtrl) {
  88272. this.plt = plt;
  88273. this.app = app;
  88274. this.gestureCtrl = gestureCtrl;
  88275. this.disableClick = 0;
  88276. this.events = new __WEBPACK_IMPORTED_MODULE_10__gestures_ui_event_manager__["a" /* UIEventManager */](plt);
  88277. var activator = config.get('activator');
  88278. if (activator === 'ripple') {
  88279. this.activator = new __WEBPACK_IMPORTED_MODULE_9__ripple__["a" /* RippleActivator */](app, config, dom);
  88280. }
  88281. else if (activator === 'highlight') {
  88282. this.activator = new __WEBPACK_IMPORTED_MODULE_1__activator__["a" /* Activator */](app, config, dom);
  88283. }
  88284. this.usePolyfill = config.getBoolean('tapPolyfill');
  88285. (void 0) /* console.debug */;
  88286. var doc = plt.doc();
  88287. this.events.listen(doc, 'click', this.click.bind(this), { passive: false, capture: true });
  88288. this.pointerEvents = this.events.pointerEvents({
  88289. element: doc,
  88290. pointerDown: this.pointerStart.bind(this),
  88291. pointerMove: this.pointerMove.bind(this),
  88292. pointerUp: this.pointerEnd.bind(this),
  88293. passive: true
  88294. });
  88295. this.pointerEvents.mouseWait = DISABLE_NATIVE_CLICK_AMOUNT;
  88296. }
  88297. TapClick.prototype.pointerStart = function (ev) {
  88298. if (this.startCoord) {
  88299. return false;
  88300. }
  88301. if (!this.app.isEnabled()) {
  88302. return false;
  88303. }
  88304. this.lastTouchEnd = 0;
  88305. this.dispatchClick = true;
  88306. if (this.plt.doc() === ev.target) {
  88307. this.startCoord = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev);
  88308. return true;
  88309. }
  88310. this.activatableEle = getActivatableTarget(ev.target);
  88311. if (!this.activatableEle) {
  88312. this.startCoord = null;
  88313. return false;
  88314. }
  88315. this.startCoord = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev);
  88316. this.activator && this.activator.downAction(ev, this.activatableEle, this.startCoord);
  88317. return true;
  88318. };
  88319. TapClick.prototype.pointerMove = function (ev) {
  88320. if (this.startCoord && this.shouldCancelEvent(ev)) {
  88321. this.pointerCancel(ev);
  88322. }
  88323. };
  88324. TapClick.prototype.pointerEnd = function (ev, pointerEventType) {
  88325. if (!this.dispatchClick)
  88326. return;
  88327. (void 0) /* runInDev */;
  88328. if (!this.startCoord) {
  88329. return;
  88330. }
  88331. if (this.activator && ev.target !== this.plt.doc()) {
  88332. var activatableEle = getActivatableTarget(ev.target) || this.activatableEle;
  88333. if (activatableEle) {
  88334. this.activator.upAction(ev, activatableEle, this.startCoord);
  88335. }
  88336. }
  88337. if (this.usePolyfill && pointerEventType === __WEBPACK_IMPORTED_MODULE_8__gestures_pointer_events__["a" /* POINTER_EVENT_TYPE_TOUCH */] && this.app.isEnabled()) {
  88338. this.handleTapPolyfill(ev);
  88339. }
  88340. this.startCoord = null;
  88341. this.activatableEle = null;
  88342. };
  88343. TapClick.prototype.pointerCancel = function (ev) {
  88344. (void 0) /* console.debug */;
  88345. this.startCoord = null;
  88346. this.activatableEle = null;
  88347. this.dispatchClick = false;
  88348. this.activator && this.activator.clearState(false);
  88349. this.pointerEvents.stop();
  88350. };
  88351. TapClick.prototype.shouldCancelEvent = function (ev) {
  88352. return (this.app.isScrolling() ||
  88353. this.gestureCtrl.isCaptured() ||
  88354. Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["d" /* hasPointerMoved */])(POINTER_TOLERANCE, this.startCoord, Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev)));
  88355. };
  88356. TapClick.prototype.click = function (ev) {
  88357. if (this.shouldCancelClick(ev)) {
  88358. ev.preventDefault();
  88359. ev.stopPropagation();
  88360. return;
  88361. }
  88362. if (this.activator && this.plt.doc() !== ev.target) {
  88363. // cool, a click is gonna happen, let's tell the activator
  88364. // so the element can get the given "active" style
  88365. var activatableEle = getActivatableTarget(ev.target);
  88366. if (activatableEle) {
  88367. this.activator.clickAction(ev, activatableEle, this.startCoord);
  88368. }
  88369. }
  88370. (void 0) /* runInDev */;
  88371. };
  88372. TapClick.prototype.shouldCancelClick = function (ev) {
  88373. if (this.usePolyfill) {
  88374. if (!ev.isIonicTap && this.isDisabledNativeClick()) {
  88375. (void 0) /* console.debug */;
  88376. return true;
  88377. }
  88378. }
  88379. else if (!this.dispatchClick) {
  88380. (void 0) /* console.debug */;
  88381. return true;
  88382. }
  88383. if (!this.app.isEnabled()) {
  88384. (void 0) /* console.debug */;
  88385. return true;
  88386. }
  88387. if (this.gestureCtrl.isCaptured()) {
  88388. (void 0) /* console.debug */;
  88389. return true;
  88390. }
  88391. return false;
  88392. };
  88393. TapClick.prototype.profileClickDelay = function (ev) {
  88394. if (this.lastTouchEnd) {
  88395. var diff = Date.now() - this.lastTouchEnd;
  88396. if (diff < 100) {
  88397. (void 0) /* console.debug */;
  88398. }
  88399. else {
  88400. console.warn("SLOW click dispatched. Delay(ms):", diff, ev);
  88401. }
  88402. this.lastTouchEnd = null;
  88403. }
  88404. else {
  88405. (void 0) /* console.debug */;
  88406. }
  88407. };
  88408. TapClick.prototype.handleTapPolyfill = function (ev) {
  88409. (void 0) /* assert */;
  88410. // only dispatch mouse click events from a touchend event
  88411. // when tapPolyfill config is true, and the startCoordand endCoord
  88412. // are not too far off from each other
  88413. var endCoord = Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["f" /* pointerCoord */])(ev);
  88414. if (Object(__WEBPACK_IMPORTED_MODULE_7__util_dom__["d" /* hasPointerMoved */])(POINTER_TOLERANCE, this.startCoord, endCoord)) {
  88415. (void 0) /* console.debug */;
  88416. return;
  88417. }
  88418. // prevent native mouse click events for XX amount of time
  88419. this.disableClick = Date.now() + DISABLE_NATIVE_CLICK_AMOUNT;
  88420. if (this.app.isScrolling()) {
  88421. // do not fire off a click event while the app was scrolling
  88422. (void 0) /* console.debug */;
  88423. }
  88424. else {
  88425. // dispatch a mouse click event
  88426. (void 0) /* console.debug */;
  88427. var clickEvent = this.plt.doc().createEvent('MouseEvents');
  88428. clickEvent.initMouseEvent('click', true, true, this.plt.win(), 1, 0, 0, endCoord.x, endCoord.y, false, false, false, false, 0, null);
  88429. clickEvent.isIonicTap = true;
  88430. ev.target.dispatchEvent(clickEvent);
  88431. }
  88432. };
  88433. TapClick.prototype.isDisabledNativeClick = function () {
  88434. return this.disableClick > Date.now();
  88435. };
  88436. TapClick.decorators = [
  88437. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  88438. ];
  88439. /** @nocollapse */
  88440. TapClick.ctorParameters = function () { return [
  88441. { type: __WEBPACK_IMPORTED_MODULE_3__config_config__["a" /* Config */], },
  88442. { type: __WEBPACK_IMPORTED_MODULE_6__platform_platform__["a" /* Platform */], },
  88443. { type: __WEBPACK_IMPORTED_MODULE_4__platform_dom_controller__["a" /* DomController */], },
  88444. { type: __WEBPACK_IMPORTED_MODULE_2__components_app_app__["a" /* App */], },
  88445. { type: __WEBPACK_IMPORTED_MODULE_5__gestures_gesture_controller__["l" /* GestureController */], },
  88446. ]; };
  88447. return TapClick;
  88448. }());
  88449. function getActivatableTarget(ele) {
  88450. var targetEle = ele;
  88451. for (var x = 0; x < 10; x++) {
  88452. if (!targetEle)
  88453. break;
  88454. if (isActivatable(targetEle)) {
  88455. return targetEle;
  88456. }
  88457. targetEle = targetEle.parentElement;
  88458. }
  88459. return null;
  88460. }
  88461. /**
  88462. * @hidden
  88463. */
  88464. function isActivatable(ele) {
  88465. if (ACTIVATABLE_ELEMENTS.indexOf(ele.tagName) > -1) {
  88466. return true;
  88467. }
  88468. for (var i = 0, l = ACTIVATABLE_ATTRIBUTES.length; i < l; i++) {
  88469. if (ele.hasAttribute && ele.hasAttribute(ACTIVATABLE_ATTRIBUTES[i])) {
  88470. return true;
  88471. }
  88472. }
  88473. return false;
  88474. }
  88475. var ACTIVATABLE_ELEMENTS = ['A', 'BUTTON'];
  88476. var ACTIVATABLE_ATTRIBUTES = ['tappable', 'ion-button'];
  88477. var POINTER_TOLERANCE = 100;
  88478. var DISABLE_NATIVE_CLICK_AMOUNT = 2500;
  88479. /**
  88480. * @hidden
  88481. */
  88482. function setupTapClick(config, plt, dom, app, gestureCtrl) {
  88483. return function () {
  88484. return new TapClick(config, plt, dom, app, gestureCtrl);
  88485. };
  88486. }
  88487. //# sourceMappingURL=tap-click.js.map
  88488. /***/ }),
  88489. /* 339 */
  88490. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  88491. "use strict";
  88492. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Activator; });
  88493. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__activator_base__ = __webpack_require__(340);
  88494. var Activator = (function () {
  88495. function Activator(app, config, dom) {
  88496. this.app = app;
  88497. this.dom = dom;
  88498. this._queue = [];
  88499. this._active = [];
  88500. this.activatedDelay = ADD_ACTIVATED_DEFERS;
  88501. this.clearDelay = CLEAR_STATE_DEFERS;
  88502. this._css = config.get('activatedClass', 'activated');
  88503. }
  88504. Activator.prototype.clickAction = function (ev, activatableEle, _startCoord) {
  88505. if (Object(__WEBPACK_IMPORTED_MODULE_0__activator_base__["a" /* isActivatedDisabled */])(ev, activatableEle)) {
  88506. return;
  88507. }
  88508. // a click happened, so immediately deactive all activated elements
  88509. this._scheduleClear();
  88510. this._queue.length = 0;
  88511. for (var i = 0; i < this._active.length; i++) {
  88512. this._active[i].classList.remove(this._css);
  88513. }
  88514. this._active.length = 0;
  88515. // then immediately activate this element
  88516. if (activatableEle && activatableEle.parentNode) {
  88517. this._active.push(activatableEle);
  88518. activatableEle.classList.add(this._css);
  88519. }
  88520. };
  88521. Activator.prototype.downAction = function (ev, activatableEle, _startCoord) {
  88522. var _this = this;
  88523. // the user just pressed down
  88524. if (Object(__WEBPACK_IMPORTED_MODULE_0__activator_base__["a" /* isActivatedDisabled */])(ev, activatableEle)) {
  88525. return;
  88526. }
  88527. this.unscheduleClear();
  88528. this.deactivate(true);
  88529. // queue to have this element activated
  88530. this._queue.push(activatableEle);
  88531. this._activeDefer = this.dom.write(function () {
  88532. _this._activeDefer = null;
  88533. var activatableEle;
  88534. for (var i = 0; i < _this._queue.length; i++) {
  88535. activatableEle = _this._queue[i];
  88536. _this._active.push(activatableEle);
  88537. activatableEle.classList.add(_this._css);
  88538. }
  88539. _this._queue.length = 0;
  88540. }, this.activatedDelay);
  88541. };
  88542. // the user was pressing down, then just let up
  88543. Activator.prototype.upAction = function (_ev, _activatableEle, _startCoord) {
  88544. this._scheduleClear();
  88545. };
  88546. Activator.prototype._scheduleClear = function () {
  88547. var _this = this;
  88548. if (this._clearDefer) {
  88549. return;
  88550. }
  88551. this._clearDefer = this.dom.write(function () {
  88552. _this.clearState(true);
  88553. _this._clearDefer = null;
  88554. }, this.clearDelay);
  88555. };
  88556. Activator.prototype.unscheduleClear = function () {
  88557. if (this._clearDefer) {
  88558. this._clearDefer();
  88559. this._clearDefer = null;
  88560. }
  88561. };
  88562. // all states should return to normal
  88563. Activator.prototype.clearState = function (animated) {
  88564. var _this = this;
  88565. if (!this.app.isEnabled()) {
  88566. // the app is actively disabled, so don't bother deactivating anything.
  88567. // this makes it easier on the GPU so it doesn't have to redraw any
  88568. // buttons during a transition. This will retry in XX milliseconds.
  88569. this.dom.write(function () {
  88570. _this.clearState(animated);
  88571. }, 600);
  88572. }
  88573. else {
  88574. // not actively transitioning, good to deactivate any elements
  88575. this.deactivate(animated);
  88576. }
  88577. };
  88578. // remove the active class from all active elements
  88579. Activator.prototype.deactivate = function (animated) {
  88580. this._clearDeferred();
  88581. this._queue.length = 0;
  88582. var ele;
  88583. for (var i = 0; i < this._active.length; i++) {
  88584. ele = this._active[i];
  88585. ele.style[this.dom.plt.Css.transition] = animated ? '' : 'none';
  88586. ele.classList.remove(this._css);
  88587. }
  88588. this._active.length = 0;
  88589. };
  88590. Activator.prototype._clearDeferred = function () {
  88591. // Clear any active deferral
  88592. if (this._activeDefer) {
  88593. this._activeDefer();
  88594. this._activeDefer = null;
  88595. }
  88596. };
  88597. return Activator;
  88598. }());
  88599. var ADD_ACTIVATED_DEFERS = 80;
  88600. var CLEAR_STATE_DEFERS = 80;
  88601. //# sourceMappingURL=activator.js.map
  88602. /***/ }),
  88603. /* 340 */
  88604. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  88605. "use strict";
  88606. /* unused harmony export ActivatorBase */
  88607. /* harmony export (immutable) */ __webpack_exports__["a"] = isActivatedDisabled;
  88608. var ActivatorBase = (function () {
  88609. function ActivatorBase() {
  88610. }
  88611. return ActivatorBase;
  88612. }());
  88613. function isActivatedDisabled(ev, activatableEle) {
  88614. if (!activatableEle || !activatableEle.parentNode) {
  88615. return true;
  88616. }
  88617. if (!ev) {
  88618. return false;
  88619. }
  88620. if (ev.defaultPrevented) {
  88621. return true;
  88622. }
  88623. var targetEle = ev.target;
  88624. for (var i = 0; i < 4; i++) {
  88625. if (!targetEle) {
  88626. break;
  88627. }
  88628. if (targetEle.hasAttribute('disable-activated')) {
  88629. return true;
  88630. }
  88631. targetEle = targetEle.parentElement;
  88632. }
  88633. return false;
  88634. }
  88635. //# sourceMappingURL=activator-base.js.map
  88636. /***/ }),
  88637. /* 341 */
  88638. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  88639. "use strict";
  88640. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Events; });
  88641. /* unused harmony export setupEvents */
  88642. /* harmony export (immutable) */ __webpack_exports__["b"] = setupProvideEvents;
  88643. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__scroll_view__ = __webpack_require__(182);
  88644. /**
  88645. * @name Events
  88646. * @description
  88647. * Events is a publish-subscribe style event system for sending and responding to application-level
  88648. * events across your app.
  88649. *
  88650. * @usage
  88651. * ```ts
  88652. * import { Events } from 'ionic-angular';
  88653. *
  88654. * // first page (publish an event when a user is created)
  88655. * constructor(public events: Events) { }
  88656. *
  88657. * createUser(user) {
  88658. * console.log('User created!')
  88659. * this.events.publish('user:created', user, Date.now());
  88660. * }
  88661. *
  88662. *
  88663. * // second page (listen for the user created event after function is called)
  88664. * constructor(public events: Events) {
  88665. * events.subscribe('user:created', (user, time) => {
  88666. * // user and time are the same arguments passed in `events.publish(user, time)`
  88667. * console.log('Welcome', user, 'at', time);
  88668. * });
  88669. * }
  88670. *
  88671. * ```
  88672. * @demo /docs/demos/src/events/
  88673. */
  88674. var Events = (function () {
  88675. function Events() {
  88676. this._channels = [];
  88677. }
  88678. /**
  88679. * Subscribe to an event topic. Events that get posted to that topic will trigger the provided handler.
  88680. *
  88681. * @param {string} topic the topic to subscribe to
  88682. * @param {function} handler the event handler
  88683. */
  88684. Events.prototype.subscribe = function (topic) {
  88685. var _this = this;
  88686. var handlers = [];
  88687. for (var _i = 1; _i < arguments.length; _i++) {
  88688. handlers[_i - 1] = arguments[_i];
  88689. }
  88690. if (!this._channels[topic]) {
  88691. this._channels[topic] = [];
  88692. }
  88693. handlers.forEach(function (handler) {
  88694. _this._channels[topic].push(handler);
  88695. });
  88696. };
  88697. /**
  88698. * Unsubscribe from the given topic. Your handler will no longer receive events published to this topic.
  88699. *
  88700. * @param {string} topic the topic to unsubscribe from
  88701. * @param {function} handler the event handler
  88702. *
  88703. * @return true if a handler was removed
  88704. */
  88705. Events.prototype.unsubscribe = function (topic, handler) {
  88706. if (handler === void 0) { handler = null; }
  88707. var t = this._channels[topic];
  88708. if (!t) {
  88709. // Wasn't found, wasn't removed
  88710. return false;
  88711. }
  88712. if (!handler) {
  88713. // Remove all handlers for this topic
  88714. delete this._channels[topic];
  88715. return true;
  88716. }
  88717. // We need to find and remove a specific handler
  88718. var i = t.indexOf(handler);
  88719. if (i < 0) {
  88720. // Wasn't found, wasn't removed
  88721. return false;
  88722. }
  88723. t.splice(i, 1);
  88724. // If the channel is empty now, remove it from the channel map
  88725. if (!t.length) {
  88726. delete this._channels[topic];
  88727. }
  88728. return true;
  88729. };
  88730. /**
  88731. * Publish an event to the given topic.
  88732. *
  88733. * @param {string} topic the topic to publish to
  88734. * @param {any} eventData the data to send as the event
  88735. */
  88736. Events.prototype.publish = function (topic) {
  88737. var args = [];
  88738. for (var _i = 1; _i < arguments.length; _i++) {
  88739. args[_i - 1] = arguments[_i];
  88740. }
  88741. var t = this._channels[topic];
  88742. if (!t) {
  88743. return null;
  88744. }
  88745. var responses = [];
  88746. t.forEach(function (handler) {
  88747. responses.push(handler.apply(void 0, args));
  88748. });
  88749. return responses;
  88750. };
  88751. return Events;
  88752. }());
  88753. /**
  88754. * @hidden
  88755. */
  88756. function setupEvents(plt, dom) {
  88757. var events = new Events();
  88758. var win = plt.win();
  88759. var doc = plt.doc();
  88760. // start listening for resizes XXms after the app starts
  88761. plt.timeout(function () {
  88762. win.addEventListener('online', function (ev) {
  88763. events.publish('app:online', ev);
  88764. }, false);
  88765. win.addEventListener('offline', function (ev) {
  88766. events.publish('app:offline', ev);
  88767. }, false);
  88768. win.addEventListener('orientationchange', function (ev) {
  88769. events.publish('app:rotated', ev);
  88770. });
  88771. // When that status taps, we respond
  88772. win.addEventListener('statusTap', function () {
  88773. // TODO: Make this more better
  88774. var el = doc.elementFromPoint(plt.width() / 2, plt.height() / 2);
  88775. if (!el) {
  88776. return;
  88777. }
  88778. var contentEle = el.closest('.scroll-content');
  88779. if (contentEle) {
  88780. var style = contentEle.style;
  88781. var scroll = new __WEBPACK_IMPORTED_MODULE_0__scroll_view__["a" /* ScrollView */](null, plt, dom);
  88782. scroll._el = contentEle;
  88783. // We need to stop scrolling if it's happening and scroll up
  88784. style['WebkitBackfaceVisibility'] = 'hidden';
  88785. style['WebkitTransform'] = 'translate3d(0,0,0)';
  88786. dom.write(function () {
  88787. style.overflow = 'hidden';
  88788. function finish() {
  88789. style.overflow = '';
  88790. style['WebkitBackfaceVisibility'] = '';
  88791. style['WebkitTransform'] = '';
  88792. }
  88793. var didScrollTimeout = plt.timeout(function () {
  88794. finish();
  88795. }, 400);
  88796. scroll.scrollTo(0, 0, 300).then(function () {
  88797. plt.cancelTimeout(didScrollTimeout);
  88798. finish();
  88799. });
  88800. });
  88801. }
  88802. });
  88803. }, 2000);
  88804. return events;
  88805. }
  88806. /**
  88807. * @hidden
  88808. */
  88809. function setupProvideEvents(plt, dom) {
  88810. return function () {
  88811. return setupEvents(plt, dom);
  88812. };
  88813. }
  88814. //# sourceMappingURL=events.js.map
  88815. /***/ }),
  88816. /* 342 */
  88817. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  88818. "use strict";
  88819. /* unused harmony export PLATFORM_CONFIGS */
  88820. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PlatformConfigToken; });
  88821. /* harmony export (immutable) */ __webpack_exports__["b"] = providePlatformConfigs;
  88822. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  88823. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_utils__ = __webpack_require__(323);
  88824. var PLATFORM_CONFIGS = {
  88825. /**
  88826. * core
  88827. */
  88828. 'core': {
  88829. settings: {
  88830. mode: 'md',
  88831. keyboardHeight: 290
  88832. }
  88833. },
  88834. /**
  88835. * mobile
  88836. */
  88837. 'mobile': {},
  88838. /**
  88839. * phablet
  88840. */
  88841. 'phablet': {
  88842. isMatch: function (plt) {
  88843. var smallest = Math.min(plt.width(), plt.height());
  88844. var largest = Math.max(plt.width(), plt.height());
  88845. return (smallest > 390 && smallest < 520) &&
  88846. (largest > 620 && largest < 800);
  88847. }
  88848. },
  88849. /**
  88850. * tablet
  88851. */
  88852. 'tablet': {
  88853. isMatch: function (plt) {
  88854. var smallest = Math.min(plt.width(), plt.height());
  88855. var largest = Math.max(plt.width(), plt.height());
  88856. return (smallest > 460 && smallest < 820) &&
  88857. (largest > 780 && largest < 1400);
  88858. }
  88859. },
  88860. /**
  88861. * android
  88862. */
  88863. 'android': {
  88864. superset: 'mobile',
  88865. subsets: [
  88866. 'phablet',
  88867. 'tablet'
  88868. ],
  88869. settings: {
  88870. activator: function (plt) {
  88871. // md mode defaults to use ripple activator
  88872. // however, under-powered devices shouldn't use ripple
  88873. // if this a linux device, and is using Android Chrome v36 (Android 5.0)
  88874. // or above then use ripple, otherwise do not use a ripple effect
  88875. if (plt.testNavigatorPlatform('linux')) {
  88876. var chromeVersion = plt.matchUserAgentVersion(/Chrome\/(\d+).(\d+)?/);
  88877. if (chromeVersion) {
  88878. // linux android device using modern android chrome browser gets ripple
  88879. if (parseInt(chromeVersion.major, 10) < 36 || plt.version().major < 5) {
  88880. return 'none';
  88881. }
  88882. else {
  88883. return 'ripple';
  88884. }
  88885. }
  88886. // linux android device not using chrome browser checks just android's version
  88887. if (plt.version().major < 5) {
  88888. return 'none';
  88889. }
  88890. }
  88891. // fallback to always use ripple
  88892. return 'ripple';
  88893. },
  88894. autoFocusAssist: 'immediate',
  88895. inputCloning: true,
  88896. scrollAssist: true,
  88897. hoverCSS: false,
  88898. keyboardHeight: 300,
  88899. mode: 'md',
  88900. },
  88901. isMatch: function (plt) {
  88902. return plt.isPlatformMatch('android', ['android', 'silk'], ['windows phone']);
  88903. },
  88904. versionParser: function (plt) {
  88905. return plt.matchUserAgentVersion(/Android (\d+).(\d+)?/);
  88906. }
  88907. },
  88908. /**
  88909. * ios
  88910. */
  88911. 'ios': {
  88912. superset: 'mobile',
  88913. subsets: [
  88914. 'ipad',
  88915. 'iphone'
  88916. ],
  88917. settings: {
  88918. autoFocusAssist: 'delay',
  88919. hideCaretOnScroll: true,
  88920. hoverCSS: false,
  88921. inputBlurring: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["c" /* isIos */],
  88922. inputCloning: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["c" /* isIos */],
  88923. keyboardHeight: 250,
  88924. mode: 'ios',
  88925. statusbarPadding: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["a" /* isCordova */],
  88926. swipeBackEnabled: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["c" /* isIos */],
  88927. tapPolyfill: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["d" /* isIosUIWebView */],
  88928. virtualScrollEventAssist: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["d" /* isIosUIWebView */],
  88929. disableScrollAssist: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["c" /* isIos */],
  88930. scrollAssist: __WEBPACK_IMPORTED_MODULE_1__platform_utils__["c" /* isIos */],
  88931. keyboardResizes: keyboardResizes,
  88932. },
  88933. isMatch: function (plt) {
  88934. return plt.isPlatformMatch('ios', ['iphone', 'ipad', 'ipod'], ['windows phone']);
  88935. },
  88936. versionParser: function (plt) {
  88937. return plt.matchUserAgentVersion(/OS (\d+)_(\d+)?/);
  88938. }
  88939. },
  88940. /**
  88941. * ipad
  88942. */
  88943. 'ipad': {
  88944. superset: 'tablet',
  88945. settings: {
  88946. keyboardHeight: 500,
  88947. },
  88948. isMatch: function (plt) {
  88949. return plt.isPlatformMatch('ipad');
  88950. }
  88951. },
  88952. /**
  88953. * iphone
  88954. */
  88955. 'iphone': {
  88956. subsets: [
  88957. 'phablet'
  88958. ],
  88959. isMatch: function (plt) {
  88960. return plt.isPlatformMatch('iphone');
  88961. }
  88962. },
  88963. /**
  88964. * Windows
  88965. */
  88966. 'windows': {
  88967. superset: 'mobile',
  88968. subsets: [
  88969. 'phablet',
  88970. 'tablet'
  88971. ],
  88972. settings: {
  88973. mode: 'wp',
  88974. autoFocusAssist: 'immediate',
  88975. hoverCSS: false
  88976. },
  88977. isMatch: function (plt) {
  88978. return plt.isPlatformMatch('windows', ['windows phone']);
  88979. },
  88980. versionParser: function (plt) {
  88981. return plt.matchUserAgentVersion(/Windows Phone (\d+).(\d+)?/);
  88982. }
  88983. },
  88984. /**
  88985. * cordova
  88986. */
  88987. 'cordova': {
  88988. isEngine: true,
  88989. initialize: function (plt) {
  88990. // prepare a custom "ready" for cordova "deviceready"
  88991. plt.prepareReady = function () {
  88992. // 1) ionic bootstrapped
  88993. plt.windowLoad(function (win, doc) {
  88994. // 2) window onload triggered or completed
  88995. doc.addEventListener('deviceready', function () {
  88996. // 3) cordova deviceready event triggered
  88997. // add cordova listeners to emit platform events
  88998. doc.addEventListener('backbutton', function (ev) {
  88999. plt.zone.run(function () {
  89000. plt.backButton.emit(ev);
  89001. });
  89002. });
  89003. doc.addEventListener('pause', function (ev) {
  89004. plt.zone.run(function () {
  89005. plt.pause.emit(ev);
  89006. });
  89007. });
  89008. doc.addEventListener('resume', function (ev) {
  89009. plt.zone.run(function () {
  89010. plt.resume.emit(ev);
  89011. });
  89012. });
  89013. // cordova has its own exitApp method
  89014. plt.exitApp = function () {
  89015. win['navigator']['app'].exitApp();
  89016. };
  89017. // cordova has fully loaded and we've added listeners
  89018. plt.triggerReady('cordova');
  89019. });
  89020. });
  89021. };
  89022. },
  89023. isMatch: function (plt) {
  89024. return Object(__WEBPACK_IMPORTED_MODULE_1__platform_utils__["a" /* isCordova */])(plt);
  89025. }
  89026. },
  89027. /**
  89028. * electron
  89029. */
  89030. 'electron': {
  89031. superset: 'core',
  89032. initialize: function (plt) {
  89033. plt.prepareReady = function () {
  89034. // 1) ionic bootstrapped
  89035. plt.windowLoad(function () {
  89036. plt.triggerReady('electron');
  89037. });
  89038. };
  89039. },
  89040. isMatch: function (plt) {
  89041. return Object(__WEBPACK_IMPORTED_MODULE_1__platform_utils__["b" /* isElectron */])(plt);
  89042. }
  89043. }
  89044. };
  89045. function keyboardResizes(plt) {
  89046. var win = plt.win();
  89047. if (win.Ionic && win.Ionic.keyboardResizes === true) {
  89048. return true;
  89049. }
  89050. return false;
  89051. }
  89052. var PlatformConfigToken = new __WEBPACK_IMPORTED_MODULE_0__angular_core__["B" /* InjectionToken */]('PLTCONFIG');
  89053. function providePlatformConfigs() {
  89054. return PLATFORM_CONFIGS;
  89055. }
  89056. //# sourceMappingURL=platform-registry.js.map
  89057. /***/ }),
  89058. /* 343 */
  89059. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89060. "use strict";
  89061. /* unused harmony export MODE_IOS */
  89062. /* unused harmony export MODE_MD */
  89063. /* unused harmony export MODE_WP */
  89064. /* harmony export (immutable) */ __webpack_exports__["a"] = registerModeConfigs;
  89065. var MODE_IOS = {
  89066. activator: 'highlight',
  89067. actionSheetEnter: 'action-sheet-slide-in',
  89068. actionSheetLeave: 'action-sheet-slide-out',
  89069. alertEnter: 'alert-pop-in',
  89070. alertLeave: 'alert-pop-out',
  89071. backButtonText: 'Back',
  89072. backButtonIcon: 'ios-arrow-back',
  89073. iconMode: 'ios',
  89074. loadingEnter: 'loading-pop-in',
  89075. loadingLeave: 'loading-pop-out',
  89076. menuType: 'reveal',
  89077. modalEnter: 'modal-slide-in',
  89078. modalLeave: 'modal-slide-out',
  89079. pageTransition: 'ios-transition',
  89080. pickerEnter: 'picker-slide-in',
  89081. pickerLeave: 'picker-slide-out',
  89082. pickerRotateFactor: -0.46,
  89083. pickerScaleFactor: 1,
  89084. popoverEnter: 'popover-pop-in',
  89085. popoverLeave: 'popover-pop-out',
  89086. spinner: 'ios',
  89087. tabsHighlight: false,
  89088. tabsPlacement: 'bottom',
  89089. tabsHideOnSubPages: false,
  89090. toastEnter: 'toast-slide-in',
  89091. toastLeave: 'toast-slide-out',
  89092. };
  89093. var MODE_MD = {
  89094. activator: 'ripple',
  89095. actionSheetEnter: 'action-sheet-md-slide-in',
  89096. actionSheetLeave: 'action-sheet-md-slide-out',
  89097. alertEnter: 'alert-md-pop-in',
  89098. alertLeave: 'alert-md-pop-out',
  89099. backButtonText: '',
  89100. backButtonIcon: 'md-arrow-back',
  89101. iconMode: 'md',
  89102. loadingEnter: 'loading-md-pop-in',
  89103. loadingLeave: 'loading-md-pop-out',
  89104. menuType: 'overlay',
  89105. modalEnter: 'modal-md-slide-in',
  89106. modalLeave: 'modal-md-slide-out',
  89107. pageTransition: 'md-transition',
  89108. pickerEnter: 'picker-slide-in',
  89109. pickerLeave: 'picker-slide-out',
  89110. pickerRotateFactor: 0,
  89111. pickerScaleFactor: 0.81,
  89112. popoverEnter: 'popover-md-pop-in',
  89113. popoverLeave: 'popover-md-pop-out',
  89114. spinner: 'crescent',
  89115. tabsHighlight: false,
  89116. tabsPlacement: 'bottom',
  89117. tabsHideOnSubPages: false,
  89118. toastEnter: 'toast-md-slide-in',
  89119. toastLeave: 'toast-md-slide-out',
  89120. };
  89121. var MODE_WP = {
  89122. activator: 'highlight',
  89123. actionSheetEnter: 'action-sheet-wp-slide-in',
  89124. actionSheetLeave: 'action-sheet-wp-slide-out',
  89125. alertEnter: 'alert-wp-pop-in',
  89126. alertLeave: 'alert-wp-pop-out',
  89127. backButtonText: '',
  89128. backButtonIcon: 'ios-arrow-back',
  89129. iconMode: 'ios',
  89130. loadingEnter: 'loading-wp-pop-in',
  89131. loadingLeave: 'loading-wp-pop-out',
  89132. menuType: 'overlay',
  89133. modalEnter: 'modal-md-slide-in',
  89134. modalLeave: 'modal-md-slide-out',
  89135. pageTransition: 'wp-transition',
  89136. pickerEnter: 'picker-slide-in',
  89137. pickerLeave: 'picker-slide-out',
  89138. pickerRotateFactor: 0,
  89139. pickerScaleFactor: 0.81,
  89140. popoverEnter: 'popover-md-pop-in',
  89141. popoverLeave: 'popover-md-pop-out',
  89142. spinner: 'circles',
  89143. tabsHighlight: false,
  89144. tabsPlacement: 'top',
  89145. tabsHideOnSubPages: true,
  89146. toastEnter: 'toast-wp-slide-in',
  89147. toastLeave: 'toast-wp-slide-out',
  89148. };
  89149. function registerModeConfigs(config) {
  89150. return function () {
  89151. // iOS Mode Settings
  89152. config.setModeConfig('ios', MODE_IOS);
  89153. // Material Design Mode Settings
  89154. config.setModeConfig('md', MODE_MD);
  89155. // Windows Mode Settings
  89156. config.setModeConfig('wp', MODE_WP);
  89157. };
  89158. }
  89159. //# sourceMappingURL=mode-registry.js.map
  89160. /***/ }),
  89161. /* 344 */
  89162. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89163. "use strict";
  89164. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IonicGestureConfig; });
  89165. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  89166. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(40);
  89167. var __extends = (this && this.__extends) || (function () {
  89168. var extendStatics = Object.setPrototypeOf ||
  89169. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  89170. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  89171. return function (d, b) {
  89172. extendStatics(d, b);
  89173. function __() { this.constructor = d; }
  89174. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  89175. };
  89176. })();
  89177. /**
  89178. * @hidden
  89179. * This class overrides the default Angular gesture config.
  89180. */
  89181. var IonicGestureConfig = (function (_super) {
  89182. __extends(IonicGestureConfig, _super);
  89183. function IonicGestureConfig() {
  89184. return _super !== null && _super.apply(this, arguments) || this;
  89185. }
  89186. IonicGestureConfig.prototype.buildHammer = function (element) {
  89187. var mc = new window.Hammer(element);
  89188. for (var eventName in this.overrides) {
  89189. mc.get(eventName).set(this.overrides[eventName]);
  89190. }
  89191. return mc;
  89192. };
  89193. IonicGestureConfig.decorators = [
  89194. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  89195. ];
  89196. /** @nocollapse */
  89197. IonicGestureConfig.ctorParameters = function () { return []; };
  89198. return IonicGestureConfig;
  89199. }(__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__["d" /* HammerGestureConfig */]));
  89200. //# sourceMappingURL=gesture-config.js.map
  89201. /***/ }),
  89202. /* 345 */
  89203. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89204. "use strict";
  89205. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SplashScreen; });
  89206. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  89207. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ionic_native_core__ = __webpack_require__(346);
  89208. var __extends = (this && this.__extends) || (function () {
  89209. var extendStatics = Object.setPrototypeOf ||
  89210. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  89211. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  89212. return function (d, b) {
  89213. extendStatics(d, b);
  89214. function __() { this.constructor = d; }
  89215. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  89216. };
  89217. })();
  89218. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  89219. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  89220. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  89221. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  89222. return c > 3 && r && Object.defineProperty(target, key, r), r;
  89223. };
  89224. var __metadata = (this && this.__metadata) || function (k, v) {
  89225. if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
  89226. };
  89227. /**
  89228. * @name Splash Screen
  89229. * @description This plugin displays and hides a splash screen during application launch. The methods below allows showing and hiding the splashscreen after the app has loaded.
  89230. * @usage
  89231. * ```typescript
  89232. * import { SplashScreen } from '@ionic-native/splash-screen';
  89233. *
  89234. * constructor(private splashScreen: SplashScreen) { }
  89235. *
  89236. * ...
  89237. *
  89238. * this.splashScreen.show();
  89239. *
  89240. * this.splashScreen.hide();
  89241. * ```
  89242. */
  89243. var SplashScreen = (function (_super) {
  89244. __extends(SplashScreen, _super);
  89245. function SplashScreen() {
  89246. return _super !== null && _super.apply(this, arguments) || this;
  89247. }
  89248. /**
  89249. * Shows the splashscreen
  89250. */
  89251. SplashScreen.prototype.show = function () { };
  89252. /**
  89253. * Hides the splashscreen
  89254. */
  89255. SplashScreen.prototype.hide = function () { };
  89256. SplashScreen.decorators = [
  89257. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  89258. ];
  89259. /** @nocollapse */
  89260. SplashScreen.ctorParameters = function () { return []; };
  89261. __decorate([
  89262. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89263. sync: true
  89264. }),
  89265. __metadata("design:type", Function),
  89266. __metadata("design:paramtypes", []),
  89267. __metadata("design:returntype", void 0)
  89268. ], SplashScreen.prototype, "show", null);
  89269. __decorate([
  89270. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89271. sync: true
  89272. }),
  89273. __metadata("design:type", Function),
  89274. __metadata("design:paramtypes", []),
  89275. __metadata("design:returntype", void 0)
  89276. ], SplashScreen.prototype, "hide", null);
  89277. SplashScreen = __decorate([
  89278. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["d" /* Plugin */])({
  89279. pluginName: 'SplashScreen',
  89280. plugin: 'cordova-plugin-splashscreen',
  89281. pluginRef: 'navigator.splashscreen',
  89282. repo: 'https://github.com/apache/cordova-plugin-splashscreen',
  89283. platforms: ['Amazon Fire OS', 'Android', 'iOS', 'Windows']
  89284. })
  89285. ], SplashScreen);
  89286. return SplashScreen;
  89287. }(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["c" /* IonicNativePlugin */]));
  89288. //# sourceMappingURL=index.js.map
  89289. /***/ }),
  89290. /* 346 */
  89291. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89292. "use strict";
  89293. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__plugin__ = __webpack_require__(347);
  89294. /* unused harmony namespace reexport */
  89295. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__decorators__ = __webpack_require__(676);
  89296. /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_1__decorators__["a"]; });
  89297. /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__decorators__["b"]; });
  89298. /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__decorators__["c"]; });
  89299. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util__ = __webpack_require__(148);
  89300. /* unused harmony namespace reexport */
  89301. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ionic_native_plugin__ = __webpack_require__(677);
  89302. /* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_3__ionic_native_plugin__["a"]; });
  89303. //# sourceMappingURL=index.js.map
  89304. /***/ }),
  89305. /* 347 */
  89306. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89307. "use strict";
  89308. /* unused harmony export ERR_CORDOVA_NOT_AVAILABLE */
  89309. /* unused harmony export ERR_PLUGIN_NOT_INSTALLED */
  89310. /* harmony export (immutable) */ __webpack_exports__["a"] = checkAvailability;
  89311. /* harmony export (immutable) */ __webpack_exports__["b"] = instanceAvailability;
  89312. /* unused harmony export wrapEventObservable */
  89313. /* harmony export (immutable) */ __webpack_exports__["c"] = overrideFunction;
  89314. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return wrap; });
  89315. /* harmony export (immutable) */ __webpack_exports__["e"] = wrapInstance;
  89316. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_Observable__ = __webpack_require__(0);
  89317. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_rxjs_Observable__);
  89318. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_observable_fromEvent__ = __webpack_require__(214);
  89319. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_observable_fromEvent___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_observable_fromEvent__);
  89320. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__bootstrap__ = __webpack_require__(675);
  89321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util__ = __webpack_require__(148);
  89322. Object(__WEBPACK_IMPORTED_MODULE_2__bootstrap__["a" /* checkReady */])();
  89323. // declare const window;
  89324. // declare var Promise;
  89325. var ERR_CORDOVA_NOT_AVAILABLE = { error: 'cordova_not_available' };
  89326. var ERR_PLUGIN_NOT_INSTALLED = { error: 'plugin_not_installed' };
  89327. function checkAvailability(plugin, methodName, pluginName) {
  89328. var pluginRef, pluginInstance, pluginPackage;
  89329. if (typeof plugin === 'string') {
  89330. pluginRef = plugin;
  89331. }
  89332. else {
  89333. pluginRef = plugin.constructor.getPluginRef();
  89334. pluginName = plugin.constructor.getPluginName();
  89335. pluginPackage = plugin.constructor.getPluginInstallName();
  89336. }
  89337. pluginInstance = Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(pluginRef);
  89338. if (!pluginInstance ||
  89339. (!!methodName && typeof pluginInstance[methodName] === 'undefined')) {
  89340. if (!window.cordova) {
  89341. Object(__WEBPACK_IMPORTED_MODULE_3__util__["a" /* cordovaWarn */])(pluginName, methodName);
  89342. return ERR_CORDOVA_NOT_AVAILABLE;
  89343. }
  89344. Object(__WEBPACK_IMPORTED_MODULE_3__util__["d" /* pluginWarn */])(pluginName, pluginPackage, methodName);
  89345. return ERR_PLUGIN_NOT_INSTALLED;
  89346. }
  89347. return true;
  89348. }
  89349. /**
  89350. * Checks if _objectInstance exists and has the method/property
  89351. * @private
  89352. */
  89353. function instanceAvailability(pluginObj, methodName) {
  89354. return (pluginObj._objectInstance &&
  89355. (!methodName ||
  89356. typeof pluginObj._objectInstance[methodName] !== 'undefined'));
  89357. }
  89358. function setIndex(args, opts, resolve, reject) {
  89359. if (opts === void 0) { opts = {}; }
  89360. // ignore resolve and reject in case sync
  89361. if (opts.sync) {
  89362. return args;
  89363. }
  89364. // If the plugin method expects myMethod(success, err, options)
  89365. if (opts.callbackOrder === 'reverse') {
  89366. // Get those arguments in the order [resolve, reject, ...restOfArgs]
  89367. args.unshift(reject);
  89368. args.unshift(resolve);
  89369. }
  89370. else if (opts.callbackStyle === 'node') {
  89371. args.push(function (err, result) {
  89372. if (err) {
  89373. reject(err);
  89374. }
  89375. else {
  89376. resolve(result);
  89377. }
  89378. });
  89379. }
  89380. else if (opts.callbackStyle === 'object' &&
  89381. opts.successName &&
  89382. opts.errorName) {
  89383. var obj = {};
  89384. obj[opts.successName] = resolve;
  89385. obj[opts.errorName] = reject;
  89386. args.push(obj);
  89387. }
  89388. else if (typeof opts.successIndex !== 'undefined' ||
  89389. typeof opts.errorIndex !== 'undefined') {
  89390. var setSuccessIndex = function () {
  89391. // If we've specified a success/error index
  89392. if (opts.successIndex > args.length) {
  89393. args[opts.successIndex] = resolve;
  89394. }
  89395. else {
  89396. args.splice(opts.successIndex, 0, resolve);
  89397. }
  89398. };
  89399. var setErrorIndex = function () {
  89400. // We don't want that the reject cb gets spliced into the position of an optional argument that has not been defined and thus causing non expected behaviour.
  89401. if (opts.errorIndex > args.length) {
  89402. args[opts.errorIndex] = reject; // insert the reject fn at the correct specific index
  89403. }
  89404. else {
  89405. args.splice(opts.errorIndex, 0, reject); // otherwise just splice it into the array
  89406. }
  89407. };
  89408. if (opts.successIndex > opts.errorIndex) {
  89409. setErrorIndex();
  89410. setSuccessIndex();
  89411. }
  89412. else {
  89413. setSuccessIndex();
  89414. setErrorIndex();
  89415. }
  89416. }
  89417. else {
  89418. // Otherwise, let's tack them on to the end of the argument list
  89419. // which is 90% of cases
  89420. args.push(resolve);
  89421. args.push(reject);
  89422. }
  89423. return args;
  89424. }
  89425. function callCordovaPlugin(pluginObj, methodName, args, opts, resolve, reject) {
  89426. if (opts === void 0) { opts = {}; }
  89427. // Try to figure out where the success/error callbacks need to be bound
  89428. // to our promise resolve/reject handlers.
  89429. args = setIndex(args, opts, resolve, reject);
  89430. var availabilityCheck = checkAvailability(pluginObj, methodName);
  89431. if (availabilityCheck === true) {
  89432. var pluginInstance = Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(pluginObj.constructor.getPluginRef());
  89433. return pluginInstance[methodName].apply(pluginInstance, args);
  89434. }
  89435. else {
  89436. return availabilityCheck;
  89437. }
  89438. }
  89439. function wrapPromise(pluginObj, methodName, args, opts) {
  89440. if (opts === void 0) { opts = {}; }
  89441. var pluginResult, rej;
  89442. var p = Object(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* getPromise */])(function (resolve, reject) {
  89443. if (opts.destruct) {
  89444. pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts, function () {
  89445. var args = [];
  89446. for (var _i = 0; _i < arguments.length; _i++) {
  89447. args[_i] = arguments[_i];
  89448. }
  89449. return resolve(args);
  89450. }, function () {
  89451. var args = [];
  89452. for (var _i = 0; _i < arguments.length; _i++) {
  89453. args[_i] = arguments[_i];
  89454. }
  89455. return reject(args);
  89456. });
  89457. }
  89458. else {
  89459. pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts, resolve, reject);
  89460. }
  89461. rej = reject;
  89462. });
  89463. // Angular throws an error on unhandled rejection, but in this case we have already printed
  89464. // a warning that Cordova is undefined or the plugin is uninstalled, so there is no reason
  89465. // to error
  89466. if (pluginResult && pluginResult.error) {
  89467. p.catch(function () { });
  89468. typeof rej === 'function' && rej(pluginResult.error);
  89469. }
  89470. return p;
  89471. }
  89472. function wrapOtherPromise(pluginObj, methodName, args, opts) {
  89473. if (opts === void 0) { opts = {}; }
  89474. return Object(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* getPromise */])(function (resolve, reject) {
  89475. var pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts);
  89476. if (pluginResult) {
  89477. if (pluginResult.error) {
  89478. reject(pluginResult.error);
  89479. }
  89480. else if (pluginResult.then) {
  89481. pluginResult.then(resolve).catch(reject);
  89482. }
  89483. }
  89484. else {
  89485. reject({ error: 'unexpected_error' });
  89486. }
  89487. });
  89488. }
  89489. function wrapObservable(pluginObj, methodName, args, opts) {
  89490. if (opts === void 0) { opts = {}; }
  89491. return new __WEBPACK_IMPORTED_MODULE_0_rxjs_Observable__["Observable"](function (observer) {
  89492. var pluginResult;
  89493. if (opts.destruct) {
  89494. pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts, function () {
  89495. var args = [];
  89496. for (var _i = 0; _i < arguments.length; _i++) {
  89497. args[_i] = arguments[_i];
  89498. }
  89499. return observer.next(args);
  89500. }, function () {
  89501. var args = [];
  89502. for (var _i = 0; _i < arguments.length; _i++) {
  89503. args[_i] = arguments[_i];
  89504. }
  89505. return observer.error(args);
  89506. });
  89507. }
  89508. else {
  89509. pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts, observer.next.bind(observer), observer.error.bind(observer));
  89510. }
  89511. if (pluginResult && pluginResult.error) {
  89512. observer.error(pluginResult.error);
  89513. observer.complete();
  89514. }
  89515. return function () {
  89516. try {
  89517. if (opts.clearFunction) {
  89518. if (opts.clearWithArgs) {
  89519. return callCordovaPlugin(pluginObj, opts.clearFunction, args, opts, observer.next.bind(observer), observer.error.bind(observer));
  89520. }
  89521. return callCordovaPlugin(pluginObj, opts.clearFunction, []);
  89522. }
  89523. }
  89524. catch (e) {
  89525. console.warn('Unable to clear the previous observable watch for', pluginObj.constructor.getPluginName(), methodName);
  89526. console.warn(e);
  89527. }
  89528. };
  89529. });
  89530. }
  89531. function callInstance(pluginObj, methodName, args, opts, resolve, reject) {
  89532. if (opts === void 0) { opts = {}; }
  89533. args = setIndex(args, opts, resolve, reject);
  89534. if (instanceAvailability(pluginObj, methodName)) {
  89535. return pluginObj._objectInstance[methodName].apply(pluginObj._objectInstance, args);
  89536. }
  89537. }
  89538. /**
  89539. * Wrap the event with an observable
  89540. * @private
  89541. * @param event even name
  89542. * @param element The element to attach the event listener to
  89543. * @returns {Observable}
  89544. */
  89545. function wrapEventObservable(event, element) {
  89546. if (element === void 0) { element = window; }
  89547. return Object(__WEBPACK_IMPORTED_MODULE_1_rxjs_observable_fromEvent__["fromEvent"])(element, event);
  89548. }
  89549. /**
  89550. * Certain plugins expect the user to override methods in the plugin. For example,
  89551. * window.cordova.plugins.backgroundMode.onactivate = function() { ... }.
  89552. *
  89553. * Unfortunately, this is brittle and would be better wrapped as an Observable. overrideFunction
  89554. * does just this.
  89555. * @private
  89556. */
  89557. function overrideFunction(pluginObj, methodName, args, opts) {
  89558. if (opts === void 0) { opts = {}; }
  89559. return new __WEBPACK_IMPORTED_MODULE_0_rxjs_Observable__["Observable"](function (observer) {
  89560. var availabilityCheck = checkAvailability(pluginObj, null, pluginObj.constructor.getPluginName());
  89561. if (availabilityCheck === true) {
  89562. var pluginInstance_1 = Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(pluginObj.constructor.getPluginRef());
  89563. pluginInstance_1[methodName] = observer.next.bind(observer);
  89564. return function () { return (pluginInstance_1[methodName] = function () { }); };
  89565. }
  89566. else {
  89567. observer.error(availabilityCheck);
  89568. observer.complete();
  89569. }
  89570. });
  89571. }
  89572. /**
  89573. * @private
  89574. */
  89575. var wrap = function (pluginObj, methodName, opts) {
  89576. if (opts === void 0) { opts = {}; }
  89577. return function () {
  89578. var args = [];
  89579. for (var _i = 0; _i < arguments.length; _i++) {
  89580. args[_i] = arguments[_i];
  89581. }
  89582. if (opts.sync) {
  89583. // Sync doesn't wrap the plugin with a promise or observable, it returns the result as-is
  89584. return callCordovaPlugin(pluginObj, methodName, args, opts);
  89585. }
  89586. else if (opts.observable) {
  89587. return wrapObservable(pluginObj, methodName, args, opts);
  89588. }
  89589. else if (opts.eventObservable && opts.event) {
  89590. return wrapEventObservable(opts.event, opts.element);
  89591. }
  89592. else if (opts.otherPromise) {
  89593. return wrapOtherPromise(pluginObj, methodName, args, opts);
  89594. }
  89595. else {
  89596. return wrapPromise(pluginObj, methodName, args, opts);
  89597. }
  89598. };
  89599. };
  89600. /**
  89601. * @private
  89602. */
  89603. function wrapInstance(pluginObj, methodName, opts) {
  89604. if (opts === void 0) { opts = {}; }
  89605. return function () {
  89606. var args = [];
  89607. for (var _i = 0; _i < arguments.length; _i++) {
  89608. args[_i] = arguments[_i];
  89609. }
  89610. if (opts.sync) {
  89611. return callInstance(pluginObj, methodName, args, opts);
  89612. }
  89613. else if (opts.observable) {
  89614. return new __WEBPACK_IMPORTED_MODULE_0_rxjs_Observable__["Observable"](function (observer) {
  89615. var pluginResult;
  89616. if (opts.destruct) {
  89617. pluginResult = callInstance(pluginObj, methodName, args, opts, function () {
  89618. var args = [];
  89619. for (var _i = 0; _i < arguments.length; _i++) {
  89620. args[_i] = arguments[_i];
  89621. }
  89622. return observer.next(args);
  89623. }, function () {
  89624. var args = [];
  89625. for (var _i = 0; _i < arguments.length; _i++) {
  89626. args[_i] = arguments[_i];
  89627. }
  89628. return observer.error(args);
  89629. });
  89630. }
  89631. else {
  89632. pluginResult = callInstance(pluginObj, methodName, args, opts, observer.next.bind(observer), observer.error.bind(observer));
  89633. }
  89634. if (pluginResult && pluginResult.error) {
  89635. observer.error(pluginResult.error);
  89636. observer.complete();
  89637. }
  89638. return function () {
  89639. try {
  89640. if (opts.clearWithArgs) {
  89641. return callInstance(pluginObj, opts.clearFunction, args, opts, observer.next.bind(observer), observer.error.bind(observer));
  89642. }
  89643. return callInstance(pluginObj, opts.clearFunction, []);
  89644. }
  89645. catch (e) {
  89646. console.warn('Unable to clear the previous observable watch for', pluginObj.constructor.getPluginName(), methodName);
  89647. console.warn(e);
  89648. }
  89649. };
  89650. });
  89651. }
  89652. else if (opts.otherPromise) {
  89653. return Object(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* getPromise */])(function (resolve, reject) {
  89654. var result;
  89655. if (opts.destruct) {
  89656. result = callInstance(pluginObj, methodName, args, opts, function () {
  89657. var args = [];
  89658. for (var _i = 0; _i < arguments.length; _i++) {
  89659. args[_i] = arguments[_i];
  89660. }
  89661. return resolve(args);
  89662. }, function () {
  89663. var args = [];
  89664. for (var _i = 0; _i < arguments.length; _i++) {
  89665. args[_i] = arguments[_i];
  89666. }
  89667. return reject(args);
  89668. });
  89669. }
  89670. else {
  89671. result = callInstance(pluginObj, methodName, args, opts, resolve, reject);
  89672. }
  89673. if (result && !!result.then) {
  89674. result.then(resolve, reject);
  89675. }
  89676. else {
  89677. reject();
  89678. }
  89679. });
  89680. }
  89681. else {
  89682. var pluginResult_1, rej_1;
  89683. var p = Object(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* getPromise */])(function (resolve, reject) {
  89684. if (opts.destruct) {
  89685. pluginResult_1 = callInstance(pluginObj, methodName, args, opts, function () {
  89686. var args = [];
  89687. for (var _i = 0; _i < arguments.length; _i++) {
  89688. args[_i] = arguments[_i];
  89689. }
  89690. return resolve(args);
  89691. }, function () {
  89692. var args = [];
  89693. for (var _i = 0; _i < arguments.length; _i++) {
  89694. args[_i] = arguments[_i];
  89695. }
  89696. return reject(args);
  89697. });
  89698. }
  89699. else {
  89700. pluginResult_1 = callInstance(pluginObj, methodName, args, opts, resolve, reject);
  89701. }
  89702. rej_1 = reject;
  89703. });
  89704. // Angular throws an error on unhandled rejection, but in this case we have already printed
  89705. // a warning that Cordova is undefined or the plugin is uninstalled, so there is no reason
  89706. // to error
  89707. if (pluginResult_1 && pluginResult_1.error) {
  89708. p.catch(function () { });
  89709. typeof rej_1 === 'function' && rej_1(pluginResult_1.error);
  89710. }
  89711. return p;
  89712. }
  89713. };
  89714. }
  89715. //# sourceMappingURL=plugin.js.map
  89716. /***/ }),
  89717. /* 348 */
  89718. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89719. "use strict";
  89720. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return StatusBar; });
  89721. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  89722. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ionic_native_core__ = __webpack_require__(346);
  89723. var __extends = (this && this.__extends) || (function () {
  89724. var extendStatics = Object.setPrototypeOf ||
  89725. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  89726. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  89727. return function (d, b) {
  89728. extendStatics(d, b);
  89729. function __() { this.constructor = d; }
  89730. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  89731. };
  89732. })();
  89733. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  89734. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  89735. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  89736. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  89737. return c > 3 && r && Object.defineProperty(target, key, r), r;
  89738. };
  89739. var __metadata = (this && this.__metadata) || function (k, v) {
  89740. if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
  89741. };
  89742. /**
  89743. * @name Status Bar
  89744. * @description
  89745. * Manage the appearance of the native status bar.
  89746. *
  89747. * Requires Cordova plugin: `cordova-plugin-statusbar`. For more info, please see the [StatusBar plugin docs](https://github.com/apache/cordova-plugin-statusbar).
  89748. *
  89749. * @usage
  89750. * ```typescript
  89751. * import { StatusBar } from '@ionic-native/status-bar';
  89752. *
  89753. * constructor(private statusBar: StatusBar) { }
  89754. *
  89755. * ...
  89756. *
  89757. * // let status bar overlay webview
  89758. * this.statusBar.overlaysWebView(true);
  89759. *
  89760. * // set status bar to white
  89761. * this.statusBar.backgroundColorByHexString('#ffffff');
  89762. * ```
  89763. *
  89764. */
  89765. var StatusBar = (function (_super) {
  89766. __extends(StatusBar, _super);
  89767. function StatusBar() {
  89768. return _super !== null && _super.apply(this, arguments) || this;
  89769. }
  89770. /**
  89771. * Set whether the status bar overlays the main app view. The default
  89772. * is true.
  89773. *
  89774. * @param {boolean} doesOverlay Whether the status bar overlays the main app view.
  89775. */
  89776. StatusBar.prototype.overlaysWebView = function (doesOverlay) { };
  89777. ;
  89778. /**
  89779. * Use the default statusbar (dark text, for light backgrounds).
  89780. */
  89781. StatusBar.prototype.styleDefault = function () { };
  89782. ;
  89783. /**
  89784. * Use the lightContent statusbar (light text, for dark backgrounds).
  89785. */
  89786. StatusBar.prototype.styleLightContent = function () { };
  89787. ;
  89788. /**
  89789. * Use the blackTranslucent statusbar (light text, for dark backgrounds).
  89790. */
  89791. StatusBar.prototype.styleBlackTranslucent = function () { };
  89792. ;
  89793. /**
  89794. * Use the blackOpaque statusbar (light text, for dark backgrounds).
  89795. */
  89796. StatusBar.prototype.styleBlackOpaque = function () { };
  89797. ;
  89798. /**
  89799. * Set the status bar to a specific named color. Valid options:
  89800. * black, darkGray, lightGray, white, gray, red, green, blue, cyan, yellow, magenta, orange, purple, brown.
  89801. *
  89802. * iOS note: you must call StatusBar.overlaysWebView(false) to enable color changing.
  89803. *
  89804. * @param {string} colorName The name of the color (from above)
  89805. */
  89806. StatusBar.prototype.backgroundColorByName = function (colorName) { };
  89807. ;
  89808. /**
  89809. * Set the status bar to a specific hex color (CSS shorthand supported!).
  89810. *
  89811. * iOS note: you must call StatusBar.overlaysWebView(false) to enable color changing.
  89812. *
  89813. * @param {string} hexString The hex value of the color.
  89814. */
  89815. StatusBar.prototype.backgroundColorByHexString = function (hexString) { };
  89816. ;
  89817. /**
  89818. * Hide the StatusBar
  89819. */
  89820. StatusBar.prototype.hide = function () { };
  89821. ;
  89822. /**
  89823. * Show the StatusBar
  89824. */
  89825. StatusBar.prototype.show = function () { };
  89826. ;
  89827. StatusBar.decorators = [
  89828. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["A" /* Injectable */] },
  89829. ];
  89830. /** @nocollapse */
  89831. StatusBar.ctorParameters = function () { return []; };
  89832. __decorate([
  89833. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89834. sync: true
  89835. }),
  89836. __metadata("design:type", Function),
  89837. __metadata("design:paramtypes", [Boolean]),
  89838. __metadata("design:returntype", void 0)
  89839. ], StatusBar.prototype, "overlaysWebView", null);
  89840. __decorate([
  89841. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89842. sync: true
  89843. }),
  89844. __metadata("design:type", Function),
  89845. __metadata("design:paramtypes", []),
  89846. __metadata("design:returntype", void 0)
  89847. ], StatusBar.prototype, "styleDefault", null);
  89848. __decorate([
  89849. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89850. sync: true
  89851. }),
  89852. __metadata("design:type", Function),
  89853. __metadata("design:paramtypes", []),
  89854. __metadata("design:returntype", void 0)
  89855. ], StatusBar.prototype, "styleLightContent", null);
  89856. __decorate([
  89857. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89858. sync: true
  89859. }),
  89860. __metadata("design:type", Function),
  89861. __metadata("design:paramtypes", []),
  89862. __metadata("design:returntype", void 0)
  89863. ], StatusBar.prototype, "styleBlackTranslucent", null);
  89864. __decorate([
  89865. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89866. sync: true
  89867. }),
  89868. __metadata("design:type", Function),
  89869. __metadata("design:paramtypes", []),
  89870. __metadata("design:returntype", void 0)
  89871. ], StatusBar.prototype, "styleBlackOpaque", null);
  89872. __decorate([
  89873. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89874. sync: true
  89875. }),
  89876. __metadata("design:type", Function),
  89877. __metadata("design:paramtypes", [String]),
  89878. __metadata("design:returntype", void 0)
  89879. ], StatusBar.prototype, "backgroundColorByName", null);
  89880. __decorate([
  89881. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89882. sync: true
  89883. }),
  89884. __metadata("design:type", Function),
  89885. __metadata("design:paramtypes", [String]),
  89886. __metadata("design:returntype", void 0)
  89887. ], StatusBar.prototype, "backgroundColorByHexString", null);
  89888. __decorate([
  89889. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89890. sync: true
  89891. }),
  89892. __metadata("design:type", Function),
  89893. __metadata("design:paramtypes", []),
  89894. __metadata("design:returntype", void 0)
  89895. ], StatusBar.prototype, "hide", null);
  89896. __decorate([
  89897. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["a" /* Cordova */])({
  89898. sync: true
  89899. }),
  89900. __metadata("design:type", Function),
  89901. __metadata("design:paramtypes", []),
  89902. __metadata("design:returntype", void 0)
  89903. ], StatusBar.prototype, "show", null);
  89904. __decorate([
  89905. __WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["b" /* CordovaProperty */],
  89906. __metadata("design:type", Boolean)
  89907. ], StatusBar.prototype, "isVisible", void 0);
  89908. StatusBar = __decorate([
  89909. Object(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["d" /* Plugin */])({
  89910. pluginName: 'StatusBar',
  89911. plugin: 'cordova-plugin-statusbar',
  89912. pluginRef: 'StatusBar',
  89913. repo: 'https://github.com/apache/cordova-plugin-statusbar',
  89914. platforms: ['Android', 'iOS', 'Windows']
  89915. })
  89916. ], StatusBar);
  89917. return StatusBar;
  89918. }(__WEBPACK_IMPORTED_MODULE_1__ionic_native_core__["c" /* IonicNativePlugin */]));
  89919. //# sourceMappingURL=index.js.map
  89920. /***/ }),
  89921. /* 349 */,
  89922. /* 350 */,
  89923. /* 351 */
  89924. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  89925. "use strict";
  89926. /* unused harmony export VERSION */
  89927. /* unused harmony export JitCompilerFactory */
  89928. /* unused harmony export RESOURCE_CACHE_PROVIDER */
  89929. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return platformBrowserDynamic; });
  89930. /* unused harmony export ɵCompilerImpl */
  89931. /* unused harmony export ɵplatformCoreDynamic */
  89932. /* unused harmony export ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS */
  89933. /* unused harmony export ɵResourceLoaderImpl */
  89934. /* unused harmony export ɵa */
  89935. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_compiler__ = __webpack_require__(352);
  89936. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(1);
  89937. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_common__ = __webpack_require__(67);
  89938. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__ = __webpack_require__(40);
  89939. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_tslib__ = __webpack_require__(38);
  89940. /**
  89941. * @license Angular v5.2.11
  89942. * (c) 2010-2018 Google, Inc. https://angular.io/
  89943. * License: MIT
  89944. */
  89945. /**
  89946. * @fileoverview added by tsickle
  89947. * @suppress {checkTypes} checked by tsc
  89948. */
  89949. /**
  89950. * @license
  89951. * Copyright Google Inc. All Rights Reserved.
  89952. *
  89953. * Use of this source code is governed by an MIT-style license that can be
  89954. * found in the LICENSE file at https://angular.io/license
  89955. */
  89956. var MODULE_SUFFIX = '';
  89957. var builtinExternalReferences = createBuiltinExternalReferencesMap();
  89958. var JitReflector = /** @class */ (function () {
  89959. function JitReflector() {
  89960. this.builtinExternalReferences = new Map();
  89961. this.reflectionCapabilities = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["_23" /* ɵReflectionCapabilities */]();
  89962. }
  89963. /**
  89964. * @param {?} type
  89965. * @param {?} cmpMetadata
  89966. * @return {?}
  89967. */
  89968. JitReflector.prototype.componentModuleUrl = /**
  89969. * @param {?} type
  89970. * @param {?} cmpMetadata
  89971. * @return {?}
  89972. */
  89973. function (type, cmpMetadata) {
  89974. var /** @type {?} */ moduleId = cmpMetadata.moduleId;
  89975. if (typeof moduleId === 'string') {
  89976. var /** @type {?} */ scheme = Object(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["z" /* getUrlScheme */])(moduleId);
  89977. return scheme ? moduleId : "package:" + moduleId + MODULE_SUFFIX;
  89978. }
  89979. else if (moduleId !== null && moduleId !== void 0) {
  89980. throw Object(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["A" /* syntaxError */])("moduleId should be a string in \"" + Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_48" /* ɵstringify */])(type) + "\". See https://goo.gl/wIDDiL for more information.\n" +
  89981. "If you're using Webpack you should inline the template and the styles, see https://goo.gl/X2J8zc.");
  89982. }
  89983. return "./" + Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_48" /* ɵstringify */])(type);
  89984. };
  89985. /**
  89986. * @param {?} typeOrFunc
  89987. * @return {?}
  89988. */
  89989. JitReflector.prototype.parameters = /**
  89990. * @param {?} typeOrFunc
  89991. * @return {?}
  89992. */
  89993. function (typeOrFunc) {
  89994. return this.reflectionCapabilities.parameters(typeOrFunc);
  89995. };
  89996. /**
  89997. * @param {?} typeOrFunc
  89998. * @return {?}
  89999. */
  90000. JitReflector.prototype.annotations = /**
  90001. * @param {?} typeOrFunc
  90002. * @return {?}
  90003. */
  90004. function (typeOrFunc) {
  90005. return this.reflectionCapabilities.annotations(typeOrFunc);
  90006. };
  90007. /**
  90008. * @param {?} typeOrFunc
  90009. * @return {?}
  90010. */
  90011. JitReflector.prototype.propMetadata = /**
  90012. * @param {?} typeOrFunc
  90013. * @return {?}
  90014. */
  90015. function (typeOrFunc) {
  90016. return this.reflectionCapabilities.propMetadata(typeOrFunc);
  90017. };
  90018. /**
  90019. * @param {?} type
  90020. * @param {?} lcProperty
  90021. * @return {?}
  90022. */
  90023. JitReflector.prototype.hasLifecycleHook = /**
  90024. * @param {?} type
  90025. * @param {?} lcProperty
  90026. * @return {?}
  90027. */
  90028. function (type, lcProperty) {
  90029. return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);
  90030. };
  90031. /**
  90032. * @param {?} type
  90033. * @return {?}
  90034. */
  90035. JitReflector.prototype.guards = /**
  90036. * @param {?} type
  90037. * @return {?}
  90038. */
  90039. function (type) { return this.reflectionCapabilities.guards(type); };
  90040. /**
  90041. * @param {?} ref
  90042. * @return {?}
  90043. */
  90044. JitReflector.prototype.resolveExternalReference = /**
  90045. * @param {?} ref
  90046. * @return {?}
  90047. */
  90048. function (ref) {
  90049. return builtinExternalReferences.get(ref) || ref.runtime;
  90050. };
  90051. return JitReflector;
  90052. }());
  90053. /**
  90054. * @return {?}
  90055. */
  90056. function createBuiltinExternalReferencesMap() {
  90057. var /** @type {?} */ map = new Map();
  90058. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ANALYZE_FOR_ENTRY_COMPONENTS, __WEBPACK_IMPORTED_MODULE_1__angular_core__["a" /* ANALYZE_FOR_ENTRY_COMPONENTS */]);
  90059. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ElementRef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["t" /* ElementRef */]);
  90060. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].NgModuleRef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["K" /* NgModuleRef */]);
  90061. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ViewContainerRef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_10" /* ViewContainerRef */]);
  90062. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ChangeDetectorRef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["j" /* ChangeDetectorRef */]);
  90063. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].QueryList, __WEBPACK_IMPORTED_MODULE_1__angular_core__["T" /* QueryList */]);
  90064. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].TemplateRef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_5" /* TemplateRef */]);
  90065. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].CodegenComponentFactoryResolver, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_19" /* ɵCodegenComponentFactoryResolver */]);
  90066. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ComponentFactoryResolver, __WEBPACK_IMPORTED_MODULE_1__angular_core__["o" /* ComponentFactoryResolver */]);
  90067. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ComponentFactory, __WEBPACK_IMPORTED_MODULE_1__angular_core__["n" /* ComponentFactory */]);
  90068. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ComponentRef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["p" /* ComponentRef */]);
  90069. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].NgModuleFactory, __WEBPACK_IMPORTED_MODULE_1__angular_core__["J" /* NgModuleFactory */]);
  90070. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].createModuleFactory, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_26" /* ɵcmf */]);
  90071. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].moduleDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_37" /* ɵmod */]);
  90072. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].moduleProviderDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_38" /* ɵmpd */]);
  90073. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].RegisterModuleFactoryFn, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_47" /* ɵregisterModuleFactory */]);
  90074. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].Injector, __WEBPACK_IMPORTED_MODULE_1__angular_core__["C" /* Injector */]);
  90075. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ViewEncapsulation, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_11" /* ViewEncapsulation */]);
  90076. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ChangeDetectionStrategy, __WEBPACK_IMPORTED_MODULE_1__angular_core__["i" /* ChangeDetectionStrategy */]);
  90077. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].SecurityContext, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_0" /* SecurityContext */]);
  90078. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].LOCALE_ID, __WEBPACK_IMPORTED_MODULE_1__angular_core__["G" /* LOCALE_ID */]);
  90079. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].TRANSLATIONS_FORMAT, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_4" /* TRANSLATIONS_FORMAT */]);
  90080. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].inlineInterpolate, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_31" /* ɵinlineInterpolate */]);
  90081. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].interpolate, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_32" /* ɵinterpolate */]);
  90082. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].EMPTY_ARRAY, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_21" /* ɵEMPTY_ARRAY */]);
  90083. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].EMPTY_MAP, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_22" /* ɵEMPTY_MAP */]);
  90084. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].Renderer, __WEBPACK_IMPORTED_MODULE_1__angular_core__["V" /* Renderer */]);
  90085. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].viewDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_51" /* ɵvid */]);
  90086. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].elementDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_29" /* ɵeld */]);
  90087. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].anchorDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_24" /* ɵand */]);
  90088. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].textDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_49" /* ɵted */]);
  90089. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].directiveDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_28" /* ɵdid */]);
  90090. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].providerDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_45" /* ɵprd */]);
  90091. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].queryDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_46" /* ɵqud */]);
  90092. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].pureArrayDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_41" /* ɵpad */]);
  90093. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].pureObjectDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_43" /* ɵpod */]);
  90094. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].purePipeDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_44" /* ɵppd */]);
  90095. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].pipeDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_42" /* ɵpid */]);
  90096. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].nodeValue, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_40" /* ɵnov */]);
  90097. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].ngContentDef, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_39" /* ɵncd */]);
  90098. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].unwrapValue, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_50" /* ɵunv */]);
  90099. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].createRendererType2, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_27" /* ɵcrt */]);
  90100. map.set(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["j" /* Identifiers */].createComponentFactory, __WEBPACK_IMPORTED_MODULE_1__angular_core__["_25" /* ɵccf */]);
  90101. return map;
  90102. }
  90103. /**
  90104. * @fileoverview added by tsickle
  90105. * @suppress {checkTypes} checked by tsc
  90106. */
  90107. /**
  90108. * @license
  90109. * Copyright Google Inc. All Rights Reserved.
  90110. *
  90111. * Use of this source code is governed by an MIT-style license that can be
  90112. * found in the LICENSE file at https://angular.io/license
  90113. */
  90114. var ERROR_COLLECTOR_TOKEN = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('ErrorCollector');
  90115. /**
  90116. * A default provider for {\@link PACKAGE_ROOT_URL} that maps to '/'.
  90117. */
  90118. var DEFAULT_PACKAGE_URL_PROVIDER = {
  90119. provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["P" /* PACKAGE_ROOT_URL */],
  90120. useValue: '/'
  90121. };
  90122. var _NO_RESOURCE_LOADER = {
  90123. get: /**
  90124. * @param {?} url
  90125. * @return {?}
  90126. */
  90127. function (url) {
  90128. throw new Error("No ResourceLoader implementation has been provided. Can't read the url \"" + url + "\"");
  90129. }
  90130. };
  90131. var baseHtmlParser = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["B" /* InjectionToken */]('HtmlParser');
  90132. var CompilerImpl = /** @class */ (function () {
  90133. function CompilerImpl(injector, _metadataResolver, templateParser, styleCompiler, viewCompiler, ngModuleCompiler, summaryResolver, compileReflector, compilerConfig, console) {
  90134. this._metadataResolver = _metadataResolver;
  90135. this._delegate = new __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["k" /* JitCompiler */](_metadataResolver, templateParser, styleCompiler, viewCompiler, ngModuleCompiler, summaryResolver, compileReflector, compilerConfig, console, this.getExtraNgModuleProviders.bind(this));
  90136. this.injector = injector;
  90137. }
  90138. /**
  90139. * @return {?}
  90140. */
  90141. CompilerImpl.prototype.getExtraNgModuleProviders = /**
  90142. * @return {?}
  90143. */
  90144. function () {
  90145. return [this._metadataResolver.getProviderMetadata(new __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["r" /* ProviderMeta */](__WEBPACK_IMPORTED_MODULE_1__angular_core__["k" /* Compiler */], { useValue: this }))];
  90146. };
  90147. /**
  90148. * @template T
  90149. * @param {?} moduleType
  90150. * @return {?}
  90151. */
  90152. CompilerImpl.prototype.compileModuleSync = /**
  90153. * @template T
  90154. * @param {?} moduleType
  90155. * @return {?}
  90156. */
  90157. function (moduleType) {
  90158. return /** @type {?} */ (this._delegate.compileModuleSync(moduleType));
  90159. };
  90160. /**
  90161. * @template T
  90162. * @param {?} moduleType
  90163. * @return {?}
  90164. */
  90165. CompilerImpl.prototype.compileModuleAsync = /**
  90166. * @template T
  90167. * @param {?} moduleType
  90168. * @return {?}
  90169. */
  90170. function (moduleType) {
  90171. return /** @type {?} */ (this._delegate.compileModuleAsync(moduleType));
  90172. };
  90173. /**
  90174. * @template T
  90175. * @param {?} moduleType
  90176. * @return {?}
  90177. */
  90178. CompilerImpl.prototype.compileModuleAndAllComponentsSync = /**
  90179. * @template T
  90180. * @param {?} moduleType
  90181. * @return {?}
  90182. */
  90183. function (moduleType) {
  90184. var /** @type {?} */ result = this._delegate.compileModuleAndAllComponentsSync(moduleType);
  90185. return {
  90186. ngModuleFactory: /** @type {?} */ (result.ngModuleFactory),
  90187. componentFactories: /** @type {?} */ (result.componentFactories),
  90188. };
  90189. };
  90190. /**
  90191. * @template T
  90192. * @param {?} moduleType
  90193. * @return {?}
  90194. */
  90195. CompilerImpl.prototype.compileModuleAndAllComponentsAsync = /**
  90196. * @template T
  90197. * @param {?} moduleType
  90198. * @return {?}
  90199. */
  90200. function (moduleType) {
  90201. return this._delegate.compileModuleAndAllComponentsAsync(moduleType)
  90202. .then(function (result) {
  90203. return ({
  90204. ngModuleFactory: /** @type {?} */ (result.ngModuleFactory),
  90205. componentFactories: /** @type {?} */ (result.componentFactories),
  90206. });
  90207. });
  90208. };
  90209. /**
  90210. * @param {?} summaries
  90211. * @return {?}
  90212. */
  90213. CompilerImpl.prototype.loadAotSummaries = /**
  90214. * @param {?} summaries
  90215. * @return {?}
  90216. */
  90217. function (summaries) { this._delegate.loadAotSummaries(summaries); };
  90218. /**
  90219. * @param {?} ref
  90220. * @return {?}
  90221. */
  90222. CompilerImpl.prototype.hasAotSummary = /**
  90223. * @param {?} ref
  90224. * @return {?}
  90225. */
  90226. function (ref) { return this._delegate.hasAotSummary(ref); };
  90227. /**
  90228. * @template T
  90229. * @param {?} component
  90230. * @return {?}
  90231. */
  90232. CompilerImpl.prototype.getComponentFactory = /**
  90233. * @template T
  90234. * @param {?} component
  90235. * @return {?}
  90236. */
  90237. function (component) {
  90238. return /** @type {?} */ (this._delegate.getComponentFactory(component));
  90239. };
  90240. /**
  90241. * @return {?}
  90242. */
  90243. CompilerImpl.prototype.clearCache = /**
  90244. * @return {?}
  90245. */
  90246. function () { this._delegate.clearCache(); };
  90247. /**
  90248. * @param {?} type
  90249. * @return {?}
  90250. */
  90251. CompilerImpl.prototype.clearCacheFor = /**
  90252. * @param {?} type
  90253. * @return {?}
  90254. */
  90255. function (type) { this._delegate.clearCacheFor(type); };
  90256. return CompilerImpl;
  90257. }());
  90258. /**
  90259. * A set of providers that provide `JitCompiler` and its dependencies to use for
  90260. * template compilation.
  90261. */
  90262. var COMPILER_PROVIDERS = /** @type {?} */ ([
  90263. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */], useValue: new JitReflector() },
  90264. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["s" /* ResourceLoader */], useValue: _NO_RESOURCE_LOADER },
  90265. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["l" /* JitSummaryResolver */], deps: [] },
  90266. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["v" /* SummaryResolver */], useExisting: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["l" /* JitSummaryResolver */] },
  90267. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_20" /* ɵConsole */], deps: [] },
  90268. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["m" /* Lexer */], deps: [] },
  90269. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["p" /* Parser */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["m" /* Lexer */]] },
  90270. {
  90271. provide: baseHtmlParser,
  90272. useClass: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["h" /* HtmlParser */],
  90273. deps: [],
  90274. },
  90275. {
  90276. provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["i" /* I18NHtmlParser */],
  90277. useFactory: function (parser, translations, format, config, console) {
  90278. translations = translations || '';
  90279. var /** @type {?} */ missingTranslation = translations ? /** @type {?} */ ((config.missingTranslation)) : __WEBPACK_IMPORTED_MODULE_1__angular_core__["H" /* MissingTranslationStrategy */].Ignore;
  90280. return new __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["i" /* I18NHtmlParser */](parser, translations, format, missingTranslation, console);
  90281. },
  90282. deps: [
  90283. baseHtmlParser,
  90284. [new __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */](), new __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */](__WEBPACK_IMPORTED_MODULE_1__angular_core__["_3" /* TRANSLATIONS */])],
  90285. [new __WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */](), new __WEBPACK_IMPORTED_MODULE_1__angular_core__["z" /* Inject */](__WEBPACK_IMPORTED_MODULE_1__angular_core__["_4" /* TRANSLATIONS_FORMAT */])],
  90286. [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */]],
  90287. [__WEBPACK_IMPORTED_MODULE_1__angular_core__["_20" /* ɵConsole */]],
  90288. ]
  90289. },
  90290. {
  90291. provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["h" /* HtmlParser */],
  90292. useExisting: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["i" /* I18NHtmlParser */],
  90293. },
  90294. {
  90295. provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["w" /* TemplateParser */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */],
  90296. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["p" /* Parser */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["g" /* ElementSchemaRegistry */],
  90297. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["i" /* I18NHtmlParser */], __WEBPACK_IMPORTED_MODULE_1__angular_core__["_20" /* ɵConsole */]]
  90298. },
  90299. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["d" /* DirectiveNormalizer */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["s" /* ResourceLoader */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["x" /* UrlResolver */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["h" /* HtmlParser */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */]] },
  90300. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["a" /* CompileMetadataResolver */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["h" /* HtmlParser */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["o" /* NgModuleResolver */],
  90301. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["e" /* DirectiveResolver */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["q" /* PipeResolver */],
  90302. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["v" /* SummaryResolver */],
  90303. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["g" /* ElementSchemaRegistry */],
  90304. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["d" /* DirectiveNormalizer */], __WEBPACK_IMPORTED_MODULE_1__angular_core__["_20" /* ɵConsole */],
  90305. [__WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["t" /* StaticSymbolCache */]],
  90306. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */],
  90307. [__WEBPACK_IMPORTED_MODULE_1__angular_core__["N" /* Optional */], ERROR_COLLECTOR_TOKEN]] },
  90308. DEFAULT_PACKAGE_URL_PROVIDER,
  90309. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["u" /* StyleCompiler */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["x" /* UrlResolver */]] },
  90310. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["y" /* ViewCompiler */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */]] },
  90311. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["n" /* NgModuleCompiler */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */]] },
  90312. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */], useValue: new __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */]() },
  90313. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["k" /* Compiler */], useClass: CompilerImpl, deps: [__WEBPACK_IMPORTED_MODULE_1__angular_core__["C" /* Injector */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["a" /* CompileMetadataResolver */],
  90314. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["w" /* TemplateParser */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["u" /* StyleCompiler */],
  90315. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["y" /* ViewCompiler */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["n" /* NgModuleCompiler */],
  90316. __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["v" /* SummaryResolver */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */], __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */],
  90317. __WEBPACK_IMPORTED_MODULE_1__angular_core__["_20" /* ɵConsole */]] },
  90318. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["f" /* DomElementSchemaRegistry */], deps: [] },
  90319. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["g" /* ElementSchemaRegistry */], useExisting: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["f" /* DomElementSchemaRegistry */] },
  90320. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["x" /* UrlResolver */], deps: [__WEBPACK_IMPORTED_MODULE_1__angular_core__["P" /* PACKAGE_ROOT_URL */]] },
  90321. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["e" /* DirectiveResolver */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */]] },
  90322. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["q" /* PipeResolver */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */]] },
  90323. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["o" /* NgModuleResolver */], deps: [__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["b" /* CompileReflector */]] },
  90324. ]);
  90325. /**
  90326. * \@experimental
  90327. */
  90328. var JitCompilerFactory = /** @class */ (function () {
  90329. /* @internal */
  90330. function JitCompilerFactory(defaultOptions) {
  90331. var /** @type {?} */ compilerOptions = {
  90332. useJit: true,
  90333. defaultEncapsulation: __WEBPACK_IMPORTED_MODULE_1__angular_core__["_11" /* ViewEncapsulation */].Emulated,
  90334. missingTranslation: __WEBPACK_IMPORTED_MODULE_1__angular_core__["H" /* MissingTranslationStrategy */].Warning,
  90335. enableLegacyTemplate: false,
  90336. };
  90337. this._defaultOptions = [compilerOptions].concat(defaultOptions);
  90338. }
  90339. /**
  90340. * @param {?=} options
  90341. * @return {?}
  90342. */
  90343. JitCompilerFactory.prototype.createCompiler = /**
  90344. * @param {?=} options
  90345. * @return {?}
  90346. */
  90347. function (options) {
  90348. if (options === void 0) { options = []; }
  90349. var /** @type {?} */ opts = _mergeOptions(this._defaultOptions.concat(options));
  90350. var /** @type {?} */ injector = __WEBPACK_IMPORTED_MODULE_1__angular_core__["C" /* Injector */].create([
  90351. COMPILER_PROVIDERS, {
  90352. provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */],
  90353. useFactory: function () {
  90354. return new __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["c" /* CompilerConfig */]({
  90355. // let explicit values from the compiler options overwrite options
  90356. // from the app providers
  90357. useJit: opts.useJit,
  90358. jitDevMode: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_16" /* isDevMode */])(),
  90359. // let explicit values from the compiler options overwrite options
  90360. // from the app providers
  90361. defaultEncapsulation: opts.defaultEncapsulation,
  90362. missingTranslation: opts.missingTranslation,
  90363. enableLegacyTemplate: opts.enableLegacyTemplate,
  90364. preserveWhitespaces: opts.preserveWhitespaces,
  90365. });
  90366. },
  90367. deps: []
  90368. },
  90369. /** @type {?} */ ((opts.providers))
  90370. ]);
  90371. return injector.get(__WEBPACK_IMPORTED_MODULE_1__angular_core__["k" /* Compiler */]);
  90372. };
  90373. return JitCompilerFactory;
  90374. }());
  90375. /**
  90376. * @param {?} optionsArr
  90377. * @return {?}
  90378. */
  90379. function _mergeOptions(optionsArr) {
  90380. return {
  90381. useJit: _lastDefined(optionsArr.map(function (options) { return options.useJit; })),
  90382. defaultEncapsulation: _lastDefined(optionsArr.map(function (options) { return options.defaultEncapsulation; })),
  90383. providers: _mergeArrays(optionsArr.map(function (options) { return ((options.providers)); })),
  90384. missingTranslation: _lastDefined(optionsArr.map(function (options) { return options.missingTranslation; })),
  90385. enableLegacyTemplate: _lastDefined(optionsArr.map(function (options) { return options.enableLegacyTemplate; })),
  90386. preserveWhitespaces: _lastDefined(optionsArr.map(function (options) { return options.preserveWhitespaces; })),
  90387. };
  90388. }
  90389. /**
  90390. * @template T
  90391. * @param {?} args
  90392. * @return {?}
  90393. */
  90394. function _lastDefined(args) {
  90395. for (var /** @type {?} */ i = args.length - 1; i >= 0; i--) {
  90396. if (args[i] !== undefined) {
  90397. return args[i];
  90398. }
  90399. }
  90400. return undefined;
  90401. }
  90402. /**
  90403. * @param {?} parts
  90404. * @return {?}
  90405. */
  90406. function _mergeArrays(parts) {
  90407. var /** @type {?} */ result = [];
  90408. parts.forEach(function (part) { return part && result.push.apply(result, part); });
  90409. return result;
  90410. }
  90411. /**
  90412. * @fileoverview added by tsickle
  90413. * @suppress {checkTypes} checked by tsc
  90414. */
  90415. /**
  90416. * @license
  90417. * Copyright Google Inc. All Rights Reserved.
  90418. *
  90419. * Use of this source code is governed by an MIT-style license that can be
  90420. * found in the LICENSE file at https://angular.io/license
  90421. */
  90422. /**
  90423. * A platform that included corePlatform and the compiler.
  90424. *
  90425. * \@experimental
  90426. */
  90427. var platformCoreDynamic = Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_13" /* createPlatformFactory */])(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_17" /* platformCore */], 'coreDynamic', [
  90428. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["h" /* COMPILER_OPTIONS */], useValue: {}, multi: true },
  90429. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["l" /* CompilerFactory */], useClass: JitCompilerFactory, deps: [__WEBPACK_IMPORTED_MODULE_1__angular_core__["h" /* COMPILER_OPTIONS */]] },
  90430. ]);
  90431. /**
  90432. * @fileoverview added by tsickle
  90433. * @suppress {checkTypes} checked by tsc
  90434. */
  90435. var ResourceLoaderImpl = /** @class */ (function (_super) {
  90436. Object(__WEBPACK_IMPORTED_MODULE_4_tslib__["b" /* __extends */])(ResourceLoaderImpl, _super);
  90437. function ResourceLoaderImpl() {
  90438. return _super !== null && _super.apply(this, arguments) || this;
  90439. }
  90440. /**
  90441. * @param {?} url
  90442. * @return {?}
  90443. */
  90444. ResourceLoaderImpl.prototype.get = /**
  90445. * @param {?} url
  90446. * @return {?}
  90447. */
  90448. function (url) {
  90449. var /** @type {?} */ resolve;
  90450. var /** @type {?} */ reject;
  90451. var /** @type {?} */ promise = new Promise(function (res, rej) {
  90452. resolve = res;
  90453. reject = rej;
  90454. });
  90455. var /** @type {?} */ xhr = new XMLHttpRequest();
  90456. xhr.open('GET', url, true);
  90457. xhr.responseType = 'text';
  90458. xhr.onload = function () {
  90459. // responseText is the old-school way of retrieving response (supported by IE8 & 9)
  90460. // response/responseType properties were introduced in ResourceLoader Level2 spec (supported
  90461. // by IE10)
  90462. var /** @type {?} */ response = xhr.response || xhr.responseText;
  90463. // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
  90464. var /** @type {?} */ status = xhr.status === 1223 ? 204 : xhr.status;
  90465. // fix status code when it is 0 (0 status is undocumented).
  90466. // Occurs when accessing file resources or on Android 4.1 stock browser
  90467. // while retrieving files from application cache.
  90468. if (status === 0) {
  90469. status = response ? 200 : 0;
  90470. }
  90471. if (200 <= status && status <= 300) {
  90472. resolve(response);
  90473. }
  90474. else {
  90475. reject("Failed to load " + url);
  90476. }
  90477. };
  90478. xhr.onerror = function () { reject("Failed to load " + url); };
  90479. xhr.send();
  90480. return promise;
  90481. };
  90482. ResourceLoaderImpl.decorators = [
  90483. { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__["A" /* Injectable */] },
  90484. ];
  90485. /** @nocollapse */
  90486. ResourceLoaderImpl.ctorParameters = function () { return []; };
  90487. return ResourceLoaderImpl;
  90488. }(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["s" /* ResourceLoader */]));
  90489. /**
  90490. * @fileoverview added by tsickle
  90491. * @suppress {checkTypes} checked by tsc
  90492. */
  90493. /**
  90494. * @license
  90495. * Copyright Google Inc. All Rights Reserved.
  90496. *
  90497. * Use of this source code is governed by an MIT-style license that can be
  90498. * found in the LICENSE file at https://angular.io/license
  90499. */
  90500. var INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS = [
  90501. __WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__["f" /* ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS */],
  90502. {
  90503. provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["h" /* COMPILER_OPTIONS */],
  90504. useValue: { providers: [{ provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["s" /* ResourceLoader */], useClass: ResourceLoaderImpl, deps: [] }] },
  90505. multi: true
  90506. },
  90507. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_core__["Q" /* PLATFORM_ID */], useValue: __WEBPACK_IMPORTED_MODULE_2__angular_common__["i" /* ɵPLATFORM_BROWSER_ID */] },
  90508. ];
  90509. /**
  90510. * @fileoverview added by tsickle
  90511. * @suppress {checkTypes} checked by tsc
  90512. */
  90513. /**
  90514. * @license
  90515. * Copyright Google Inc. All Rights Reserved.
  90516. *
  90517. * Use of this source code is governed by an MIT-style license that can be
  90518. * found in the LICENSE file at https://angular.io/license
  90519. */
  90520. /**
  90521. * An implementation of ResourceLoader that uses a template cache to avoid doing an actual
  90522. * ResourceLoader.
  90523. *
  90524. * The template cache needs to be built and loaded into window.$templateCache
  90525. * via a separate mechanism.
  90526. */
  90527. var CachedResourceLoader = /** @class */ (function (_super) {
  90528. Object(__WEBPACK_IMPORTED_MODULE_4_tslib__["b" /* __extends */])(CachedResourceLoader, _super);
  90529. function CachedResourceLoader() {
  90530. var _this = _super.call(this) || this;
  90531. _this._cache = (/** @type {?} */ (__WEBPACK_IMPORTED_MODULE_1__angular_core__["_30" /* ɵglobal */])).$templateCache;
  90532. if (_this._cache == null) {
  90533. throw new Error('CachedResourceLoader: Template cache was not found in $templateCache.');
  90534. }
  90535. return _this;
  90536. }
  90537. /**
  90538. * @param {?} url
  90539. * @return {?}
  90540. */
  90541. CachedResourceLoader.prototype.get = /**
  90542. * @param {?} url
  90543. * @return {?}
  90544. */
  90545. function (url) {
  90546. if (this._cache.hasOwnProperty(url)) {
  90547. return Promise.resolve(this._cache[url]);
  90548. }
  90549. else {
  90550. return /** @type {?} */ (Promise.reject('CachedResourceLoader: Did not find cached template for ' + url));
  90551. }
  90552. };
  90553. return CachedResourceLoader;
  90554. }(__WEBPACK_IMPORTED_MODULE_0__angular_compiler__["s" /* ResourceLoader */]));
  90555. /**
  90556. * @fileoverview added by tsickle
  90557. * @suppress {checkTypes} checked by tsc
  90558. */
  90559. /**
  90560. * @license
  90561. * Copyright Google Inc. All Rights Reserved.
  90562. *
  90563. * Use of this source code is governed by an MIT-style license that can be
  90564. * found in the LICENSE file at https://angular.io/license
  90565. */
  90566. /**
  90567. * @fileoverview added by tsickle
  90568. * @suppress {checkTypes} checked by tsc
  90569. */
  90570. /**
  90571. * @license
  90572. * Copyright Google Inc. All Rights Reserved.
  90573. *
  90574. * Use of this source code is governed by an MIT-style license that can be
  90575. * found in the LICENSE file at https://angular.io/license
  90576. */
  90577. /**
  90578. * \@stable
  90579. */
  90580. var VERSION = new __WEBPACK_IMPORTED_MODULE_1__angular_core__["_7" /* Version */]('5.2.11');
  90581. /**
  90582. * @fileoverview added by tsickle
  90583. * @suppress {checkTypes} checked by tsc
  90584. */
  90585. /**
  90586. * @license
  90587. * Copyright Google Inc. All Rights Reserved.
  90588. *
  90589. * Use of this source code is governed by an MIT-style license that can be
  90590. * found in the LICENSE file at https://angular.io/license
  90591. */
  90592. /**
  90593. * \@experimental
  90594. */
  90595. var RESOURCE_CACHE_PROVIDER = [{ provide: __WEBPACK_IMPORTED_MODULE_0__angular_compiler__["s" /* ResourceLoader */], useClass: CachedResourceLoader, deps: [] }];
  90596. /**
  90597. * \@stable
  90598. */
  90599. var platformBrowserDynamic = Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__["_13" /* createPlatformFactory */])(platformCoreDynamic, 'browserDynamic', INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS);
  90600. /**
  90601. * @fileoverview added by tsickle
  90602. * @suppress {checkTypes} checked by tsc
  90603. */
  90604. /**
  90605. * @license
  90606. * Copyright Google Inc. All Rights Reserved.
  90607. *
  90608. * Use of this source code is governed by an MIT-style license that can be
  90609. * found in the LICENSE file at https://angular.io/license
  90610. */
  90611. /**
  90612. * @module
  90613. * @description
  90614. * Entry point for all public APIs of this package.
  90615. */
  90616. // This file only reexports content of the `src` folder. Keep it that way.
  90617. /**
  90618. * @fileoverview added by tsickle
  90619. * @suppress {checkTypes} checked by tsc
  90620. */
  90621. /**
  90622. * Generated bundle index. Do not edit.
  90623. */
  90624. //# sourceMappingURL=platform-browser-dynamic.js.map
  90625. /***/ }),
  90626. /* 352 */
  90627. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  90628. "use strict";
  90629. /* unused harmony export core */
  90630. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return CompilerConfig; });
  90631. /* unused harmony export preserveWhitespacesDefault */
  90632. /* unused harmony export isLoweredSymbol */
  90633. /* unused harmony export createLoweredSymbol */
  90634. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return Identifiers; });
  90635. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return JitCompiler; });
  90636. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return DirectiveResolver; });
  90637. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return PipeResolver; });
  90638. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return NgModuleResolver; });
  90639. /* unused harmony export DEFAULT_INTERPOLATION_CONFIG */
  90640. /* unused harmony export InterpolationConfig */
  90641. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return NgModuleCompiler; });
  90642. /* unused harmony export AssertNotNull */
  90643. /* unused harmony export BinaryOperator */
  90644. /* unused harmony export BinaryOperatorExpr */
  90645. /* unused harmony export BuiltinMethod */
  90646. /* unused harmony export BuiltinVar */
  90647. /* unused harmony export CastExpr */
  90648. /* unused harmony export ClassStmt */
  90649. /* unused harmony export CommaExpr */
  90650. /* unused harmony export CommentStmt */
  90651. /* unused harmony export ConditionalExpr */
  90652. /* unused harmony export DeclareFunctionStmt */
  90653. /* unused harmony export DeclareVarStmt */
  90654. /* unused harmony export ExpressionStatement */
  90655. /* unused harmony export ExternalExpr */
  90656. /* unused harmony export ExternalReference */
  90657. /* unused harmony export FunctionExpr */
  90658. /* unused harmony export IfStmt */
  90659. /* unused harmony export InstantiateExpr */
  90660. /* unused harmony export InvokeFunctionExpr */
  90661. /* unused harmony export InvokeMethodExpr */
  90662. /* unused harmony export LiteralArrayExpr */
  90663. /* unused harmony export LiteralExpr */
  90664. /* unused harmony export LiteralMapExpr */
  90665. /* unused harmony export NotExpr */
  90666. /* unused harmony export ReadKeyExpr */
  90667. /* unused harmony export ReadPropExpr */
  90668. /* unused harmony export ReadVarExpr */
  90669. /* unused harmony export ReturnStatement */
  90670. /* unused harmony export ThrowStmt */
  90671. /* unused harmony export TryCatchStmt */
  90672. /* unused harmony export WriteKeyExpr */
  90673. /* unused harmony export WritePropExpr */
  90674. /* unused harmony export WriteVarExpr */
  90675. /* unused harmony export StmtModifier */
  90676. /* unused harmony export Statement */
  90677. /* unused harmony export collectExternalReferences */
  90678. /* unused harmony export EmitterVisitorContext */
  90679. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return ViewCompiler; });
  90680. /* unused harmony export getParseErrors */
  90681. /* unused harmony export isSyntaxError */
  90682. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return syntaxError; });
  90683. /* unused harmony export Version */
  90684. /* unused harmony export VERSION */
  90685. /* unused harmony export TextAst */
  90686. /* unused harmony export BoundTextAst */
  90687. /* unused harmony export AttrAst */
  90688. /* unused harmony export BoundElementPropertyAst */
  90689. /* unused harmony export BoundEventAst */
  90690. /* unused harmony export ReferenceAst */
  90691. /* unused harmony export VariableAst */
  90692. /* unused harmony export ElementAst */
  90693. /* unused harmony export EmbeddedTemplateAst */
  90694. /* unused harmony export BoundDirectivePropertyAst */
  90695. /* unused harmony export DirectiveAst */
  90696. /* unused harmony export ProviderAst */
  90697. /* unused harmony export ProviderAstType */
  90698. /* unused harmony export NgContentAst */
  90699. /* unused harmony export PropertyBindingType */
  90700. /* unused harmony export NullTemplateVisitor */
  90701. /* unused harmony export RecursiveTemplateAstVisitor */
  90702. /* unused harmony export templateVisitAll */
  90703. /* unused harmony export identifierName */
  90704. /* unused harmony export identifierModuleUrl */
  90705. /* unused harmony export viewClassName */
  90706. /* unused harmony export rendererTypeName */
  90707. /* unused harmony export hostViewClassName */
  90708. /* unused harmony export componentFactoryName */
  90709. /* unused harmony export CompileSummaryKind */
  90710. /* unused harmony export tokenName */
  90711. /* unused harmony export tokenReference */
  90712. /* unused harmony export CompileStylesheetMetadata */
  90713. /* unused harmony export CompileTemplateMetadata */
  90714. /* unused harmony export CompileDirectiveMetadata */
  90715. /* unused harmony export CompilePipeMetadata */
  90716. /* unused harmony export CompileNgModuleMetadata */
  90717. /* unused harmony export TransitiveCompileNgModuleMetadata */
  90718. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return ProviderMeta; });
  90719. /* unused harmony export flatten */
  90720. /* unused harmony export templateSourceUrl */
  90721. /* unused harmony export sharedStylesheetJitUrl */
  90722. /* unused harmony export ngModuleJitUrl */
  90723. /* unused harmony export templateJitUrl */
  90724. /* unused harmony export createAotUrlResolver */
  90725. /* unused harmony export createAotCompiler */
  90726. /* unused harmony export AotCompiler */
  90727. /* unused harmony export analyzeNgModules */
  90728. /* unused harmony export analyzeAndValidateNgModules */
  90729. /* unused harmony export analyzeFile */
  90730. /* unused harmony export mergeAnalyzedFiles */
  90731. /* unused harmony export GeneratedFile */
  90732. /* unused harmony export toTypeScript */
  90733. /* unused harmony export formattedError */
  90734. /* unused harmony export isFormattedError */
  90735. /* unused harmony export StaticReflector */
  90736. /* unused harmony export StaticSymbol */
  90737. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return StaticSymbolCache; });
  90738. /* unused harmony export ResolvedStaticSymbol */
  90739. /* unused harmony export StaticSymbolResolver */
  90740. /* unused harmony export unescapeIdentifier */
  90741. /* unused harmony export unwrapResolvedMetadata */
  90742. /* unused harmony export AotSummaryResolver */
  90743. /* unused harmony export AstPath */
  90744. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return SummaryResolver; });
  90745. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return JitSummaryResolver; });
  90746. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return CompileReflector; });
  90747. /* unused harmony export createUrlResolverWithoutPackagePrefix */
  90748. /* unused harmony export createOfflineCompileUrlResolver */
  90749. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return UrlResolver; });
  90750. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return getUrlScheme; });
  90751. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return ResourceLoader; });
  90752. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return ElementSchemaRegistry; });
  90753. /* unused harmony export Extractor */
  90754. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return I18NHtmlParser; });
  90755. /* unused harmony export MessageBundle */
  90756. /* unused harmony export Serializer */
  90757. /* unused harmony export Xliff */
  90758. /* unused harmony export Xliff2 */
  90759. /* unused harmony export Xmb */
  90760. /* unused harmony export Xtb */
  90761. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return DirectiveNormalizer; });
  90762. /* unused harmony export ParserError */
  90763. /* unused harmony export ParseSpan */
  90764. /* unused harmony export AST */
  90765. /* unused harmony export Quote */
  90766. /* unused harmony export EmptyExpr */
  90767. /* unused harmony export ImplicitReceiver */
  90768. /* unused harmony export Chain */
  90769. /* unused harmony export Conditional */
  90770. /* unused harmony export PropertyRead */
  90771. /* unused harmony export PropertyWrite */
  90772. /* unused harmony export SafePropertyRead */
  90773. /* unused harmony export KeyedRead */
  90774. /* unused harmony export KeyedWrite */
  90775. /* unused harmony export BindingPipe */
  90776. /* unused harmony export LiteralPrimitive */
  90777. /* unused harmony export LiteralArray */
  90778. /* unused harmony export LiteralMap */
  90779. /* unused harmony export Interpolation */
  90780. /* unused harmony export Binary */
  90781. /* unused harmony export PrefixNot */
  90782. /* unused harmony export NonNullAssert */
  90783. /* unused harmony export MethodCall */
  90784. /* unused harmony export SafeMethodCall */
  90785. /* unused harmony export FunctionCall */
  90786. /* unused harmony export ASTWithSource */
  90787. /* unused harmony export TemplateBinding */
  90788. /* unused harmony export NullAstVisitor */
  90789. /* unused harmony export RecursiveAstVisitor */
  90790. /* unused harmony export AstTransformer */
  90791. /* unused harmony export visitAstChildren */
  90792. /* unused harmony export TokenType */
  90793. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return Lexer; });
  90794. /* unused harmony export Token */
  90795. /* unused harmony export EOF */
  90796. /* unused harmony export isIdentifier */
  90797. /* unused harmony export isQuote */
  90798. /* unused harmony export SplitInterpolation */
  90799. /* unused harmony export TemplateBindingParseResult */
  90800. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return Parser; });
  90801. /* unused harmony export _ParseAST */
  90802. /* unused harmony export ERROR_COMPONENT_TYPE */
  90803. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CompileMetadataResolver; });
  90804. /* unused harmony export Text */
  90805. /* unused harmony export Expansion */
  90806. /* unused harmony export ExpansionCase */
  90807. /* unused harmony export Attribute */
  90808. /* unused harmony export Element */
  90809. /* unused harmony export Comment */
  90810. /* unused harmony export visitAll */
  90811. /* unused harmony export RecursiveVisitor */
  90812. /* unused harmony export findNode */
  90813. /* unused harmony export ParseTreeResult */
  90814. /* unused harmony export TreeError */
  90815. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return HtmlParser; });
  90816. /* unused harmony export HtmlTagDefinition */
  90817. /* unused harmony export getHtmlTagDefinition */
  90818. /* unused harmony export TagContentType */
  90819. /* unused harmony export splitNsName */
  90820. /* unused harmony export isNgContainer */
  90821. /* unused harmony export isNgContent */
  90822. /* unused harmony export isNgTemplate */
  90823. /* unused harmony export getNsPrefix */
  90824. /* unused harmony export mergeNsAndName */
  90825. /* unused harmony export NAMED_ENTITIES */
  90826. /* unused harmony export NGSP_UNICODE */
  90827. /* unused harmony export debugOutputAstAsTypeScript */
  90828. /* unused harmony export TypeScriptEmitter */
  90829. /* unused harmony export ParseLocation */
  90830. /* unused harmony export ParseSourceFile */
  90831. /* unused harmony export ParseSourceSpan */
  90832. /* unused harmony export ParseErrorLevel */
  90833. /* unused harmony export ParseError */
  90834. /* unused harmony export typeSourceSpan */
  90835. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return DomElementSchemaRegistry; });
  90836. /* unused harmony export CssSelector */
  90837. /* unused harmony export SelectorMatcher */
  90838. /* unused harmony export SelectorListContext */
  90839. /* unused harmony export SelectorContext */
  90840. /* unused harmony export StylesCompileDependency */
  90841. /* unused harmony export CompiledStylesheet */
  90842. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return StyleCompiler; });
  90843. /* unused harmony export TemplateParseError */
  90844. /* unused harmony export TemplateParseResult */
  90845. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return TemplateParser; });
  90846. /* unused harmony export splitClasses */
  90847. /* unused harmony export createElementCssSelector */
  90848. /* unused harmony export removeSummaryDuplicates */
  90849. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(38);
  90850. /**
  90851. * @license Angular v5.2.11
  90852. * (c) 2010-2018 Google, Inc. https://angular.io/
  90853. * License: MIT
  90854. */
  90855. /**
  90856. * @fileoverview added by tsickle
  90857. * @suppress {checkTypes} checked by tsc
  90858. */
  90859. /**
  90860. * @license
  90861. * Copyright Google Inc. All Rights Reserved.
  90862. *
  90863. * Use of this source code is governed by an MIT-style license that can be
  90864. * found in the LICENSE file at https://angular.io/license
  90865. */
  90866. // Attention:
  90867. // This file duplicates types and values from @angular/core
  90868. // so that we are able to make @angular/compiler independent of @angular/core.
  90869. // This is important to prevent a build cycle, as @angular/core needs to
  90870. // be compiled with the compiler.
  90871. /**
  90872. * @record
  90873. */
  90874. function Inject() { }
  90875. var createInject = makeMetadataFactory('Inject', function (token) { return ({ token: token }); });
  90876. var createInjectionToken = makeMetadataFactory('InjectionToken', function (desc) { return ({ _desc: desc }); });
  90877. /**
  90878. * @record
  90879. */
  90880. function Attribute() { }
  90881. var createAttribute = makeMetadataFactory('Attribute', function (attributeName) { return ({ attributeName: attributeName }); });
  90882. /**
  90883. * @record
  90884. */
  90885. function Query() { }
  90886. var createContentChildren = makeMetadataFactory('ContentChildren', function (selector, data) {
  90887. if (data === void 0) { data = {}; }
  90888. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: false, isViewQuery: false, descendants: false }, data));
  90889. });
  90890. var createContentChild = makeMetadataFactory('ContentChild', function (selector, data) {
  90891. if (data === void 0) { data = {}; }
  90892. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: true, isViewQuery: false, descendants: true }, data));
  90893. });
  90894. var createViewChildren = makeMetadataFactory('ViewChildren', function (selector, data) {
  90895. if (data === void 0) { data = {}; }
  90896. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: false, isViewQuery: true, descendants: true }, data));
  90897. });
  90898. var createViewChild = makeMetadataFactory('ViewChild', function (selector, data) {
  90899. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ selector: selector, first: true, isViewQuery: true, descendants: true }, data));
  90900. });
  90901. /**
  90902. * @record
  90903. */
  90904. function Directive() { }
  90905. var createDirective = makeMetadataFactory('Directive', function (dir) {
  90906. if (dir === void 0) { dir = {}; }
  90907. return dir;
  90908. });
  90909. /**
  90910. * @record
  90911. */
  90912. function Component() { }
  90913. /** @enum {number} */
  90914. var ViewEncapsulation = {
  90915. Emulated: 0,
  90916. Native: 1,
  90917. None: 2,
  90918. };
  90919. ViewEncapsulation[ViewEncapsulation.Emulated] = "Emulated";
  90920. ViewEncapsulation[ViewEncapsulation.Native] = "Native";
  90921. ViewEncapsulation[ViewEncapsulation.None] = "None";
  90922. /** @enum {number} */
  90923. var ChangeDetectionStrategy = {
  90924. OnPush: 0,
  90925. Default: 1,
  90926. };
  90927. ChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = "OnPush";
  90928. ChangeDetectionStrategy[ChangeDetectionStrategy.Default] = "Default";
  90929. var createComponent = makeMetadataFactory('Component', function (c) {
  90930. if (c === void 0) { c = {}; }
  90931. return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ changeDetection: ChangeDetectionStrategy.Default }, c));
  90932. });
  90933. /**
  90934. * @record
  90935. */
  90936. function Pipe() { }
  90937. var createPipe = makeMetadataFactory('Pipe', function (p) { return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ pure: true }, p)); });
  90938. /**
  90939. * @record
  90940. */
  90941. function Input() { }
  90942. var createInput = makeMetadataFactory('Input', function (bindingPropertyName) { return ({ bindingPropertyName: bindingPropertyName }); });
  90943. /**
  90944. * @record
  90945. */
  90946. function Output() { }
  90947. var createOutput = makeMetadataFactory('Output', function (bindingPropertyName) { return ({ bindingPropertyName: bindingPropertyName }); });
  90948. /**
  90949. * @record
  90950. */
  90951. function HostBinding() { }
  90952. var createHostBinding = makeMetadataFactory('HostBinding', function (hostPropertyName) { return ({ hostPropertyName: hostPropertyName }); });
  90953. /**
  90954. * @record
  90955. */
  90956. function HostListener() { }
  90957. var createHostListener = makeMetadataFactory('HostListener', function (eventName, args) { return ({ eventName: eventName, args: args }); });
  90958. /**
  90959. * @record
  90960. */
  90961. function NgModule() { }
  90962. var createNgModule = makeMetadataFactory('NgModule', function (ngModule) { return ngModule; });
  90963. /**
  90964. * @record
  90965. */
  90966. function ModuleWithProviders() { }
  90967. /**
  90968. * @record
  90969. */
  90970. function SchemaMetadata() { }
  90971. var CUSTOM_ELEMENTS_SCHEMA = {
  90972. name: 'custom-elements'
  90973. };
  90974. var NO_ERRORS_SCHEMA = {
  90975. name: 'no-errors-schema'
  90976. };
  90977. var createOptional = makeMetadataFactory('Optional');
  90978. var createInjectable = makeMetadataFactory('Injectable');
  90979. var createSelf = makeMetadataFactory('Self');
  90980. var createSkipSelf = makeMetadataFactory('SkipSelf');
  90981. var createHost = makeMetadataFactory('Host');
  90982. var Type = Function;
  90983. /** @enum {number} */
  90984. var SecurityContext = {
  90985. NONE: 0,
  90986. HTML: 1,
  90987. STYLE: 2,
  90988. SCRIPT: 3,
  90989. URL: 4,
  90990. RESOURCE_URL: 5,
  90991. };
  90992. SecurityContext[SecurityContext.NONE] = "NONE";
  90993. SecurityContext[SecurityContext.HTML] = "HTML";
  90994. SecurityContext[SecurityContext.STYLE] = "STYLE";
  90995. SecurityContext[SecurityContext.SCRIPT] = "SCRIPT";
  90996. SecurityContext[SecurityContext.URL] = "URL";
  90997. SecurityContext[SecurityContext.RESOURCE_URL] = "RESOURCE_URL";
  90998. /** @enum {number} */
  90999. var NodeFlags = {
  91000. None: 0,
  91001. TypeElement: 1,
  91002. TypeText: 2,
  91003. ProjectedTemplate: 4,
  91004. CatRenderNode: 3,
  91005. TypeNgContent: 8,
  91006. TypePipe: 16,
  91007. TypePureArray: 32,
  91008. TypePureObject: 64,
  91009. TypePurePipe: 128,
  91010. CatPureExpression: 224,
  91011. TypeValueProvider: 256,
  91012. TypeClassProvider: 512,
  91013. TypeFactoryProvider: 1024,
  91014. TypeUseExistingProvider: 2048,
  91015. LazyProvider: 4096,
  91016. PrivateProvider: 8192,
  91017. TypeDirective: 16384,
  91018. Component: 32768,
  91019. CatProviderNoDirective: 3840,
  91020. CatProvider: 20224,
  91021. OnInit: 65536,
  91022. OnDestroy: 131072,
  91023. DoCheck: 262144,
  91024. OnChanges: 524288,
  91025. AfterContentInit: 1048576,
  91026. AfterContentChecked: 2097152,
  91027. AfterViewInit: 4194304,
  91028. AfterViewChecked: 8388608,
  91029. EmbeddedViews: 16777216,
  91030. ComponentView: 33554432,
  91031. TypeContentQuery: 67108864,
  91032. TypeViewQuery: 134217728,
  91033. StaticQuery: 268435456,
  91034. DynamicQuery: 536870912,
  91035. CatQuery: 201326592,
  91036. // mutually exclusive values...
  91037. Types: 201347067,
  91038. };
  91039. /** @enum {number} */
  91040. var DepFlags = {
  91041. None: 0,
  91042. SkipSelf: 1,
  91043. Optional: 2,
  91044. Value: 8,
  91045. };
  91046. /** @enum {number} */
  91047. var ArgumentType = { Inline: 0, Dynamic: 1, };
  91048. /** @enum {number} */
  91049. var BindingFlags = {
  91050. TypeElementAttribute: 1,
  91051. TypeElementClass: 2,
  91052. TypeElementStyle: 4,
  91053. TypeProperty: 8,
  91054. SyntheticProperty: 16,
  91055. SyntheticHostProperty: 32,
  91056. CatSyntheticProperty: 48,
  91057. // mutually exclusive values...
  91058. Types: 15,
  91059. };
  91060. /** @enum {number} */
  91061. var QueryBindingType = { First: 0, All: 1, };
  91062. /** @enum {number} */
  91063. var QueryValueType = {
  91064. ElementRef: 0,
  91065. RenderElement: 1,
  91066. TemplateRef: 2,
  91067. ViewContainerRef: 3,
  91068. Provider: 4,
  91069. };
  91070. /** @enum {number} */
  91071. var ViewFlags = {
  91072. None: 0,
  91073. OnPush: 2,
  91074. };
  91075. /** @enum {number} */
  91076. var MissingTranslationStrategy = {
  91077. Error: 0,
  91078. Warning: 1,
  91079. Ignore: 2,
  91080. };
  91081. MissingTranslationStrategy[MissingTranslationStrategy.Error] = "Error";
  91082. MissingTranslationStrategy[MissingTranslationStrategy.Warning] = "Warning";
  91083. MissingTranslationStrategy[MissingTranslationStrategy.Ignore] = "Ignore";
  91084. /**
  91085. * @record
  91086. * @template T
  91087. */
  91088. function MetadataFactory() { }
  91089. /**
  91090. * @template T
  91091. * @param {?} name
  91092. * @param {?=} props
  91093. * @return {?}
  91094. */
  91095. function makeMetadataFactory(name, props) {
  91096. var /** @type {?} */ factory = function () {
  91097. var args = [];
  91098. for (var _i = 0; _i < arguments.length; _i++) {
  91099. args[_i] = arguments[_i];
  91100. }
  91101. var /** @type {?} */ values = props ? props.apply(void 0, args) : {};
  91102. return Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({ ngMetadataName: name }, values);
  91103. };
  91104. factory.isTypeOf = function (obj) { return obj && obj.ngMetadataName === name; };
  91105. factory.ngMetadataName = name;
  91106. return factory;
  91107. }
  91108. /**
  91109. * @record
  91110. */
  91111. function Route() { }
  91112. var core = Object.freeze({
  91113. Inject: Inject,
  91114. createInject: createInject,
  91115. createInjectionToken: createInjectionToken,
  91116. Attribute: Attribute,
  91117. createAttribute: createAttribute,
  91118. Query: Query,
  91119. createContentChildren: createContentChildren,
  91120. createContentChild: createContentChild,
  91121. createViewChildren: createViewChildren,
  91122. createViewChild: createViewChild,
  91123. Directive: Directive,
  91124. createDirective: createDirective,
  91125. Component: Component,
  91126. ViewEncapsulation: ViewEncapsulation,
  91127. ChangeDetectionStrategy: ChangeDetectionStrategy,
  91128. createComponent: createComponent,
  91129. Pipe: Pipe,
  91130. createPipe: createPipe,
  91131. Input: Input,
  91132. createInput: createInput,
  91133. Output: Output,
  91134. createOutput: createOutput,
  91135. HostBinding: HostBinding,
  91136. createHostBinding: createHostBinding,
  91137. HostListener: HostListener,
  91138. createHostListener: createHostListener,
  91139. NgModule: NgModule,
  91140. createNgModule: createNgModule,
  91141. ModuleWithProviders: ModuleWithProviders,
  91142. SchemaMetadata: SchemaMetadata,
  91143. CUSTOM_ELEMENTS_SCHEMA: CUSTOM_ELEMENTS_SCHEMA,
  91144. NO_ERRORS_SCHEMA: NO_ERRORS_SCHEMA,
  91145. createOptional: createOptional,
  91146. createInjectable: createInjectable,
  91147. createSelf: createSelf,
  91148. createSkipSelf: createSkipSelf,
  91149. createHost: createHost,
  91150. Type: Type,
  91151. SecurityContext: SecurityContext,
  91152. NodeFlags: NodeFlags,
  91153. DepFlags: DepFlags,
  91154. ArgumentType: ArgumentType,
  91155. BindingFlags: BindingFlags,
  91156. QueryBindingType: QueryBindingType,
  91157. QueryValueType: QueryValueType,
  91158. ViewFlags: ViewFlags,
  91159. MissingTranslationStrategy: MissingTranslationStrategy,
  91160. MetadataFactory: MetadataFactory,
  91161. Route: Route
  91162. });
  91163. /**
  91164. * @fileoverview added by tsickle
  91165. * @suppress {checkTypes} checked by tsc
  91166. */
  91167. /**
  91168. * @license
  91169. * Copyright Google Inc. All Rights Reserved.
  91170. *
  91171. * Use of this source code is governed by an MIT-style license that can be
  91172. * found in the LICENSE file at https://angular.io/license
  91173. */
  91174. var DASH_CASE_REGEXP = /-+([a-z0-9])/g;
  91175. /**
  91176. * @param {?} input
  91177. * @return {?}
  91178. */
  91179. function dashCaseToCamelCase(input) {
  91180. return input.replace(DASH_CASE_REGEXP, function () {
  91181. var m = [];
  91182. for (var _i = 0; _i < arguments.length; _i++) {
  91183. m[_i] = arguments[_i];
  91184. }
  91185. return m[1].toUpperCase();
  91186. });
  91187. }
  91188. /**
  91189. * @param {?} input
  91190. * @param {?} defaultValues
  91191. * @return {?}
  91192. */
  91193. function splitAtColon(input, defaultValues) {
  91194. return _splitAt(input, ':', defaultValues);
  91195. }
  91196. /**
  91197. * @param {?} input
  91198. * @param {?} defaultValues
  91199. * @return {?}
  91200. */
  91201. function splitAtPeriod(input, defaultValues) {
  91202. return _splitAt(input, '.', defaultValues);
  91203. }
  91204. /**
  91205. * @param {?} input
  91206. * @param {?} character
  91207. * @param {?} defaultValues
  91208. * @return {?}
  91209. */
  91210. function _splitAt(input, character, defaultValues) {
  91211. var /** @type {?} */ characterIndex = input.indexOf(character);
  91212. if (characterIndex == -1)
  91213. return defaultValues;
  91214. return [input.slice(0, characterIndex).trim(), input.slice(characterIndex + 1).trim()];
  91215. }
  91216. /**
  91217. * @param {?} value
  91218. * @param {?} visitor
  91219. * @param {?} context
  91220. * @return {?}
  91221. */
  91222. function visitValue(value, visitor, context) {
  91223. if (Array.isArray(value)) {
  91224. return visitor.visitArray(/** @type {?} */ (value), context);
  91225. }
  91226. if (isStrictStringMap(value)) {
  91227. return visitor.visitStringMap(/** @type {?} */ (value), context);
  91228. }
  91229. if (value == null || typeof value == 'string' || typeof value == 'number' ||
  91230. typeof value == 'boolean') {
  91231. return visitor.visitPrimitive(value, context);
  91232. }
  91233. return visitor.visitOther(value, context);
  91234. }
  91235. /**
  91236. * @param {?} val
  91237. * @return {?}
  91238. */
  91239. function isDefined(val) {
  91240. return val !== null && val !== undefined;
  91241. }
  91242. /**
  91243. * @template T
  91244. * @param {?} val
  91245. * @return {?}
  91246. */
  91247. function noUndefined(val) {
  91248. return val === undefined ? /** @type {?} */ ((null)) : val;
  91249. }
  91250. /**
  91251. * @record
  91252. */
  91253. var ValueTransformer = /** @class */ (function () {
  91254. function ValueTransformer() {
  91255. }
  91256. /**
  91257. * @param {?} arr
  91258. * @param {?} context
  91259. * @return {?}
  91260. */
  91261. ValueTransformer.prototype.visitArray = /**
  91262. * @param {?} arr
  91263. * @param {?} context
  91264. * @return {?}
  91265. */
  91266. function (arr, context) {
  91267. var _this = this;
  91268. return arr.map(function (value) { return visitValue(value, _this, context); });
  91269. };
  91270. /**
  91271. * @param {?} map
  91272. * @param {?} context
  91273. * @return {?}
  91274. */
  91275. ValueTransformer.prototype.visitStringMap = /**
  91276. * @param {?} map
  91277. * @param {?} context
  91278. * @return {?}
  91279. */
  91280. function (map, context) {
  91281. var _this = this;
  91282. var /** @type {?} */ result = {};
  91283. Object.keys(map).forEach(function (key) { result[key] = visitValue(map[key], _this, context); });
  91284. return result;
  91285. };
  91286. /**
  91287. * @param {?} value
  91288. * @param {?} context
  91289. * @return {?}
  91290. */
  91291. ValueTransformer.prototype.visitPrimitive = /**
  91292. * @param {?} value
  91293. * @param {?} context
  91294. * @return {?}
  91295. */
  91296. function (value, context) { return value; };
  91297. /**
  91298. * @param {?} value
  91299. * @param {?} context
  91300. * @return {?}
  91301. */
  91302. ValueTransformer.prototype.visitOther = /**
  91303. * @param {?} value
  91304. * @param {?} context
  91305. * @return {?}
  91306. */
  91307. function (value, context) { return value; };
  91308. return ValueTransformer;
  91309. }());
  91310. var SyncAsync = {
  91311. assertSync: function (value) {
  91312. if (isPromise(value)) {
  91313. throw new Error("Illegal state: value cannot be a promise");
  91314. }
  91315. return value;
  91316. },
  91317. then: function (value, cb) { return isPromise(value) ? value.then(cb) : cb(value); },
  91318. all: function (syncAsyncValues) {
  91319. return syncAsyncValues.some(isPromise) ? Promise.all(syncAsyncValues) : /** @type {?} */ (syncAsyncValues);
  91320. }
  91321. };
  91322. /**
  91323. * @param {?} msg
  91324. * @param {?=} parseErrors
  91325. * @return {?}
  91326. */
  91327. function syntaxError(msg, parseErrors) {
  91328. var /** @type {?} */ error = Error(msg);
  91329. (/** @type {?} */ (error))[ERROR_SYNTAX_ERROR] = true;
  91330. if (parseErrors)
  91331. (/** @type {?} */ (error))[ERROR_PARSE_ERRORS] = parseErrors;
  91332. return error;
  91333. }
  91334. var ERROR_SYNTAX_ERROR = 'ngSyntaxError';
  91335. var ERROR_PARSE_ERRORS = 'ngParseErrors';
  91336. /**
  91337. * @param {?} error
  91338. * @return {?}
  91339. */
  91340. function isSyntaxError(error) {
  91341. return (/** @type {?} */ (error))[ERROR_SYNTAX_ERROR];
  91342. }
  91343. /**
  91344. * @param {?} error
  91345. * @return {?}
  91346. */
  91347. function getParseErrors(error) {
  91348. return (/** @type {?} */ (error))[ERROR_PARSE_ERRORS] || [];
  91349. }
  91350. /**
  91351. * @param {?} s
  91352. * @return {?}
  91353. */
  91354. function escapeRegExp(s) {
  91355. return s.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
  91356. }
  91357. var STRING_MAP_PROTO = Object.getPrototypeOf({});
  91358. /**
  91359. * @param {?} obj
  91360. * @return {?}
  91361. */
  91362. function isStrictStringMap(obj) {
  91363. return typeof obj === 'object' && obj !== null && Object.getPrototypeOf(obj) === STRING_MAP_PROTO;
  91364. }
  91365. /**
  91366. * @param {?} str
  91367. * @return {?}
  91368. */
  91369. function utf8Encode(str) {
  91370. var /** @type {?} */ encoded = '';
  91371. for (var /** @type {?} */ index = 0; index < str.length; index++) {
  91372. var /** @type {?} */ codePoint = str.charCodeAt(index);
  91373. // decode surrogate
  91374. // see https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
  91375. if (codePoint >= 0xd800 && codePoint <= 0xdbff && str.length > (index + 1)) {
  91376. var /** @type {?} */ low = str.charCodeAt(index + 1);
  91377. if (low >= 0xdc00 && low <= 0xdfff) {
  91378. index++;
  91379. codePoint = ((codePoint - 0xd800) << 10) + low - 0xdc00 + 0x10000;
  91380. }
  91381. }
  91382. if (codePoint <= 0x7f) {
  91383. encoded += String.fromCharCode(codePoint);
  91384. }
  91385. else if (codePoint <= 0x7ff) {
  91386. encoded += String.fromCharCode(((codePoint >> 6) & 0x1F) | 0xc0, (codePoint & 0x3f) | 0x80);
  91387. }
  91388. else if (codePoint <= 0xffff) {
  91389. encoded += String.fromCharCode((codePoint >> 12) | 0xe0, ((codePoint >> 6) & 0x3f) | 0x80, (codePoint & 0x3f) | 0x80);
  91390. }
  91391. else if (codePoint <= 0x1fffff) {
  91392. encoded += String.fromCharCode(((codePoint >> 18) & 0x07) | 0xf0, ((codePoint >> 12) & 0x3f) | 0x80, ((codePoint >> 6) & 0x3f) | 0x80, (codePoint & 0x3f) | 0x80);
  91393. }
  91394. }
  91395. return encoded;
  91396. }
  91397. /**
  91398. * @record
  91399. */
  91400. /**
  91401. * @param {?} token
  91402. * @return {?}
  91403. */
  91404. function stringify(token) {
  91405. if (typeof token === 'string') {
  91406. return token;
  91407. }
  91408. if (token instanceof Array) {
  91409. return '[' + token.map(stringify).join(', ') + ']';
  91410. }
  91411. if (token == null) {
  91412. return '' + token;
  91413. }
  91414. if (token.overriddenName) {
  91415. return "" + token.overriddenName;
  91416. }
  91417. if (token.name) {
  91418. return "" + token.name;
  91419. }
  91420. var /** @type {?} */ res = token.toString();
  91421. if (res == null) {
  91422. return '' + res;
  91423. }
  91424. var /** @type {?} */ newLineIndex = res.indexOf('\n');
  91425. return newLineIndex === -1 ? res : res.substring(0, newLineIndex);
  91426. }
  91427. /**
  91428. * Lazily retrieves the reference value from a forwardRef.
  91429. * @param {?} type
  91430. * @return {?}
  91431. */
  91432. function resolveForwardRef(type) {
  91433. if (typeof type === 'function' && type.hasOwnProperty('__forward_ref__')) {
  91434. return type();
  91435. }
  91436. else {
  91437. return type;
  91438. }
  91439. }
  91440. /**
  91441. * Determine if the argument is shaped like a Promise
  91442. * @param {?} obj
  91443. * @return {?}
  91444. */
  91445. function isPromise(obj) {
  91446. // allow any Promise/A+ compliant thenable.
  91447. // It's up to the caller to ensure that obj.then conforms to the spec
  91448. return !!obj && typeof obj.then === 'function';
  91449. }
  91450. var Version = /** @class */ (function () {
  91451. function Version(full) {
  91452. this.full = full;
  91453. var /** @type {?} */ splits = full.split('.');
  91454. this.major = splits[0];
  91455. this.minor = splits[1];
  91456. this.patch = splits.slice(2).join('.');
  91457. }
  91458. return Version;
  91459. }());
  91460. /**
  91461. * @record
  91462. */
  91463. /**
  91464. * @fileoverview added by tsickle
  91465. * @suppress {checkTypes} checked by tsc
  91466. */
  91467. /**
  91468. * @license
  91469. * Copyright Google Inc. All Rights Reserved.
  91470. *
  91471. * Use of this source code is governed by an MIT-style license that can be
  91472. * found in the LICENSE file at https://angular.io/license
  91473. */
  91474. /**
  91475. * \@stable
  91476. */
  91477. var VERSION = new Version('5.2.11');
  91478. /**
  91479. * @fileoverview added by tsickle
  91480. * @suppress {checkTypes} checked by tsc
  91481. */
  91482. /**
  91483. * @license
  91484. * Copyright Google Inc. All Rights Reserved.
  91485. *
  91486. * Use of this source code is governed by an MIT-style license that can be
  91487. * found in the LICENSE file at https://angular.io/license
  91488. */
  91489. /**
  91490. * An Abstract Syntax Tree node representing part of a parsed Angular template.
  91491. * @record
  91492. */
  91493. /**
  91494. * A segment of text within the template.
  91495. */
  91496. var TextAst = /** @class */ (function () {
  91497. function TextAst(value, ngContentIndex, sourceSpan) {
  91498. this.value = value;
  91499. this.ngContentIndex = ngContentIndex;
  91500. this.sourceSpan = sourceSpan;
  91501. }
  91502. /**
  91503. * @param {?} visitor
  91504. * @param {?} context
  91505. * @return {?}
  91506. */
  91507. TextAst.prototype.visit = /**
  91508. * @param {?} visitor
  91509. * @param {?} context
  91510. * @return {?}
  91511. */
  91512. function (visitor, context) { return visitor.visitText(this, context); };
  91513. return TextAst;
  91514. }());
  91515. /**
  91516. * A bound expression within the text of a template.
  91517. */
  91518. var BoundTextAst = /** @class */ (function () {
  91519. function BoundTextAst(value, ngContentIndex, sourceSpan) {
  91520. this.value = value;
  91521. this.ngContentIndex = ngContentIndex;
  91522. this.sourceSpan = sourceSpan;
  91523. }
  91524. /**
  91525. * @param {?} visitor
  91526. * @param {?} context
  91527. * @return {?}
  91528. */
  91529. BoundTextAst.prototype.visit = /**
  91530. * @param {?} visitor
  91531. * @param {?} context
  91532. * @return {?}
  91533. */
  91534. function (visitor, context) {
  91535. return visitor.visitBoundText(this, context);
  91536. };
  91537. return BoundTextAst;
  91538. }());
  91539. /**
  91540. * A plain attribute on an element.
  91541. */
  91542. var AttrAst = /** @class */ (function () {
  91543. function AttrAst(name, value, sourceSpan) {
  91544. this.name = name;
  91545. this.value = value;
  91546. this.sourceSpan = sourceSpan;
  91547. }
  91548. /**
  91549. * @param {?} visitor
  91550. * @param {?} context
  91551. * @return {?}
  91552. */
  91553. AttrAst.prototype.visit = /**
  91554. * @param {?} visitor
  91555. * @param {?} context
  91556. * @return {?}
  91557. */
  91558. function (visitor, context) { return visitor.visitAttr(this, context); };
  91559. return AttrAst;
  91560. }());
  91561. /**
  91562. * A binding for an element property (e.g. `[property]="expression"`) or an animation trigger (e.g.
  91563. * `[\@trigger]="stateExp"`)
  91564. */
  91565. var BoundElementPropertyAst = /** @class */ (function () {
  91566. function BoundElementPropertyAst(name, type, securityContext, value, unit, sourceSpan) {
  91567. this.name = name;
  91568. this.type = type;
  91569. this.securityContext = securityContext;
  91570. this.value = value;
  91571. this.unit = unit;
  91572. this.sourceSpan = sourceSpan;
  91573. this.isAnimation = this.type === PropertyBindingType.Animation;
  91574. }
  91575. /**
  91576. * @param {?} visitor
  91577. * @param {?} context
  91578. * @return {?}
  91579. */
  91580. BoundElementPropertyAst.prototype.visit = /**
  91581. * @param {?} visitor
  91582. * @param {?} context
  91583. * @return {?}
  91584. */
  91585. function (visitor, context) {
  91586. return visitor.visitElementProperty(this, context);
  91587. };
  91588. return BoundElementPropertyAst;
  91589. }());
  91590. /**
  91591. * A binding for an element event (e.g. `(event)="handler()"`) or an animation trigger event (e.g.
  91592. * `(\@trigger.phase)="callback($event)"`).
  91593. */
  91594. var BoundEventAst = /** @class */ (function () {
  91595. function BoundEventAst(name, target, phase, handler, sourceSpan) {
  91596. this.name = name;
  91597. this.target = target;
  91598. this.phase = phase;
  91599. this.handler = handler;
  91600. this.sourceSpan = sourceSpan;
  91601. this.fullName = BoundEventAst.calcFullName(this.name, this.target, this.phase);
  91602. this.isAnimation = !!this.phase;
  91603. }
  91604. /**
  91605. * @param {?} name
  91606. * @param {?} target
  91607. * @param {?} phase
  91608. * @return {?}
  91609. */
  91610. BoundEventAst.calcFullName = /**
  91611. * @param {?} name
  91612. * @param {?} target
  91613. * @param {?} phase
  91614. * @return {?}
  91615. */
  91616. function (name, target, phase) {
  91617. if (target) {
  91618. return target + ":" + name;
  91619. }
  91620. else if (phase) {
  91621. return "@" + name + "." + phase;
  91622. }
  91623. else {
  91624. return name;
  91625. }
  91626. };
  91627. /**
  91628. * @param {?} visitor
  91629. * @param {?} context
  91630. * @return {?}
  91631. */
  91632. BoundEventAst.prototype.visit = /**
  91633. * @param {?} visitor
  91634. * @param {?} context
  91635. * @return {?}
  91636. */
  91637. function (visitor, context) {
  91638. return visitor.visitEvent(this, context);
  91639. };
  91640. return BoundEventAst;
  91641. }());
  91642. /**
  91643. * A reference declaration on an element (e.g. `let someName="expression"`).
  91644. */
  91645. var ReferenceAst = /** @class */ (function () {
  91646. function ReferenceAst(name, value, sourceSpan) {
  91647. this.name = name;
  91648. this.value = value;
  91649. this.sourceSpan = sourceSpan;
  91650. }
  91651. /**
  91652. * @param {?} visitor
  91653. * @param {?} context
  91654. * @return {?}
  91655. */
  91656. ReferenceAst.prototype.visit = /**
  91657. * @param {?} visitor
  91658. * @param {?} context
  91659. * @return {?}
  91660. */
  91661. function (visitor, context) {
  91662. return visitor.visitReference(this, context);
  91663. };
  91664. return ReferenceAst;
  91665. }());
  91666. /**
  91667. * A variable declaration on a <ng-template> (e.g. `var-someName="someLocalName"`).
  91668. */
  91669. var VariableAst = /** @class */ (function () {
  91670. function VariableAst(name, value, sourceSpan) {
  91671. this.name = name;
  91672. this.value = value;
  91673. this.sourceSpan = sourceSpan;
  91674. }
  91675. /**
  91676. * @param {?} visitor
  91677. * @param {?} context
  91678. * @return {?}
  91679. */
  91680. VariableAst.prototype.visit = /**
  91681. * @param {?} visitor
  91682. * @param {?} context
  91683. * @return {?}
  91684. */
  91685. function (visitor, context) {
  91686. return visitor.visitVariable(this, context);
  91687. };
  91688. return VariableAst;
  91689. }());
  91690. /**
  91691. * An element declaration in a template.
  91692. */
  91693. var ElementAst = /** @class */ (function () {
  91694. function ElementAst(name, attrs, inputs, outputs, references, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan, endSourceSpan) {
  91695. this.name = name;
  91696. this.attrs = attrs;
  91697. this.inputs = inputs;
  91698. this.outputs = outputs;
  91699. this.references = references;
  91700. this.directives = directives;
  91701. this.providers = providers;
  91702. this.hasViewContainer = hasViewContainer;
  91703. this.queryMatches = queryMatches;
  91704. this.children = children;
  91705. this.ngContentIndex = ngContentIndex;
  91706. this.sourceSpan = sourceSpan;
  91707. this.endSourceSpan = endSourceSpan;
  91708. }
  91709. /**
  91710. * @param {?} visitor
  91711. * @param {?} context
  91712. * @return {?}
  91713. */
  91714. ElementAst.prototype.visit = /**
  91715. * @param {?} visitor
  91716. * @param {?} context
  91717. * @return {?}
  91718. */
  91719. function (visitor, context) {
  91720. return visitor.visitElement(this, context);
  91721. };
  91722. return ElementAst;
  91723. }());
  91724. /**
  91725. * A `<ng-template>` element included in an Angular template.
  91726. */
  91727. var EmbeddedTemplateAst = /** @class */ (function () {
  91728. function EmbeddedTemplateAst(attrs, outputs, references, variables, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan) {
  91729. this.attrs = attrs;
  91730. this.outputs = outputs;
  91731. this.references = references;
  91732. this.variables = variables;
  91733. this.directives = directives;
  91734. this.providers = providers;
  91735. this.hasViewContainer = hasViewContainer;
  91736. this.queryMatches = queryMatches;
  91737. this.children = children;
  91738. this.ngContentIndex = ngContentIndex;
  91739. this.sourceSpan = sourceSpan;
  91740. }
  91741. /**
  91742. * @param {?} visitor
  91743. * @param {?} context
  91744. * @return {?}
  91745. */
  91746. EmbeddedTemplateAst.prototype.visit = /**
  91747. * @param {?} visitor
  91748. * @param {?} context
  91749. * @return {?}
  91750. */
  91751. function (visitor, context) {
  91752. return visitor.visitEmbeddedTemplate(this, context);
  91753. };
  91754. return EmbeddedTemplateAst;
  91755. }());
  91756. /**
  91757. * A directive property with a bound value (e.g. `*ngIf="condition").
  91758. */
  91759. var BoundDirectivePropertyAst = /** @class */ (function () {
  91760. function BoundDirectivePropertyAst(directiveName, templateName, value, sourceSpan) {
  91761. this.directiveName = directiveName;
  91762. this.templateName = templateName;
  91763. this.value = value;
  91764. this.sourceSpan = sourceSpan;
  91765. }
  91766. /**
  91767. * @param {?} visitor
  91768. * @param {?} context
  91769. * @return {?}
  91770. */
  91771. BoundDirectivePropertyAst.prototype.visit = /**
  91772. * @param {?} visitor
  91773. * @param {?} context
  91774. * @return {?}
  91775. */
  91776. function (visitor, context) {
  91777. return visitor.visitDirectiveProperty(this, context);
  91778. };
  91779. return BoundDirectivePropertyAst;
  91780. }());
  91781. /**
  91782. * A directive declared on an element.
  91783. */
  91784. var DirectiveAst = /** @class */ (function () {
  91785. function DirectiveAst(directive, inputs, hostProperties, hostEvents, contentQueryStartId, sourceSpan) {
  91786. this.directive = directive;
  91787. this.inputs = inputs;
  91788. this.hostProperties = hostProperties;
  91789. this.hostEvents = hostEvents;
  91790. this.contentQueryStartId = contentQueryStartId;
  91791. this.sourceSpan = sourceSpan;
  91792. }
  91793. /**
  91794. * @param {?} visitor
  91795. * @param {?} context
  91796. * @return {?}
  91797. */
  91798. DirectiveAst.prototype.visit = /**
  91799. * @param {?} visitor
  91800. * @param {?} context
  91801. * @return {?}
  91802. */
  91803. function (visitor, context) {
  91804. return visitor.visitDirective(this, context);
  91805. };
  91806. return DirectiveAst;
  91807. }());
  91808. /**
  91809. * A provider declared on an element
  91810. */
  91811. var ProviderAst = /** @class */ (function () {
  91812. function ProviderAst(token, multiProvider, eager, providers, providerType, lifecycleHooks, sourceSpan) {
  91813. this.token = token;
  91814. this.multiProvider = multiProvider;
  91815. this.eager = eager;
  91816. this.providers = providers;
  91817. this.providerType = providerType;
  91818. this.lifecycleHooks = lifecycleHooks;
  91819. this.sourceSpan = sourceSpan;
  91820. }
  91821. /**
  91822. * @param {?} visitor
  91823. * @param {?} context
  91824. * @return {?}
  91825. */
  91826. ProviderAst.prototype.visit = /**
  91827. * @param {?} visitor
  91828. * @param {?} context
  91829. * @return {?}
  91830. */
  91831. function (visitor, context) {
  91832. // No visit method in the visitor for now...
  91833. return null;
  91834. };
  91835. return ProviderAst;
  91836. }());
  91837. /** @enum {number} */
  91838. var ProviderAstType = {
  91839. PublicService: 0,
  91840. PrivateService: 1,
  91841. Component: 2,
  91842. Directive: 3,
  91843. Builtin: 4,
  91844. };
  91845. ProviderAstType[ProviderAstType.PublicService] = "PublicService";
  91846. ProviderAstType[ProviderAstType.PrivateService] = "PrivateService";
  91847. ProviderAstType[ProviderAstType.Component] = "Component";
  91848. ProviderAstType[ProviderAstType.Directive] = "Directive";
  91849. ProviderAstType[ProviderAstType.Builtin] = "Builtin";
  91850. /**
  91851. * Position where content is to be projected (instance of `<ng-content>` in a template).
  91852. */
  91853. var NgContentAst = /** @class */ (function () {
  91854. function NgContentAst(index, ngContentIndex, sourceSpan) {
  91855. this.index = index;
  91856. this.ngContentIndex = ngContentIndex;
  91857. this.sourceSpan = sourceSpan;
  91858. }
  91859. /**
  91860. * @param {?} visitor
  91861. * @param {?} context
  91862. * @return {?}
  91863. */
  91864. NgContentAst.prototype.visit = /**
  91865. * @param {?} visitor
  91866. * @param {?} context
  91867. * @return {?}
  91868. */
  91869. function (visitor, context) {
  91870. return visitor.visitNgContent(this, context);
  91871. };
  91872. return NgContentAst;
  91873. }());
  91874. /** @enum {number} */
  91875. var PropertyBindingType = {
  91876. /**
  91877. * A normal binding to a property (e.g. `[property]="expression"`).
  91878. */
  91879. Property: 0,
  91880. /**
  91881. * A binding to an element attribute (e.g. `[attr.name]="expression"`).
  91882. */
  91883. Attribute: 1,
  91884. /**
  91885. * A binding to a CSS class (e.g. `[class.name]="condition"`).
  91886. */
  91887. Class: 2,
  91888. /**
  91889. * A binding to a style rule (e.g. `[style.rule]="expression"`).
  91890. */
  91891. Style: 3,
  91892. /**
  91893. * A binding to an animation reference (e.g. `[animate.key]="expression"`).
  91894. */
  91895. Animation: 4,
  91896. };
  91897. PropertyBindingType[PropertyBindingType.Property] = "Property";
  91898. PropertyBindingType[PropertyBindingType.Attribute] = "Attribute";
  91899. PropertyBindingType[PropertyBindingType.Class] = "Class";
  91900. PropertyBindingType[PropertyBindingType.Style] = "Style";
  91901. PropertyBindingType[PropertyBindingType.Animation] = "Animation";
  91902. /**
  91903. * @record
  91904. */
  91905. /**
  91906. * A visitor for {\@link TemplateAst} trees that will process each node.
  91907. * @record
  91908. */
  91909. /**
  91910. * A visitor that accepts each node but doesn't do anything. It is intended to be used
  91911. * as the base class for a visitor that is only interested in a subset of the node types.
  91912. */
  91913. var NullTemplateVisitor = /** @class */ (function () {
  91914. function NullTemplateVisitor() {
  91915. }
  91916. /**
  91917. * @param {?} ast
  91918. * @param {?} context
  91919. * @return {?}
  91920. */
  91921. NullTemplateVisitor.prototype.visitNgContent = /**
  91922. * @param {?} ast
  91923. * @param {?} context
  91924. * @return {?}
  91925. */
  91926. function (ast, context) { };
  91927. /**
  91928. * @param {?} ast
  91929. * @param {?} context
  91930. * @return {?}
  91931. */
  91932. NullTemplateVisitor.prototype.visitEmbeddedTemplate = /**
  91933. * @param {?} ast
  91934. * @param {?} context
  91935. * @return {?}
  91936. */
  91937. function (ast, context) { };
  91938. /**
  91939. * @param {?} ast
  91940. * @param {?} context
  91941. * @return {?}
  91942. */
  91943. NullTemplateVisitor.prototype.visitElement = /**
  91944. * @param {?} ast
  91945. * @param {?} context
  91946. * @return {?}
  91947. */
  91948. function (ast, context) { };
  91949. /**
  91950. * @param {?} ast
  91951. * @param {?} context
  91952. * @return {?}
  91953. */
  91954. NullTemplateVisitor.prototype.visitReference = /**
  91955. * @param {?} ast
  91956. * @param {?} context
  91957. * @return {?}
  91958. */
  91959. function (ast, context) { };
  91960. /**
  91961. * @param {?} ast
  91962. * @param {?} context
  91963. * @return {?}
  91964. */
  91965. NullTemplateVisitor.prototype.visitVariable = /**
  91966. * @param {?} ast
  91967. * @param {?} context
  91968. * @return {?}
  91969. */
  91970. function (ast, context) { };
  91971. /**
  91972. * @param {?} ast
  91973. * @param {?} context
  91974. * @return {?}
  91975. */
  91976. NullTemplateVisitor.prototype.visitEvent = /**
  91977. * @param {?} ast
  91978. * @param {?} context
  91979. * @return {?}
  91980. */
  91981. function (ast, context) { };
  91982. /**
  91983. * @param {?} ast
  91984. * @param {?} context
  91985. * @return {?}
  91986. */
  91987. NullTemplateVisitor.prototype.visitElementProperty = /**
  91988. * @param {?} ast
  91989. * @param {?} context
  91990. * @return {?}
  91991. */
  91992. function (ast, context) { };
  91993. /**
  91994. * @param {?} ast
  91995. * @param {?} context
  91996. * @return {?}
  91997. */
  91998. NullTemplateVisitor.prototype.visitAttr = /**
  91999. * @param {?} ast
  92000. * @param {?} context
  92001. * @return {?}
  92002. */
  92003. function (ast, context) { };
  92004. /**
  92005. * @param {?} ast
  92006. * @param {?} context
  92007. * @return {?}
  92008. */
  92009. NullTemplateVisitor.prototype.visitBoundText = /**
  92010. * @param {?} ast
  92011. * @param {?} context
  92012. * @return {?}
  92013. */
  92014. function (ast, context) { };
  92015. /**
  92016. * @param {?} ast
  92017. * @param {?} context
  92018. * @return {?}
  92019. */
  92020. NullTemplateVisitor.prototype.visitText = /**
  92021. * @param {?} ast
  92022. * @param {?} context
  92023. * @return {?}
  92024. */
  92025. function (ast, context) { };
  92026. /**
  92027. * @param {?} ast
  92028. * @param {?} context
  92029. * @return {?}
  92030. */
  92031. NullTemplateVisitor.prototype.visitDirective = /**
  92032. * @param {?} ast
  92033. * @param {?} context
  92034. * @return {?}
  92035. */
  92036. function (ast, context) { };
  92037. /**
  92038. * @param {?} ast
  92039. * @param {?} context
  92040. * @return {?}
  92041. */
  92042. NullTemplateVisitor.prototype.visitDirectiveProperty = /**
  92043. * @param {?} ast
  92044. * @param {?} context
  92045. * @return {?}
  92046. */
  92047. function (ast, context) { };
  92048. return NullTemplateVisitor;
  92049. }());
  92050. /**
  92051. * Base class that can be used to build a visitor that visits each node
  92052. * in an template ast recursively.
  92053. */
  92054. var RecursiveTemplateAstVisitor = /** @class */ (function (_super) {
  92055. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(RecursiveTemplateAstVisitor, _super);
  92056. function RecursiveTemplateAstVisitor() {
  92057. return _super.call(this) || this;
  92058. }
  92059. // Nodes with children
  92060. /**
  92061. * @param {?} ast
  92062. * @param {?} context
  92063. * @return {?}
  92064. */
  92065. RecursiveTemplateAstVisitor.prototype.visitEmbeddedTemplate = /**
  92066. * @param {?} ast
  92067. * @param {?} context
  92068. * @return {?}
  92069. */
  92070. function (ast, context) {
  92071. return this.visitChildren(context, function (visit) {
  92072. visit(ast.attrs);
  92073. visit(ast.references);
  92074. visit(ast.variables);
  92075. visit(ast.directives);
  92076. visit(ast.providers);
  92077. visit(ast.children);
  92078. });
  92079. };
  92080. /**
  92081. * @param {?} ast
  92082. * @param {?} context
  92083. * @return {?}
  92084. */
  92085. RecursiveTemplateAstVisitor.prototype.visitElement = /**
  92086. * @param {?} ast
  92087. * @param {?} context
  92088. * @return {?}
  92089. */
  92090. function (ast, context) {
  92091. return this.visitChildren(context, function (visit) {
  92092. visit(ast.attrs);
  92093. visit(ast.inputs);
  92094. visit(ast.outputs);
  92095. visit(ast.references);
  92096. visit(ast.directives);
  92097. visit(ast.providers);
  92098. visit(ast.children);
  92099. });
  92100. };
  92101. /**
  92102. * @param {?} ast
  92103. * @param {?} context
  92104. * @return {?}
  92105. */
  92106. RecursiveTemplateAstVisitor.prototype.visitDirective = /**
  92107. * @param {?} ast
  92108. * @param {?} context
  92109. * @return {?}
  92110. */
  92111. function (ast, context) {
  92112. return this.visitChildren(context, function (visit) {
  92113. visit(ast.inputs);
  92114. visit(ast.hostProperties);
  92115. visit(ast.hostEvents);
  92116. });
  92117. };
  92118. /**
  92119. * @template T
  92120. * @param {?} context
  92121. * @param {?} cb
  92122. * @return {?}
  92123. */
  92124. RecursiveTemplateAstVisitor.prototype.visitChildren = /**
  92125. * @template T
  92126. * @param {?} context
  92127. * @param {?} cb
  92128. * @return {?}
  92129. */
  92130. function (context, cb) {
  92131. var /** @type {?} */ results = [];
  92132. var /** @type {?} */ t = this;
  92133. /**
  92134. * @template T
  92135. * @param {?} children
  92136. * @return {?}
  92137. */
  92138. function visit(children) {
  92139. if (children && children.length)
  92140. results.push(templateVisitAll(t, children, context));
  92141. }
  92142. cb(visit);
  92143. return [].concat.apply([], results);
  92144. };
  92145. return RecursiveTemplateAstVisitor;
  92146. }(NullTemplateVisitor));
  92147. /**
  92148. * Visit every node in a list of {\@link TemplateAst}s with the given {\@link TemplateAstVisitor}.
  92149. * @param {?} visitor
  92150. * @param {?} asts
  92151. * @param {?=} context
  92152. * @return {?}
  92153. */
  92154. function templateVisitAll(visitor, asts, context) {
  92155. if (context === void 0) { context = null; }
  92156. var /** @type {?} */ result = [];
  92157. var /** @type {?} */ visit = visitor.visit ?
  92158. function (ast) { return ((visitor.visit))(ast, context) || ast.visit(visitor, context); } :
  92159. function (ast) { return ast.visit(visitor, context); };
  92160. asts.forEach(function (ast) {
  92161. var /** @type {?} */ astResult = visit(ast);
  92162. if (astResult) {
  92163. result.push(astResult);
  92164. }
  92165. });
  92166. return result;
  92167. }
  92168. /**
  92169. * @fileoverview added by tsickle
  92170. * @suppress {checkTypes} checked by tsc
  92171. */
  92172. /**
  92173. * @license
  92174. * Copyright Google Inc. All Rights Reserved.
  92175. *
  92176. * Use of this source code is governed by an MIT-style license that can be
  92177. * found in the LICENSE file at https://angular.io/license
  92178. */
  92179. var CompilerConfig = /** @class */ (function () {
  92180. function CompilerConfig(_a) {
  92181. var _b = _a === void 0 ? {} : _a, _c = _b.defaultEncapsulation, defaultEncapsulation = _c === void 0 ? ViewEncapsulation.Emulated : _c, _d = _b.useJit, useJit = _d === void 0 ? true : _d, _e = _b.jitDevMode, jitDevMode = _e === void 0 ? false : _e, _f = _b.missingTranslation, missingTranslation = _f === void 0 ? null : _f, enableLegacyTemplate = _b.enableLegacyTemplate, preserveWhitespaces = _b.preserveWhitespaces, strictInjectionParameters = _b.strictInjectionParameters;
  92182. this.defaultEncapsulation = defaultEncapsulation;
  92183. this.useJit = !!useJit;
  92184. this.jitDevMode = !!jitDevMode;
  92185. this.missingTranslation = missingTranslation;
  92186. this.enableLegacyTemplate = enableLegacyTemplate === true;
  92187. this.preserveWhitespaces = preserveWhitespacesDefault(noUndefined(preserveWhitespaces));
  92188. this.strictInjectionParameters = strictInjectionParameters === true;
  92189. }
  92190. return CompilerConfig;
  92191. }());
  92192. /**
  92193. * @param {?} preserveWhitespacesOption
  92194. * @param {?=} defaultSetting
  92195. * @return {?}
  92196. */
  92197. function preserveWhitespacesDefault(preserveWhitespacesOption, defaultSetting) {
  92198. if (defaultSetting === void 0) { defaultSetting = true; }
  92199. return preserveWhitespacesOption === null ? defaultSetting : preserveWhitespacesOption;
  92200. }
  92201. /**
  92202. * @fileoverview added by tsickle
  92203. * @suppress {checkTypes} checked by tsc
  92204. */
  92205. /**
  92206. * @license
  92207. * Copyright Google Inc. All Rights Reserved.
  92208. *
  92209. * Use of this source code is governed by an MIT-style license that can be
  92210. * found in the LICENSE file at https://angular.io/license
  92211. */
  92212. /**
  92213. * A token representing the a reference to a static type.
  92214. *
  92215. * This token is unique for a filePath and name and can be used as a hash table key.
  92216. */
  92217. var StaticSymbol = /** @class */ (function () {
  92218. function StaticSymbol(filePath, name, members) {
  92219. this.filePath = filePath;
  92220. this.name = name;
  92221. this.members = members;
  92222. }
  92223. /**
  92224. * @return {?}
  92225. */
  92226. StaticSymbol.prototype.assertNoMembers = /**
  92227. * @return {?}
  92228. */
  92229. function () {
  92230. if (this.members.length) {
  92231. throw new Error("Illegal state: symbol without members expected, but got " + JSON.stringify(this) + ".");
  92232. }
  92233. };
  92234. return StaticSymbol;
  92235. }());
  92236. /**
  92237. * A cache of static symbol used by the StaticReflector to return the same symbol for the
  92238. * same symbol values.
  92239. */
  92240. var StaticSymbolCache = /** @class */ (function () {
  92241. function StaticSymbolCache() {
  92242. this.cache = new Map();
  92243. }
  92244. /**
  92245. * @param {?} declarationFile
  92246. * @param {?} name
  92247. * @param {?=} members
  92248. * @return {?}
  92249. */
  92250. StaticSymbolCache.prototype.get = /**
  92251. * @param {?} declarationFile
  92252. * @param {?} name
  92253. * @param {?=} members
  92254. * @return {?}
  92255. */
  92256. function (declarationFile, name, members) {
  92257. members = members || [];
  92258. var /** @type {?} */ memberSuffix = members.length ? "." + members.join('.') : '';
  92259. var /** @type {?} */ key = "\"" + declarationFile + "\"." + name + memberSuffix;
  92260. var /** @type {?} */ result = this.cache.get(key);
  92261. if (!result) {
  92262. result = new StaticSymbol(declarationFile, name, members);
  92263. this.cache.set(key, result);
  92264. }
  92265. return result;
  92266. };
  92267. return StaticSymbolCache;
  92268. }());
  92269. /**
  92270. * @fileoverview added by tsickle
  92271. * @suppress {checkTypes} checked by tsc
  92272. */
  92273. /**
  92274. * @license
  92275. * Copyright Google Inc. All Rights Reserved.
  92276. *
  92277. * Use of this source code is governed by an MIT-style license that can be
  92278. * found in the LICENSE file at https://angular.io/license
  92279. */
  92280. // group 0: "[prop] or (event) or @trigger"
  92281. // group 1: "prop" from "[prop]"
  92282. // group 2: "event" from "(event)"
  92283. // group 3: "@trigger" from "@trigger"
  92284. var HOST_REG_EXP = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))|(\@[-\w]+)$/;
  92285. /**
  92286. * @param {?} name
  92287. * @return {?}
  92288. */
  92289. function _sanitizeIdentifier(name) {
  92290. return name.replace(/\W/g, '_');
  92291. }
  92292. var _anonymousTypeIndex = 0;
  92293. /**
  92294. * @param {?} compileIdentifier
  92295. * @return {?}
  92296. */
  92297. function identifierName(compileIdentifier) {
  92298. if (!compileIdentifier || !compileIdentifier.reference) {
  92299. return null;
  92300. }
  92301. var /** @type {?} */ ref = compileIdentifier.reference;
  92302. if (ref instanceof StaticSymbol) {
  92303. return ref.name;
  92304. }
  92305. if (ref['__anonymousType']) {
  92306. return ref['__anonymousType'];
  92307. }
  92308. var /** @type {?} */ identifier = stringify(ref);
  92309. if (identifier.indexOf('(') >= 0) {
  92310. // case: anonymous functions!
  92311. identifier = "anonymous_" + _anonymousTypeIndex++;
  92312. ref['__anonymousType'] = identifier;
  92313. }
  92314. else {
  92315. identifier = _sanitizeIdentifier(identifier);
  92316. }
  92317. return identifier;
  92318. }
  92319. /**
  92320. * @param {?} compileIdentifier
  92321. * @return {?}
  92322. */
  92323. function identifierModuleUrl(compileIdentifier) {
  92324. var /** @type {?} */ ref = compileIdentifier.reference;
  92325. if (ref instanceof StaticSymbol) {
  92326. return ref.filePath;
  92327. }
  92328. // Runtime type
  92329. return "./" + stringify(ref);
  92330. }
  92331. /**
  92332. * @param {?} compType
  92333. * @param {?} embeddedTemplateIndex
  92334. * @return {?}
  92335. */
  92336. function viewClassName(compType, embeddedTemplateIndex) {
  92337. return "View_" + identifierName({ reference: compType }) + "_" + embeddedTemplateIndex;
  92338. }
  92339. /**
  92340. * @param {?} compType
  92341. * @return {?}
  92342. */
  92343. function rendererTypeName(compType) {
  92344. return "RenderType_" + identifierName({ reference: compType });
  92345. }
  92346. /**
  92347. * @param {?} compType
  92348. * @return {?}
  92349. */
  92350. function hostViewClassName(compType) {
  92351. return "HostView_" + identifierName({ reference: compType });
  92352. }
  92353. /**
  92354. * @param {?} compType
  92355. * @return {?}
  92356. */
  92357. function componentFactoryName(compType) {
  92358. return identifierName({ reference: compType }) + "NgFactory";
  92359. }
  92360. /**
  92361. * @record
  92362. */
  92363. /**
  92364. * @record
  92365. */
  92366. /** @enum {number} */
  92367. var CompileSummaryKind = {
  92368. Pipe: 0,
  92369. Directive: 1,
  92370. NgModule: 2,
  92371. Injectable: 3,
  92372. };
  92373. CompileSummaryKind[CompileSummaryKind.Pipe] = "Pipe";
  92374. CompileSummaryKind[CompileSummaryKind.Directive] = "Directive";
  92375. CompileSummaryKind[CompileSummaryKind.NgModule] = "NgModule";
  92376. CompileSummaryKind[CompileSummaryKind.Injectable] = "Injectable";
  92377. /**
  92378. * A CompileSummary is the data needed to use a directive / pipe / module
  92379. * in other modules / components. However, this data is not enough to compile
  92380. * the directive / module itself.
  92381. * @record
  92382. */
  92383. /**
  92384. * @record
  92385. */
  92386. /**
  92387. * @record
  92388. */
  92389. /**
  92390. * @record
  92391. */
  92392. /**
  92393. * @param {?} token
  92394. * @return {?}
  92395. */
  92396. function tokenName(token) {
  92397. return token.value != null ? _sanitizeIdentifier(token.value) : identifierName(token.identifier);
  92398. }
  92399. /**
  92400. * @param {?} token
  92401. * @return {?}
  92402. */
  92403. function tokenReference(token) {
  92404. if (token.identifier != null) {
  92405. return token.identifier.reference;
  92406. }
  92407. else {
  92408. return token.value;
  92409. }
  92410. }
  92411. /**
  92412. * @record
  92413. */
  92414. /**
  92415. * Metadata regarding compilation of a type.
  92416. * @record
  92417. */
  92418. /**
  92419. * @record
  92420. */
  92421. /**
  92422. * Metadata about a stylesheet
  92423. */
  92424. var CompileStylesheetMetadata = /** @class */ (function () {
  92425. function CompileStylesheetMetadata(_a) {
  92426. var _b = _a === void 0 ? {} : _a, moduleUrl = _b.moduleUrl, styles = _b.styles, styleUrls = _b.styleUrls;
  92427. this.moduleUrl = moduleUrl || null;
  92428. this.styles = _normalizeArray(styles);
  92429. this.styleUrls = _normalizeArray(styleUrls);
  92430. }
  92431. return CompileStylesheetMetadata;
  92432. }());
  92433. /**
  92434. * Summary Metadata regarding compilation of a template.
  92435. * @record
  92436. */
  92437. /**
  92438. * Metadata regarding compilation of a template.
  92439. */
  92440. var CompileTemplateMetadata = /** @class */ (function () {
  92441. function CompileTemplateMetadata(_a) {
  92442. var encapsulation = _a.encapsulation, template = _a.template, templateUrl = _a.templateUrl, htmlAst = _a.htmlAst, styles = _a.styles, styleUrls = _a.styleUrls, externalStylesheets = _a.externalStylesheets, animations = _a.animations, ngContentSelectors = _a.ngContentSelectors, interpolation = _a.interpolation, isInline = _a.isInline, preserveWhitespaces = _a.preserveWhitespaces;
  92443. this.encapsulation = encapsulation;
  92444. this.template = template;
  92445. this.templateUrl = templateUrl;
  92446. this.htmlAst = htmlAst;
  92447. this.styles = _normalizeArray(styles);
  92448. this.styleUrls = _normalizeArray(styleUrls);
  92449. this.externalStylesheets = _normalizeArray(externalStylesheets);
  92450. this.animations = animations ? flatten(animations) : [];
  92451. this.ngContentSelectors = ngContentSelectors || [];
  92452. if (interpolation && interpolation.length != 2) {
  92453. throw new Error("'interpolation' should have a start and an end symbol.");
  92454. }
  92455. this.interpolation = interpolation;
  92456. this.isInline = isInline;
  92457. this.preserveWhitespaces = preserveWhitespaces;
  92458. }
  92459. /**
  92460. * @return {?}
  92461. */
  92462. CompileTemplateMetadata.prototype.toSummary = /**
  92463. * @return {?}
  92464. */
  92465. function () {
  92466. return {
  92467. ngContentSelectors: this.ngContentSelectors,
  92468. encapsulation: this.encapsulation,
  92469. };
  92470. };
  92471. return CompileTemplateMetadata;
  92472. }());
  92473. /**
  92474. * @record
  92475. */
  92476. /**
  92477. * @record
  92478. */
  92479. /**
  92480. * Metadata regarding compilation of a directive.
  92481. */
  92482. var CompileDirectiveMetadata = /** @class */ (function () {
  92483. function CompileDirectiveMetadata(_a) {
  92484. var isHost = _a.isHost, type = _a.type, isComponent = _a.isComponent, selector = _a.selector, exportAs = _a.exportAs, changeDetection = _a.changeDetection, inputs = _a.inputs, outputs = _a.outputs, hostListeners = _a.hostListeners, hostProperties = _a.hostProperties, hostAttributes = _a.hostAttributes, providers = _a.providers, viewProviders = _a.viewProviders, queries = _a.queries, guards = _a.guards, viewQueries = _a.viewQueries, entryComponents = _a.entryComponents, template = _a.template, componentViewType = _a.componentViewType, rendererType = _a.rendererType, componentFactory = _a.componentFactory;
  92485. this.isHost = !!isHost;
  92486. this.type = type;
  92487. this.isComponent = isComponent;
  92488. this.selector = selector;
  92489. this.exportAs = exportAs;
  92490. this.changeDetection = changeDetection;
  92491. this.inputs = inputs;
  92492. this.outputs = outputs;
  92493. this.hostListeners = hostListeners;
  92494. this.hostProperties = hostProperties;
  92495. this.hostAttributes = hostAttributes;
  92496. this.providers = _normalizeArray(providers);
  92497. this.viewProviders = _normalizeArray(viewProviders);
  92498. this.queries = _normalizeArray(queries);
  92499. this.guards = guards;
  92500. this.viewQueries = _normalizeArray(viewQueries);
  92501. this.entryComponents = _normalizeArray(entryComponents);
  92502. this.template = template;
  92503. this.componentViewType = componentViewType;
  92504. this.rendererType = rendererType;
  92505. this.componentFactory = componentFactory;
  92506. }
  92507. /**
  92508. * @param {?} __0
  92509. * @return {?}
  92510. */
  92511. CompileDirectiveMetadata.create = /**
  92512. * @param {?} __0
  92513. * @return {?}
  92514. */
  92515. function (_a) {
  92516. var isHost = _a.isHost, type = _a.type, isComponent = _a.isComponent, selector = _a.selector, exportAs = _a.exportAs, changeDetection = _a.changeDetection, inputs = _a.inputs, outputs = _a.outputs, host = _a.host, providers = _a.providers, viewProviders = _a.viewProviders, queries = _a.queries, guards = _a.guards, viewQueries = _a.viewQueries, entryComponents = _a.entryComponents, template = _a.template, componentViewType = _a.componentViewType, rendererType = _a.rendererType, componentFactory = _a.componentFactory;
  92517. var /** @type {?} */ hostListeners = {};
  92518. var /** @type {?} */ hostProperties = {};
  92519. var /** @type {?} */ hostAttributes = {};
  92520. if (host != null) {
  92521. Object.keys(host).forEach(function (key) {
  92522. var /** @type {?} */ value = host[key];
  92523. var /** @type {?} */ matches = key.match(HOST_REG_EXP);
  92524. if (matches === null) {
  92525. hostAttributes[key] = value;
  92526. }
  92527. else if (matches[1] != null) {
  92528. hostProperties[matches[1]] = value;
  92529. }
  92530. else if (matches[2] != null) {
  92531. hostListeners[matches[2]] = value;
  92532. }
  92533. });
  92534. }
  92535. var /** @type {?} */ inputsMap = {};
  92536. if (inputs != null) {
  92537. inputs.forEach(function (bindConfig) {
  92538. // canonical syntax: `dirProp: elProp`
  92539. // if there is no `:`, use dirProp = elProp
  92540. var /** @type {?} */ parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);
  92541. inputsMap[parts[0]] = parts[1];
  92542. });
  92543. }
  92544. var /** @type {?} */ outputsMap = {};
  92545. if (outputs != null) {
  92546. outputs.forEach(function (bindConfig) {
  92547. // canonical syntax: `dirProp: elProp`
  92548. // if there is no `:`, use dirProp = elProp
  92549. var /** @type {?} */ parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);
  92550. outputsMap[parts[0]] = parts[1];
  92551. });
  92552. }
  92553. return new CompileDirectiveMetadata({
  92554. isHost: isHost,
  92555. type: type,
  92556. isComponent: !!isComponent, selector: selector, exportAs: exportAs, changeDetection: changeDetection,
  92557. inputs: inputsMap,
  92558. outputs: outputsMap,
  92559. hostListeners: hostListeners,
  92560. hostProperties: hostProperties,
  92561. hostAttributes: hostAttributes,
  92562. providers: providers,
  92563. viewProviders: viewProviders,
  92564. queries: queries,
  92565. guards: guards,
  92566. viewQueries: viewQueries,
  92567. entryComponents: entryComponents,
  92568. template: template,
  92569. componentViewType: componentViewType,
  92570. rendererType: rendererType,
  92571. componentFactory: componentFactory,
  92572. });
  92573. };
  92574. /**
  92575. * @return {?}
  92576. */
  92577. CompileDirectiveMetadata.prototype.toSummary = /**
  92578. * @return {?}
  92579. */
  92580. function () {
  92581. return {
  92582. summaryKind: CompileSummaryKind.Directive,
  92583. type: this.type,
  92584. isComponent: this.isComponent,
  92585. selector: this.selector,
  92586. exportAs: this.exportAs,
  92587. inputs: this.inputs,
  92588. outputs: this.outputs,
  92589. hostListeners: this.hostListeners,
  92590. hostProperties: this.hostProperties,
  92591. hostAttributes: this.hostAttributes,
  92592. providers: this.providers,
  92593. viewProviders: this.viewProviders,
  92594. queries: this.queries,
  92595. guards: this.guards,
  92596. viewQueries: this.viewQueries,
  92597. entryComponents: this.entryComponents,
  92598. changeDetection: this.changeDetection,
  92599. template: this.template && this.template.toSummary(),
  92600. componentViewType: this.componentViewType,
  92601. rendererType: this.rendererType,
  92602. componentFactory: this.componentFactory
  92603. };
  92604. };
  92605. return CompileDirectiveMetadata;
  92606. }());
  92607. /**
  92608. * @record
  92609. */
  92610. var CompilePipeMetadata = /** @class */ (function () {
  92611. function CompilePipeMetadata(_a) {
  92612. var type = _a.type, name = _a.name, pure = _a.pure;
  92613. this.type = type;
  92614. this.name = name;
  92615. this.pure = !!pure;
  92616. }
  92617. /**
  92618. * @return {?}
  92619. */
  92620. CompilePipeMetadata.prototype.toSummary = /**
  92621. * @return {?}
  92622. */
  92623. function () {
  92624. return {
  92625. summaryKind: CompileSummaryKind.Pipe,
  92626. type: this.type,
  92627. name: this.name,
  92628. pure: this.pure
  92629. };
  92630. };
  92631. return CompilePipeMetadata;
  92632. }());
  92633. /**
  92634. * @record
  92635. */
  92636. /**
  92637. * Metadata regarding compilation of a module.
  92638. */
  92639. var CompileNgModuleMetadata = /** @class */ (function () {
  92640. function CompileNgModuleMetadata(_a) {
  92641. var type = _a.type, providers = _a.providers, declaredDirectives = _a.declaredDirectives, exportedDirectives = _a.exportedDirectives, declaredPipes = _a.declaredPipes, exportedPipes = _a.exportedPipes, entryComponents = _a.entryComponents, bootstrapComponents = _a.bootstrapComponents, importedModules = _a.importedModules, exportedModules = _a.exportedModules, schemas = _a.schemas, transitiveModule = _a.transitiveModule, id = _a.id;
  92642. this.type = type || null;
  92643. this.declaredDirectives = _normalizeArray(declaredDirectives);
  92644. this.exportedDirectives = _normalizeArray(exportedDirectives);
  92645. this.declaredPipes = _normalizeArray(declaredPipes);
  92646. this.exportedPipes = _normalizeArray(exportedPipes);
  92647. this.providers = _normalizeArray(providers);
  92648. this.entryComponents = _normalizeArray(entryComponents);
  92649. this.bootstrapComponents = _normalizeArray(bootstrapComponents);
  92650. this.importedModules = _normalizeArray(importedModules);
  92651. this.exportedModules = _normalizeArray(exportedModules);
  92652. this.schemas = _normalizeArray(schemas);
  92653. this.id = id || null;
  92654. this.transitiveModule = transitiveModule || null;
  92655. }
  92656. /**
  92657. * @return {?}
  92658. */
  92659. CompileNgModuleMetadata.prototype.toSummary = /**
  92660. * @return {?}
  92661. */
  92662. function () {
  92663. var /** @type {?} */ module = /** @type {?} */ ((this.transitiveModule));
  92664. return {
  92665. summaryKind: CompileSummaryKind.NgModule,
  92666. type: this.type,
  92667. entryComponents: module.entryComponents,
  92668. providers: module.providers,
  92669. modules: module.modules,
  92670. exportedDirectives: module.exportedDirectives,
  92671. exportedPipes: module.exportedPipes
  92672. };
  92673. };
  92674. return CompileNgModuleMetadata;
  92675. }());
  92676. var TransitiveCompileNgModuleMetadata = /** @class */ (function () {
  92677. function TransitiveCompileNgModuleMetadata() {
  92678. this.directivesSet = new Set();
  92679. this.directives = [];
  92680. this.exportedDirectivesSet = new Set();
  92681. this.exportedDirectives = [];
  92682. this.pipesSet = new Set();
  92683. this.pipes = [];
  92684. this.exportedPipesSet = new Set();
  92685. this.exportedPipes = [];
  92686. this.modulesSet = new Set();
  92687. this.modules = [];
  92688. this.entryComponentsSet = new Set();
  92689. this.entryComponents = [];
  92690. this.providers = [];
  92691. }
  92692. /**
  92693. * @param {?} provider
  92694. * @param {?} module
  92695. * @return {?}
  92696. */
  92697. TransitiveCompileNgModuleMetadata.prototype.addProvider = /**
  92698. * @param {?} provider
  92699. * @param {?} module
  92700. * @return {?}
  92701. */
  92702. function (provider, module) {
  92703. this.providers.push({ provider: provider, module: module });
  92704. };
  92705. /**
  92706. * @param {?} id
  92707. * @return {?}
  92708. */
  92709. TransitiveCompileNgModuleMetadata.prototype.addDirective = /**
  92710. * @param {?} id
  92711. * @return {?}
  92712. */
  92713. function (id) {
  92714. if (!this.directivesSet.has(id.reference)) {
  92715. this.directivesSet.add(id.reference);
  92716. this.directives.push(id);
  92717. }
  92718. };
  92719. /**
  92720. * @param {?} id
  92721. * @return {?}
  92722. */
  92723. TransitiveCompileNgModuleMetadata.prototype.addExportedDirective = /**
  92724. * @param {?} id
  92725. * @return {?}
  92726. */
  92727. function (id) {
  92728. if (!this.exportedDirectivesSet.has(id.reference)) {
  92729. this.exportedDirectivesSet.add(id.reference);
  92730. this.exportedDirectives.push(id);
  92731. }
  92732. };
  92733. /**
  92734. * @param {?} id
  92735. * @return {?}
  92736. */
  92737. TransitiveCompileNgModuleMetadata.prototype.addPipe = /**
  92738. * @param {?} id
  92739. * @return {?}
  92740. */
  92741. function (id) {
  92742. if (!this.pipesSet.has(id.reference)) {
  92743. this.pipesSet.add(id.reference);
  92744. this.pipes.push(id);
  92745. }
  92746. };
  92747. /**
  92748. * @param {?} id
  92749. * @return {?}
  92750. */
  92751. TransitiveCompileNgModuleMetadata.prototype.addExportedPipe = /**
  92752. * @param {?} id
  92753. * @return {?}
  92754. */
  92755. function (id) {
  92756. if (!this.exportedPipesSet.has(id.reference)) {
  92757. this.exportedPipesSet.add(id.reference);
  92758. this.exportedPipes.push(id);
  92759. }
  92760. };
  92761. /**
  92762. * @param {?} id
  92763. * @return {?}
  92764. */
  92765. TransitiveCompileNgModuleMetadata.prototype.addModule = /**
  92766. * @param {?} id
  92767. * @return {?}
  92768. */
  92769. function (id) {
  92770. if (!this.modulesSet.has(id.reference)) {
  92771. this.modulesSet.add(id.reference);
  92772. this.modules.push(id);
  92773. }
  92774. };
  92775. /**
  92776. * @param {?} ec
  92777. * @return {?}
  92778. */
  92779. TransitiveCompileNgModuleMetadata.prototype.addEntryComponent = /**
  92780. * @param {?} ec
  92781. * @return {?}
  92782. */
  92783. function (ec) {
  92784. if (!this.entryComponentsSet.has(ec.componentType)) {
  92785. this.entryComponentsSet.add(ec.componentType);
  92786. this.entryComponents.push(ec);
  92787. }
  92788. };
  92789. return TransitiveCompileNgModuleMetadata;
  92790. }());
  92791. /**
  92792. * @param {?} obj
  92793. * @return {?}
  92794. */
  92795. function _normalizeArray(obj) {
  92796. return obj || [];
  92797. }
  92798. var ProviderMeta = /** @class */ (function () {
  92799. function ProviderMeta(token, _a) {
  92800. var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi;
  92801. this.token = token;
  92802. this.useClass = useClass || null;
  92803. this.useValue = useValue;
  92804. this.useExisting = useExisting;
  92805. this.useFactory = useFactory || null;
  92806. this.dependencies = deps || null;
  92807. this.multi = !!multi;
  92808. }
  92809. return ProviderMeta;
  92810. }());
  92811. /**
  92812. * @template T
  92813. * @param {?} list
  92814. * @return {?}
  92815. */
  92816. function flatten(list) {
  92817. return list.reduce(function (flat, item) {
  92818. var /** @type {?} */ flatItem = Array.isArray(item) ? flatten(item) : item;
  92819. return (/** @type {?} */ (flat)).concat(flatItem);
  92820. }, []);
  92821. }
  92822. /**
  92823. * @param {?} url
  92824. * @return {?}
  92825. */
  92826. function jitSourceUrl(url) {
  92827. // Note: We need 3 "/" so that ng shows up as a separate domain
  92828. // in the chrome dev tools.
  92829. return url.replace(/(\w+:\/\/[\w:-]+)?(\/+)?/, 'ng:///');
  92830. }
  92831. /**
  92832. * @param {?} ngModuleType
  92833. * @param {?} compMeta
  92834. * @param {?} templateMeta
  92835. * @return {?}
  92836. */
  92837. function templateSourceUrl(ngModuleType, compMeta, templateMeta) {
  92838. var /** @type {?} */ url;
  92839. if (templateMeta.isInline) {
  92840. if (compMeta.type.reference instanceof StaticSymbol) {
  92841. // Note: a .ts file might contain multiple components with inline templates,
  92842. // so we need to give them unique urls, as these will be used for sourcemaps.
  92843. url = compMeta.type.reference.filePath + "." + compMeta.type.reference.name + ".html";
  92844. }
  92845. else {
  92846. url = identifierName(ngModuleType) + "/" + identifierName(compMeta.type) + ".html";
  92847. }
  92848. }
  92849. else {
  92850. url = /** @type {?} */ ((templateMeta.templateUrl));
  92851. }
  92852. return compMeta.type.reference instanceof StaticSymbol ? url : jitSourceUrl(url);
  92853. }
  92854. /**
  92855. * @param {?} meta
  92856. * @param {?} id
  92857. * @return {?}
  92858. */
  92859. function sharedStylesheetJitUrl(meta, id) {
  92860. var /** @type {?} */ pathParts = /** @type {?} */ ((meta.moduleUrl)).split(/\/\\/g);
  92861. var /** @type {?} */ baseName = pathParts[pathParts.length - 1];
  92862. return jitSourceUrl("css/" + id + baseName + ".ngstyle.js");
  92863. }
  92864. /**
  92865. * @param {?} moduleMeta
  92866. * @return {?}
  92867. */
  92868. function ngModuleJitUrl(moduleMeta) {
  92869. return jitSourceUrl(identifierName(moduleMeta.type) + "/module.ngfactory.js");
  92870. }
  92871. /**
  92872. * @param {?} ngModuleType
  92873. * @param {?} compMeta
  92874. * @return {?}
  92875. */
  92876. function templateJitUrl(ngModuleType, compMeta) {
  92877. return jitSourceUrl(identifierName(ngModuleType) + "/" + identifierName(compMeta.type) + ".ngfactory.js");
  92878. }
  92879. /**
  92880. * @fileoverview added by tsickle
  92881. * @suppress {checkTypes} checked by tsc
  92882. */
  92883. /**
  92884. * @license
  92885. * Copyright Google Inc. All Rights Reserved.
  92886. *
  92887. * Use of this source code is governed by an MIT-style license that can be
  92888. * found in the LICENSE file at https://angular.io/license
  92889. */
  92890. /**
  92891. * A path is an ordered set of elements. Typically a path is to a
  92892. * particular offset in a source file. The head of the list is the top
  92893. * most node. The tail is the node that contains the offset directly.
  92894. *
  92895. * For example, the expresion `a + b + c` might have an ast that looks
  92896. * like:
  92897. * +
  92898. * / \
  92899. * a +
  92900. * / \
  92901. * b c
  92902. *
  92903. * The path to the node at offset 9 would be `['+' at 1-10, '+' at 7-10,
  92904. * 'c' at 9-10]` and the path the node at offset 1 would be
  92905. * `['+' at 1-10, 'a' at 1-2]`.
  92906. * @template T
  92907. */
  92908. var AstPath = /** @class */ (function () {
  92909. function AstPath(path, position) {
  92910. if (position === void 0) { position = -1; }
  92911. this.path = path;
  92912. this.position = position;
  92913. }
  92914. Object.defineProperty(AstPath.prototype, "empty", {
  92915. get: /**
  92916. * @return {?}
  92917. */
  92918. function () { return !this.path || !this.path.length; },
  92919. enumerable: true,
  92920. configurable: true
  92921. });
  92922. Object.defineProperty(AstPath.prototype, "head", {
  92923. get: /**
  92924. * @return {?}
  92925. */
  92926. function () { return this.path[0]; },
  92927. enumerable: true,
  92928. configurable: true
  92929. });
  92930. Object.defineProperty(AstPath.prototype, "tail", {
  92931. get: /**
  92932. * @return {?}
  92933. */
  92934. function () { return this.path[this.path.length - 1]; },
  92935. enumerable: true,
  92936. configurable: true
  92937. });
  92938. /**
  92939. * @param {?} node
  92940. * @return {?}
  92941. */
  92942. AstPath.prototype.parentOf = /**
  92943. * @param {?} node
  92944. * @return {?}
  92945. */
  92946. function (node) {
  92947. return node && this.path[this.path.indexOf(node) - 1];
  92948. };
  92949. /**
  92950. * @param {?} node
  92951. * @return {?}
  92952. */
  92953. AstPath.prototype.childOf = /**
  92954. * @param {?} node
  92955. * @return {?}
  92956. */
  92957. function (node) { return this.path[this.path.indexOf(node) + 1]; };
  92958. /**
  92959. * @template N
  92960. * @param {?} ctor
  92961. * @return {?}
  92962. */
  92963. AstPath.prototype.first = /**
  92964. * @template N
  92965. * @param {?} ctor
  92966. * @return {?}
  92967. */
  92968. function (ctor) {
  92969. for (var /** @type {?} */ i = this.path.length - 1; i >= 0; i--) {
  92970. var /** @type {?} */ item = this.path[i];
  92971. if (item instanceof ctor)
  92972. return /** @type {?} */ (item);
  92973. }
  92974. };
  92975. /**
  92976. * @param {?} node
  92977. * @return {?}
  92978. */
  92979. AstPath.prototype.push = /**
  92980. * @param {?} node
  92981. * @return {?}
  92982. */
  92983. function (node) { this.path.push(node); };
  92984. /**
  92985. * @return {?}
  92986. */
  92987. AstPath.prototype.pop = /**
  92988. * @return {?}
  92989. */
  92990. function () { return /** @type {?} */ ((this.path.pop())); };
  92991. return AstPath;
  92992. }());
  92993. /**
  92994. * @fileoverview added by tsickle
  92995. * @suppress {checkTypes} checked by tsc
  92996. */
  92997. /**
  92998. * @license
  92999. * Copyright Google Inc. All Rights Reserved.
  93000. *
  93001. * Use of this source code is governed by an MIT-style license that can be
  93002. * found in the LICENSE file at https://angular.io/license
  93003. */
  93004. /**
  93005. * @record
  93006. */
  93007. var Text = /** @class */ (function () {
  93008. function Text(value, sourceSpan) {
  93009. this.value = value;
  93010. this.sourceSpan = sourceSpan;
  93011. }
  93012. /**
  93013. * @param {?} visitor
  93014. * @param {?} context
  93015. * @return {?}
  93016. */
  93017. Text.prototype.visit = /**
  93018. * @param {?} visitor
  93019. * @param {?} context
  93020. * @return {?}
  93021. */
  93022. function (visitor, context) { return visitor.visitText(this, context); };
  93023. return Text;
  93024. }());
  93025. var Expansion = /** @class */ (function () {
  93026. function Expansion(switchValue, type, cases, sourceSpan, switchValueSourceSpan) {
  93027. this.switchValue = switchValue;
  93028. this.type = type;
  93029. this.cases = cases;
  93030. this.sourceSpan = sourceSpan;
  93031. this.switchValueSourceSpan = switchValueSourceSpan;
  93032. }
  93033. /**
  93034. * @param {?} visitor
  93035. * @param {?} context
  93036. * @return {?}
  93037. */
  93038. Expansion.prototype.visit = /**
  93039. * @param {?} visitor
  93040. * @param {?} context
  93041. * @return {?}
  93042. */
  93043. function (visitor, context) { return visitor.visitExpansion(this, context); };
  93044. return Expansion;
  93045. }());
  93046. var ExpansionCase = /** @class */ (function () {
  93047. function ExpansionCase(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) {
  93048. this.value = value;
  93049. this.expression = expression;
  93050. this.sourceSpan = sourceSpan;
  93051. this.valueSourceSpan = valueSourceSpan;
  93052. this.expSourceSpan = expSourceSpan;
  93053. }
  93054. /**
  93055. * @param {?} visitor
  93056. * @param {?} context
  93057. * @return {?}
  93058. */
  93059. ExpansionCase.prototype.visit = /**
  93060. * @param {?} visitor
  93061. * @param {?} context
  93062. * @return {?}
  93063. */
  93064. function (visitor, context) { return visitor.visitExpansionCase(this, context); };
  93065. return ExpansionCase;
  93066. }());
  93067. var Attribute$1 = /** @class */ (function () {
  93068. function Attribute(name, value, sourceSpan, valueSpan) {
  93069. this.name = name;
  93070. this.value = value;
  93071. this.sourceSpan = sourceSpan;
  93072. this.valueSpan = valueSpan;
  93073. }
  93074. /**
  93075. * @param {?} visitor
  93076. * @param {?} context
  93077. * @return {?}
  93078. */
  93079. Attribute.prototype.visit = /**
  93080. * @param {?} visitor
  93081. * @param {?} context
  93082. * @return {?}
  93083. */
  93084. function (visitor, context) { return visitor.visitAttribute(this, context); };
  93085. return Attribute;
  93086. }());
  93087. var Element = /** @class */ (function () {
  93088. function Element(name, attrs, children, sourceSpan, startSourceSpan, endSourceSpan) {
  93089. if (startSourceSpan === void 0) { startSourceSpan = null; }
  93090. if (endSourceSpan === void 0) { endSourceSpan = null; }
  93091. this.name = name;
  93092. this.attrs = attrs;
  93093. this.children = children;
  93094. this.sourceSpan = sourceSpan;
  93095. this.startSourceSpan = startSourceSpan;
  93096. this.endSourceSpan = endSourceSpan;
  93097. }
  93098. /**
  93099. * @param {?} visitor
  93100. * @param {?} context
  93101. * @return {?}
  93102. */
  93103. Element.prototype.visit = /**
  93104. * @param {?} visitor
  93105. * @param {?} context
  93106. * @return {?}
  93107. */
  93108. function (visitor, context) { return visitor.visitElement(this, context); };
  93109. return Element;
  93110. }());
  93111. var Comment = /** @class */ (function () {
  93112. function Comment(value, sourceSpan) {
  93113. this.value = value;
  93114. this.sourceSpan = sourceSpan;
  93115. }
  93116. /**
  93117. * @param {?} visitor
  93118. * @param {?} context
  93119. * @return {?}
  93120. */
  93121. Comment.prototype.visit = /**
  93122. * @param {?} visitor
  93123. * @param {?} context
  93124. * @return {?}
  93125. */
  93126. function (visitor, context) { return visitor.visitComment(this, context); };
  93127. return Comment;
  93128. }());
  93129. /**
  93130. * @record
  93131. */
  93132. /**
  93133. * @param {?} visitor
  93134. * @param {?} nodes
  93135. * @param {?=} context
  93136. * @return {?}
  93137. */
  93138. function visitAll(visitor, nodes, context) {
  93139. if (context === void 0) { context = null; }
  93140. var /** @type {?} */ result = [];
  93141. var /** @type {?} */ visit = visitor.visit ?
  93142. function (ast) { return ((visitor.visit))(ast, context) || ast.visit(visitor, context); } :
  93143. function (ast) { return ast.visit(visitor, context); };
  93144. nodes.forEach(function (ast) {
  93145. var /** @type {?} */ astResult = visit(ast);
  93146. if (astResult) {
  93147. result.push(astResult);
  93148. }
  93149. });
  93150. return result;
  93151. }
  93152. var RecursiveVisitor = /** @class */ (function () {
  93153. function RecursiveVisitor() {
  93154. }
  93155. /**
  93156. * @param {?} ast
  93157. * @param {?} context
  93158. * @return {?}
  93159. */
  93160. RecursiveVisitor.prototype.visitElement = /**
  93161. * @param {?} ast
  93162. * @param {?} context
  93163. * @return {?}
  93164. */
  93165. function (ast, context) {
  93166. this.visitChildren(context, function (visit) {
  93167. visit(ast.attrs);
  93168. visit(ast.children);
  93169. });
  93170. };
  93171. /**
  93172. * @param {?} ast
  93173. * @param {?} context
  93174. * @return {?}
  93175. */
  93176. RecursiveVisitor.prototype.visitAttribute = /**
  93177. * @param {?} ast
  93178. * @param {?} context
  93179. * @return {?}
  93180. */
  93181. function (ast, context) { };
  93182. /**
  93183. * @param {?} ast
  93184. * @param {?} context
  93185. * @return {?}
  93186. */
  93187. RecursiveVisitor.prototype.visitText = /**
  93188. * @param {?} ast
  93189. * @param {?} context
  93190. * @return {?}
  93191. */
  93192. function (ast, context) { };
  93193. /**
  93194. * @param {?} ast
  93195. * @param {?} context
  93196. * @return {?}
  93197. */
  93198. RecursiveVisitor.prototype.visitComment = /**
  93199. * @param {?} ast
  93200. * @param {?} context
  93201. * @return {?}
  93202. */
  93203. function (ast, context) { };
  93204. /**
  93205. * @param {?} ast
  93206. * @param {?} context
  93207. * @return {?}
  93208. */
  93209. RecursiveVisitor.prototype.visitExpansion = /**
  93210. * @param {?} ast
  93211. * @param {?} context
  93212. * @return {?}
  93213. */
  93214. function (ast, context) {
  93215. return this.visitChildren(context, function (visit) { visit(ast.cases); });
  93216. };
  93217. /**
  93218. * @param {?} ast
  93219. * @param {?} context
  93220. * @return {?}
  93221. */
  93222. RecursiveVisitor.prototype.visitExpansionCase = /**
  93223. * @param {?} ast
  93224. * @param {?} context
  93225. * @return {?}
  93226. */
  93227. function (ast, context) { };
  93228. /**
  93229. * @template T
  93230. * @param {?} context
  93231. * @param {?} cb
  93232. * @return {?}
  93233. */
  93234. RecursiveVisitor.prototype.visitChildren = /**
  93235. * @template T
  93236. * @param {?} context
  93237. * @param {?} cb
  93238. * @return {?}
  93239. */
  93240. function (context, cb) {
  93241. var /** @type {?} */ results = [];
  93242. var /** @type {?} */ t = this;
  93243. /**
  93244. * @template T
  93245. * @param {?} children
  93246. * @return {?}
  93247. */
  93248. function visit(children) {
  93249. if (children)
  93250. results.push(visitAll(t, children, context));
  93251. }
  93252. cb(visit);
  93253. return [].concat.apply([], results);
  93254. };
  93255. return RecursiveVisitor;
  93256. }());
  93257. /**
  93258. * @param {?} ast
  93259. * @return {?}
  93260. */
  93261. function spanOf(ast) {
  93262. var /** @type {?} */ start = ast.sourceSpan.start.offset;
  93263. var /** @type {?} */ end = ast.sourceSpan.end.offset;
  93264. if (ast instanceof Element) {
  93265. if (ast.endSourceSpan) {
  93266. end = ast.endSourceSpan.end.offset;
  93267. }
  93268. else if (ast.children && ast.children.length) {
  93269. end = spanOf(ast.children[ast.children.length - 1]).end;
  93270. }
  93271. }
  93272. return { start: start, end: end };
  93273. }
  93274. /**
  93275. * @param {?} nodes
  93276. * @param {?} position
  93277. * @return {?}
  93278. */
  93279. function findNode(nodes, position) {
  93280. var /** @type {?} */ path = [];
  93281. var /** @type {?} */ visitor = new /** @class */ (function (_super) {
  93282. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(class_1, _super);
  93283. function class_1() {
  93284. return _super !== null && _super.apply(this, arguments) || this;
  93285. }
  93286. /**
  93287. * @param {?} ast
  93288. * @param {?} context
  93289. * @return {?}
  93290. */
  93291. class_1.prototype.visit = /**
  93292. * @param {?} ast
  93293. * @param {?} context
  93294. * @return {?}
  93295. */
  93296. function (ast, context) {
  93297. var /** @type {?} */ span = spanOf(ast);
  93298. if (span.start <= position && position < span.end) {
  93299. path.push(ast);
  93300. }
  93301. else {
  93302. // Returning a value here will result in the children being skipped.
  93303. return true;
  93304. }
  93305. };
  93306. return class_1;
  93307. }(RecursiveVisitor));
  93308. visitAll(visitor, nodes);
  93309. return new AstPath(path, position);
  93310. }
  93311. /**
  93312. * @fileoverview added by tsickle
  93313. * @suppress {checkTypes} checked by tsc
  93314. */
  93315. /**
  93316. * @license
  93317. * Copyright Google Inc. All Rights Reserved.
  93318. *
  93319. * Use of this source code is governed by an MIT-style license that can be
  93320. * found in the LICENSE file at https://angular.io/license
  93321. */
  93322. /**
  93323. * @param {?} identifier
  93324. * @param {?} value
  93325. * @return {?}
  93326. */
  93327. function assertArrayOfStrings(identifier, value) {
  93328. if (value == null) {
  93329. return;
  93330. }
  93331. if (!Array.isArray(value)) {
  93332. throw new Error("Expected '" + identifier + "' to be an array of strings.");
  93333. }
  93334. for (var /** @type {?} */ i = 0; i < value.length; i += 1) {
  93335. if (typeof value[i] !== 'string') {
  93336. throw new Error("Expected '" + identifier + "' to be an array of strings.");
  93337. }
  93338. }
  93339. }
  93340. var INTERPOLATION_BLACKLIST_REGEXPS = [
  93341. /^\s*$/,
  93342. /[<>]/,
  93343. /^[{}]$/,
  93344. /&(#|[a-z])/i,
  93345. /^\/\//,
  93346. ];
  93347. /**
  93348. * @param {?} identifier
  93349. * @param {?} value
  93350. * @return {?}
  93351. */
  93352. function assertInterpolationSymbols(identifier, value) {
  93353. if (value != null && !(Array.isArray(value) && value.length == 2)) {
  93354. throw new Error("Expected '" + identifier + "' to be an array, [start, end].");
  93355. }
  93356. else if (value != null) {
  93357. var /** @type {?} */ start_1 = /** @type {?} */ (value[0]);
  93358. var /** @type {?} */ end_1 = /** @type {?} */ (value[1]);
  93359. // black list checking
  93360. INTERPOLATION_BLACKLIST_REGEXPS.forEach(function (regexp) {
  93361. if (regexp.test(start_1) || regexp.test(end_1)) {
  93362. throw new Error("['" + start_1 + "', '" + end_1 + "'] contains unusable interpolation symbol.");
  93363. }
  93364. });
  93365. }
  93366. }
  93367. /**
  93368. * @fileoverview added by tsickle
  93369. * @suppress {checkTypes} checked by tsc
  93370. */
  93371. /**
  93372. * @license
  93373. * Copyright Google Inc. All Rights Reserved.
  93374. *
  93375. * Use of this source code is governed by an MIT-style license that can be
  93376. * found in the LICENSE file at https://angular.io/license
  93377. */
  93378. var InterpolationConfig = /** @class */ (function () {
  93379. function InterpolationConfig(start, end) {
  93380. this.start = start;
  93381. this.end = end;
  93382. }
  93383. /**
  93384. * @param {?} markers
  93385. * @return {?}
  93386. */
  93387. InterpolationConfig.fromArray = /**
  93388. * @param {?} markers
  93389. * @return {?}
  93390. */
  93391. function (markers) {
  93392. if (!markers) {
  93393. return DEFAULT_INTERPOLATION_CONFIG;
  93394. }
  93395. assertInterpolationSymbols('interpolation', markers);
  93396. return new InterpolationConfig(markers[0], markers[1]);
  93397. };
  93398. return InterpolationConfig;
  93399. }());
  93400. var DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');
  93401. /**
  93402. * @fileoverview added by tsickle
  93403. * @suppress {checkTypes} checked by tsc
  93404. */
  93405. /**
  93406. * @license
  93407. * Copyright Google Inc. All Rights Reserved.
  93408. *
  93409. * Use of this source code is governed by an MIT-style license that can be
  93410. * found in the LICENSE file at https://angular.io/license
  93411. */
  93412. var StyleWithImports = /** @class */ (function () {
  93413. function StyleWithImports(style, styleUrls) {
  93414. this.style = style;
  93415. this.styleUrls = styleUrls;
  93416. }
  93417. return StyleWithImports;
  93418. }());
  93419. /**
  93420. * @param {?} url
  93421. * @return {?}
  93422. */
  93423. function isStyleUrlResolvable(url) {
  93424. if (url == null || url.length === 0 || url[0] == '/')
  93425. return false;
  93426. var /** @type {?} */ schemeMatch = url.match(URL_WITH_SCHEMA_REGEXP);
  93427. return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';
  93428. }
  93429. /**
  93430. * Rewrites stylesheets by resolving and removing the \@import urls that
  93431. * are either relative or don't have a `package:` scheme
  93432. * @param {?} resolver
  93433. * @param {?} baseUrl
  93434. * @param {?} cssText
  93435. * @return {?}
  93436. */
  93437. function extractStyleUrls(resolver, baseUrl, cssText) {
  93438. var /** @type {?} */ foundUrls = [];
  93439. var /** @type {?} */ modifiedCssText = cssText.replace(CSS_STRIPPABLE_COMMENT_REGEXP, '')
  93440. .replace(CSS_IMPORT_REGEXP, function () {
  93441. var m = [];
  93442. for (var _i = 0; _i < arguments.length; _i++) {
  93443. m[_i] = arguments[_i];
  93444. }
  93445. var /** @type {?} */ url = m[1] || m[2];
  93446. if (!isStyleUrlResolvable(url)) {
  93447. // Do not attempt to resolve non-package absolute URLs with URI
  93448. // scheme
  93449. return m[0];
  93450. }
  93451. foundUrls.push(resolver.resolve(baseUrl, url));
  93452. return '';
  93453. });
  93454. return new StyleWithImports(modifiedCssText, foundUrls);
  93455. }
  93456. var CSS_IMPORT_REGEXP = /@import\s+(?:url\()?\s*(?:(?:['"]([^'"]*))|([^;\)\s]*))[^;]*;?/g;
  93457. var CSS_STRIPPABLE_COMMENT_REGEXP = /\/\*(?!#\s*(?:sourceURL|sourceMappingURL)=)[\s\S]+?\*\//g;
  93458. var URL_WITH_SCHEMA_REGEXP = /^([^:/?#]+):/;
  93459. /**
  93460. * @fileoverview added by tsickle
  93461. * @suppress {checkTypes} checked by tsc
  93462. */
  93463. /**
  93464. * @license
  93465. * Copyright Google Inc. All Rights Reserved.
  93466. *
  93467. * Use of this source code is governed by an MIT-style license that can be
  93468. * found in the LICENSE file at https://angular.io/license
  93469. */
  93470. /** @enum {number} */
  93471. var TagContentType = {
  93472. RAW_TEXT: 0,
  93473. ESCAPABLE_RAW_TEXT: 1,
  93474. PARSABLE_DATA: 2,
  93475. };
  93476. TagContentType[TagContentType.RAW_TEXT] = "RAW_TEXT";
  93477. TagContentType[TagContentType.ESCAPABLE_RAW_TEXT] = "ESCAPABLE_RAW_TEXT";
  93478. TagContentType[TagContentType.PARSABLE_DATA] = "PARSABLE_DATA";
  93479. /**
  93480. * @record
  93481. */
  93482. /**
  93483. * @param {?} elementName
  93484. * @return {?}
  93485. */
  93486. function splitNsName(elementName) {
  93487. if (elementName[0] != ':') {
  93488. return [null, elementName];
  93489. }
  93490. var /** @type {?} */ colonIndex = elementName.indexOf(':', 1);
  93491. if (colonIndex == -1) {
  93492. throw new Error("Unsupported format \"" + elementName + "\" expecting \":namespace:name\"");
  93493. }
  93494. return [elementName.slice(1, colonIndex), elementName.slice(colonIndex + 1)];
  93495. }
  93496. /**
  93497. * @param {?} tagName
  93498. * @return {?}
  93499. */
  93500. function isNgContainer(tagName) {
  93501. return splitNsName(tagName)[1] === 'ng-container';
  93502. }
  93503. /**
  93504. * @param {?} tagName
  93505. * @return {?}
  93506. */
  93507. function isNgContent(tagName) {
  93508. return splitNsName(tagName)[1] === 'ng-content';
  93509. }
  93510. /**
  93511. * @param {?} tagName
  93512. * @return {?}
  93513. */
  93514. function isNgTemplate(tagName) {
  93515. return splitNsName(tagName)[1] === 'ng-template';
  93516. }
  93517. /**
  93518. * @param {?} fullName
  93519. * @return {?}
  93520. */
  93521. function getNsPrefix(fullName) {
  93522. return fullName === null ? null : splitNsName(fullName)[0];
  93523. }
  93524. /**
  93525. * @param {?} prefix
  93526. * @param {?} localName
  93527. * @return {?}
  93528. */
  93529. function mergeNsAndName(prefix, localName) {
  93530. return prefix ? ":" + prefix + ":" + localName : localName;
  93531. }
  93532. // see http://www.w3.org/TR/html51/syntax.html#named-character-references
  93533. // see https://html.spec.whatwg.org/multipage/entities.json
  93534. // This list is not exhaustive to keep the compiler footprint low.
  93535. // The `&#123;` / `&#x1ab;` syntax should be used when the named character reference does not
  93536. // exist.
  93537. var NAMED_ENTITIES = {
  93538. 'Aacute': '\u00C1',
  93539. 'aacute': '\u00E1',
  93540. 'Acirc': '\u00C2',
  93541. 'acirc': '\u00E2',
  93542. 'acute': '\u00B4',
  93543. 'AElig': '\u00C6',
  93544. 'aelig': '\u00E6',
  93545. 'Agrave': '\u00C0',
  93546. 'agrave': '\u00E0',
  93547. 'alefsym': '\u2135',
  93548. 'Alpha': '\u0391',
  93549. 'alpha': '\u03B1',
  93550. 'amp': '&',
  93551. 'and': '\u2227',
  93552. 'ang': '\u2220',
  93553. 'apos': '\u0027',
  93554. 'Aring': '\u00C5',
  93555. 'aring': '\u00E5',
  93556. 'asymp': '\u2248',
  93557. 'Atilde': '\u00C3',
  93558. 'atilde': '\u00E3',
  93559. 'Auml': '\u00C4',
  93560. 'auml': '\u00E4',
  93561. 'bdquo': '\u201E',
  93562. 'Beta': '\u0392',
  93563. 'beta': '\u03B2',
  93564. 'brvbar': '\u00A6',
  93565. 'bull': '\u2022',
  93566. 'cap': '\u2229',
  93567. 'Ccedil': '\u00C7',
  93568. 'ccedil': '\u00E7',
  93569. 'cedil': '\u00B8',
  93570. 'cent': '\u00A2',
  93571. 'Chi': '\u03A7',
  93572. 'chi': '\u03C7',
  93573. 'circ': '\u02C6',
  93574. 'clubs': '\u2663',
  93575. 'cong': '\u2245',
  93576. 'copy': '\u00A9',
  93577. 'crarr': '\u21B5',
  93578. 'cup': '\u222A',
  93579. 'curren': '\u00A4',
  93580. 'dagger': '\u2020',
  93581. 'Dagger': '\u2021',
  93582. 'darr': '\u2193',
  93583. 'dArr': '\u21D3',
  93584. 'deg': '\u00B0',
  93585. 'Delta': '\u0394',
  93586. 'delta': '\u03B4',
  93587. 'diams': '\u2666',
  93588. 'divide': '\u00F7',
  93589. 'Eacute': '\u00C9',
  93590. 'eacute': '\u00E9',
  93591. 'Ecirc': '\u00CA',
  93592. 'ecirc': '\u00EA',
  93593. 'Egrave': '\u00C8',
  93594. 'egrave': '\u00E8',
  93595. 'empty': '\u2205',
  93596. 'emsp': '\u2003',
  93597. 'ensp': '\u2002',
  93598. 'Epsilon': '\u0395',
  93599. 'epsilon': '\u03B5',
  93600. 'equiv': '\u2261',
  93601. 'Eta': '\u0397',
  93602. 'eta': '\u03B7',
  93603. 'ETH': '\u00D0',
  93604. 'eth': '\u00F0',
  93605. 'Euml': '\u00CB',
  93606. 'euml': '\u00EB',
  93607. 'euro': '\u20AC',
  93608. 'exist': '\u2203',
  93609. 'fnof': '\u0192',
  93610. 'forall': '\u2200',
  93611. 'frac12': '\u00BD',
  93612. 'frac14': '\u00BC',
  93613. 'frac34': '\u00BE',
  93614. 'frasl': '\u2044',
  93615. 'Gamma': '\u0393',
  93616. 'gamma': '\u03B3',
  93617. 'ge': '\u2265',
  93618. 'gt': '>',
  93619. 'harr': '\u2194',
  93620. 'hArr': '\u21D4',
  93621. 'hearts': '\u2665',
  93622. 'hellip': '\u2026',
  93623. 'Iacute': '\u00CD',
  93624. 'iacute': '\u00ED',
  93625. 'Icirc': '\u00CE',
  93626. 'icirc': '\u00EE',
  93627. 'iexcl': '\u00A1',
  93628. 'Igrave': '\u00CC',
  93629. 'igrave': '\u00EC',
  93630. 'image': '\u2111',
  93631. 'infin': '\u221E',
  93632. 'int': '\u222B',
  93633. 'Iota': '\u0399',
  93634. 'iota': '\u03B9',
  93635. 'iquest': '\u00BF',
  93636. 'isin': '\u2208',
  93637. 'Iuml': '\u00CF',
  93638. 'iuml': '\u00EF',
  93639. 'Kappa': '\u039A',
  93640. 'kappa': '\u03BA',
  93641. 'Lambda': '\u039B',
  93642. 'lambda': '\u03BB',
  93643. 'lang': '\u27E8',
  93644. 'laquo': '\u00AB',
  93645. 'larr': '\u2190',
  93646. 'lArr': '\u21D0',
  93647. 'lceil': '\u2308',
  93648. 'ldquo': '\u201C',
  93649. 'le': '\u2264',
  93650. 'lfloor': '\u230A',
  93651. 'lowast': '\u2217',
  93652. 'loz': '\u25CA',
  93653. 'lrm': '\u200E',
  93654. 'lsaquo': '\u2039',
  93655. 'lsquo': '\u2018',
  93656. 'lt': '<',
  93657. 'macr': '\u00AF',
  93658. 'mdash': '\u2014',
  93659. 'micro': '\u00B5',
  93660. 'middot': '\u00B7',
  93661. 'minus': '\u2212',
  93662. 'Mu': '\u039C',
  93663. 'mu': '\u03BC',
  93664. 'nabla': '\u2207',
  93665. 'nbsp': '\u00A0',
  93666. 'ndash': '\u2013',
  93667. 'ne': '\u2260',
  93668. 'ni': '\u220B',
  93669. 'not': '\u00AC',
  93670. 'notin': '\u2209',
  93671. 'nsub': '\u2284',
  93672. 'Ntilde': '\u00D1',
  93673. 'ntilde': '\u00F1',
  93674. 'Nu': '\u039D',
  93675. 'nu': '\u03BD',
  93676. 'Oacute': '\u00D3',
  93677. 'oacute': '\u00F3',
  93678. 'Ocirc': '\u00D4',
  93679. 'ocirc': '\u00F4',
  93680. 'OElig': '\u0152',
  93681. 'oelig': '\u0153',
  93682. 'Ograve': '\u00D2',
  93683. 'ograve': '\u00F2',
  93684. 'oline': '\u203E',
  93685. 'Omega': '\u03A9',
  93686. 'omega': '\u03C9',
  93687. 'Omicron': '\u039F',
  93688. 'omicron': '\u03BF',
  93689. 'oplus': '\u2295',
  93690. 'or': '\u2228',
  93691. 'ordf': '\u00AA',
  93692. 'ordm': '\u00BA',
  93693. 'Oslash': '\u00D8',
  93694. 'oslash': '\u00F8',
  93695. 'Otilde': '\u00D5',
  93696. 'otilde': '\u00F5',
  93697. 'otimes': '\u2297',
  93698. 'Ouml': '\u00D6',
  93699. 'ouml': '\u00F6',
  93700. 'para': '\u00B6',
  93701. 'permil': '\u2030',
  93702. 'perp': '\u22A5',
  93703. 'Phi': '\u03A6',
  93704. 'phi': '\u03C6',
  93705. 'Pi': '\u03A0',
  93706. 'pi': '\u03C0',
  93707. 'piv': '\u03D6',
  93708. 'plusmn': '\u00B1',
  93709. 'pound': '\u00A3',
  93710. 'prime': '\u2032',
  93711. 'Prime': '\u2033',
  93712. 'prod': '\u220F',
  93713. 'prop': '\u221D',
  93714. 'Psi': '\u03A8',
  93715. 'psi': '\u03C8',
  93716. 'quot': '\u0022',
  93717. 'radic': '\u221A',
  93718. 'rang': '\u27E9',
  93719. 'raquo': '\u00BB',
  93720. 'rarr': '\u2192',
  93721. 'rArr': '\u21D2',
  93722. 'rceil': '\u2309',
  93723. 'rdquo': '\u201D',
  93724. 'real': '\u211C',
  93725. 'reg': '\u00AE',
  93726. 'rfloor': '\u230B',
  93727. 'Rho': '\u03A1',
  93728. 'rho': '\u03C1',
  93729. 'rlm': '\u200F',
  93730. 'rsaquo': '\u203A',
  93731. 'rsquo': '\u2019',
  93732. 'sbquo': '\u201A',
  93733. 'Scaron': '\u0160',
  93734. 'scaron': '\u0161',
  93735. 'sdot': '\u22C5',
  93736. 'sect': '\u00A7',
  93737. 'shy': '\u00AD',
  93738. 'Sigma': '\u03A3',
  93739. 'sigma': '\u03C3',
  93740. 'sigmaf': '\u03C2',
  93741. 'sim': '\u223C',
  93742. 'spades': '\u2660',
  93743. 'sub': '\u2282',
  93744. 'sube': '\u2286',
  93745. 'sum': '\u2211',
  93746. 'sup': '\u2283',
  93747. 'sup1': '\u00B9',
  93748. 'sup2': '\u00B2',
  93749. 'sup3': '\u00B3',
  93750. 'supe': '\u2287',
  93751. 'szlig': '\u00DF',
  93752. 'Tau': '\u03A4',
  93753. 'tau': '\u03C4',
  93754. 'there4': '\u2234',
  93755. 'Theta': '\u0398',
  93756. 'theta': '\u03B8',
  93757. 'thetasym': '\u03D1',
  93758. 'thinsp': '\u2009',
  93759. 'THORN': '\u00DE',
  93760. 'thorn': '\u00FE',
  93761. 'tilde': '\u02DC',
  93762. 'times': '\u00D7',
  93763. 'trade': '\u2122',
  93764. 'Uacute': '\u00DA',
  93765. 'uacute': '\u00FA',
  93766. 'uarr': '\u2191',
  93767. 'uArr': '\u21D1',
  93768. 'Ucirc': '\u00DB',
  93769. 'ucirc': '\u00FB',
  93770. 'Ugrave': '\u00D9',
  93771. 'ugrave': '\u00F9',
  93772. 'uml': '\u00A8',
  93773. 'upsih': '\u03D2',
  93774. 'Upsilon': '\u03A5',
  93775. 'upsilon': '\u03C5',
  93776. 'Uuml': '\u00DC',
  93777. 'uuml': '\u00FC',
  93778. 'weierp': '\u2118',
  93779. 'Xi': '\u039E',
  93780. 'xi': '\u03BE',
  93781. 'Yacute': '\u00DD',
  93782. 'yacute': '\u00FD',
  93783. 'yen': '\u00A5',
  93784. 'yuml': '\u00FF',
  93785. 'Yuml': '\u0178',
  93786. 'Zeta': '\u0396',
  93787. 'zeta': '\u03B6',
  93788. 'zwj': '\u200D',
  93789. 'zwnj': '\u200C',
  93790. };
  93791. // The &ngsp; pseudo-entity is denoting a space. see:
  93792. // https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart
  93793. var NGSP_UNICODE = '\uE500';
  93794. NAMED_ENTITIES['ngsp'] = NGSP_UNICODE;
  93795. /**
  93796. * @fileoverview added by tsickle
  93797. * @suppress {checkTypes} checked by tsc
  93798. */
  93799. /**
  93800. * @license
  93801. * Copyright Google Inc. All Rights Reserved.
  93802. *
  93803. * Use of this source code is governed by an MIT-style license that can be
  93804. * found in the LICENSE file at https://angular.io/license
  93805. */
  93806. var NG_CONTENT_SELECT_ATTR = 'select';
  93807. var LINK_ELEMENT = 'link';
  93808. var LINK_STYLE_REL_ATTR = 'rel';
  93809. var LINK_STYLE_HREF_ATTR = 'href';
  93810. var LINK_STYLE_REL_VALUE = 'stylesheet';
  93811. var STYLE_ELEMENT = 'style';
  93812. var SCRIPT_ELEMENT = 'script';
  93813. var NG_NON_BINDABLE_ATTR = 'ngNonBindable';
  93814. var NG_PROJECT_AS = 'ngProjectAs';
  93815. /**
  93816. * @param {?} ast
  93817. * @return {?}
  93818. */
  93819. function preparseElement(ast) {
  93820. var /** @type {?} */ selectAttr = /** @type {?} */ ((null));
  93821. var /** @type {?} */ hrefAttr = /** @type {?} */ ((null));
  93822. var /** @type {?} */ relAttr = /** @type {?} */ ((null));
  93823. var /** @type {?} */ nonBindable = false;
  93824. var /** @type {?} */ projectAs = /** @type {?} */ ((null));
  93825. ast.attrs.forEach(function (attr) {
  93826. var /** @type {?} */ lcAttrName = attr.name.toLowerCase();
  93827. if (lcAttrName == NG_CONTENT_SELECT_ATTR) {
  93828. selectAttr = attr.value;
  93829. }
  93830. else if (lcAttrName == LINK_STYLE_HREF_ATTR) {
  93831. hrefAttr = attr.value;
  93832. }
  93833. else if (lcAttrName == LINK_STYLE_REL_ATTR) {
  93834. relAttr = attr.value;
  93835. }
  93836. else if (attr.name == NG_NON_BINDABLE_ATTR) {
  93837. nonBindable = true;
  93838. }
  93839. else if (attr.name == NG_PROJECT_AS) {
  93840. if (attr.value.length > 0) {
  93841. projectAs = attr.value;
  93842. }
  93843. }
  93844. });
  93845. selectAttr = normalizeNgContentSelect(selectAttr);
  93846. var /** @type {?} */ nodeName = ast.name.toLowerCase();
  93847. var /** @type {?} */ type = PreparsedElementType.OTHER;
  93848. if (isNgContent(nodeName)) {
  93849. type = PreparsedElementType.NG_CONTENT;
  93850. }
  93851. else if (nodeName == STYLE_ELEMENT) {
  93852. type = PreparsedElementType.STYLE;
  93853. }
  93854. else if (nodeName == SCRIPT_ELEMENT) {
  93855. type = PreparsedElementType.SCRIPT;
  93856. }
  93857. else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {
  93858. type = PreparsedElementType.STYLESHEET;
  93859. }
  93860. return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs);
  93861. }
  93862. /** @enum {number} */
  93863. var PreparsedElementType = {
  93864. NG_CONTENT: 0,
  93865. STYLE: 1,
  93866. STYLESHEET: 2,
  93867. SCRIPT: 3,
  93868. OTHER: 4,
  93869. };
  93870. PreparsedElementType[PreparsedElementType.NG_CONTENT] = "NG_CONTENT";
  93871. PreparsedElementType[PreparsedElementType.STYLE] = "STYLE";
  93872. PreparsedElementType[PreparsedElementType.STYLESHEET] = "STYLESHEET";
  93873. PreparsedElementType[PreparsedElementType.SCRIPT] = "SCRIPT";
  93874. PreparsedElementType[PreparsedElementType.OTHER] = "OTHER";
  93875. var PreparsedElement = /** @class */ (function () {
  93876. function PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs) {
  93877. this.type = type;
  93878. this.selectAttr = selectAttr;
  93879. this.hrefAttr = hrefAttr;
  93880. this.nonBindable = nonBindable;
  93881. this.projectAs = projectAs;
  93882. }
  93883. return PreparsedElement;
  93884. }());
  93885. /**
  93886. * @param {?} selectAttr
  93887. * @return {?}
  93888. */
  93889. function normalizeNgContentSelect(selectAttr) {
  93890. if (selectAttr === null || selectAttr.length === 0) {
  93891. return '*';
  93892. }
  93893. return selectAttr;
  93894. }
  93895. /**
  93896. * @fileoverview added by tsickle
  93897. * @suppress {checkTypes} checked by tsc
  93898. */
  93899. /**
  93900. * @license
  93901. * Copyright Google Inc. All Rights Reserved.
  93902. *
  93903. * Use of this source code is governed by an MIT-style license that can be
  93904. * found in the LICENSE file at https://angular.io/license
  93905. */
  93906. /**
  93907. * @record
  93908. */
  93909. var DirectiveNormalizer = /** @class */ (function () {
  93910. function DirectiveNormalizer(_resourceLoader, _urlResolver, _htmlParser, _config) {
  93911. this._resourceLoader = _resourceLoader;
  93912. this._urlResolver = _urlResolver;
  93913. this._htmlParser = _htmlParser;
  93914. this._config = _config;
  93915. this._resourceLoaderCache = new Map();
  93916. }
  93917. /**
  93918. * @return {?}
  93919. */
  93920. DirectiveNormalizer.prototype.clearCache = /**
  93921. * @return {?}
  93922. */
  93923. function () { this._resourceLoaderCache.clear(); };
  93924. /**
  93925. * @param {?} normalizedDirective
  93926. * @return {?}
  93927. */
  93928. DirectiveNormalizer.prototype.clearCacheFor = /**
  93929. * @param {?} normalizedDirective
  93930. * @return {?}
  93931. */
  93932. function (normalizedDirective) {
  93933. var _this = this;
  93934. if (!normalizedDirective.isComponent) {
  93935. return;
  93936. }
  93937. var /** @type {?} */ template = /** @type {?} */ ((normalizedDirective.template));
  93938. this._resourceLoaderCache.delete(/** @type {?} */ ((template.templateUrl)));
  93939. template.externalStylesheets.forEach(function (stylesheet) { _this._resourceLoaderCache.delete(/** @type {?} */ ((stylesheet.moduleUrl))); });
  93940. };
  93941. /**
  93942. * @param {?} url
  93943. * @return {?}
  93944. */
  93945. DirectiveNormalizer.prototype._fetch = /**
  93946. * @param {?} url
  93947. * @return {?}
  93948. */
  93949. function (url) {
  93950. var /** @type {?} */ result = this._resourceLoaderCache.get(url);
  93951. if (!result) {
  93952. result = this._resourceLoader.get(url);
  93953. this._resourceLoaderCache.set(url, result);
  93954. }
  93955. return result;
  93956. };
  93957. /**
  93958. * @param {?} prenormData
  93959. * @return {?}
  93960. */
  93961. DirectiveNormalizer.prototype.normalizeTemplate = /**
  93962. * @param {?} prenormData
  93963. * @return {?}
  93964. */
  93965. function (prenormData) {
  93966. var _this = this;
  93967. if (isDefined(prenormData.template)) {
  93968. if (isDefined(prenormData.templateUrl)) {
  93969. throw syntaxError("'" + stringify(prenormData.componentType) + "' component cannot define both template and templateUrl");
  93970. }
  93971. if (typeof prenormData.template !== 'string') {
  93972. throw syntaxError("The template specified for component " + stringify(prenormData.componentType) + " is not a string");
  93973. }
  93974. }
  93975. else if (isDefined(prenormData.templateUrl)) {
  93976. if (typeof prenormData.templateUrl !== 'string') {
  93977. throw syntaxError("The templateUrl specified for component " + stringify(prenormData.componentType) + " is not a string");
  93978. }
  93979. }
  93980. else {
  93981. throw syntaxError("No template specified for component " + stringify(prenormData.componentType));
  93982. }
  93983. if (isDefined(prenormData.preserveWhitespaces) &&
  93984. typeof prenormData.preserveWhitespaces !== 'boolean') {
  93985. throw syntaxError("The preserveWhitespaces option for component " + stringify(prenormData.componentType) + " must be a boolean");
  93986. }
  93987. return SyncAsync.then(this._preParseTemplate(prenormData), function (preparsedTemplate) { return _this._normalizeTemplateMetadata(prenormData, preparsedTemplate); });
  93988. };
  93989. /**
  93990. * @param {?} prenomData
  93991. * @return {?}
  93992. */
  93993. DirectiveNormalizer.prototype._preParseTemplate = /**
  93994. * @param {?} prenomData
  93995. * @return {?}
  93996. */
  93997. function (prenomData) {
  93998. var _this = this;
  93999. var /** @type {?} */ template;
  94000. var /** @type {?} */ templateUrl;
  94001. if (prenomData.template != null) {
  94002. template = prenomData.template;
  94003. templateUrl = prenomData.moduleUrl;
  94004. }
  94005. else {
  94006. templateUrl = this._urlResolver.resolve(prenomData.moduleUrl, /** @type {?} */ ((prenomData.templateUrl)));
  94007. template = this._fetch(templateUrl);
  94008. }
  94009. return SyncAsync.then(template, function (template) { return _this._preparseLoadedTemplate(prenomData, template, templateUrl); });
  94010. };
  94011. /**
  94012. * @param {?} prenormData
  94013. * @param {?} template
  94014. * @param {?} templateAbsUrl
  94015. * @return {?}
  94016. */
  94017. DirectiveNormalizer.prototype._preparseLoadedTemplate = /**
  94018. * @param {?} prenormData
  94019. * @param {?} template
  94020. * @param {?} templateAbsUrl
  94021. * @return {?}
  94022. */
  94023. function (prenormData, template, templateAbsUrl) {
  94024. var /** @type {?} */ isInline = !!prenormData.template;
  94025. var /** @type {?} */ interpolationConfig = InterpolationConfig.fromArray(/** @type {?} */ ((prenormData.interpolation)));
  94026. var /** @type {?} */ rootNodesAndErrors = this._htmlParser.parse(template, templateSourceUrl({ reference: prenormData.ngModuleType }, { type: { reference: prenormData.componentType } }, { isInline: isInline, templateUrl: templateAbsUrl }), true, interpolationConfig);
  94027. if (rootNodesAndErrors.errors.length > 0) {
  94028. var /** @type {?} */ errorString = rootNodesAndErrors.errors.join('\n');
  94029. throw syntaxError("Template parse errors:\n" + errorString);
  94030. }
  94031. var /** @type {?} */ templateMetadataStyles = this._normalizeStylesheet(new CompileStylesheetMetadata({ styles: prenormData.styles, moduleUrl: prenormData.moduleUrl }));
  94032. var /** @type {?} */ visitor = new TemplatePreparseVisitor();
  94033. visitAll(visitor, rootNodesAndErrors.rootNodes);
  94034. var /** @type {?} */ templateStyles = this._normalizeStylesheet(new CompileStylesheetMetadata({ styles: visitor.styles, styleUrls: visitor.styleUrls, moduleUrl: templateAbsUrl }));
  94035. var /** @type {?} */ styles = templateMetadataStyles.styles.concat(templateStyles.styles);
  94036. var /** @type {?} */ inlineStyleUrls = templateMetadataStyles.styleUrls.concat(templateStyles.styleUrls);
  94037. var /** @type {?} */ styleUrls = this
  94038. ._normalizeStylesheet(new CompileStylesheetMetadata({ styleUrls: prenormData.styleUrls, moduleUrl: prenormData.moduleUrl }))
  94039. .styleUrls;
  94040. return {
  94041. template: template,
  94042. templateUrl: templateAbsUrl, isInline: isInline,
  94043. htmlAst: rootNodesAndErrors, styles: styles, inlineStyleUrls: inlineStyleUrls, styleUrls: styleUrls,
  94044. ngContentSelectors: visitor.ngContentSelectors,
  94045. };
  94046. };
  94047. /**
  94048. * @param {?} prenormData
  94049. * @param {?} preparsedTemplate
  94050. * @return {?}
  94051. */
  94052. DirectiveNormalizer.prototype._normalizeTemplateMetadata = /**
  94053. * @param {?} prenormData
  94054. * @param {?} preparsedTemplate
  94055. * @return {?}
  94056. */
  94057. function (prenormData, preparsedTemplate) {
  94058. var _this = this;
  94059. return SyncAsync.then(this._loadMissingExternalStylesheets(preparsedTemplate.styleUrls.concat(preparsedTemplate.inlineStyleUrls)), function (externalStylesheets) {
  94060. return _this._normalizeLoadedTemplateMetadata(prenormData, preparsedTemplate, externalStylesheets);
  94061. });
  94062. };
  94063. /**
  94064. * @param {?} prenormData
  94065. * @param {?} preparsedTemplate
  94066. * @param {?} stylesheets
  94067. * @return {?}
  94068. */
  94069. DirectiveNormalizer.prototype._normalizeLoadedTemplateMetadata = /**
  94070. * @param {?} prenormData
  94071. * @param {?} preparsedTemplate
  94072. * @param {?} stylesheets
  94073. * @return {?}
  94074. */
  94075. function (prenormData, preparsedTemplate, stylesheets) {
  94076. var _this = this;
  94077. // Algorithm:
  94078. // - produce exactly 1 entry per original styleUrl in
  94079. // CompileTemplateMetadata.externalStylesheets whith all styles inlined
  94080. // - inline all styles that are referenced by the template into CompileTemplateMetadata.styles.
  94081. // Reason: be able to determine how many stylesheets there are even without loading
  94082. // the template nor the stylesheets, so we can create a stub for TypeScript always synchronously
  94083. // (as resouce loading may be async)
  94084. var /** @type {?} */ styles = preparsedTemplate.styles.slice();
  94085. this._inlineStyles(preparsedTemplate.inlineStyleUrls, stylesheets, styles);
  94086. var /** @type {?} */ styleUrls = preparsedTemplate.styleUrls;
  94087. var /** @type {?} */ externalStylesheets = styleUrls.map(function (styleUrl) {
  94088. var /** @type {?} */ stylesheet = /** @type {?} */ ((stylesheets.get(styleUrl)));
  94089. var /** @type {?} */ styles = stylesheet.styles.slice();
  94090. _this._inlineStyles(stylesheet.styleUrls, stylesheets, styles);
  94091. return new CompileStylesheetMetadata({ moduleUrl: styleUrl, styles: styles });
  94092. });
  94093. var /** @type {?} */ encapsulation = prenormData.encapsulation;
  94094. if (encapsulation == null) {
  94095. encapsulation = this._config.defaultEncapsulation;
  94096. }
  94097. if (encapsulation === ViewEncapsulation.Emulated && styles.length === 0 &&
  94098. styleUrls.length === 0) {
  94099. encapsulation = ViewEncapsulation.None;
  94100. }
  94101. return new CompileTemplateMetadata({
  94102. encapsulation: encapsulation,
  94103. template: preparsedTemplate.template,
  94104. templateUrl: preparsedTemplate.templateUrl,
  94105. htmlAst: preparsedTemplate.htmlAst, styles: styles, styleUrls: styleUrls,
  94106. ngContentSelectors: preparsedTemplate.ngContentSelectors,
  94107. animations: prenormData.animations,
  94108. interpolation: prenormData.interpolation,
  94109. isInline: preparsedTemplate.isInline, externalStylesheets: externalStylesheets,
  94110. preserveWhitespaces: preserveWhitespacesDefault(prenormData.preserveWhitespaces, this._config.preserveWhitespaces),
  94111. });
  94112. };
  94113. /**
  94114. * @param {?} styleUrls
  94115. * @param {?} stylesheets
  94116. * @param {?} targetStyles
  94117. * @return {?}
  94118. */
  94119. DirectiveNormalizer.prototype._inlineStyles = /**
  94120. * @param {?} styleUrls
  94121. * @param {?} stylesheets
  94122. * @param {?} targetStyles
  94123. * @return {?}
  94124. */
  94125. function (styleUrls, stylesheets, targetStyles) {
  94126. var _this = this;
  94127. styleUrls.forEach(function (styleUrl) {
  94128. var /** @type {?} */ stylesheet = /** @type {?} */ ((stylesheets.get(styleUrl)));
  94129. stylesheet.styles.forEach(function (style) { return targetStyles.push(style); });
  94130. _this._inlineStyles(stylesheet.styleUrls, stylesheets, targetStyles);
  94131. });
  94132. };
  94133. /**
  94134. * @param {?} styleUrls
  94135. * @param {?=} loadedStylesheets
  94136. * @return {?}
  94137. */
  94138. DirectiveNormalizer.prototype._loadMissingExternalStylesheets = /**
  94139. * @param {?} styleUrls
  94140. * @param {?=} loadedStylesheets
  94141. * @return {?}
  94142. */
  94143. function (styleUrls, loadedStylesheets) {
  94144. var _this = this;
  94145. if (loadedStylesheets === void 0) { loadedStylesheets = new Map(); }
  94146. return SyncAsync.then(SyncAsync.all(styleUrls.filter(function (styleUrl) { return !loadedStylesheets.has(styleUrl); })
  94147. .map(function (styleUrl) {
  94148. return SyncAsync.then(_this._fetch(styleUrl), function (loadedStyle) {
  94149. var /** @type {?} */ stylesheet = _this._normalizeStylesheet(new CompileStylesheetMetadata({ styles: [loadedStyle], moduleUrl: styleUrl }));
  94150. loadedStylesheets.set(styleUrl, stylesheet);
  94151. return _this._loadMissingExternalStylesheets(stylesheet.styleUrls, loadedStylesheets);
  94152. });
  94153. })), function (_) { return loadedStylesheets; });
  94154. };
  94155. /**
  94156. * @param {?} stylesheet
  94157. * @return {?}
  94158. */
  94159. DirectiveNormalizer.prototype._normalizeStylesheet = /**
  94160. * @param {?} stylesheet
  94161. * @return {?}
  94162. */
  94163. function (stylesheet) {
  94164. var _this = this;
  94165. var /** @type {?} */ moduleUrl = /** @type {?} */ ((stylesheet.moduleUrl));
  94166. var /** @type {?} */ allStyleUrls = stylesheet.styleUrls.filter(isStyleUrlResolvable)
  94167. .map(function (url) { return _this._urlResolver.resolve(moduleUrl, url); });
  94168. var /** @type {?} */ allStyles = stylesheet.styles.map(function (style) {
  94169. var /** @type {?} */ styleWithImports = extractStyleUrls(_this._urlResolver, moduleUrl, style);
  94170. allStyleUrls.push.apply(allStyleUrls, styleWithImports.styleUrls);
  94171. return styleWithImports.style;
  94172. });
  94173. return new CompileStylesheetMetadata({ styles: allStyles, styleUrls: allStyleUrls, moduleUrl: moduleUrl });
  94174. };
  94175. return DirectiveNormalizer;
  94176. }());
  94177. var TemplatePreparseVisitor = /** @class */ (function () {
  94178. function TemplatePreparseVisitor() {
  94179. this.ngContentSelectors = [];
  94180. this.styles = [];
  94181. this.styleUrls = [];
  94182. this.ngNonBindableStackCount = 0;
  94183. }
  94184. /**
  94185. * @param {?} ast
  94186. * @param {?} context
  94187. * @return {?}
  94188. */
  94189. TemplatePreparseVisitor.prototype.visitElement = /**
  94190. * @param {?} ast
  94191. * @param {?} context
  94192. * @return {?}
  94193. */
  94194. function (ast, context) {
  94195. var /** @type {?} */ preparsedElement = preparseElement(ast);
  94196. switch (preparsedElement.type) {
  94197. case PreparsedElementType.NG_CONTENT:
  94198. if (this.ngNonBindableStackCount === 0) {
  94199. this.ngContentSelectors.push(preparsedElement.selectAttr);
  94200. }
  94201. break;
  94202. case PreparsedElementType.STYLE:
  94203. var /** @type {?} */ textContent_1 = '';
  94204. ast.children.forEach(function (child) {
  94205. if (child instanceof Text) {
  94206. textContent_1 += child.value;
  94207. }
  94208. });
  94209. this.styles.push(textContent_1);
  94210. break;
  94211. case PreparsedElementType.STYLESHEET:
  94212. this.styleUrls.push(preparsedElement.hrefAttr);
  94213. break;
  94214. default:
  94215. break;
  94216. }
  94217. if (preparsedElement.nonBindable) {
  94218. this.ngNonBindableStackCount++;
  94219. }
  94220. visitAll(this, ast.children);
  94221. if (preparsedElement.nonBindable) {
  94222. this.ngNonBindableStackCount--;
  94223. }
  94224. return null;
  94225. };
  94226. /**
  94227. * @param {?} ast
  94228. * @param {?} context
  94229. * @return {?}
  94230. */
  94231. TemplatePreparseVisitor.prototype.visitExpansion = /**
  94232. * @param {?} ast
  94233. * @param {?} context
  94234. * @return {?}
  94235. */
  94236. function (ast, context) { visitAll(this, ast.cases); };
  94237. /**
  94238. * @param {?} ast
  94239. * @param {?} context
  94240. * @return {?}
  94241. */
  94242. TemplatePreparseVisitor.prototype.visitExpansionCase = /**
  94243. * @param {?} ast
  94244. * @param {?} context
  94245. * @return {?}
  94246. */
  94247. function (ast, context) {
  94248. visitAll(this, ast.expression);
  94249. };
  94250. /**
  94251. * @param {?} ast
  94252. * @param {?} context
  94253. * @return {?}
  94254. */
  94255. TemplatePreparseVisitor.prototype.visitComment = /**
  94256. * @param {?} ast
  94257. * @param {?} context
  94258. * @return {?}
  94259. */
  94260. function (ast, context) { return null; };
  94261. /**
  94262. * @param {?} ast
  94263. * @param {?} context
  94264. * @return {?}
  94265. */
  94266. TemplatePreparseVisitor.prototype.visitAttribute = /**
  94267. * @param {?} ast
  94268. * @param {?} context
  94269. * @return {?}
  94270. */
  94271. function (ast, context) { return null; };
  94272. /**
  94273. * @param {?} ast
  94274. * @param {?} context
  94275. * @return {?}
  94276. */
  94277. TemplatePreparseVisitor.prototype.visitText = /**
  94278. * @param {?} ast
  94279. * @param {?} context
  94280. * @return {?}
  94281. */
  94282. function (ast, context) { return null; };
  94283. return TemplatePreparseVisitor;
  94284. }());
  94285. /**
  94286. * @fileoverview added by tsickle
  94287. * @suppress {checkTypes} checked by tsc
  94288. */
  94289. /**
  94290. * @license
  94291. * Copyright Google Inc. All Rights Reserved.
  94292. *
  94293. * Use of this source code is governed by an MIT-style license that can be
  94294. * found in the LICENSE file at https://angular.io/license
  94295. */
  94296. var QUERY_METADATA_IDENTIFIERS = [
  94297. createViewChild,
  94298. createViewChildren,
  94299. createContentChild,
  94300. createContentChildren,
  94301. ];
  94302. var DirectiveResolver = /** @class */ (function () {
  94303. function DirectiveResolver(_reflector) {
  94304. this._reflector = _reflector;
  94305. }
  94306. /**
  94307. * @param {?} type
  94308. * @return {?}
  94309. */
  94310. DirectiveResolver.prototype.isDirective = /**
  94311. * @param {?} type
  94312. * @return {?}
  94313. */
  94314. function (type) {
  94315. var /** @type {?} */ typeMetadata = this._reflector.annotations(resolveForwardRef(type));
  94316. return typeMetadata && typeMetadata.some(isDirectiveMetadata);
  94317. };
  94318. /**
  94319. * @param {?} type
  94320. * @param {?=} throwIfNotFound
  94321. * @return {?}
  94322. */
  94323. DirectiveResolver.prototype.resolve = /**
  94324. * @param {?} type
  94325. * @param {?=} throwIfNotFound
  94326. * @return {?}
  94327. */
  94328. function (type, throwIfNotFound) {
  94329. if (throwIfNotFound === void 0) { throwIfNotFound = true; }
  94330. var /** @type {?} */ typeMetadata = this._reflector.annotations(resolveForwardRef(type));
  94331. if (typeMetadata) {
  94332. var /** @type {?} */ metadata = findLast(typeMetadata, isDirectiveMetadata);
  94333. if (metadata) {
  94334. var /** @type {?} */ propertyMetadata = this._reflector.propMetadata(type);
  94335. var /** @type {?} */ guards = this._reflector.guards(type);
  94336. return this._mergeWithPropertyMetadata(metadata, propertyMetadata, guards, type);
  94337. }
  94338. }
  94339. if (throwIfNotFound) {
  94340. throw new Error("No Directive annotation found on " + stringify(type));
  94341. }
  94342. return null;
  94343. };
  94344. /**
  94345. * @param {?} dm
  94346. * @param {?} propertyMetadata
  94347. * @param {?} guards
  94348. * @param {?} directiveType
  94349. * @return {?}
  94350. */
  94351. DirectiveResolver.prototype._mergeWithPropertyMetadata = /**
  94352. * @param {?} dm
  94353. * @param {?} propertyMetadata
  94354. * @param {?} guards
  94355. * @param {?} directiveType
  94356. * @return {?}
  94357. */
  94358. function (dm, propertyMetadata, guards, directiveType) {
  94359. var /** @type {?} */ inputs = [];
  94360. var /** @type {?} */ outputs = [];
  94361. var /** @type {?} */ host = {};
  94362. var /** @type {?} */ queries = {};
  94363. Object.keys(propertyMetadata).forEach(function (propName) {
  94364. var /** @type {?} */ input = findLast(propertyMetadata[propName], function (a) { return createInput.isTypeOf(a); });
  94365. if (input) {
  94366. if (input.bindingPropertyName) {
  94367. inputs.push(propName + ": " + input.bindingPropertyName);
  94368. }
  94369. else {
  94370. inputs.push(propName);
  94371. }
  94372. }
  94373. var /** @type {?} */ output = findLast(propertyMetadata[propName], function (a) { return createOutput.isTypeOf(a); });
  94374. if (output) {
  94375. if (output.bindingPropertyName) {
  94376. outputs.push(propName + ": " + output.bindingPropertyName);
  94377. }
  94378. else {
  94379. outputs.push(propName);
  94380. }
  94381. }
  94382. var /** @type {?} */ hostBindings = propertyMetadata[propName].filter(function (a) { return createHostBinding.isTypeOf(a); });
  94383. hostBindings.forEach(function (hostBinding) {
  94384. if (hostBinding.hostPropertyName) {
  94385. var /** @type {?} */ startWith = hostBinding.hostPropertyName[0];
  94386. if (startWith === '(') {
  94387. throw new Error("@HostBinding can not bind to events. Use @HostListener instead.");
  94388. }
  94389. else if (startWith === '[') {
  94390. throw new Error("@HostBinding parameter should be a property name, 'class.<name>', or 'attr.<name>'.");
  94391. }
  94392. host["[" + hostBinding.hostPropertyName + "]"] = propName;
  94393. }
  94394. else {
  94395. host["[" + propName + "]"] = propName;
  94396. }
  94397. });
  94398. var /** @type {?} */ hostListeners = propertyMetadata[propName].filter(function (a) { return createHostListener.isTypeOf(a); });
  94399. hostListeners.forEach(function (hostListener) {
  94400. var /** @type {?} */ args = hostListener.args || [];
  94401. host["(" + hostListener.eventName + ")"] = propName + "(" + args.join(',') + ")";
  94402. });
  94403. var /** @type {?} */ query = findLast(propertyMetadata[propName], function (a) { return QUERY_METADATA_IDENTIFIERS.some(function (i) { return i.isTypeOf(a); }); });
  94404. if (query) {
  94405. queries[propName] = query;
  94406. }
  94407. });
  94408. return this._merge(dm, inputs, outputs, host, queries, guards, directiveType);
  94409. };
  94410. /**
  94411. * @param {?} def
  94412. * @return {?}
  94413. */
  94414. DirectiveResolver.prototype._extractPublicName = /**
  94415. * @param {?} def
  94416. * @return {?}
  94417. */
  94418. function (def) { return splitAtColon(def, [/** @type {?} */ ((null)), def])[1].trim(); };
  94419. /**
  94420. * @param {?} bindings
  94421. * @return {?}
  94422. */
  94423. DirectiveResolver.prototype._dedupeBindings = /**
  94424. * @param {?} bindings
  94425. * @return {?}
  94426. */
  94427. function (bindings) {
  94428. var /** @type {?} */ names = new Set();
  94429. var /** @type {?} */ publicNames = new Set();
  94430. var /** @type {?} */ reversedResult = [];
  94431. // go last to first to allow later entries to overwrite previous entries
  94432. for (var /** @type {?} */ i = bindings.length - 1; i >= 0; i--) {
  94433. var /** @type {?} */ binding = bindings[i];
  94434. var /** @type {?} */ name_1 = this._extractPublicName(binding);
  94435. publicNames.add(name_1);
  94436. if (!names.has(name_1)) {
  94437. names.add(name_1);
  94438. reversedResult.push(binding);
  94439. }
  94440. }
  94441. return reversedResult.reverse();
  94442. };
  94443. /**
  94444. * @param {?} directive
  94445. * @param {?} inputs
  94446. * @param {?} outputs
  94447. * @param {?} host
  94448. * @param {?} queries
  94449. * @param {?} guards
  94450. * @param {?} directiveType
  94451. * @return {?}
  94452. */
  94453. DirectiveResolver.prototype._merge = /**
  94454. * @param {?} directive
  94455. * @param {?} inputs
  94456. * @param {?} outputs
  94457. * @param {?} host
  94458. * @param {?} queries
  94459. * @param {?} guards
  94460. * @param {?} directiveType
  94461. * @return {?}
  94462. */
  94463. function (directive, inputs, outputs, host, queries, guards, directiveType) {
  94464. var /** @type {?} */ mergedInputs = this._dedupeBindings(directive.inputs ? directive.inputs.concat(inputs) : inputs);
  94465. var /** @type {?} */ mergedOutputs = this._dedupeBindings(directive.outputs ? directive.outputs.concat(outputs) : outputs);
  94466. var /** @type {?} */ mergedHost = directive.host ? Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, directive.host, host) : host;
  94467. var /** @type {?} */ mergedQueries = directive.queries ? Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, directive.queries, queries) : queries;
  94468. if (createComponent.isTypeOf(directive)) {
  94469. var /** @type {?} */ comp = /** @type {?} */ (directive);
  94470. return createComponent({
  94471. selector: comp.selector,
  94472. inputs: mergedInputs,
  94473. outputs: mergedOutputs,
  94474. host: mergedHost,
  94475. exportAs: comp.exportAs,
  94476. moduleId: comp.moduleId,
  94477. queries: mergedQueries,
  94478. changeDetection: comp.changeDetection,
  94479. providers: comp.providers,
  94480. viewProviders: comp.viewProviders,
  94481. entryComponents: comp.entryComponents,
  94482. template: comp.template,
  94483. templateUrl: comp.templateUrl,
  94484. styles: comp.styles,
  94485. styleUrls: comp.styleUrls,
  94486. encapsulation: comp.encapsulation,
  94487. animations: comp.animations,
  94488. interpolation: comp.interpolation,
  94489. preserveWhitespaces: directive.preserveWhitespaces,
  94490. });
  94491. }
  94492. else {
  94493. return createDirective({
  94494. selector: directive.selector,
  94495. inputs: mergedInputs,
  94496. outputs: mergedOutputs,
  94497. host: mergedHost,
  94498. exportAs: directive.exportAs,
  94499. queries: mergedQueries,
  94500. providers: directive.providers, guards: guards
  94501. });
  94502. }
  94503. };
  94504. return DirectiveResolver;
  94505. }());
  94506. /**
  94507. * @param {?} type
  94508. * @return {?}
  94509. */
  94510. function isDirectiveMetadata(type) {
  94511. return createDirective.isTypeOf(type) || createComponent.isTypeOf(type);
  94512. }
  94513. /**
  94514. * @template T
  94515. * @param {?} arr
  94516. * @param {?} condition
  94517. * @return {?}
  94518. */
  94519. function findLast(arr, condition) {
  94520. for (var /** @type {?} */ i = arr.length - 1; i >= 0; i--) {
  94521. if (condition(arr[i])) {
  94522. return arr[i];
  94523. }
  94524. }
  94525. return null;
  94526. }
  94527. /**
  94528. * @fileoverview added by tsickle
  94529. * @suppress {checkTypes} checked by tsc
  94530. */
  94531. /**
  94532. * @license
  94533. * Copyright Google Inc. All Rights Reserved.
  94534. *
  94535. * Use of this source code is governed by an MIT-style license that can be
  94536. * found in the LICENSE file at https://angular.io/license
  94537. */
  94538. var $EOF = 0;
  94539. var $TAB = 9;
  94540. var $LF = 10;
  94541. var $VTAB = 11;
  94542. var $FF = 12;
  94543. var $CR = 13;
  94544. var $SPACE = 32;
  94545. var $BANG = 33;
  94546. var $DQ = 34;
  94547. var $HASH = 35;
  94548. var $$ = 36;
  94549. var $PERCENT = 37;
  94550. var $AMPERSAND = 38;
  94551. var $SQ = 39;
  94552. var $LPAREN = 40;
  94553. var $RPAREN = 41;
  94554. var $STAR = 42;
  94555. var $PLUS = 43;
  94556. var $COMMA = 44;
  94557. var $MINUS = 45;
  94558. var $PERIOD = 46;
  94559. var $SLASH = 47;
  94560. var $COLON = 58;
  94561. var $SEMICOLON = 59;
  94562. var $LT = 60;
  94563. var $EQ = 61;
  94564. var $GT = 62;
  94565. var $QUESTION = 63;
  94566. var $0 = 48;
  94567. var $9 = 57;
  94568. var $A = 65;
  94569. var $E = 69;
  94570. var $F = 70;
  94571. var $X = 88;
  94572. var $Z = 90;
  94573. var $LBRACKET = 91;
  94574. var $BACKSLASH = 92;
  94575. var $RBRACKET = 93;
  94576. var $CARET = 94;
  94577. var $_ = 95;
  94578. var $a = 97;
  94579. var $e = 101;
  94580. var $f = 102;
  94581. var $n = 110;
  94582. var $r = 114;
  94583. var $t = 116;
  94584. var $u = 117;
  94585. var $v = 118;
  94586. var $x = 120;
  94587. var $z = 122;
  94588. var $LBRACE = 123;
  94589. var $BAR = 124;
  94590. var $RBRACE = 125;
  94591. var $NBSP = 160;
  94592. var $BT = 96;
  94593. /**
  94594. * @param {?} code
  94595. * @return {?}
  94596. */
  94597. function isWhitespace(code) {
  94598. return (code >= $TAB && code <= $SPACE) || (code == $NBSP);
  94599. }
  94600. /**
  94601. * @param {?} code
  94602. * @return {?}
  94603. */
  94604. function isDigit(code) {
  94605. return $0 <= code && code <= $9;
  94606. }
  94607. /**
  94608. * @param {?} code
  94609. * @return {?}
  94610. */
  94611. function isAsciiLetter(code) {
  94612. return code >= $a && code <= $z || code >= $A && code <= $Z;
  94613. }
  94614. /**
  94615. * @param {?} code
  94616. * @return {?}
  94617. */
  94618. function isAsciiHexDigit(code) {
  94619. return code >= $a && code <= $f || code >= $A && code <= $F || isDigit(code);
  94620. }
  94621. /**
  94622. * @fileoverview added by tsickle
  94623. * @suppress {checkTypes} checked by tsc
  94624. */
  94625. /**
  94626. * @license
  94627. * Copyright Google Inc. All Rights Reserved.
  94628. *
  94629. * Use of this source code is governed by an MIT-style license that can be
  94630. * found in the LICENSE file at https://angular.io/license
  94631. */
  94632. /** @enum {number} */
  94633. var TokenType = {
  94634. Character: 0,
  94635. Identifier: 1,
  94636. Keyword: 2,
  94637. String: 3,
  94638. Operator: 4,
  94639. Number: 5,
  94640. Error: 6,
  94641. };
  94642. TokenType[TokenType.Character] = "Character";
  94643. TokenType[TokenType.Identifier] = "Identifier";
  94644. TokenType[TokenType.Keyword] = "Keyword";
  94645. TokenType[TokenType.String] = "String";
  94646. TokenType[TokenType.Operator] = "Operator";
  94647. TokenType[TokenType.Number] = "Number";
  94648. TokenType[TokenType.Error] = "Error";
  94649. var KEYWORDS = ['var', 'let', 'as', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this'];
  94650. var Lexer = /** @class */ (function () {
  94651. function Lexer() {
  94652. }
  94653. /**
  94654. * @param {?} text
  94655. * @return {?}
  94656. */
  94657. Lexer.prototype.tokenize = /**
  94658. * @param {?} text
  94659. * @return {?}
  94660. */
  94661. function (text) {
  94662. var /** @type {?} */ scanner = new _Scanner(text);
  94663. var /** @type {?} */ tokens = [];
  94664. var /** @type {?} */ token = scanner.scanToken();
  94665. while (token != null) {
  94666. tokens.push(token);
  94667. token = scanner.scanToken();
  94668. }
  94669. return tokens;
  94670. };
  94671. return Lexer;
  94672. }());
  94673. var Token = /** @class */ (function () {
  94674. function Token(index, type, numValue, strValue) {
  94675. this.index = index;
  94676. this.type = type;
  94677. this.numValue = numValue;
  94678. this.strValue = strValue;
  94679. }
  94680. /**
  94681. * @param {?} code
  94682. * @return {?}
  94683. */
  94684. Token.prototype.isCharacter = /**
  94685. * @param {?} code
  94686. * @return {?}
  94687. */
  94688. function (code) {
  94689. return this.type == TokenType.Character && this.numValue == code;
  94690. };
  94691. /**
  94692. * @return {?}
  94693. */
  94694. Token.prototype.isNumber = /**
  94695. * @return {?}
  94696. */
  94697. function () { return this.type == TokenType.Number; };
  94698. /**
  94699. * @return {?}
  94700. */
  94701. Token.prototype.isString = /**
  94702. * @return {?}
  94703. */
  94704. function () { return this.type == TokenType.String; };
  94705. /**
  94706. * @param {?} operater
  94707. * @return {?}
  94708. */
  94709. Token.prototype.isOperator = /**
  94710. * @param {?} operater
  94711. * @return {?}
  94712. */
  94713. function (operater) {
  94714. return this.type == TokenType.Operator && this.strValue == operater;
  94715. };
  94716. /**
  94717. * @return {?}
  94718. */
  94719. Token.prototype.isIdentifier = /**
  94720. * @return {?}
  94721. */
  94722. function () { return this.type == TokenType.Identifier; };
  94723. /**
  94724. * @return {?}
  94725. */
  94726. Token.prototype.isKeyword = /**
  94727. * @return {?}
  94728. */
  94729. function () { return this.type == TokenType.Keyword; };
  94730. /**
  94731. * @return {?}
  94732. */
  94733. Token.prototype.isKeywordLet = /**
  94734. * @return {?}
  94735. */
  94736. function () { return this.type == TokenType.Keyword && this.strValue == 'let'; };
  94737. /**
  94738. * @return {?}
  94739. */
  94740. Token.prototype.isKeywordAs = /**
  94741. * @return {?}
  94742. */
  94743. function () { return this.type == TokenType.Keyword && this.strValue == 'as'; };
  94744. /**
  94745. * @return {?}
  94746. */
  94747. Token.prototype.isKeywordNull = /**
  94748. * @return {?}
  94749. */
  94750. function () { return this.type == TokenType.Keyword && this.strValue == 'null'; };
  94751. /**
  94752. * @return {?}
  94753. */
  94754. Token.prototype.isKeywordUndefined = /**
  94755. * @return {?}
  94756. */
  94757. function () {
  94758. return this.type == TokenType.Keyword && this.strValue == 'undefined';
  94759. };
  94760. /**
  94761. * @return {?}
  94762. */
  94763. Token.prototype.isKeywordTrue = /**
  94764. * @return {?}
  94765. */
  94766. function () { return this.type == TokenType.Keyword && this.strValue == 'true'; };
  94767. /**
  94768. * @return {?}
  94769. */
  94770. Token.prototype.isKeywordFalse = /**
  94771. * @return {?}
  94772. */
  94773. function () { return this.type == TokenType.Keyword && this.strValue == 'false'; };
  94774. /**
  94775. * @return {?}
  94776. */
  94777. Token.prototype.isKeywordThis = /**
  94778. * @return {?}
  94779. */
  94780. function () { return this.type == TokenType.Keyword && this.strValue == 'this'; };
  94781. /**
  94782. * @return {?}
  94783. */
  94784. Token.prototype.isError = /**
  94785. * @return {?}
  94786. */
  94787. function () { return this.type == TokenType.Error; };
  94788. /**
  94789. * @return {?}
  94790. */
  94791. Token.prototype.toNumber = /**
  94792. * @return {?}
  94793. */
  94794. function () { return this.type == TokenType.Number ? this.numValue : -1; };
  94795. /**
  94796. * @return {?}
  94797. */
  94798. Token.prototype.toString = /**
  94799. * @return {?}
  94800. */
  94801. function () {
  94802. switch (this.type) {
  94803. case TokenType.Character:
  94804. case TokenType.Identifier:
  94805. case TokenType.Keyword:
  94806. case TokenType.Operator:
  94807. case TokenType.String:
  94808. case TokenType.Error:
  94809. return this.strValue;
  94810. case TokenType.Number:
  94811. return this.numValue.toString();
  94812. default:
  94813. return null;
  94814. }
  94815. };
  94816. return Token;
  94817. }());
  94818. /**
  94819. * @param {?} index
  94820. * @param {?} code
  94821. * @return {?}
  94822. */
  94823. function newCharacterToken(index, code) {
  94824. return new Token(index, TokenType.Character, code, String.fromCharCode(code));
  94825. }
  94826. /**
  94827. * @param {?} index
  94828. * @param {?} text
  94829. * @return {?}
  94830. */
  94831. function newIdentifierToken(index, text) {
  94832. return new Token(index, TokenType.Identifier, 0, text);
  94833. }
  94834. /**
  94835. * @param {?} index
  94836. * @param {?} text
  94837. * @return {?}
  94838. */
  94839. function newKeywordToken(index, text) {
  94840. return new Token(index, TokenType.Keyword, 0, text);
  94841. }
  94842. /**
  94843. * @param {?} index
  94844. * @param {?} text
  94845. * @return {?}
  94846. */
  94847. function newOperatorToken(index, text) {
  94848. return new Token(index, TokenType.Operator, 0, text);
  94849. }
  94850. /**
  94851. * @param {?} index
  94852. * @param {?} text
  94853. * @return {?}
  94854. */
  94855. function newStringToken(index, text) {
  94856. return new Token(index, TokenType.String, 0, text);
  94857. }
  94858. /**
  94859. * @param {?} index
  94860. * @param {?} n
  94861. * @return {?}
  94862. */
  94863. function newNumberToken(index, n) {
  94864. return new Token(index, TokenType.Number, n, '');
  94865. }
  94866. /**
  94867. * @param {?} index
  94868. * @param {?} message
  94869. * @return {?}
  94870. */
  94871. function newErrorToken(index, message) {
  94872. return new Token(index, TokenType.Error, 0, message);
  94873. }
  94874. var EOF = new Token(-1, TokenType.Character, 0, '');
  94875. var _Scanner = /** @class */ (function () {
  94876. function _Scanner(input) {
  94877. this.input = input;
  94878. this.peek = 0;
  94879. this.index = -1;
  94880. this.length = input.length;
  94881. this.advance();
  94882. }
  94883. /**
  94884. * @return {?}
  94885. */
  94886. _Scanner.prototype.advance = /**
  94887. * @return {?}
  94888. */
  94889. function () {
  94890. this.peek = ++this.index >= this.length ? $EOF : this.input.charCodeAt(this.index);
  94891. };
  94892. /**
  94893. * @return {?}
  94894. */
  94895. _Scanner.prototype.scanToken = /**
  94896. * @return {?}
  94897. */
  94898. function () {
  94899. var /** @type {?} */ input = this.input, /** @type {?} */ length = this.length;
  94900. var /** @type {?} */ peek = this.peek, /** @type {?} */ index = this.index;
  94901. // Skip whitespace.
  94902. while (peek <= $SPACE) {
  94903. if (++index >= length) {
  94904. peek = $EOF;
  94905. break;
  94906. }
  94907. else {
  94908. peek = input.charCodeAt(index);
  94909. }
  94910. }
  94911. this.peek = peek;
  94912. this.index = index;
  94913. if (index >= length) {
  94914. return null;
  94915. }
  94916. // Handle identifiers and numbers.
  94917. if (isIdentifierStart(peek))
  94918. return this.scanIdentifier();
  94919. if (isDigit(peek))
  94920. return this.scanNumber(index);
  94921. var /** @type {?} */ start = index;
  94922. switch (peek) {
  94923. case $PERIOD:
  94924. this.advance();
  94925. return isDigit(this.peek) ? this.scanNumber(start) :
  94926. newCharacterToken(start, $PERIOD);
  94927. case $LPAREN:
  94928. case $RPAREN:
  94929. case $LBRACE:
  94930. case $RBRACE:
  94931. case $LBRACKET:
  94932. case $RBRACKET:
  94933. case $COMMA:
  94934. case $COLON:
  94935. case $SEMICOLON:
  94936. return this.scanCharacter(start, peek);
  94937. case $SQ:
  94938. case $DQ:
  94939. return this.scanString();
  94940. case $HASH:
  94941. case $PLUS:
  94942. case $MINUS:
  94943. case $STAR:
  94944. case $SLASH:
  94945. case $PERCENT:
  94946. case $CARET:
  94947. return this.scanOperator(start, String.fromCharCode(peek));
  94948. case $QUESTION:
  94949. return this.scanComplexOperator(start, '?', $PERIOD, '.');
  94950. case $LT:
  94951. case $GT:
  94952. return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=');
  94953. case $BANG:
  94954. case $EQ:
  94955. return this.scanComplexOperator(start, String.fromCharCode(peek), $EQ, '=', $EQ, '=');
  94956. case $AMPERSAND:
  94957. return this.scanComplexOperator(start, '&', $AMPERSAND, '&');
  94958. case $BAR:
  94959. return this.scanComplexOperator(start, '|', $BAR, '|');
  94960. case $NBSP:
  94961. while (isWhitespace(this.peek))
  94962. this.advance();
  94963. return this.scanToken();
  94964. }
  94965. this.advance();
  94966. return this.error("Unexpected character [" + String.fromCharCode(peek) + "]", 0);
  94967. };
  94968. /**
  94969. * @param {?} start
  94970. * @param {?} code
  94971. * @return {?}
  94972. */
  94973. _Scanner.prototype.scanCharacter = /**
  94974. * @param {?} start
  94975. * @param {?} code
  94976. * @return {?}
  94977. */
  94978. function (start, code) {
  94979. this.advance();
  94980. return newCharacterToken(start, code);
  94981. };
  94982. /**
  94983. * @param {?} start
  94984. * @param {?} str
  94985. * @return {?}
  94986. */
  94987. _Scanner.prototype.scanOperator = /**
  94988. * @param {?} start
  94989. * @param {?} str
  94990. * @return {?}
  94991. */
  94992. function (start, str) {
  94993. this.advance();
  94994. return newOperatorToken(start, str);
  94995. };
  94996. /**
  94997. * Tokenize a 2/3 char long operator
  94998. *
  94999. * @param start start index in the expression
  95000. * @param one first symbol (always part of the operator)
  95001. * @param twoCode code point for the second symbol
  95002. * @param two second symbol (part of the operator when the second code point matches)
  95003. * @param threeCode code point for the third symbol
  95004. * @param three third symbol (part of the operator when provided and matches source expression)
  95005. */
  95006. /**
  95007. * Tokenize a 2/3 char long operator
  95008. *
  95009. * @param {?} start start index in the expression
  95010. * @param {?} one first symbol (always part of the operator)
  95011. * @param {?} twoCode code point for the second symbol
  95012. * @param {?} two second symbol (part of the operator when the second code point matches)
  95013. * @param {?=} threeCode code point for the third symbol
  95014. * @param {?=} three third symbol (part of the operator when provided and matches source expression)
  95015. * @return {?}
  95016. */
  95017. _Scanner.prototype.scanComplexOperator = /**
  95018. * Tokenize a 2/3 char long operator
  95019. *
  95020. * @param {?} start start index in the expression
  95021. * @param {?} one first symbol (always part of the operator)
  95022. * @param {?} twoCode code point for the second symbol
  95023. * @param {?} two second symbol (part of the operator when the second code point matches)
  95024. * @param {?=} threeCode code point for the third symbol
  95025. * @param {?=} three third symbol (part of the operator when provided and matches source expression)
  95026. * @return {?}
  95027. */
  95028. function (start, one, twoCode, two, threeCode, three) {
  95029. this.advance();
  95030. var /** @type {?} */ str = one;
  95031. if (this.peek == twoCode) {
  95032. this.advance();
  95033. str += two;
  95034. }
  95035. if (threeCode != null && this.peek == threeCode) {
  95036. this.advance();
  95037. str += three;
  95038. }
  95039. return newOperatorToken(start, str);
  95040. };
  95041. /**
  95042. * @return {?}
  95043. */
  95044. _Scanner.prototype.scanIdentifier = /**
  95045. * @return {?}
  95046. */
  95047. function () {
  95048. var /** @type {?} */ start = this.index;
  95049. this.advance();
  95050. while (isIdentifierPart(this.peek))
  95051. this.advance();
  95052. var /** @type {?} */ str = this.input.substring(start, this.index);
  95053. return KEYWORDS.indexOf(str) > -1 ? newKeywordToken(start, str) :
  95054. newIdentifierToken(start, str);
  95055. };
  95056. /**
  95057. * @param {?} start
  95058. * @return {?}
  95059. */
  95060. _Scanner.prototype.scanNumber = /**
  95061. * @param {?} start
  95062. * @return {?}
  95063. */
  95064. function (start) {
  95065. var /** @type {?} */ simple = (this.index === start);
  95066. this.advance(); // Skip initial digit.
  95067. while (true) {
  95068. if (isDigit(this.peek)) {
  95069. // Do nothing.
  95070. }
  95071. else if (this.peek == $PERIOD) {
  95072. simple = false;
  95073. }
  95074. else if (isExponentStart(this.peek)) {
  95075. this.advance();
  95076. if (isExponentSign(this.peek))
  95077. this.advance();
  95078. if (!isDigit(this.peek))
  95079. return this.error('Invalid exponent', -1);
  95080. simple = false;
  95081. }
  95082. else {
  95083. break;
  95084. }
  95085. this.advance();
  95086. }
  95087. var /** @type {?} */ str = this.input.substring(start, this.index);
  95088. var /** @type {?} */ value = simple ? parseIntAutoRadix(str) : parseFloat(str);
  95089. return newNumberToken(start, value);
  95090. };
  95091. /**
  95092. * @return {?}
  95093. */
  95094. _Scanner.prototype.scanString = /**
  95095. * @return {?}
  95096. */
  95097. function () {
  95098. var /** @type {?} */ start = this.index;
  95099. var /** @type {?} */ quote = this.peek;
  95100. this.advance(); // Skip initial quote.
  95101. var /** @type {?} */ buffer = '';
  95102. var /** @type {?} */ marker = this.index;
  95103. var /** @type {?} */ input = this.input;
  95104. while (this.peek != quote) {
  95105. if (this.peek == $BACKSLASH) {
  95106. buffer += input.substring(marker, this.index);
  95107. this.advance();
  95108. var /** @type {?} */ unescapedCode = void 0;
  95109. // Workaround for TS2.1-introduced type strictness
  95110. this.peek = this.peek;
  95111. if (this.peek == $u) {
  95112. // 4 character hex code for unicode character.
  95113. var /** @type {?} */ hex = input.substring(this.index + 1, this.index + 5);
  95114. if (/^[0-9a-f]+$/i.test(hex)) {
  95115. unescapedCode = parseInt(hex, 16);
  95116. }
  95117. else {
  95118. return this.error("Invalid unicode escape [\\u" + hex + "]", 0);
  95119. }
  95120. for (var /** @type {?} */ i = 0; i < 5; i++) {
  95121. this.advance();
  95122. }
  95123. }
  95124. else {
  95125. unescapedCode = unescape(this.peek);
  95126. this.advance();
  95127. }
  95128. buffer += String.fromCharCode(unescapedCode);
  95129. marker = this.index;
  95130. }
  95131. else if (this.peek == $EOF) {
  95132. return this.error('Unterminated quote', 0);
  95133. }
  95134. else {
  95135. this.advance();
  95136. }
  95137. }
  95138. var /** @type {?} */ last = input.substring(marker, this.index);
  95139. this.advance(); // Skip terminating quote.
  95140. return newStringToken(start, buffer + last);
  95141. };
  95142. /**
  95143. * @param {?} message
  95144. * @param {?} offset
  95145. * @return {?}
  95146. */
  95147. _Scanner.prototype.error = /**
  95148. * @param {?} message
  95149. * @param {?} offset
  95150. * @return {?}
  95151. */
  95152. function (message, offset) {
  95153. var /** @type {?} */ position = this.index + offset;
  95154. return newErrorToken(position, "Lexer Error: " + message + " at column " + position + " in expression [" + this.input + "]");
  95155. };
  95156. return _Scanner;
  95157. }());
  95158. /**
  95159. * @param {?} code
  95160. * @return {?}
  95161. */
  95162. function isIdentifierStart(code) {
  95163. return ($a <= code && code <= $z) || ($A <= code && code <= $Z) ||
  95164. (code == $_) || (code == $$);
  95165. }
  95166. /**
  95167. * @param {?} input
  95168. * @return {?}
  95169. */
  95170. function isIdentifier(input) {
  95171. if (input.length == 0)
  95172. return false;
  95173. var /** @type {?} */ scanner = new _Scanner(input);
  95174. if (!isIdentifierStart(scanner.peek))
  95175. return false;
  95176. scanner.advance();
  95177. while (scanner.peek !== $EOF) {
  95178. if (!isIdentifierPart(scanner.peek))
  95179. return false;
  95180. scanner.advance();
  95181. }
  95182. return true;
  95183. }
  95184. /**
  95185. * @param {?} code
  95186. * @return {?}
  95187. */
  95188. function isIdentifierPart(code) {
  95189. return isAsciiLetter(code) || isDigit(code) || (code == $_) ||
  95190. (code == $$);
  95191. }
  95192. /**
  95193. * @param {?} code
  95194. * @return {?}
  95195. */
  95196. function isExponentStart(code) {
  95197. return code == $e || code == $E;
  95198. }
  95199. /**
  95200. * @param {?} code
  95201. * @return {?}
  95202. */
  95203. function isExponentSign(code) {
  95204. return code == $MINUS || code == $PLUS;
  95205. }
  95206. /**
  95207. * @param {?} code
  95208. * @return {?}
  95209. */
  95210. function isQuote(code) {
  95211. return code === $SQ || code === $DQ || code === $BT;
  95212. }
  95213. /**
  95214. * @param {?} code
  95215. * @return {?}
  95216. */
  95217. function unescape(code) {
  95218. switch (code) {
  95219. case $n:
  95220. return $LF;
  95221. case $f:
  95222. return $FF;
  95223. case $r:
  95224. return $CR;
  95225. case $t:
  95226. return $TAB;
  95227. case $v:
  95228. return $VTAB;
  95229. default:
  95230. return code;
  95231. }
  95232. }
  95233. /**
  95234. * @param {?} text
  95235. * @return {?}
  95236. */
  95237. function parseIntAutoRadix(text) {
  95238. var /** @type {?} */ result = parseInt(text);
  95239. if (isNaN(result)) {
  95240. throw new Error('Invalid integer literal when parsing ' + text);
  95241. }
  95242. return result;
  95243. }
  95244. /**
  95245. * @fileoverview added by tsickle
  95246. * @suppress {checkTypes} checked by tsc
  95247. */
  95248. /**
  95249. * @license
  95250. * Copyright Google Inc. All Rights Reserved.
  95251. *
  95252. * Use of this source code is governed by an MIT-style license that can be
  95253. * found in the LICENSE file at https://angular.io/license
  95254. */
  95255. var ParserError = /** @class */ (function () {
  95256. function ParserError(message, input, errLocation, ctxLocation) {
  95257. this.input = input;
  95258. this.errLocation = errLocation;
  95259. this.ctxLocation = ctxLocation;
  95260. this.message = "Parser Error: " + message + " " + errLocation + " [" + input + "] in " + ctxLocation;
  95261. }
  95262. return ParserError;
  95263. }());
  95264. var ParseSpan = /** @class */ (function () {
  95265. function ParseSpan(start, end) {
  95266. this.start = start;
  95267. this.end = end;
  95268. }
  95269. return ParseSpan;
  95270. }());
  95271. var AST = /** @class */ (function () {
  95272. function AST(span) {
  95273. this.span = span;
  95274. }
  95275. /**
  95276. * @param {?} visitor
  95277. * @param {?=} context
  95278. * @return {?}
  95279. */
  95280. AST.prototype.visit = /**
  95281. * @param {?} visitor
  95282. * @param {?=} context
  95283. * @return {?}
  95284. */
  95285. function (visitor, context) {
  95286. if (context === void 0) { context = null; }
  95287. return null;
  95288. };
  95289. /**
  95290. * @return {?}
  95291. */
  95292. AST.prototype.toString = /**
  95293. * @return {?}
  95294. */
  95295. function () { return 'AST'; };
  95296. return AST;
  95297. }());
  95298. /**
  95299. * Represents a quoted expression of the form:
  95300. *
  95301. * quote = prefix `:` uninterpretedExpression
  95302. * prefix = identifier
  95303. * uninterpretedExpression = arbitrary string
  95304. *
  95305. * A quoted expression is meant to be pre-processed by an AST transformer that
  95306. * converts it into another AST that no longer contains quoted expressions.
  95307. * It is meant to allow third-party developers to extend Angular template
  95308. * expression language. The `uninterpretedExpression` part of the quote is
  95309. * therefore not interpreted by the Angular's own expression parser.
  95310. */
  95311. var Quote = /** @class */ (function (_super) {
  95312. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Quote, _super);
  95313. function Quote(span, prefix, uninterpretedExpression, location) {
  95314. var _this = _super.call(this, span) || this;
  95315. _this.prefix = prefix;
  95316. _this.uninterpretedExpression = uninterpretedExpression;
  95317. _this.location = location;
  95318. return _this;
  95319. }
  95320. /**
  95321. * @param {?} visitor
  95322. * @param {?=} context
  95323. * @return {?}
  95324. */
  95325. Quote.prototype.visit = /**
  95326. * @param {?} visitor
  95327. * @param {?=} context
  95328. * @return {?}
  95329. */
  95330. function (visitor, context) {
  95331. if (context === void 0) { context = null; }
  95332. return visitor.visitQuote(this, context);
  95333. };
  95334. /**
  95335. * @return {?}
  95336. */
  95337. Quote.prototype.toString = /**
  95338. * @return {?}
  95339. */
  95340. function () { return 'Quote'; };
  95341. return Quote;
  95342. }(AST));
  95343. var EmptyExpr = /** @class */ (function (_super) {
  95344. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(EmptyExpr, _super);
  95345. function EmptyExpr() {
  95346. return _super !== null && _super.apply(this, arguments) || this;
  95347. }
  95348. /**
  95349. * @param {?} visitor
  95350. * @param {?=} context
  95351. * @return {?}
  95352. */
  95353. EmptyExpr.prototype.visit = /**
  95354. * @param {?} visitor
  95355. * @param {?=} context
  95356. * @return {?}
  95357. */
  95358. function (visitor, context) {
  95359. if (context === void 0) { context = null; }
  95360. // do nothing
  95361. };
  95362. return EmptyExpr;
  95363. }(AST));
  95364. var ImplicitReceiver = /** @class */ (function (_super) {
  95365. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ImplicitReceiver, _super);
  95366. function ImplicitReceiver() {
  95367. return _super !== null && _super.apply(this, arguments) || this;
  95368. }
  95369. /**
  95370. * @param {?} visitor
  95371. * @param {?=} context
  95372. * @return {?}
  95373. */
  95374. ImplicitReceiver.prototype.visit = /**
  95375. * @param {?} visitor
  95376. * @param {?=} context
  95377. * @return {?}
  95378. */
  95379. function (visitor, context) {
  95380. if (context === void 0) { context = null; }
  95381. return visitor.visitImplicitReceiver(this, context);
  95382. };
  95383. return ImplicitReceiver;
  95384. }(AST));
  95385. /**
  95386. * Multiple expressions separated by a semicolon.
  95387. */
  95388. var Chain = /** @class */ (function (_super) {
  95389. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Chain, _super);
  95390. function Chain(span, expressions) {
  95391. var _this = _super.call(this, span) || this;
  95392. _this.expressions = expressions;
  95393. return _this;
  95394. }
  95395. /**
  95396. * @param {?} visitor
  95397. * @param {?=} context
  95398. * @return {?}
  95399. */
  95400. Chain.prototype.visit = /**
  95401. * @param {?} visitor
  95402. * @param {?=} context
  95403. * @return {?}
  95404. */
  95405. function (visitor, context) {
  95406. if (context === void 0) { context = null; }
  95407. return visitor.visitChain(this, context);
  95408. };
  95409. return Chain;
  95410. }(AST));
  95411. var Conditional = /** @class */ (function (_super) {
  95412. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Conditional, _super);
  95413. function Conditional(span, condition, trueExp, falseExp) {
  95414. var _this = _super.call(this, span) || this;
  95415. _this.condition = condition;
  95416. _this.trueExp = trueExp;
  95417. _this.falseExp = falseExp;
  95418. return _this;
  95419. }
  95420. /**
  95421. * @param {?} visitor
  95422. * @param {?=} context
  95423. * @return {?}
  95424. */
  95425. Conditional.prototype.visit = /**
  95426. * @param {?} visitor
  95427. * @param {?=} context
  95428. * @return {?}
  95429. */
  95430. function (visitor, context) {
  95431. if (context === void 0) { context = null; }
  95432. return visitor.visitConditional(this, context);
  95433. };
  95434. return Conditional;
  95435. }(AST));
  95436. var PropertyRead = /** @class */ (function (_super) {
  95437. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(PropertyRead, _super);
  95438. function PropertyRead(span, receiver, name) {
  95439. var _this = _super.call(this, span) || this;
  95440. _this.receiver = receiver;
  95441. _this.name = name;
  95442. return _this;
  95443. }
  95444. /**
  95445. * @param {?} visitor
  95446. * @param {?=} context
  95447. * @return {?}
  95448. */
  95449. PropertyRead.prototype.visit = /**
  95450. * @param {?} visitor
  95451. * @param {?=} context
  95452. * @return {?}
  95453. */
  95454. function (visitor, context) {
  95455. if (context === void 0) { context = null; }
  95456. return visitor.visitPropertyRead(this, context);
  95457. };
  95458. return PropertyRead;
  95459. }(AST));
  95460. var PropertyWrite = /** @class */ (function (_super) {
  95461. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(PropertyWrite, _super);
  95462. function PropertyWrite(span, receiver, name, value) {
  95463. var _this = _super.call(this, span) || this;
  95464. _this.receiver = receiver;
  95465. _this.name = name;
  95466. _this.value = value;
  95467. return _this;
  95468. }
  95469. /**
  95470. * @param {?} visitor
  95471. * @param {?=} context
  95472. * @return {?}
  95473. */
  95474. PropertyWrite.prototype.visit = /**
  95475. * @param {?} visitor
  95476. * @param {?=} context
  95477. * @return {?}
  95478. */
  95479. function (visitor, context) {
  95480. if (context === void 0) { context = null; }
  95481. return visitor.visitPropertyWrite(this, context);
  95482. };
  95483. return PropertyWrite;
  95484. }(AST));
  95485. var SafePropertyRead = /** @class */ (function (_super) {
  95486. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(SafePropertyRead, _super);
  95487. function SafePropertyRead(span, receiver, name) {
  95488. var _this = _super.call(this, span) || this;
  95489. _this.receiver = receiver;
  95490. _this.name = name;
  95491. return _this;
  95492. }
  95493. /**
  95494. * @param {?} visitor
  95495. * @param {?=} context
  95496. * @return {?}
  95497. */
  95498. SafePropertyRead.prototype.visit = /**
  95499. * @param {?} visitor
  95500. * @param {?=} context
  95501. * @return {?}
  95502. */
  95503. function (visitor, context) {
  95504. if (context === void 0) { context = null; }
  95505. return visitor.visitSafePropertyRead(this, context);
  95506. };
  95507. return SafePropertyRead;
  95508. }(AST));
  95509. var KeyedRead = /** @class */ (function (_super) {
  95510. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(KeyedRead, _super);
  95511. function KeyedRead(span, obj, key) {
  95512. var _this = _super.call(this, span) || this;
  95513. _this.obj = obj;
  95514. _this.key = key;
  95515. return _this;
  95516. }
  95517. /**
  95518. * @param {?} visitor
  95519. * @param {?=} context
  95520. * @return {?}
  95521. */
  95522. KeyedRead.prototype.visit = /**
  95523. * @param {?} visitor
  95524. * @param {?=} context
  95525. * @return {?}
  95526. */
  95527. function (visitor, context) {
  95528. if (context === void 0) { context = null; }
  95529. return visitor.visitKeyedRead(this, context);
  95530. };
  95531. return KeyedRead;
  95532. }(AST));
  95533. var KeyedWrite = /** @class */ (function (_super) {
  95534. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(KeyedWrite, _super);
  95535. function KeyedWrite(span, obj, key, value) {
  95536. var _this = _super.call(this, span) || this;
  95537. _this.obj = obj;
  95538. _this.key = key;
  95539. _this.value = value;
  95540. return _this;
  95541. }
  95542. /**
  95543. * @param {?} visitor
  95544. * @param {?=} context
  95545. * @return {?}
  95546. */
  95547. KeyedWrite.prototype.visit = /**
  95548. * @param {?} visitor
  95549. * @param {?=} context
  95550. * @return {?}
  95551. */
  95552. function (visitor, context) {
  95553. if (context === void 0) { context = null; }
  95554. return visitor.visitKeyedWrite(this, context);
  95555. };
  95556. return KeyedWrite;
  95557. }(AST));
  95558. var BindingPipe = /** @class */ (function (_super) {
  95559. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(BindingPipe, _super);
  95560. function BindingPipe(span, exp, name, args) {
  95561. var _this = _super.call(this, span) || this;
  95562. _this.exp = exp;
  95563. _this.name = name;
  95564. _this.args = args;
  95565. return _this;
  95566. }
  95567. /**
  95568. * @param {?} visitor
  95569. * @param {?=} context
  95570. * @return {?}
  95571. */
  95572. BindingPipe.prototype.visit = /**
  95573. * @param {?} visitor
  95574. * @param {?=} context
  95575. * @return {?}
  95576. */
  95577. function (visitor, context) {
  95578. if (context === void 0) { context = null; }
  95579. return visitor.visitPipe(this, context);
  95580. };
  95581. return BindingPipe;
  95582. }(AST));
  95583. var LiteralPrimitive = /** @class */ (function (_super) {
  95584. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(LiteralPrimitive, _super);
  95585. function LiteralPrimitive(span, value) {
  95586. var _this = _super.call(this, span) || this;
  95587. _this.value = value;
  95588. return _this;
  95589. }
  95590. /**
  95591. * @param {?} visitor
  95592. * @param {?=} context
  95593. * @return {?}
  95594. */
  95595. LiteralPrimitive.prototype.visit = /**
  95596. * @param {?} visitor
  95597. * @param {?=} context
  95598. * @return {?}
  95599. */
  95600. function (visitor, context) {
  95601. if (context === void 0) { context = null; }
  95602. return visitor.visitLiteralPrimitive(this, context);
  95603. };
  95604. return LiteralPrimitive;
  95605. }(AST));
  95606. var LiteralArray = /** @class */ (function (_super) {
  95607. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(LiteralArray, _super);
  95608. function LiteralArray(span, expressions) {
  95609. var _this = _super.call(this, span) || this;
  95610. _this.expressions = expressions;
  95611. return _this;
  95612. }
  95613. /**
  95614. * @param {?} visitor
  95615. * @param {?=} context
  95616. * @return {?}
  95617. */
  95618. LiteralArray.prototype.visit = /**
  95619. * @param {?} visitor
  95620. * @param {?=} context
  95621. * @return {?}
  95622. */
  95623. function (visitor, context) {
  95624. if (context === void 0) { context = null; }
  95625. return visitor.visitLiteralArray(this, context);
  95626. };
  95627. return LiteralArray;
  95628. }(AST));
  95629. var LiteralMap = /** @class */ (function (_super) {
  95630. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(LiteralMap, _super);
  95631. function LiteralMap(span, keys, values) {
  95632. var _this = _super.call(this, span) || this;
  95633. _this.keys = keys;
  95634. _this.values = values;
  95635. return _this;
  95636. }
  95637. /**
  95638. * @param {?} visitor
  95639. * @param {?=} context
  95640. * @return {?}
  95641. */
  95642. LiteralMap.prototype.visit = /**
  95643. * @param {?} visitor
  95644. * @param {?=} context
  95645. * @return {?}
  95646. */
  95647. function (visitor, context) {
  95648. if (context === void 0) { context = null; }
  95649. return visitor.visitLiteralMap(this, context);
  95650. };
  95651. return LiteralMap;
  95652. }(AST));
  95653. var Interpolation = /** @class */ (function (_super) {
  95654. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Interpolation, _super);
  95655. function Interpolation(span, strings, expressions) {
  95656. var _this = _super.call(this, span) || this;
  95657. _this.strings = strings;
  95658. _this.expressions = expressions;
  95659. return _this;
  95660. }
  95661. /**
  95662. * @param {?} visitor
  95663. * @param {?=} context
  95664. * @return {?}
  95665. */
  95666. Interpolation.prototype.visit = /**
  95667. * @param {?} visitor
  95668. * @param {?=} context
  95669. * @return {?}
  95670. */
  95671. function (visitor, context) {
  95672. if (context === void 0) { context = null; }
  95673. return visitor.visitInterpolation(this, context);
  95674. };
  95675. return Interpolation;
  95676. }(AST));
  95677. var Binary = /** @class */ (function (_super) {
  95678. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Binary, _super);
  95679. function Binary(span, operation, left, right) {
  95680. var _this = _super.call(this, span) || this;
  95681. _this.operation = operation;
  95682. _this.left = left;
  95683. _this.right = right;
  95684. return _this;
  95685. }
  95686. /**
  95687. * @param {?} visitor
  95688. * @param {?=} context
  95689. * @return {?}
  95690. */
  95691. Binary.prototype.visit = /**
  95692. * @param {?} visitor
  95693. * @param {?=} context
  95694. * @return {?}
  95695. */
  95696. function (visitor, context) {
  95697. if (context === void 0) { context = null; }
  95698. return visitor.visitBinary(this, context);
  95699. };
  95700. return Binary;
  95701. }(AST));
  95702. var PrefixNot = /** @class */ (function (_super) {
  95703. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(PrefixNot, _super);
  95704. function PrefixNot(span, expression) {
  95705. var _this = _super.call(this, span) || this;
  95706. _this.expression = expression;
  95707. return _this;
  95708. }
  95709. /**
  95710. * @param {?} visitor
  95711. * @param {?=} context
  95712. * @return {?}
  95713. */
  95714. PrefixNot.prototype.visit = /**
  95715. * @param {?} visitor
  95716. * @param {?=} context
  95717. * @return {?}
  95718. */
  95719. function (visitor, context) {
  95720. if (context === void 0) { context = null; }
  95721. return visitor.visitPrefixNot(this, context);
  95722. };
  95723. return PrefixNot;
  95724. }(AST));
  95725. var NonNullAssert = /** @class */ (function (_super) {
  95726. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NonNullAssert, _super);
  95727. function NonNullAssert(span, expression) {
  95728. var _this = _super.call(this, span) || this;
  95729. _this.expression = expression;
  95730. return _this;
  95731. }
  95732. /**
  95733. * @param {?} visitor
  95734. * @param {?=} context
  95735. * @return {?}
  95736. */
  95737. NonNullAssert.prototype.visit = /**
  95738. * @param {?} visitor
  95739. * @param {?=} context
  95740. * @return {?}
  95741. */
  95742. function (visitor, context) {
  95743. if (context === void 0) { context = null; }
  95744. return visitor.visitNonNullAssert(this, context);
  95745. };
  95746. return NonNullAssert;
  95747. }(AST));
  95748. var MethodCall = /** @class */ (function (_super) {
  95749. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(MethodCall, _super);
  95750. function MethodCall(span, receiver, name, args) {
  95751. var _this = _super.call(this, span) || this;
  95752. _this.receiver = receiver;
  95753. _this.name = name;
  95754. _this.args = args;
  95755. return _this;
  95756. }
  95757. /**
  95758. * @param {?} visitor
  95759. * @param {?=} context
  95760. * @return {?}
  95761. */
  95762. MethodCall.prototype.visit = /**
  95763. * @param {?} visitor
  95764. * @param {?=} context
  95765. * @return {?}
  95766. */
  95767. function (visitor, context) {
  95768. if (context === void 0) { context = null; }
  95769. return visitor.visitMethodCall(this, context);
  95770. };
  95771. return MethodCall;
  95772. }(AST));
  95773. var SafeMethodCall = /** @class */ (function (_super) {
  95774. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(SafeMethodCall, _super);
  95775. function SafeMethodCall(span, receiver, name, args) {
  95776. var _this = _super.call(this, span) || this;
  95777. _this.receiver = receiver;
  95778. _this.name = name;
  95779. _this.args = args;
  95780. return _this;
  95781. }
  95782. /**
  95783. * @param {?} visitor
  95784. * @param {?=} context
  95785. * @return {?}
  95786. */
  95787. SafeMethodCall.prototype.visit = /**
  95788. * @param {?} visitor
  95789. * @param {?=} context
  95790. * @return {?}
  95791. */
  95792. function (visitor, context) {
  95793. if (context === void 0) { context = null; }
  95794. return visitor.visitSafeMethodCall(this, context);
  95795. };
  95796. return SafeMethodCall;
  95797. }(AST));
  95798. var FunctionCall = /** @class */ (function (_super) {
  95799. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FunctionCall, _super);
  95800. function FunctionCall(span, target, args) {
  95801. var _this = _super.call(this, span) || this;
  95802. _this.target = target;
  95803. _this.args = args;
  95804. return _this;
  95805. }
  95806. /**
  95807. * @param {?} visitor
  95808. * @param {?=} context
  95809. * @return {?}
  95810. */
  95811. FunctionCall.prototype.visit = /**
  95812. * @param {?} visitor
  95813. * @param {?=} context
  95814. * @return {?}
  95815. */
  95816. function (visitor, context) {
  95817. if (context === void 0) { context = null; }
  95818. return visitor.visitFunctionCall(this, context);
  95819. };
  95820. return FunctionCall;
  95821. }(AST));
  95822. var ASTWithSource = /** @class */ (function (_super) {
  95823. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ASTWithSource, _super);
  95824. function ASTWithSource(ast, source, location, errors) {
  95825. var _this = _super.call(this, new ParseSpan(0, source == null ? 0 : source.length)) || this;
  95826. _this.ast = ast;
  95827. _this.source = source;
  95828. _this.location = location;
  95829. _this.errors = errors;
  95830. return _this;
  95831. }
  95832. /**
  95833. * @param {?} visitor
  95834. * @param {?=} context
  95835. * @return {?}
  95836. */
  95837. ASTWithSource.prototype.visit = /**
  95838. * @param {?} visitor
  95839. * @param {?=} context
  95840. * @return {?}
  95841. */
  95842. function (visitor, context) {
  95843. if (context === void 0) { context = null; }
  95844. return this.ast.visit(visitor, context);
  95845. };
  95846. /**
  95847. * @return {?}
  95848. */
  95849. ASTWithSource.prototype.toString = /**
  95850. * @return {?}
  95851. */
  95852. function () { return this.source + " in " + this.location; };
  95853. return ASTWithSource;
  95854. }(AST));
  95855. var TemplateBinding = /** @class */ (function () {
  95856. function TemplateBinding(span, key, keyIsVar, name, expression) {
  95857. this.span = span;
  95858. this.key = key;
  95859. this.keyIsVar = keyIsVar;
  95860. this.name = name;
  95861. this.expression = expression;
  95862. }
  95863. return TemplateBinding;
  95864. }());
  95865. /**
  95866. * @record
  95867. */
  95868. var NullAstVisitor = /** @class */ (function () {
  95869. function NullAstVisitor() {
  95870. }
  95871. /**
  95872. * @param {?} ast
  95873. * @param {?} context
  95874. * @return {?}
  95875. */
  95876. NullAstVisitor.prototype.visitBinary = /**
  95877. * @param {?} ast
  95878. * @param {?} context
  95879. * @return {?}
  95880. */
  95881. function (ast, context) { };
  95882. /**
  95883. * @param {?} ast
  95884. * @param {?} context
  95885. * @return {?}
  95886. */
  95887. NullAstVisitor.prototype.visitChain = /**
  95888. * @param {?} ast
  95889. * @param {?} context
  95890. * @return {?}
  95891. */
  95892. function (ast, context) { };
  95893. /**
  95894. * @param {?} ast
  95895. * @param {?} context
  95896. * @return {?}
  95897. */
  95898. NullAstVisitor.prototype.visitConditional = /**
  95899. * @param {?} ast
  95900. * @param {?} context
  95901. * @return {?}
  95902. */
  95903. function (ast, context) { };
  95904. /**
  95905. * @param {?} ast
  95906. * @param {?} context
  95907. * @return {?}
  95908. */
  95909. NullAstVisitor.prototype.visitFunctionCall = /**
  95910. * @param {?} ast
  95911. * @param {?} context
  95912. * @return {?}
  95913. */
  95914. function (ast, context) { };
  95915. /**
  95916. * @param {?} ast
  95917. * @param {?} context
  95918. * @return {?}
  95919. */
  95920. NullAstVisitor.prototype.visitImplicitReceiver = /**
  95921. * @param {?} ast
  95922. * @param {?} context
  95923. * @return {?}
  95924. */
  95925. function (ast, context) { };
  95926. /**
  95927. * @param {?} ast
  95928. * @param {?} context
  95929. * @return {?}
  95930. */
  95931. NullAstVisitor.prototype.visitInterpolation = /**
  95932. * @param {?} ast
  95933. * @param {?} context
  95934. * @return {?}
  95935. */
  95936. function (ast, context) { };
  95937. /**
  95938. * @param {?} ast
  95939. * @param {?} context
  95940. * @return {?}
  95941. */
  95942. NullAstVisitor.prototype.visitKeyedRead = /**
  95943. * @param {?} ast
  95944. * @param {?} context
  95945. * @return {?}
  95946. */
  95947. function (ast, context) { };
  95948. /**
  95949. * @param {?} ast
  95950. * @param {?} context
  95951. * @return {?}
  95952. */
  95953. NullAstVisitor.prototype.visitKeyedWrite = /**
  95954. * @param {?} ast
  95955. * @param {?} context
  95956. * @return {?}
  95957. */
  95958. function (ast, context) { };
  95959. /**
  95960. * @param {?} ast
  95961. * @param {?} context
  95962. * @return {?}
  95963. */
  95964. NullAstVisitor.prototype.visitLiteralArray = /**
  95965. * @param {?} ast
  95966. * @param {?} context
  95967. * @return {?}
  95968. */
  95969. function (ast, context) { };
  95970. /**
  95971. * @param {?} ast
  95972. * @param {?} context
  95973. * @return {?}
  95974. */
  95975. NullAstVisitor.prototype.visitLiteralMap = /**
  95976. * @param {?} ast
  95977. * @param {?} context
  95978. * @return {?}
  95979. */
  95980. function (ast, context) { };
  95981. /**
  95982. * @param {?} ast
  95983. * @param {?} context
  95984. * @return {?}
  95985. */
  95986. NullAstVisitor.prototype.visitLiteralPrimitive = /**
  95987. * @param {?} ast
  95988. * @param {?} context
  95989. * @return {?}
  95990. */
  95991. function (ast, context) { };
  95992. /**
  95993. * @param {?} ast
  95994. * @param {?} context
  95995. * @return {?}
  95996. */
  95997. NullAstVisitor.prototype.visitMethodCall = /**
  95998. * @param {?} ast
  95999. * @param {?} context
  96000. * @return {?}
  96001. */
  96002. function (ast, context) { };
  96003. /**
  96004. * @param {?} ast
  96005. * @param {?} context
  96006. * @return {?}
  96007. */
  96008. NullAstVisitor.prototype.visitPipe = /**
  96009. * @param {?} ast
  96010. * @param {?} context
  96011. * @return {?}
  96012. */
  96013. function (ast, context) { };
  96014. /**
  96015. * @param {?} ast
  96016. * @param {?} context
  96017. * @return {?}
  96018. */
  96019. NullAstVisitor.prototype.visitPrefixNot = /**
  96020. * @param {?} ast
  96021. * @param {?} context
  96022. * @return {?}
  96023. */
  96024. function (ast, context) { };
  96025. /**
  96026. * @param {?} ast
  96027. * @param {?} context
  96028. * @return {?}
  96029. */
  96030. NullAstVisitor.prototype.visitNonNullAssert = /**
  96031. * @param {?} ast
  96032. * @param {?} context
  96033. * @return {?}
  96034. */
  96035. function (ast, context) { };
  96036. /**
  96037. * @param {?} ast
  96038. * @param {?} context
  96039. * @return {?}
  96040. */
  96041. NullAstVisitor.prototype.visitPropertyRead = /**
  96042. * @param {?} ast
  96043. * @param {?} context
  96044. * @return {?}
  96045. */
  96046. function (ast, context) { };
  96047. /**
  96048. * @param {?} ast
  96049. * @param {?} context
  96050. * @return {?}
  96051. */
  96052. NullAstVisitor.prototype.visitPropertyWrite = /**
  96053. * @param {?} ast
  96054. * @param {?} context
  96055. * @return {?}
  96056. */
  96057. function (ast, context) { };
  96058. /**
  96059. * @param {?} ast
  96060. * @param {?} context
  96061. * @return {?}
  96062. */
  96063. NullAstVisitor.prototype.visitQuote = /**
  96064. * @param {?} ast
  96065. * @param {?} context
  96066. * @return {?}
  96067. */
  96068. function (ast, context) { };
  96069. /**
  96070. * @param {?} ast
  96071. * @param {?} context
  96072. * @return {?}
  96073. */
  96074. NullAstVisitor.prototype.visitSafeMethodCall = /**
  96075. * @param {?} ast
  96076. * @param {?} context
  96077. * @return {?}
  96078. */
  96079. function (ast, context) { };
  96080. /**
  96081. * @param {?} ast
  96082. * @param {?} context
  96083. * @return {?}
  96084. */
  96085. NullAstVisitor.prototype.visitSafePropertyRead = /**
  96086. * @param {?} ast
  96087. * @param {?} context
  96088. * @return {?}
  96089. */
  96090. function (ast, context) { };
  96091. return NullAstVisitor;
  96092. }());
  96093. var RecursiveAstVisitor = /** @class */ (function () {
  96094. function RecursiveAstVisitor() {
  96095. }
  96096. /**
  96097. * @param {?} ast
  96098. * @param {?} context
  96099. * @return {?}
  96100. */
  96101. RecursiveAstVisitor.prototype.visitBinary = /**
  96102. * @param {?} ast
  96103. * @param {?} context
  96104. * @return {?}
  96105. */
  96106. function (ast, context) {
  96107. ast.left.visit(this);
  96108. ast.right.visit(this);
  96109. return null;
  96110. };
  96111. /**
  96112. * @param {?} ast
  96113. * @param {?} context
  96114. * @return {?}
  96115. */
  96116. RecursiveAstVisitor.prototype.visitChain = /**
  96117. * @param {?} ast
  96118. * @param {?} context
  96119. * @return {?}
  96120. */
  96121. function (ast, context) { return this.visitAll(ast.expressions, context); };
  96122. /**
  96123. * @param {?} ast
  96124. * @param {?} context
  96125. * @return {?}
  96126. */
  96127. RecursiveAstVisitor.prototype.visitConditional = /**
  96128. * @param {?} ast
  96129. * @param {?} context
  96130. * @return {?}
  96131. */
  96132. function (ast, context) {
  96133. ast.condition.visit(this);
  96134. ast.trueExp.visit(this);
  96135. ast.falseExp.visit(this);
  96136. return null;
  96137. };
  96138. /**
  96139. * @param {?} ast
  96140. * @param {?} context
  96141. * @return {?}
  96142. */
  96143. RecursiveAstVisitor.prototype.visitPipe = /**
  96144. * @param {?} ast
  96145. * @param {?} context
  96146. * @return {?}
  96147. */
  96148. function (ast, context) {
  96149. ast.exp.visit(this);
  96150. this.visitAll(ast.args, context);
  96151. return null;
  96152. };
  96153. /**
  96154. * @param {?} ast
  96155. * @param {?} context
  96156. * @return {?}
  96157. */
  96158. RecursiveAstVisitor.prototype.visitFunctionCall = /**
  96159. * @param {?} ast
  96160. * @param {?} context
  96161. * @return {?}
  96162. */
  96163. function (ast, context) {
  96164. /** @type {?} */ ((ast.target)).visit(this);
  96165. this.visitAll(ast.args, context);
  96166. return null;
  96167. };
  96168. /**
  96169. * @param {?} ast
  96170. * @param {?} context
  96171. * @return {?}
  96172. */
  96173. RecursiveAstVisitor.prototype.visitImplicitReceiver = /**
  96174. * @param {?} ast
  96175. * @param {?} context
  96176. * @return {?}
  96177. */
  96178. function (ast, context) { return null; };
  96179. /**
  96180. * @param {?} ast
  96181. * @param {?} context
  96182. * @return {?}
  96183. */
  96184. RecursiveAstVisitor.prototype.visitInterpolation = /**
  96185. * @param {?} ast
  96186. * @param {?} context
  96187. * @return {?}
  96188. */
  96189. function (ast, context) {
  96190. return this.visitAll(ast.expressions, context);
  96191. };
  96192. /**
  96193. * @param {?} ast
  96194. * @param {?} context
  96195. * @return {?}
  96196. */
  96197. RecursiveAstVisitor.prototype.visitKeyedRead = /**
  96198. * @param {?} ast
  96199. * @param {?} context
  96200. * @return {?}
  96201. */
  96202. function (ast, context) {
  96203. ast.obj.visit(this);
  96204. ast.key.visit(this);
  96205. return null;
  96206. };
  96207. /**
  96208. * @param {?} ast
  96209. * @param {?} context
  96210. * @return {?}
  96211. */
  96212. RecursiveAstVisitor.prototype.visitKeyedWrite = /**
  96213. * @param {?} ast
  96214. * @param {?} context
  96215. * @return {?}
  96216. */
  96217. function (ast, context) {
  96218. ast.obj.visit(this);
  96219. ast.key.visit(this);
  96220. ast.value.visit(this);
  96221. return null;
  96222. };
  96223. /**
  96224. * @param {?} ast
  96225. * @param {?} context
  96226. * @return {?}
  96227. */
  96228. RecursiveAstVisitor.prototype.visitLiteralArray = /**
  96229. * @param {?} ast
  96230. * @param {?} context
  96231. * @return {?}
  96232. */
  96233. function (ast, context) {
  96234. return this.visitAll(ast.expressions, context);
  96235. };
  96236. /**
  96237. * @param {?} ast
  96238. * @param {?} context
  96239. * @return {?}
  96240. */
  96241. RecursiveAstVisitor.prototype.visitLiteralMap = /**
  96242. * @param {?} ast
  96243. * @param {?} context
  96244. * @return {?}
  96245. */
  96246. function (ast, context) { return this.visitAll(ast.values, context); };
  96247. /**
  96248. * @param {?} ast
  96249. * @param {?} context
  96250. * @return {?}
  96251. */
  96252. RecursiveAstVisitor.prototype.visitLiteralPrimitive = /**
  96253. * @param {?} ast
  96254. * @param {?} context
  96255. * @return {?}
  96256. */
  96257. function (ast, context) { return null; };
  96258. /**
  96259. * @param {?} ast
  96260. * @param {?} context
  96261. * @return {?}
  96262. */
  96263. RecursiveAstVisitor.prototype.visitMethodCall = /**
  96264. * @param {?} ast
  96265. * @param {?} context
  96266. * @return {?}
  96267. */
  96268. function (ast, context) {
  96269. ast.receiver.visit(this);
  96270. return this.visitAll(ast.args, context);
  96271. };
  96272. /**
  96273. * @param {?} ast
  96274. * @param {?} context
  96275. * @return {?}
  96276. */
  96277. RecursiveAstVisitor.prototype.visitPrefixNot = /**
  96278. * @param {?} ast
  96279. * @param {?} context
  96280. * @return {?}
  96281. */
  96282. function (ast, context) {
  96283. ast.expression.visit(this);
  96284. return null;
  96285. };
  96286. /**
  96287. * @param {?} ast
  96288. * @param {?} context
  96289. * @return {?}
  96290. */
  96291. RecursiveAstVisitor.prototype.visitNonNullAssert = /**
  96292. * @param {?} ast
  96293. * @param {?} context
  96294. * @return {?}
  96295. */
  96296. function (ast, context) {
  96297. ast.expression.visit(this);
  96298. return null;
  96299. };
  96300. /**
  96301. * @param {?} ast
  96302. * @param {?} context
  96303. * @return {?}
  96304. */
  96305. RecursiveAstVisitor.prototype.visitPropertyRead = /**
  96306. * @param {?} ast
  96307. * @param {?} context
  96308. * @return {?}
  96309. */
  96310. function (ast, context) {
  96311. ast.receiver.visit(this);
  96312. return null;
  96313. };
  96314. /**
  96315. * @param {?} ast
  96316. * @param {?} context
  96317. * @return {?}
  96318. */
  96319. RecursiveAstVisitor.prototype.visitPropertyWrite = /**
  96320. * @param {?} ast
  96321. * @param {?} context
  96322. * @return {?}
  96323. */
  96324. function (ast, context) {
  96325. ast.receiver.visit(this);
  96326. ast.value.visit(this);
  96327. return null;
  96328. };
  96329. /**
  96330. * @param {?} ast
  96331. * @param {?} context
  96332. * @return {?}
  96333. */
  96334. RecursiveAstVisitor.prototype.visitSafePropertyRead = /**
  96335. * @param {?} ast
  96336. * @param {?} context
  96337. * @return {?}
  96338. */
  96339. function (ast, context) {
  96340. ast.receiver.visit(this);
  96341. return null;
  96342. };
  96343. /**
  96344. * @param {?} ast
  96345. * @param {?} context
  96346. * @return {?}
  96347. */
  96348. RecursiveAstVisitor.prototype.visitSafeMethodCall = /**
  96349. * @param {?} ast
  96350. * @param {?} context
  96351. * @return {?}
  96352. */
  96353. function (ast, context) {
  96354. ast.receiver.visit(this);
  96355. return this.visitAll(ast.args, context);
  96356. };
  96357. /**
  96358. * @param {?} asts
  96359. * @param {?} context
  96360. * @return {?}
  96361. */
  96362. RecursiveAstVisitor.prototype.visitAll = /**
  96363. * @param {?} asts
  96364. * @param {?} context
  96365. * @return {?}
  96366. */
  96367. function (asts, context) {
  96368. var _this = this;
  96369. asts.forEach(function (ast) { return ast.visit(_this, context); });
  96370. return null;
  96371. };
  96372. /**
  96373. * @param {?} ast
  96374. * @param {?} context
  96375. * @return {?}
  96376. */
  96377. RecursiveAstVisitor.prototype.visitQuote = /**
  96378. * @param {?} ast
  96379. * @param {?} context
  96380. * @return {?}
  96381. */
  96382. function (ast, context) { return null; };
  96383. return RecursiveAstVisitor;
  96384. }());
  96385. var AstTransformer = /** @class */ (function () {
  96386. function AstTransformer() {
  96387. }
  96388. /**
  96389. * @param {?} ast
  96390. * @param {?} context
  96391. * @return {?}
  96392. */
  96393. AstTransformer.prototype.visitImplicitReceiver = /**
  96394. * @param {?} ast
  96395. * @param {?} context
  96396. * @return {?}
  96397. */
  96398. function (ast, context) { return ast; };
  96399. /**
  96400. * @param {?} ast
  96401. * @param {?} context
  96402. * @return {?}
  96403. */
  96404. AstTransformer.prototype.visitInterpolation = /**
  96405. * @param {?} ast
  96406. * @param {?} context
  96407. * @return {?}
  96408. */
  96409. function (ast, context) {
  96410. return new Interpolation(ast.span, ast.strings, this.visitAll(ast.expressions));
  96411. };
  96412. /**
  96413. * @param {?} ast
  96414. * @param {?} context
  96415. * @return {?}
  96416. */
  96417. AstTransformer.prototype.visitLiteralPrimitive = /**
  96418. * @param {?} ast
  96419. * @param {?} context
  96420. * @return {?}
  96421. */
  96422. function (ast, context) {
  96423. return new LiteralPrimitive(ast.span, ast.value);
  96424. };
  96425. /**
  96426. * @param {?} ast
  96427. * @param {?} context
  96428. * @return {?}
  96429. */
  96430. AstTransformer.prototype.visitPropertyRead = /**
  96431. * @param {?} ast
  96432. * @param {?} context
  96433. * @return {?}
  96434. */
  96435. function (ast, context) {
  96436. return new PropertyRead(ast.span, ast.receiver.visit(this), ast.name);
  96437. };
  96438. /**
  96439. * @param {?} ast
  96440. * @param {?} context
  96441. * @return {?}
  96442. */
  96443. AstTransformer.prototype.visitPropertyWrite = /**
  96444. * @param {?} ast
  96445. * @param {?} context
  96446. * @return {?}
  96447. */
  96448. function (ast, context) {
  96449. return new PropertyWrite(ast.span, ast.receiver.visit(this), ast.name, ast.value.visit(this));
  96450. };
  96451. /**
  96452. * @param {?} ast
  96453. * @param {?} context
  96454. * @return {?}
  96455. */
  96456. AstTransformer.prototype.visitSafePropertyRead = /**
  96457. * @param {?} ast
  96458. * @param {?} context
  96459. * @return {?}
  96460. */
  96461. function (ast, context) {
  96462. return new SafePropertyRead(ast.span, ast.receiver.visit(this), ast.name);
  96463. };
  96464. /**
  96465. * @param {?} ast
  96466. * @param {?} context
  96467. * @return {?}
  96468. */
  96469. AstTransformer.prototype.visitMethodCall = /**
  96470. * @param {?} ast
  96471. * @param {?} context
  96472. * @return {?}
  96473. */
  96474. function (ast, context) {
  96475. return new MethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
  96476. };
  96477. /**
  96478. * @param {?} ast
  96479. * @param {?} context
  96480. * @return {?}
  96481. */
  96482. AstTransformer.prototype.visitSafeMethodCall = /**
  96483. * @param {?} ast
  96484. * @param {?} context
  96485. * @return {?}
  96486. */
  96487. function (ast, context) {
  96488. return new SafeMethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
  96489. };
  96490. /**
  96491. * @param {?} ast
  96492. * @param {?} context
  96493. * @return {?}
  96494. */
  96495. AstTransformer.prototype.visitFunctionCall = /**
  96496. * @param {?} ast
  96497. * @param {?} context
  96498. * @return {?}
  96499. */
  96500. function (ast, context) {
  96501. return new FunctionCall(ast.span, /** @type {?} */ ((ast.target)).visit(this), this.visitAll(ast.args));
  96502. };
  96503. /**
  96504. * @param {?} ast
  96505. * @param {?} context
  96506. * @return {?}
  96507. */
  96508. AstTransformer.prototype.visitLiteralArray = /**
  96509. * @param {?} ast
  96510. * @param {?} context
  96511. * @return {?}
  96512. */
  96513. function (ast, context) {
  96514. return new LiteralArray(ast.span, this.visitAll(ast.expressions));
  96515. };
  96516. /**
  96517. * @param {?} ast
  96518. * @param {?} context
  96519. * @return {?}
  96520. */
  96521. AstTransformer.prototype.visitLiteralMap = /**
  96522. * @param {?} ast
  96523. * @param {?} context
  96524. * @return {?}
  96525. */
  96526. function (ast, context) {
  96527. return new LiteralMap(ast.span, ast.keys, this.visitAll(ast.values));
  96528. };
  96529. /**
  96530. * @param {?} ast
  96531. * @param {?} context
  96532. * @return {?}
  96533. */
  96534. AstTransformer.prototype.visitBinary = /**
  96535. * @param {?} ast
  96536. * @param {?} context
  96537. * @return {?}
  96538. */
  96539. function (ast, context) {
  96540. return new Binary(ast.span, ast.operation, ast.left.visit(this), ast.right.visit(this));
  96541. };
  96542. /**
  96543. * @param {?} ast
  96544. * @param {?} context
  96545. * @return {?}
  96546. */
  96547. AstTransformer.prototype.visitPrefixNot = /**
  96548. * @param {?} ast
  96549. * @param {?} context
  96550. * @return {?}
  96551. */
  96552. function (ast, context) {
  96553. return new PrefixNot(ast.span, ast.expression.visit(this));
  96554. };
  96555. /**
  96556. * @param {?} ast
  96557. * @param {?} context
  96558. * @return {?}
  96559. */
  96560. AstTransformer.prototype.visitNonNullAssert = /**
  96561. * @param {?} ast
  96562. * @param {?} context
  96563. * @return {?}
  96564. */
  96565. function (ast, context) {
  96566. return new NonNullAssert(ast.span, ast.expression.visit(this));
  96567. };
  96568. /**
  96569. * @param {?} ast
  96570. * @param {?} context
  96571. * @return {?}
  96572. */
  96573. AstTransformer.prototype.visitConditional = /**
  96574. * @param {?} ast
  96575. * @param {?} context
  96576. * @return {?}
  96577. */
  96578. function (ast, context) {
  96579. return new Conditional(ast.span, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
  96580. };
  96581. /**
  96582. * @param {?} ast
  96583. * @param {?} context
  96584. * @return {?}
  96585. */
  96586. AstTransformer.prototype.visitPipe = /**
  96587. * @param {?} ast
  96588. * @param {?} context
  96589. * @return {?}
  96590. */
  96591. function (ast, context) {
  96592. return new BindingPipe(ast.span, ast.exp.visit(this), ast.name, this.visitAll(ast.args));
  96593. };
  96594. /**
  96595. * @param {?} ast
  96596. * @param {?} context
  96597. * @return {?}
  96598. */
  96599. AstTransformer.prototype.visitKeyedRead = /**
  96600. * @param {?} ast
  96601. * @param {?} context
  96602. * @return {?}
  96603. */
  96604. function (ast, context) {
  96605. return new KeyedRead(ast.span, ast.obj.visit(this), ast.key.visit(this));
  96606. };
  96607. /**
  96608. * @param {?} ast
  96609. * @param {?} context
  96610. * @return {?}
  96611. */
  96612. AstTransformer.prototype.visitKeyedWrite = /**
  96613. * @param {?} ast
  96614. * @param {?} context
  96615. * @return {?}
  96616. */
  96617. function (ast, context) {
  96618. return new KeyedWrite(ast.span, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
  96619. };
  96620. /**
  96621. * @param {?} asts
  96622. * @return {?}
  96623. */
  96624. AstTransformer.prototype.visitAll = /**
  96625. * @param {?} asts
  96626. * @return {?}
  96627. */
  96628. function (asts) {
  96629. var /** @type {?} */ res = new Array(asts.length);
  96630. for (var /** @type {?} */ i = 0; i < asts.length; ++i) {
  96631. res[i] = asts[i].visit(this);
  96632. }
  96633. return res;
  96634. };
  96635. /**
  96636. * @param {?} ast
  96637. * @param {?} context
  96638. * @return {?}
  96639. */
  96640. AstTransformer.prototype.visitChain = /**
  96641. * @param {?} ast
  96642. * @param {?} context
  96643. * @return {?}
  96644. */
  96645. function (ast, context) {
  96646. return new Chain(ast.span, this.visitAll(ast.expressions));
  96647. };
  96648. /**
  96649. * @param {?} ast
  96650. * @param {?} context
  96651. * @return {?}
  96652. */
  96653. AstTransformer.prototype.visitQuote = /**
  96654. * @param {?} ast
  96655. * @param {?} context
  96656. * @return {?}
  96657. */
  96658. function (ast, context) {
  96659. return new Quote(ast.span, ast.prefix, ast.uninterpretedExpression, ast.location);
  96660. };
  96661. return AstTransformer;
  96662. }());
  96663. /**
  96664. * @param {?} ast
  96665. * @param {?} visitor
  96666. * @param {?=} context
  96667. * @return {?}
  96668. */
  96669. function visitAstChildren(ast, visitor, context) {
  96670. /**
  96671. * @param {?} ast
  96672. * @return {?}
  96673. */
  96674. function visit(ast) {
  96675. visitor.visit && visitor.visit(ast, context) || ast.visit(visitor, context);
  96676. }
  96677. /**
  96678. * @template T
  96679. * @param {?} asts
  96680. * @return {?}
  96681. */
  96682. function visitAll(asts) { asts.forEach(visit); }
  96683. ast.visit({
  96684. visitBinary: /**
  96685. * @param {?} ast
  96686. * @return {?}
  96687. */
  96688. function (ast) {
  96689. visit(ast.left);
  96690. visit(ast.right);
  96691. },
  96692. visitChain: /**
  96693. * @param {?} ast
  96694. * @return {?}
  96695. */
  96696. function (ast) { visitAll(ast.expressions); },
  96697. visitConditional: /**
  96698. * @param {?} ast
  96699. * @return {?}
  96700. */
  96701. function (ast) {
  96702. visit(ast.condition);
  96703. visit(ast.trueExp);
  96704. visit(ast.falseExp);
  96705. },
  96706. visitFunctionCall: /**
  96707. * @param {?} ast
  96708. * @return {?}
  96709. */
  96710. function (ast) {
  96711. if (ast.target) {
  96712. visit(ast.target);
  96713. }
  96714. visitAll(ast.args);
  96715. },
  96716. visitImplicitReceiver: /**
  96717. * @param {?} ast
  96718. * @return {?}
  96719. */
  96720. function (ast) { },
  96721. visitInterpolation: /**
  96722. * @param {?} ast
  96723. * @return {?}
  96724. */
  96725. function (ast) { visitAll(ast.expressions); },
  96726. visitKeyedRead: /**
  96727. * @param {?} ast
  96728. * @return {?}
  96729. */
  96730. function (ast) {
  96731. visit(ast.obj);
  96732. visit(ast.key);
  96733. },
  96734. visitKeyedWrite: /**
  96735. * @param {?} ast
  96736. * @return {?}
  96737. */
  96738. function (ast) {
  96739. visit(ast.obj);
  96740. visit(ast.key);
  96741. visit(ast.obj);
  96742. },
  96743. visitLiteralArray: /**
  96744. * @param {?} ast
  96745. * @return {?}
  96746. */
  96747. function (ast) { visitAll(ast.expressions); },
  96748. visitLiteralMap: /**
  96749. * @param {?} ast
  96750. * @return {?}
  96751. */
  96752. function (ast) { },
  96753. visitLiteralPrimitive: /**
  96754. * @param {?} ast
  96755. * @return {?}
  96756. */
  96757. function (ast) { },
  96758. visitMethodCall: /**
  96759. * @param {?} ast
  96760. * @return {?}
  96761. */
  96762. function (ast) {
  96763. visit(ast.receiver);
  96764. visitAll(ast.args);
  96765. },
  96766. visitPipe: /**
  96767. * @param {?} ast
  96768. * @return {?}
  96769. */
  96770. function (ast) {
  96771. visit(ast.exp);
  96772. visitAll(ast.args);
  96773. },
  96774. visitPrefixNot: /**
  96775. * @param {?} ast
  96776. * @return {?}
  96777. */
  96778. function (ast) { visit(ast.expression); },
  96779. visitNonNullAssert: /**
  96780. * @param {?} ast
  96781. * @return {?}
  96782. */
  96783. function (ast) { visit(ast.expression); },
  96784. visitPropertyRead: /**
  96785. * @param {?} ast
  96786. * @return {?}
  96787. */
  96788. function (ast) { visit(ast.receiver); },
  96789. visitPropertyWrite: /**
  96790. * @param {?} ast
  96791. * @return {?}
  96792. */
  96793. function (ast) {
  96794. visit(ast.receiver);
  96795. visit(ast.value);
  96796. },
  96797. visitQuote: /**
  96798. * @param {?} ast
  96799. * @return {?}
  96800. */
  96801. function (ast) { },
  96802. visitSafeMethodCall: /**
  96803. * @param {?} ast
  96804. * @return {?}
  96805. */
  96806. function (ast) {
  96807. visit(ast.receiver);
  96808. visitAll(ast.args);
  96809. },
  96810. visitSafePropertyRead: /**
  96811. * @param {?} ast
  96812. * @return {?}
  96813. */
  96814. function (ast) { visit(ast.receiver); },
  96815. });
  96816. }
  96817. /**
  96818. * @fileoverview added by tsickle
  96819. * @suppress {checkTypes} checked by tsc
  96820. */
  96821. /**
  96822. * @license
  96823. * Copyright Google Inc. All Rights Reserved.
  96824. *
  96825. * Use of this source code is governed by an MIT-style license that can be
  96826. * found in the LICENSE file at https://angular.io/license
  96827. */
  96828. var SplitInterpolation = /** @class */ (function () {
  96829. function SplitInterpolation(strings, expressions, offsets) {
  96830. this.strings = strings;
  96831. this.expressions = expressions;
  96832. this.offsets = offsets;
  96833. }
  96834. return SplitInterpolation;
  96835. }());
  96836. var TemplateBindingParseResult = /** @class */ (function () {
  96837. function TemplateBindingParseResult(templateBindings, warnings, errors) {
  96838. this.templateBindings = templateBindings;
  96839. this.warnings = warnings;
  96840. this.errors = errors;
  96841. }
  96842. return TemplateBindingParseResult;
  96843. }());
  96844. /**
  96845. * @param {?} config
  96846. * @return {?}
  96847. */
  96848. function _createInterpolateRegExp(config) {
  96849. var /** @type {?} */ pattern = escapeRegExp(config.start) + '([\\s\\S]*?)' + escapeRegExp(config.end);
  96850. return new RegExp(pattern, 'g');
  96851. }
  96852. var Parser = /** @class */ (function () {
  96853. function Parser(_lexer) {
  96854. this._lexer = _lexer;
  96855. this.errors = [];
  96856. }
  96857. /**
  96858. * @param {?} input
  96859. * @param {?} location
  96860. * @param {?=} interpolationConfig
  96861. * @return {?}
  96862. */
  96863. Parser.prototype.parseAction = /**
  96864. * @param {?} input
  96865. * @param {?} location
  96866. * @param {?=} interpolationConfig
  96867. * @return {?}
  96868. */
  96869. function (input, location, interpolationConfig) {
  96870. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  96871. this._checkNoInterpolation(input, location, interpolationConfig);
  96872. var /** @type {?} */ sourceToLex = this._stripComments(input);
  96873. var /** @type {?} */ tokens = this._lexer.tokenize(this._stripComments(input));
  96874. var /** @type {?} */ ast = new _ParseAST(input, location, tokens, sourceToLex.length, true, this.errors, input.length - sourceToLex.length)
  96875. .parseChain();
  96876. return new ASTWithSource(ast, input, location, this.errors);
  96877. };
  96878. /**
  96879. * @param {?} input
  96880. * @param {?} location
  96881. * @param {?=} interpolationConfig
  96882. * @return {?}
  96883. */
  96884. Parser.prototype.parseBinding = /**
  96885. * @param {?} input
  96886. * @param {?} location
  96887. * @param {?=} interpolationConfig
  96888. * @return {?}
  96889. */
  96890. function (input, location, interpolationConfig) {
  96891. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  96892. var /** @type {?} */ ast = this._parseBindingAst(input, location, interpolationConfig);
  96893. return new ASTWithSource(ast, input, location, this.errors);
  96894. };
  96895. /**
  96896. * @param {?} input
  96897. * @param {?} location
  96898. * @param {?=} interpolationConfig
  96899. * @return {?}
  96900. */
  96901. Parser.prototype.parseSimpleBinding = /**
  96902. * @param {?} input
  96903. * @param {?} location
  96904. * @param {?=} interpolationConfig
  96905. * @return {?}
  96906. */
  96907. function (input, location, interpolationConfig) {
  96908. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  96909. var /** @type {?} */ ast = this._parseBindingAst(input, location, interpolationConfig);
  96910. var /** @type {?} */ errors = SimpleExpressionChecker.check(ast);
  96911. if (errors.length > 0) {
  96912. this._reportError("Host binding expression cannot contain " + errors.join(' '), input, location);
  96913. }
  96914. return new ASTWithSource(ast, input, location, this.errors);
  96915. };
  96916. /**
  96917. * @param {?} message
  96918. * @param {?} input
  96919. * @param {?} errLocation
  96920. * @param {?=} ctxLocation
  96921. * @return {?}
  96922. */
  96923. Parser.prototype._reportError = /**
  96924. * @param {?} message
  96925. * @param {?} input
  96926. * @param {?} errLocation
  96927. * @param {?=} ctxLocation
  96928. * @return {?}
  96929. */
  96930. function (message, input, errLocation, ctxLocation) {
  96931. this.errors.push(new ParserError(message, input, errLocation, ctxLocation));
  96932. };
  96933. /**
  96934. * @param {?} input
  96935. * @param {?} location
  96936. * @param {?} interpolationConfig
  96937. * @return {?}
  96938. */
  96939. Parser.prototype._parseBindingAst = /**
  96940. * @param {?} input
  96941. * @param {?} location
  96942. * @param {?} interpolationConfig
  96943. * @return {?}
  96944. */
  96945. function (input, location, interpolationConfig) {
  96946. // Quotes expressions use 3rd-party expression language. We don't want to use
  96947. // our lexer or parser for that, so we check for that ahead of time.
  96948. var /** @type {?} */ quote = this._parseQuote(input, location);
  96949. if (quote != null) {
  96950. return quote;
  96951. }
  96952. this._checkNoInterpolation(input, location, interpolationConfig);
  96953. var /** @type {?} */ sourceToLex = this._stripComments(input);
  96954. var /** @type {?} */ tokens = this._lexer.tokenize(sourceToLex);
  96955. return new _ParseAST(input, location, tokens, sourceToLex.length, false, this.errors, input.length - sourceToLex.length)
  96956. .parseChain();
  96957. };
  96958. /**
  96959. * @param {?} input
  96960. * @param {?} location
  96961. * @return {?}
  96962. */
  96963. Parser.prototype._parseQuote = /**
  96964. * @param {?} input
  96965. * @param {?} location
  96966. * @return {?}
  96967. */
  96968. function (input, location) {
  96969. if (input == null)
  96970. return null;
  96971. var /** @type {?} */ prefixSeparatorIndex = input.indexOf(':');
  96972. if (prefixSeparatorIndex == -1)
  96973. return null;
  96974. var /** @type {?} */ prefix = input.substring(0, prefixSeparatorIndex).trim();
  96975. if (!isIdentifier(prefix))
  96976. return null;
  96977. var /** @type {?} */ uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);
  96978. return new Quote(new ParseSpan(0, input.length), prefix, uninterpretedExpression, location);
  96979. };
  96980. /**
  96981. * @param {?} prefixToken
  96982. * @param {?} input
  96983. * @param {?} location
  96984. * @return {?}
  96985. */
  96986. Parser.prototype.parseTemplateBindings = /**
  96987. * @param {?} prefixToken
  96988. * @param {?} input
  96989. * @param {?} location
  96990. * @return {?}
  96991. */
  96992. function (prefixToken, input, location) {
  96993. var /** @type {?} */ tokens = this._lexer.tokenize(input);
  96994. if (prefixToken) {
  96995. // Prefix the tokens with the tokens from prefixToken but have them take no space (0 index).
  96996. var /** @type {?} */ prefixTokens = this._lexer.tokenize(prefixToken).map(function (t) {
  96997. t.index = 0;
  96998. return t;
  96999. });
  97000. tokens.unshift.apply(tokens, prefixTokens);
  97001. }
  97002. return new _ParseAST(input, location, tokens, input.length, false, this.errors, 0)
  97003. .parseTemplateBindings();
  97004. };
  97005. /**
  97006. * @param {?} input
  97007. * @param {?} location
  97008. * @param {?=} interpolationConfig
  97009. * @return {?}
  97010. */
  97011. Parser.prototype.parseInterpolation = /**
  97012. * @param {?} input
  97013. * @param {?} location
  97014. * @param {?=} interpolationConfig
  97015. * @return {?}
  97016. */
  97017. function (input, location, interpolationConfig) {
  97018. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  97019. var /** @type {?} */ split = this.splitInterpolation(input, location, interpolationConfig);
  97020. if (split == null)
  97021. return null;
  97022. var /** @type {?} */ expressions = [];
  97023. for (var /** @type {?} */ i = 0; i < split.expressions.length; ++i) {
  97024. var /** @type {?} */ expressionText = split.expressions[i];
  97025. var /** @type {?} */ sourceToLex = this._stripComments(expressionText);
  97026. var /** @type {?} */ tokens = this._lexer.tokenize(sourceToLex);
  97027. var /** @type {?} */ ast = new _ParseAST(input, location, tokens, sourceToLex.length, false, this.errors, split.offsets[i] + (expressionText.length - sourceToLex.length))
  97028. .parseChain();
  97029. expressions.push(ast);
  97030. }
  97031. return new ASTWithSource(new Interpolation(new ParseSpan(0, input == null ? 0 : input.length), split.strings, expressions), input, location, this.errors);
  97032. };
  97033. /**
  97034. * @param {?} input
  97035. * @param {?} location
  97036. * @param {?=} interpolationConfig
  97037. * @return {?}
  97038. */
  97039. Parser.prototype.splitInterpolation = /**
  97040. * @param {?} input
  97041. * @param {?} location
  97042. * @param {?=} interpolationConfig
  97043. * @return {?}
  97044. */
  97045. function (input, location, interpolationConfig) {
  97046. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  97047. var /** @type {?} */ regexp = _createInterpolateRegExp(interpolationConfig);
  97048. var /** @type {?} */ parts = input.split(regexp);
  97049. if (parts.length <= 1) {
  97050. return null;
  97051. }
  97052. var /** @type {?} */ strings = [];
  97053. var /** @type {?} */ expressions = [];
  97054. var /** @type {?} */ offsets = [];
  97055. var /** @type {?} */ offset = 0;
  97056. for (var /** @type {?} */ i = 0; i < parts.length; i++) {
  97057. var /** @type {?} */ part = parts[i];
  97058. if (i % 2 === 0) {
  97059. // fixed string
  97060. strings.push(part);
  97061. offset += part.length;
  97062. }
  97063. else if (part.trim().length > 0) {
  97064. offset += interpolationConfig.start.length;
  97065. expressions.push(part);
  97066. offsets.push(offset);
  97067. offset += part.length + interpolationConfig.end.length;
  97068. }
  97069. else {
  97070. this._reportError('Blank expressions are not allowed in interpolated strings', input, "at column " + this._findInterpolationErrorColumn(parts, i, interpolationConfig) + " in", location);
  97071. expressions.push('$implict');
  97072. offsets.push(offset);
  97073. }
  97074. }
  97075. return new SplitInterpolation(strings, expressions, offsets);
  97076. };
  97077. /**
  97078. * @param {?} input
  97079. * @param {?} location
  97080. * @return {?}
  97081. */
  97082. Parser.prototype.wrapLiteralPrimitive = /**
  97083. * @param {?} input
  97084. * @param {?} location
  97085. * @return {?}
  97086. */
  97087. function (input, location) {
  97088. return new ASTWithSource(new LiteralPrimitive(new ParseSpan(0, input == null ? 0 : input.length), input), input, location, this.errors);
  97089. };
  97090. /**
  97091. * @param {?} input
  97092. * @return {?}
  97093. */
  97094. Parser.prototype._stripComments = /**
  97095. * @param {?} input
  97096. * @return {?}
  97097. */
  97098. function (input) {
  97099. var /** @type {?} */ i = this._commentStart(input);
  97100. return i != null ? input.substring(0, i).trim() : input;
  97101. };
  97102. /**
  97103. * @param {?} input
  97104. * @return {?}
  97105. */
  97106. Parser.prototype._commentStart = /**
  97107. * @param {?} input
  97108. * @return {?}
  97109. */
  97110. function (input) {
  97111. var /** @type {?} */ outerQuote = null;
  97112. for (var /** @type {?} */ i = 0; i < input.length - 1; i++) {
  97113. var /** @type {?} */ char = input.charCodeAt(i);
  97114. var /** @type {?} */ nextChar = input.charCodeAt(i + 1);
  97115. if (char === $SLASH && nextChar == $SLASH && outerQuote == null)
  97116. return i;
  97117. if (outerQuote === char) {
  97118. outerQuote = null;
  97119. }
  97120. else if (outerQuote == null && isQuote(char)) {
  97121. outerQuote = char;
  97122. }
  97123. }
  97124. return null;
  97125. };
  97126. /**
  97127. * @param {?} input
  97128. * @param {?} location
  97129. * @param {?} interpolationConfig
  97130. * @return {?}
  97131. */
  97132. Parser.prototype._checkNoInterpolation = /**
  97133. * @param {?} input
  97134. * @param {?} location
  97135. * @param {?} interpolationConfig
  97136. * @return {?}
  97137. */
  97138. function (input, location, interpolationConfig) {
  97139. var /** @type {?} */ regexp = _createInterpolateRegExp(interpolationConfig);
  97140. var /** @type {?} */ parts = input.split(regexp);
  97141. if (parts.length > 1) {
  97142. this._reportError("Got interpolation (" + interpolationConfig.start + interpolationConfig.end + ") where expression was expected", input, "at column " + this._findInterpolationErrorColumn(parts, 1, interpolationConfig) + " in", location);
  97143. }
  97144. };
  97145. /**
  97146. * @param {?} parts
  97147. * @param {?} partInErrIdx
  97148. * @param {?} interpolationConfig
  97149. * @return {?}
  97150. */
  97151. Parser.prototype._findInterpolationErrorColumn = /**
  97152. * @param {?} parts
  97153. * @param {?} partInErrIdx
  97154. * @param {?} interpolationConfig
  97155. * @return {?}
  97156. */
  97157. function (parts, partInErrIdx, interpolationConfig) {
  97158. var /** @type {?} */ errLocation = '';
  97159. for (var /** @type {?} */ j = 0; j < partInErrIdx; j++) {
  97160. errLocation += j % 2 === 0 ?
  97161. parts[j] :
  97162. "" + interpolationConfig.start + parts[j] + interpolationConfig.end;
  97163. }
  97164. return errLocation.length;
  97165. };
  97166. return Parser;
  97167. }());
  97168. var _ParseAST = /** @class */ (function () {
  97169. function _ParseAST(input, location, tokens, inputLength, parseAction, errors, offset) {
  97170. this.input = input;
  97171. this.location = location;
  97172. this.tokens = tokens;
  97173. this.inputLength = inputLength;
  97174. this.parseAction = parseAction;
  97175. this.errors = errors;
  97176. this.offset = offset;
  97177. this.rparensExpected = 0;
  97178. this.rbracketsExpected = 0;
  97179. this.rbracesExpected = 0;
  97180. this.index = 0;
  97181. }
  97182. /**
  97183. * @param {?} offset
  97184. * @return {?}
  97185. */
  97186. _ParseAST.prototype.peek = /**
  97187. * @param {?} offset
  97188. * @return {?}
  97189. */
  97190. function (offset) {
  97191. var /** @type {?} */ i = this.index + offset;
  97192. return i < this.tokens.length ? this.tokens[i] : EOF;
  97193. };
  97194. Object.defineProperty(_ParseAST.prototype, "next", {
  97195. get: /**
  97196. * @return {?}
  97197. */
  97198. function () { return this.peek(0); },
  97199. enumerable: true,
  97200. configurable: true
  97201. });
  97202. Object.defineProperty(_ParseAST.prototype, "inputIndex", {
  97203. get: /**
  97204. * @return {?}
  97205. */
  97206. function () {
  97207. return (this.index < this.tokens.length) ? this.next.index + this.offset :
  97208. this.inputLength + this.offset;
  97209. },
  97210. enumerable: true,
  97211. configurable: true
  97212. });
  97213. /**
  97214. * @param {?} start
  97215. * @return {?}
  97216. */
  97217. _ParseAST.prototype.span = /**
  97218. * @param {?} start
  97219. * @return {?}
  97220. */
  97221. function (start) { return new ParseSpan(start, this.inputIndex); };
  97222. /**
  97223. * @return {?}
  97224. */
  97225. _ParseAST.prototype.advance = /**
  97226. * @return {?}
  97227. */
  97228. function () { this.index++; };
  97229. /**
  97230. * @param {?} code
  97231. * @return {?}
  97232. */
  97233. _ParseAST.prototype.optionalCharacter = /**
  97234. * @param {?} code
  97235. * @return {?}
  97236. */
  97237. function (code) {
  97238. if (this.next.isCharacter(code)) {
  97239. this.advance();
  97240. return true;
  97241. }
  97242. else {
  97243. return false;
  97244. }
  97245. };
  97246. /**
  97247. * @return {?}
  97248. */
  97249. _ParseAST.prototype.peekKeywordLet = /**
  97250. * @return {?}
  97251. */
  97252. function () { return this.next.isKeywordLet(); };
  97253. /**
  97254. * @return {?}
  97255. */
  97256. _ParseAST.prototype.peekKeywordAs = /**
  97257. * @return {?}
  97258. */
  97259. function () { return this.next.isKeywordAs(); };
  97260. /**
  97261. * @param {?} code
  97262. * @return {?}
  97263. */
  97264. _ParseAST.prototype.expectCharacter = /**
  97265. * @param {?} code
  97266. * @return {?}
  97267. */
  97268. function (code) {
  97269. if (this.optionalCharacter(code))
  97270. return;
  97271. this.error("Missing expected " + String.fromCharCode(code));
  97272. };
  97273. /**
  97274. * @param {?} op
  97275. * @return {?}
  97276. */
  97277. _ParseAST.prototype.optionalOperator = /**
  97278. * @param {?} op
  97279. * @return {?}
  97280. */
  97281. function (op) {
  97282. if (this.next.isOperator(op)) {
  97283. this.advance();
  97284. return true;
  97285. }
  97286. else {
  97287. return false;
  97288. }
  97289. };
  97290. /**
  97291. * @param {?} operator
  97292. * @return {?}
  97293. */
  97294. _ParseAST.prototype.expectOperator = /**
  97295. * @param {?} operator
  97296. * @return {?}
  97297. */
  97298. function (operator) {
  97299. if (this.optionalOperator(operator))
  97300. return;
  97301. this.error("Missing expected operator " + operator);
  97302. };
  97303. /**
  97304. * @return {?}
  97305. */
  97306. _ParseAST.prototype.expectIdentifierOrKeyword = /**
  97307. * @return {?}
  97308. */
  97309. function () {
  97310. var /** @type {?} */ n = this.next;
  97311. if (!n.isIdentifier() && !n.isKeyword()) {
  97312. this.error("Unexpected token " + n + ", expected identifier or keyword");
  97313. return '';
  97314. }
  97315. this.advance();
  97316. return /** @type {?} */ (n.toString());
  97317. };
  97318. /**
  97319. * @return {?}
  97320. */
  97321. _ParseAST.prototype.expectIdentifierOrKeywordOrString = /**
  97322. * @return {?}
  97323. */
  97324. function () {
  97325. var /** @type {?} */ n = this.next;
  97326. if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {
  97327. this.error("Unexpected token " + n + ", expected identifier, keyword, or string");
  97328. return '';
  97329. }
  97330. this.advance();
  97331. return /** @type {?} */ (n.toString());
  97332. };
  97333. /**
  97334. * @return {?}
  97335. */
  97336. _ParseAST.prototype.parseChain = /**
  97337. * @return {?}
  97338. */
  97339. function () {
  97340. var /** @type {?} */ exprs = [];
  97341. var /** @type {?} */ start = this.inputIndex;
  97342. while (this.index < this.tokens.length) {
  97343. var /** @type {?} */ expr = this.parsePipe();
  97344. exprs.push(expr);
  97345. if (this.optionalCharacter($SEMICOLON)) {
  97346. if (!this.parseAction) {
  97347. this.error('Binding expression cannot contain chained expression');
  97348. }
  97349. while (this.optionalCharacter($SEMICOLON)) {
  97350. } // read all semicolons
  97351. }
  97352. else if (this.index < this.tokens.length) {
  97353. this.error("Unexpected token '" + this.next + "'");
  97354. }
  97355. }
  97356. if (exprs.length == 0)
  97357. return new EmptyExpr(this.span(start));
  97358. if (exprs.length == 1)
  97359. return exprs[0];
  97360. return new Chain(this.span(start), exprs);
  97361. };
  97362. /**
  97363. * @return {?}
  97364. */
  97365. _ParseAST.prototype.parsePipe = /**
  97366. * @return {?}
  97367. */
  97368. function () {
  97369. var /** @type {?} */ result = this.parseExpression();
  97370. if (this.optionalOperator('|')) {
  97371. if (this.parseAction) {
  97372. this.error('Cannot have a pipe in an action expression');
  97373. }
  97374. do {
  97375. var /** @type {?} */ name_1 = this.expectIdentifierOrKeyword();
  97376. var /** @type {?} */ args = [];
  97377. while (this.optionalCharacter($COLON)) {
  97378. args.push(this.parseExpression());
  97379. }
  97380. result = new BindingPipe(this.span(result.span.start), result, name_1, args);
  97381. } while (this.optionalOperator('|'));
  97382. }
  97383. return result;
  97384. };
  97385. /**
  97386. * @return {?}
  97387. */
  97388. _ParseAST.prototype.parseExpression = /**
  97389. * @return {?}
  97390. */
  97391. function () { return this.parseConditional(); };
  97392. /**
  97393. * @return {?}
  97394. */
  97395. _ParseAST.prototype.parseConditional = /**
  97396. * @return {?}
  97397. */
  97398. function () {
  97399. var /** @type {?} */ start = this.inputIndex;
  97400. var /** @type {?} */ result = this.parseLogicalOr();
  97401. if (this.optionalOperator('?')) {
  97402. var /** @type {?} */ yes = this.parsePipe();
  97403. var /** @type {?} */ no = void 0;
  97404. if (!this.optionalCharacter($COLON)) {
  97405. var /** @type {?} */ end = this.inputIndex;
  97406. var /** @type {?} */ expression = this.input.substring(start, end);
  97407. this.error("Conditional expression " + expression + " requires all 3 expressions");
  97408. no = new EmptyExpr(this.span(start));
  97409. }
  97410. else {
  97411. no = this.parsePipe();
  97412. }
  97413. return new Conditional(this.span(start), result, yes, no);
  97414. }
  97415. else {
  97416. return result;
  97417. }
  97418. };
  97419. /**
  97420. * @return {?}
  97421. */
  97422. _ParseAST.prototype.parseLogicalOr = /**
  97423. * @return {?}
  97424. */
  97425. function () {
  97426. // '||'
  97427. var /** @type {?} */ result = this.parseLogicalAnd();
  97428. while (this.optionalOperator('||')) {
  97429. var /** @type {?} */ right = this.parseLogicalAnd();
  97430. result = new Binary(this.span(result.span.start), '||', result, right);
  97431. }
  97432. return result;
  97433. };
  97434. /**
  97435. * @return {?}
  97436. */
  97437. _ParseAST.prototype.parseLogicalAnd = /**
  97438. * @return {?}
  97439. */
  97440. function () {
  97441. // '&&'
  97442. var /** @type {?} */ result = this.parseEquality();
  97443. while (this.optionalOperator('&&')) {
  97444. var /** @type {?} */ right = this.parseEquality();
  97445. result = new Binary(this.span(result.span.start), '&&', result, right);
  97446. }
  97447. return result;
  97448. };
  97449. /**
  97450. * @return {?}
  97451. */
  97452. _ParseAST.prototype.parseEquality = /**
  97453. * @return {?}
  97454. */
  97455. function () {
  97456. // '==','!=','===','!=='
  97457. var /** @type {?} */ result = this.parseRelational();
  97458. while (this.next.type == TokenType.Operator) {
  97459. var /** @type {?} */ operator = this.next.strValue;
  97460. switch (operator) {
  97461. case '==':
  97462. case '===':
  97463. case '!=':
  97464. case '!==':
  97465. this.advance();
  97466. var /** @type {?} */ right = this.parseRelational();
  97467. result = new Binary(this.span(result.span.start), operator, result, right);
  97468. continue;
  97469. }
  97470. break;
  97471. }
  97472. return result;
  97473. };
  97474. /**
  97475. * @return {?}
  97476. */
  97477. _ParseAST.prototype.parseRelational = /**
  97478. * @return {?}
  97479. */
  97480. function () {
  97481. // '<', '>', '<=', '>='
  97482. var /** @type {?} */ result = this.parseAdditive();
  97483. while (this.next.type == TokenType.Operator) {
  97484. var /** @type {?} */ operator = this.next.strValue;
  97485. switch (operator) {
  97486. case '<':
  97487. case '>':
  97488. case '<=':
  97489. case '>=':
  97490. this.advance();
  97491. var /** @type {?} */ right = this.parseAdditive();
  97492. result = new Binary(this.span(result.span.start), operator, result, right);
  97493. continue;
  97494. }
  97495. break;
  97496. }
  97497. return result;
  97498. };
  97499. /**
  97500. * @return {?}
  97501. */
  97502. _ParseAST.prototype.parseAdditive = /**
  97503. * @return {?}
  97504. */
  97505. function () {
  97506. // '+', '-'
  97507. var /** @type {?} */ result = this.parseMultiplicative();
  97508. while (this.next.type == TokenType.Operator) {
  97509. var /** @type {?} */ operator = this.next.strValue;
  97510. switch (operator) {
  97511. case '+':
  97512. case '-':
  97513. this.advance();
  97514. var /** @type {?} */ right = this.parseMultiplicative();
  97515. result = new Binary(this.span(result.span.start), operator, result, right);
  97516. continue;
  97517. }
  97518. break;
  97519. }
  97520. return result;
  97521. };
  97522. /**
  97523. * @return {?}
  97524. */
  97525. _ParseAST.prototype.parseMultiplicative = /**
  97526. * @return {?}
  97527. */
  97528. function () {
  97529. // '*', '%', '/'
  97530. var /** @type {?} */ result = this.parsePrefix();
  97531. while (this.next.type == TokenType.Operator) {
  97532. var /** @type {?} */ operator = this.next.strValue;
  97533. switch (operator) {
  97534. case '*':
  97535. case '%':
  97536. case '/':
  97537. this.advance();
  97538. var /** @type {?} */ right = this.parsePrefix();
  97539. result = new Binary(this.span(result.span.start), operator, result, right);
  97540. continue;
  97541. }
  97542. break;
  97543. }
  97544. return result;
  97545. };
  97546. /**
  97547. * @return {?}
  97548. */
  97549. _ParseAST.prototype.parsePrefix = /**
  97550. * @return {?}
  97551. */
  97552. function () {
  97553. if (this.next.type == TokenType.Operator) {
  97554. var /** @type {?} */ start = this.inputIndex;
  97555. var /** @type {?} */ operator = this.next.strValue;
  97556. var /** @type {?} */ result = void 0;
  97557. switch (operator) {
  97558. case '+':
  97559. this.advance();
  97560. result = this.parsePrefix();
  97561. return new Binary(this.span(start), '-', result, new LiteralPrimitive(new ParseSpan(start, start), 0));
  97562. case '-':
  97563. this.advance();
  97564. result = this.parsePrefix();
  97565. return new Binary(this.span(start), operator, new LiteralPrimitive(new ParseSpan(start, start), 0), result);
  97566. case '!':
  97567. this.advance();
  97568. result = this.parsePrefix();
  97569. return new PrefixNot(this.span(start), result);
  97570. }
  97571. }
  97572. return this.parseCallChain();
  97573. };
  97574. /**
  97575. * @return {?}
  97576. */
  97577. _ParseAST.prototype.parseCallChain = /**
  97578. * @return {?}
  97579. */
  97580. function () {
  97581. var /** @type {?} */ result = this.parsePrimary();
  97582. while (true) {
  97583. if (this.optionalCharacter($PERIOD)) {
  97584. result = this.parseAccessMemberOrMethodCall(result, false);
  97585. }
  97586. else if (this.optionalOperator('?.')) {
  97587. result = this.parseAccessMemberOrMethodCall(result, true);
  97588. }
  97589. else if (this.optionalCharacter($LBRACKET)) {
  97590. this.rbracketsExpected++;
  97591. var /** @type {?} */ key = this.parsePipe();
  97592. this.rbracketsExpected--;
  97593. this.expectCharacter($RBRACKET);
  97594. if (this.optionalOperator('=')) {
  97595. var /** @type {?} */ value = this.parseConditional();
  97596. result = new KeyedWrite(this.span(result.span.start), result, key, value);
  97597. }
  97598. else {
  97599. result = new KeyedRead(this.span(result.span.start), result, key);
  97600. }
  97601. }
  97602. else if (this.optionalCharacter($LPAREN)) {
  97603. this.rparensExpected++;
  97604. var /** @type {?} */ args = this.parseCallArguments();
  97605. this.rparensExpected--;
  97606. this.expectCharacter($RPAREN);
  97607. result = new FunctionCall(this.span(result.span.start), result, args);
  97608. }
  97609. else if (this.optionalOperator('!')) {
  97610. result = new NonNullAssert(this.span(result.span.start), result);
  97611. }
  97612. else {
  97613. return result;
  97614. }
  97615. }
  97616. };
  97617. /**
  97618. * @return {?}
  97619. */
  97620. _ParseAST.prototype.parsePrimary = /**
  97621. * @return {?}
  97622. */
  97623. function () {
  97624. var /** @type {?} */ start = this.inputIndex;
  97625. if (this.optionalCharacter($LPAREN)) {
  97626. this.rparensExpected++;
  97627. var /** @type {?} */ result = this.parsePipe();
  97628. this.rparensExpected--;
  97629. this.expectCharacter($RPAREN);
  97630. return result;
  97631. }
  97632. else if (this.next.isKeywordNull()) {
  97633. this.advance();
  97634. return new LiteralPrimitive(this.span(start), null);
  97635. }
  97636. else if (this.next.isKeywordUndefined()) {
  97637. this.advance();
  97638. return new LiteralPrimitive(this.span(start), void 0);
  97639. }
  97640. else if (this.next.isKeywordTrue()) {
  97641. this.advance();
  97642. return new LiteralPrimitive(this.span(start), true);
  97643. }
  97644. else if (this.next.isKeywordFalse()) {
  97645. this.advance();
  97646. return new LiteralPrimitive(this.span(start), false);
  97647. }
  97648. else if (this.next.isKeywordThis()) {
  97649. this.advance();
  97650. return new ImplicitReceiver(this.span(start));
  97651. }
  97652. else if (this.optionalCharacter($LBRACKET)) {
  97653. this.rbracketsExpected++;
  97654. var /** @type {?} */ elements = this.parseExpressionList($RBRACKET);
  97655. this.rbracketsExpected--;
  97656. this.expectCharacter($RBRACKET);
  97657. return new LiteralArray(this.span(start), elements);
  97658. }
  97659. else if (this.next.isCharacter($LBRACE)) {
  97660. return this.parseLiteralMap();
  97661. }
  97662. else if (this.next.isIdentifier()) {
  97663. return this.parseAccessMemberOrMethodCall(new ImplicitReceiver(this.span(start)), false);
  97664. }
  97665. else if (this.next.isNumber()) {
  97666. var /** @type {?} */ value = this.next.toNumber();
  97667. this.advance();
  97668. return new LiteralPrimitive(this.span(start), value);
  97669. }
  97670. else if (this.next.isString()) {
  97671. var /** @type {?} */ literalValue = this.next.toString();
  97672. this.advance();
  97673. return new LiteralPrimitive(this.span(start), literalValue);
  97674. }
  97675. else if (this.index >= this.tokens.length) {
  97676. this.error("Unexpected end of expression: " + this.input);
  97677. return new EmptyExpr(this.span(start));
  97678. }
  97679. else {
  97680. this.error("Unexpected token " + this.next);
  97681. return new EmptyExpr(this.span(start));
  97682. }
  97683. };
  97684. /**
  97685. * @param {?} terminator
  97686. * @return {?}
  97687. */
  97688. _ParseAST.prototype.parseExpressionList = /**
  97689. * @param {?} terminator
  97690. * @return {?}
  97691. */
  97692. function (terminator) {
  97693. var /** @type {?} */ result = [];
  97694. if (!this.next.isCharacter(terminator)) {
  97695. do {
  97696. result.push(this.parsePipe());
  97697. } while (this.optionalCharacter($COMMA));
  97698. }
  97699. return result;
  97700. };
  97701. /**
  97702. * @return {?}
  97703. */
  97704. _ParseAST.prototype.parseLiteralMap = /**
  97705. * @return {?}
  97706. */
  97707. function () {
  97708. var /** @type {?} */ keys = [];
  97709. var /** @type {?} */ values = [];
  97710. var /** @type {?} */ start = this.inputIndex;
  97711. this.expectCharacter($LBRACE);
  97712. if (!this.optionalCharacter($RBRACE)) {
  97713. this.rbracesExpected++;
  97714. do {
  97715. var /** @type {?} */ quoted = this.next.isString();
  97716. var /** @type {?} */ key = this.expectIdentifierOrKeywordOrString();
  97717. keys.push({ key: key, quoted: quoted });
  97718. this.expectCharacter($COLON);
  97719. values.push(this.parsePipe());
  97720. } while (this.optionalCharacter($COMMA));
  97721. this.rbracesExpected--;
  97722. this.expectCharacter($RBRACE);
  97723. }
  97724. return new LiteralMap(this.span(start), keys, values);
  97725. };
  97726. /**
  97727. * @param {?} receiver
  97728. * @param {?=} isSafe
  97729. * @return {?}
  97730. */
  97731. _ParseAST.prototype.parseAccessMemberOrMethodCall = /**
  97732. * @param {?} receiver
  97733. * @param {?=} isSafe
  97734. * @return {?}
  97735. */
  97736. function (receiver, isSafe) {
  97737. if (isSafe === void 0) { isSafe = false; }
  97738. var /** @type {?} */ start = receiver.span.start;
  97739. var /** @type {?} */ id = this.expectIdentifierOrKeyword();
  97740. if (this.optionalCharacter($LPAREN)) {
  97741. this.rparensExpected++;
  97742. var /** @type {?} */ args = this.parseCallArguments();
  97743. this.expectCharacter($RPAREN);
  97744. this.rparensExpected--;
  97745. var /** @type {?} */ span = this.span(start);
  97746. return isSafe ? new SafeMethodCall(span, receiver, id, args) :
  97747. new MethodCall(span, receiver, id, args);
  97748. }
  97749. else {
  97750. if (isSafe) {
  97751. if (this.optionalOperator('=')) {
  97752. this.error('The \'?.\' operator cannot be used in the assignment');
  97753. return new EmptyExpr(this.span(start));
  97754. }
  97755. else {
  97756. return new SafePropertyRead(this.span(start), receiver, id);
  97757. }
  97758. }
  97759. else {
  97760. if (this.optionalOperator('=')) {
  97761. if (!this.parseAction) {
  97762. this.error('Bindings cannot contain assignments');
  97763. return new EmptyExpr(this.span(start));
  97764. }
  97765. var /** @type {?} */ value = this.parseConditional();
  97766. return new PropertyWrite(this.span(start), receiver, id, value);
  97767. }
  97768. else {
  97769. return new PropertyRead(this.span(start), receiver, id);
  97770. }
  97771. }
  97772. }
  97773. };
  97774. /**
  97775. * @return {?}
  97776. */
  97777. _ParseAST.prototype.parseCallArguments = /**
  97778. * @return {?}
  97779. */
  97780. function () {
  97781. if (this.next.isCharacter($RPAREN))
  97782. return [];
  97783. var /** @type {?} */ positionals = [];
  97784. do {
  97785. positionals.push(this.parsePipe());
  97786. } while (this.optionalCharacter($COMMA));
  97787. return /** @type {?} */ (positionals);
  97788. };
  97789. /**
  97790. * An identifier, a keyword, a string with an optional `-` inbetween.
  97791. */
  97792. /**
  97793. * An identifier, a keyword, a string with an optional `-` inbetween.
  97794. * @return {?}
  97795. */
  97796. _ParseAST.prototype.expectTemplateBindingKey = /**
  97797. * An identifier, a keyword, a string with an optional `-` inbetween.
  97798. * @return {?}
  97799. */
  97800. function () {
  97801. var /** @type {?} */ result = '';
  97802. var /** @type {?} */ operatorFound = false;
  97803. do {
  97804. result += this.expectIdentifierOrKeywordOrString();
  97805. operatorFound = this.optionalOperator('-');
  97806. if (operatorFound) {
  97807. result += '-';
  97808. }
  97809. } while (operatorFound);
  97810. return result.toString();
  97811. };
  97812. /**
  97813. * @return {?}
  97814. */
  97815. _ParseAST.prototype.parseTemplateBindings = /**
  97816. * @return {?}
  97817. */
  97818. function () {
  97819. var /** @type {?} */ bindings = [];
  97820. var /** @type {?} */ prefix = /** @type {?} */ ((null));
  97821. var /** @type {?} */ warnings = [];
  97822. while (this.index < this.tokens.length) {
  97823. var /** @type {?} */ start = this.inputIndex;
  97824. var /** @type {?} */ keyIsVar = this.peekKeywordLet();
  97825. if (keyIsVar) {
  97826. this.advance();
  97827. }
  97828. var /** @type {?} */ rawKey = this.expectTemplateBindingKey();
  97829. var /** @type {?} */ key = rawKey;
  97830. if (!keyIsVar) {
  97831. if (prefix == null) {
  97832. prefix = key;
  97833. }
  97834. else {
  97835. key = prefix + key[0].toUpperCase() + key.substring(1);
  97836. }
  97837. }
  97838. this.optionalCharacter($COLON);
  97839. var /** @type {?} */ name_2 = /** @type {?} */ ((null));
  97840. var /** @type {?} */ expression = /** @type {?} */ ((null));
  97841. if (keyIsVar) {
  97842. if (this.optionalOperator('=')) {
  97843. name_2 = this.expectTemplateBindingKey();
  97844. }
  97845. else {
  97846. name_2 = '\$implicit';
  97847. }
  97848. }
  97849. else if (this.peekKeywordAs()) {
  97850. var /** @type {?} */ letStart = this.inputIndex;
  97851. this.advance(); // consume `as`
  97852. name_2 = rawKey;
  97853. key = this.expectTemplateBindingKey(); // read local var name
  97854. keyIsVar = true;
  97855. }
  97856. else if (this.next !== EOF && !this.peekKeywordLet()) {
  97857. var /** @type {?} */ start_1 = this.inputIndex;
  97858. var /** @type {?} */ ast = this.parsePipe();
  97859. var /** @type {?} */ source = this.input.substring(start_1 - this.offset, this.inputIndex - this.offset);
  97860. expression = new ASTWithSource(ast, source, this.location, this.errors);
  97861. }
  97862. bindings.push(new TemplateBinding(this.span(start), key, keyIsVar, name_2, expression));
  97863. if (this.peekKeywordAs() && !keyIsVar) {
  97864. var /** @type {?} */ letStart = this.inputIndex;
  97865. this.advance(); // consume `as`
  97866. var /** @type {?} */ letName = this.expectTemplateBindingKey(); // read local var name
  97867. bindings.push(new TemplateBinding(this.span(letStart), letName, true, key, /** @type {?} */ ((null))));
  97868. }
  97869. if (!this.optionalCharacter($SEMICOLON)) {
  97870. this.optionalCharacter($COMMA);
  97871. }
  97872. }
  97873. return new TemplateBindingParseResult(bindings, warnings, this.errors);
  97874. };
  97875. /**
  97876. * @param {?} message
  97877. * @param {?=} index
  97878. * @return {?}
  97879. */
  97880. _ParseAST.prototype.error = /**
  97881. * @param {?} message
  97882. * @param {?=} index
  97883. * @return {?}
  97884. */
  97885. function (message, index) {
  97886. if (index === void 0) { index = null; }
  97887. this.errors.push(new ParserError(message, this.input, this.locationText(index), this.location));
  97888. this.skip();
  97889. };
  97890. /**
  97891. * @param {?=} index
  97892. * @return {?}
  97893. */
  97894. _ParseAST.prototype.locationText = /**
  97895. * @param {?=} index
  97896. * @return {?}
  97897. */
  97898. function (index) {
  97899. if (index === void 0) { index = null; }
  97900. if (index == null)
  97901. index = this.index;
  97902. return (index < this.tokens.length) ? "at column " + (this.tokens[index].index + 1) + " in" :
  97903. "at the end of the expression";
  97904. };
  97905. /**
  97906. * @return {?}
  97907. */
  97908. _ParseAST.prototype.skip = /**
  97909. * @return {?}
  97910. */
  97911. function () {
  97912. var /** @type {?} */ n = this.next;
  97913. while (this.index < this.tokens.length && !n.isCharacter($SEMICOLON) &&
  97914. (this.rparensExpected <= 0 || !n.isCharacter($RPAREN)) &&
  97915. (this.rbracesExpected <= 0 || !n.isCharacter($RBRACE)) &&
  97916. (this.rbracketsExpected <= 0 || !n.isCharacter($RBRACKET))) {
  97917. if (this.next.isError()) {
  97918. this.errors.push(new ParserError(/** @type {?} */ ((this.next.toString())), this.input, this.locationText(), this.location));
  97919. }
  97920. this.advance();
  97921. n = this.next;
  97922. }
  97923. };
  97924. return _ParseAST;
  97925. }());
  97926. var SimpleExpressionChecker = /** @class */ (function () {
  97927. function SimpleExpressionChecker() {
  97928. this.errors = [];
  97929. }
  97930. /**
  97931. * @param {?} ast
  97932. * @return {?}
  97933. */
  97934. SimpleExpressionChecker.check = /**
  97935. * @param {?} ast
  97936. * @return {?}
  97937. */
  97938. function (ast) {
  97939. var /** @type {?} */ s = new SimpleExpressionChecker();
  97940. ast.visit(s);
  97941. return s.errors;
  97942. };
  97943. /**
  97944. * @param {?} ast
  97945. * @param {?} context
  97946. * @return {?}
  97947. */
  97948. SimpleExpressionChecker.prototype.visitImplicitReceiver = /**
  97949. * @param {?} ast
  97950. * @param {?} context
  97951. * @return {?}
  97952. */
  97953. function (ast, context) { };
  97954. /**
  97955. * @param {?} ast
  97956. * @param {?} context
  97957. * @return {?}
  97958. */
  97959. SimpleExpressionChecker.prototype.visitInterpolation = /**
  97960. * @param {?} ast
  97961. * @param {?} context
  97962. * @return {?}
  97963. */
  97964. function (ast, context) { };
  97965. /**
  97966. * @param {?} ast
  97967. * @param {?} context
  97968. * @return {?}
  97969. */
  97970. SimpleExpressionChecker.prototype.visitLiteralPrimitive = /**
  97971. * @param {?} ast
  97972. * @param {?} context
  97973. * @return {?}
  97974. */
  97975. function (ast, context) { };
  97976. /**
  97977. * @param {?} ast
  97978. * @param {?} context
  97979. * @return {?}
  97980. */
  97981. SimpleExpressionChecker.prototype.visitPropertyRead = /**
  97982. * @param {?} ast
  97983. * @param {?} context
  97984. * @return {?}
  97985. */
  97986. function (ast, context) { };
  97987. /**
  97988. * @param {?} ast
  97989. * @param {?} context
  97990. * @return {?}
  97991. */
  97992. SimpleExpressionChecker.prototype.visitPropertyWrite = /**
  97993. * @param {?} ast
  97994. * @param {?} context
  97995. * @return {?}
  97996. */
  97997. function (ast, context) { };
  97998. /**
  97999. * @param {?} ast
  98000. * @param {?} context
  98001. * @return {?}
  98002. */
  98003. SimpleExpressionChecker.prototype.visitSafePropertyRead = /**
  98004. * @param {?} ast
  98005. * @param {?} context
  98006. * @return {?}
  98007. */
  98008. function (ast, context) { };
  98009. /**
  98010. * @param {?} ast
  98011. * @param {?} context
  98012. * @return {?}
  98013. */
  98014. SimpleExpressionChecker.prototype.visitMethodCall = /**
  98015. * @param {?} ast
  98016. * @param {?} context
  98017. * @return {?}
  98018. */
  98019. function (ast, context) { };
  98020. /**
  98021. * @param {?} ast
  98022. * @param {?} context
  98023. * @return {?}
  98024. */
  98025. SimpleExpressionChecker.prototype.visitSafeMethodCall = /**
  98026. * @param {?} ast
  98027. * @param {?} context
  98028. * @return {?}
  98029. */
  98030. function (ast, context) { };
  98031. /**
  98032. * @param {?} ast
  98033. * @param {?} context
  98034. * @return {?}
  98035. */
  98036. SimpleExpressionChecker.prototype.visitFunctionCall = /**
  98037. * @param {?} ast
  98038. * @param {?} context
  98039. * @return {?}
  98040. */
  98041. function (ast, context) { };
  98042. /**
  98043. * @param {?} ast
  98044. * @param {?} context
  98045. * @return {?}
  98046. */
  98047. SimpleExpressionChecker.prototype.visitLiteralArray = /**
  98048. * @param {?} ast
  98049. * @param {?} context
  98050. * @return {?}
  98051. */
  98052. function (ast, context) { this.visitAll(ast.expressions); };
  98053. /**
  98054. * @param {?} ast
  98055. * @param {?} context
  98056. * @return {?}
  98057. */
  98058. SimpleExpressionChecker.prototype.visitLiteralMap = /**
  98059. * @param {?} ast
  98060. * @param {?} context
  98061. * @return {?}
  98062. */
  98063. function (ast, context) { this.visitAll(ast.values); };
  98064. /**
  98065. * @param {?} ast
  98066. * @param {?} context
  98067. * @return {?}
  98068. */
  98069. SimpleExpressionChecker.prototype.visitBinary = /**
  98070. * @param {?} ast
  98071. * @param {?} context
  98072. * @return {?}
  98073. */
  98074. function (ast, context) { };
  98075. /**
  98076. * @param {?} ast
  98077. * @param {?} context
  98078. * @return {?}
  98079. */
  98080. SimpleExpressionChecker.prototype.visitPrefixNot = /**
  98081. * @param {?} ast
  98082. * @param {?} context
  98083. * @return {?}
  98084. */
  98085. function (ast, context) { };
  98086. /**
  98087. * @param {?} ast
  98088. * @param {?} context
  98089. * @return {?}
  98090. */
  98091. SimpleExpressionChecker.prototype.visitNonNullAssert = /**
  98092. * @param {?} ast
  98093. * @param {?} context
  98094. * @return {?}
  98095. */
  98096. function (ast, context) { };
  98097. /**
  98098. * @param {?} ast
  98099. * @param {?} context
  98100. * @return {?}
  98101. */
  98102. SimpleExpressionChecker.prototype.visitConditional = /**
  98103. * @param {?} ast
  98104. * @param {?} context
  98105. * @return {?}
  98106. */
  98107. function (ast, context) { };
  98108. /**
  98109. * @param {?} ast
  98110. * @param {?} context
  98111. * @return {?}
  98112. */
  98113. SimpleExpressionChecker.prototype.visitPipe = /**
  98114. * @param {?} ast
  98115. * @param {?} context
  98116. * @return {?}
  98117. */
  98118. function (ast, context) { this.errors.push('pipes'); };
  98119. /**
  98120. * @param {?} ast
  98121. * @param {?} context
  98122. * @return {?}
  98123. */
  98124. SimpleExpressionChecker.prototype.visitKeyedRead = /**
  98125. * @param {?} ast
  98126. * @param {?} context
  98127. * @return {?}
  98128. */
  98129. function (ast, context) { };
  98130. /**
  98131. * @param {?} ast
  98132. * @param {?} context
  98133. * @return {?}
  98134. */
  98135. SimpleExpressionChecker.prototype.visitKeyedWrite = /**
  98136. * @param {?} ast
  98137. * @param {?} context
  98138. * @return {?}
  98139. */
  98140. function (ast, context) { };
  98141. /**
  98142. * @param {?} asts
  98143. * @return {?}
  98144. */
  98145. SimpleExpressionChecker.prototype.visitAll = /**
  98146. * @param {?} asts
  98147. * @return {?}
  98148. */
  98149. function (asts) {
  98150. var _this = this;
  98151. return asts.map(function (node) { return node.visit(_this); });
  98152. };
  98153. /**
  98154. * @param {?} ast
  98155. * @param {?} context
  98156. * @return {?}
  98157. */
  98158. SimpleExpressionChecker.prototype.visitChain = /**
  98159. * @param {?} ast
  98160. * @param {?} context
  98161. * @return {?}
  98162. */
  98163. function (ast, context) { };
  98164. /**
  98165. * @param {?} ast
  98166. * @param {?} context
  98167. * @return {?}
  98168. */
  98169. SimpleExpressionChecker.prototype.visitQuote = /**
  98170. * @param {?} ast
  98171. * @param {?} context
  98172. * @return {?}
  98173. */
  98174. function (ast, context) { };
  98175. return SimpleExpressionChecker;
  98176. }());
  98177. /**
  98178. * @fileoverview added by tsickle
  98179. * @suppress {checkTypes} checked by tsc
  98180. */
  98181. var ParseLocation = /** @class */ (function () {
  98182. function ParseLocation(file, offset, line, col) {
  98183. this.file = file;
  98184. this.offset = offset;
  98185. this.line = line;
  98186. this.col = col;
  98187. }
  98188. /**
  98189. * @return {?}
  98190. */
  98191. ParseLocation.prototype.toString = /**
  98192. * @return {?}
  98193. */
  98194. function () {
  98195. return this.offset != null ? this.file.url + "@" + this.line + ":" + this.col : this.file.url;
  98196. };
  98197. /**
  98198. * @param {?} delta
  98199. * @return {?}
  98200. */
  98201. ParseLocation.prototype.moveBy = /**
  98202. * @param {?} delta
  98203. * @return {?}
  98204. */
  98205. function (delta) {
  98206. var /** @type {?} */ source = this.file.content;
  98207. var /** @type {?} */ len = source.length;
  98208. var /** @type {?} */ offset = this.offset;
  98209. var /** @type {?} */ line = this.line;
  98210. var /** @type {?} */ col = this.col;
  98211. while (offset > 0 && delta < 0) {
  98212. offset--;
  98213. delta++;
  98214. var /** @type {?} */ ch = source.charCodeAt(offset);
  98215. if (ch == $LF) {
  98216. line--;
  98217. var /** @type {?} */ priorLine = source.substr(0, offset - 1).lastIndexOf(String.fromCharCode($LF));
  98218. col = priorLine > 0 ? offset - priorLine : offset;
  98219. }
  98220. else {
  98221. col--;
  98222. }
  98223. }
  98224. while (offset < len && delta > 0) {
  98225. var /** @type {?} */ ch = source.charCodeAt(offset);
  98226. offset++;
  98227. delta--;
  98228. if (ch == $LF) {
  98229. line++;
  98230. col = 0;
  98231. }
  98232. else {
  98233. col++;
  98234. }
  98235. }
  98236. return new ParseLocation(this.file, offset, line, col);
  98237. };
  98238. // Return the source around the location
  98239. // Up to `maxChars` or `maxLines` on each side of the location
  98240. /**
  98241. * @param {?} maxChars
  98242. * @param {?} maxLines
  98243. * @return {?}
  98244. */
  98245. ParseLocation.prototype.getContext = /**
  98246. * @param {?} maxChars
  98247. * @param {?} maxLines
  98248. * @return {?}
  98249. */
  98250. function (maxChars, maxLines) {
  98251. var /** @type {?} */ content = this.file.content;
  98252. var /** @type {?} */ startOffset = this.offset;
  98253. if (startOffset != null) {
  98254. if (startOffset > content.length - 1) {
  98255. startOffset = content.length - 1;
  98256. }
  98257. var /** @type {?} */ endOffset = startOffset;
  98258. var /** @type {?} */ ctxChars = 0;
  98259. var /** @type {?} */ ctxLines = 0;
  98260. while (ctxChars < maxChars && startOffset > 0) {
  98261. startOffset--;
  98262. ctxChars++;
  98263. if (content[startOffset] == '\n') {
  98264. if (++ctxLines == maxLines) {
  98265. break;
  98266. }
  98267. }
  98268. }
  98269. ctxChars = 0;
  98270. ctxLines = 0;
  98271. while (ctxChars < maxChars && endOffset < content.length - 1) {
  98272. endOffset++;
  98273. ctxChars++;
  98274. if (content[endOffset] == '\n') {
  98275. if (++ctxLines == maxLines) {
  98276. break;
  98277. }
  98278. }
  98279. }
  98280. return {
  98281. before: content.substring(startOffset, this.offset),
  98282. after: content.substring(this.offset, endOffset + 1),
  98283. };
  98284. }
  98285. return null;
  98286. };
  98287. return ParseLocation;
  98288. }());
  98289. var ParseSourceFile = /** @class */ (function () {
  98290. function ParseSourceFile(content, url) {
  98291. this.content = content;
  98292. this.url = url;
  98293. }
  98294. return ParseSourceFile;
  98295. }());
  98296. var ParseSourceSpan = /** @class */ (function () {
  98297. function ParseSourceSpan(start, end, details) {
  98298. if (details === void 0) { details = null; }
  98299. this.start = start;
  98300. this.end = end;
  98301. this.details = details;
  98302. }
  98303. /**
  98304. * @return {?}
  98305. */
  98306. ParseSourceSpan.prototype.toString = /**
  98307. * @return {?}
  98308. */
  98309. function () {
  98310. return this.start.file.content.substring(this.start.offset, this.end.offset);
  98311. };
  98312. return ParseSourceSpan;
  98313. }());
  98314. /** @enum {number} */
  98315. var ParseErrorLevel = {
  98316. WARNING: 0,
  98317. ERROR: 1,
  98318. };
  98319. ParseErrorLevel[ParseErrorLevel.WARNING] = "WARNING";
  98320. ParseErrorLevel[ParseErrorLevel.ERROR] = "ERROR";
  98321. var ParseError = /** @class */ (function () {
  98322. function ParseError(span, msg, level) {
  98323. if (level === void 0) { level = ParseErrorLevel.ERROR; }
  98324. this.span = span;
  98325. this.msg = msg;
  98326. this.level = level;
  98327. }
  98328. /**
  98329. * @return {?}
  98330. */
  98331. ParseError.prototype.contextualMessage = /**
  98332. * @return {?}
  98333. */
  98334. function () {
  98335. var /** @type {?} */ ctx = this.span.start.getContext(100, 3);
  98336. return ctx ? this.msg + " (\"" + ctx.before + "[" + ParseErrorLevel[this.level] + " ->]" + ctx.after + "\")" :
  98337. this.msg;
  98338. };
  98339. /**
  98340. * @return {?}
  98341. */
  98342. ParseError.prototype.toString = /**
  98343. * @return {?}
  98344. */
  98345. function () {
  98346. var /** @type {?} */ details = this.span.details ? ", " + this.span.details : '';
  98347. return this.contextualMessage() + ": " + this.span.start + details;
  98348. };
  98349. return ParseError;
  98350. }());
  98351. /**
  98352. * @param {?} kind
  98353. * @param {?} type
  98354. * @return {?}
  98355. */
  98356. function typeSourceSpan(kind, type) {
  98357. var /** @type {?} */ moduleUrl = identifierModuleUrl(type);
  98358. var /** @type {?} */ sourceFileName = moduleUrl != null ? "in " + kind + " " + identifierName(type) + " in " + moduleUrl :
  98359. "in " + kind + " " + identifierName(type);
  98360. var /** @type {?} */ sourceFile = new ParseSourceFile('', sourceFileName);
  98361. return new ParseSourceSpan(new ParseLocation(sourceFile, -1, -1, -1), new ParseLocation(sourceFile, -1, -1, -1));
  98362. }
  98363. /**
  98364. * @fileoverview added by tsickle
  98365. * @suppress {checkTypes} checked by tsc
  98366. */
  98367. /**
  98368. * @license
  98369. * Copyright Google Inc. All Rights Reserved.
  98370. *
  98371. * Use of this source code is governed by an MIT-style license that can be
  98372. * found in the LICENSE file at https://angular.io/license
  98373. */
  98374. /** @enum {number} */
  98375. var TokenType$1 = {
  98376. TAG_OPEN_START: 0,
  98377. TAG_OPEN_END: 1,
  98378. TAG_OPEN_END_VOID: 2,
  98379. TAG_CLOSE: 3,
  98380. TEXT: 4,
  98381. ESCAPABLE_RAW_TEXT: 5,
  98382. RAW_TEXT: 6,
  98383. COMMENT_START: 7,
  98384. COMMENT_END: 8,
  98385. CDATA_START: 9,
  98386. CDATA_END: 10,
  98387. ATTR_NAME: 11,
  98388. ATTR_VALUE: 12,
  98389. DOC_TYPE: 13,
  98390. EXPANSION_FORM_START: 14,
  98391. EXPANSION_CASE_VALUE: 15,
  98392. EXPANSION_CASE_EXP_START: 16,
  98393. EXPANSION_CASE_EXP_END: 17,
  98394. EXPANSION_FORM_END: 18,
  98395. EOF: 19,
  98396. };
  98397. TokenType$1[TokenType$1.TAG_OPEN_START] = "TAG_OPEN_START";
  98398. TokenType$1[TokenType$1.TAG_OPEN_END] = "TAG_OPEN_END";
  98399. TokenType$1[TokenType$1.TAG_OPEN_END_VOID] = "TAG_OPEN_END_VOID";
  98400. TokenType$1[TokenType$1.TAG_CLOSE] = "TAG_CLOSE";
  98401. TokenType$1[TokenType$1.TEXT] = "TEXT";
  98402. TokenType$1[TokenType$1.ESCAPABLE_RAW_TEXT] = "ESCAPABLE_RAW_TEXT";
  98403. TokenType$1[TokenType$1.RAW_TEXT] = "RAW_TEXT";
  98404. TokenType$1[TokenType$1.COMMENT_START] = "COMMENT_START";
  98405. TokenType$1[TokenType$1.COMMENT_END] = "COMMENT_END";
  98406. TokenType$1[TokenType$1.CDATA_START] = "CDATA_START";
  98407. TokenType$1[TokenType$1.CDATA_END] = "CDATA_END";
  98408. TokenType$1[TokenType$1.ATTR_NAME] = "ATTR_NAME";
  98409. TokenType$1[TokenType$1.ATTR_VALUE] = "ATTR_VALUE";
  98410. TokenType$1[TokenType$1.DOC_TYPE] = "DOC_TYPE";
  98411. TokenType$1[TokenType$1.EXPANSION_FORM_START] = "EXPANSION_FORM_START";
  98412. TokenType$1[TokenType$1.EXPANSION_CASE_VALUE] = "EXPANSION_CASE_VALUE";
  98413. TokenType$1[TokenType$1.EXPANSION_CASE_EXP_START] = "EXPANSION_CASE_EXP_START";
  98414. TokenType$1[TokenType$1.EXPANSION_CASE_EXP_END] = "EXPANSION_CASE_EXP_END";
  98415. TokenType$1[TokenType$1.EXPANSION_FORM_END] = "EXPANSION_FORM_END";
  98416. TokenType$1[TokenType$1.EOF] = "EOF";
  98417. var Token$1 = /** @class */ (function () {
  98418. function Token(type, parts, sourceSpan) {
  98419. this.type = type;
  98420. this.parts = parts;
  98421. this.sourceSpan = sourceSpan;
  98422. }
  98423. return Token;
  98424. }());
  98425. var TokenError = /** @class */ (function (_super) {
  98426. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(TokenError, _super);
  98427. function TokenError(errorMsg, tokenType, span) {
  98428. var _this = _super.call(this, span, errorMsg) || this;
  98429. _this.tokenType = tokenType;
  98430. return _this;
  98431. }
  98432. return TokenError;
  98433. }(ParseError));
  98434. var TokenizeResult = /** @class */ (function () {
  98435. function TokenizeResult(tokens, errors) {
  98436. this.tokens = tokens;
  98437. this.errors = errors;
  98438. }
  98439. return TokenizeResult;
  98440. }());
  98441. /**
  98442. * @param {?} source
  98443. * @param {?} url
  98444. * @param {?} getTagDefinition
  98445. * @param {?=} tokenizeExpansionForms
  98446. * @param {?=} interpolationConfig
  98447. * @return {?}
  98448. */
  98449. function tokenize(source, url, getTagDefinition, tokenizeExpansionForms, interpolationConfig) {
  98450. if (tokenizeExpansionForms === void 0) { tokenizeExpansionForms = false; }
  98451. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  98452. return new _Tokenizer(new ParseSourceFile(source, url), getTagDefinition, tokenizeExpansionForms, interpolationConfig)
  98453. .tokenize();
  98454. }
  98455. var _CR_OR_CRLF_REGEXP = /\r\n?/g;
  98456. /**
  98457. * @param {?} charCode
  98458. * @return {?}
  98459. */
  98460. function _unexpectedCharacterErrorMsg(charCode) {
  98461. var /** @type {?} */ char = charCode === $EOF ? 'EOF' : String.fromCharCode(charCode);
  98462. return "Unexpected character \"" + char + "\"";
  98463. }
  98464. /**
  98465. * @param {?} entitySrc
  98466. * @return {?}
  98467. */
  98468. function _unknownEntityErrorMsg(entitySrc) {
  98469. return "Unknown entity \"" + entitySrc + "\" - use the \"&#<decimal>;\" or \"&#x<hex>;\" syntax";
  98470. }
  98471. var _ControlFlowError = /** @class */ (function () {
  98472. function _ControlFlowError(error) {
  98473. this.error = error;
  98474. }
  98475. return _ControlFlowError;
  98476. }());
  98477. var _Tokenizer = /** @class */ (function () {
  98478. /**
  98479. * @param _file The html source
  98480. * @param _getTagDefinition
  98481. * @param _tokenizeIcu Whether to tokenize ICU messages (considered as text nodes when false)
  98482. * @param _interpolationConfig
  98483. */
  98484. function _Tokenizer(_file, _getTagDefinition, _tokenizeIcu, _interpolationConfig) {
  98485. if (_interpolationConfig === void 0) { _interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  98486. this._file = _file;
  98487. this._getTagDefinition = _getTagDefinition;
  98488. this._tokenizeIcu = _tokenizeIcu;
  98489. this._interpolationConfig = _interpolationConfig;
  98490. this._peek = -1;
  98491. this._nextPeek = -1;
  98492. this._index = -1;
  98493. this._line = 0;
  98494. this._column = -1;
  98495. this._expansionCaseStack = [];
  98496. this._inInterpolation = false;
  98497. this.tokens = [];
  98498. this.errors = [];
  98499. this._input = _file.content;
  98500. this._length = _file.content.length;
  98501. this._advance();
  98502. }
  98503. /**
  98504. * @param {?} content
  98505. * @return {?}
  98506. */
  98507. _Tokenizer.prototype._processCarriageReturns = /**
  98508. * @param {?} content
  98509. * @return {?}
  98510. */
  98511. function (content) {
  98512. // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream
  98513. // In order to keep the original position in the source, we can not
  98514. // pre-process it.
  98515. // Instead CRs are processed right before instantiating the tokens.
  98516. return content.replace(_CR_OR_CRLF_REGEXP, '\n');
  98517. };
  98518. /**
  98519. * @return {?}
  98520. */
  98521. _Tokenizer.prototype.tokenize = /**
  98522. * @return {?}
  98523. */
  98524. function () {
  98525. while (this._peek !== $EOF) {
  98526. var /** @type {?} */ start = this._getLocation();
  98527. try {
  98528. if (this._attemptCharCode($LT)) {
  98529. if (this._attemptCharCode($BANG)) {
  98530. if (this._attemptCharCode($LBRACKET)) {
  98531. this._consumeCdata(start);
  98532. }
  98533. else if (this._attemptCharCode($MINUS)) {
  98534. this._consumeComment(start);
  98535. }
  98536. else {
  98537. this._consumeDocType(start);
  98538. }
  98539. }
  98540. else if (this._attemptCharCode($SLASH)) {
  98541. this._consumeTagClose(start);
  98542. }
  98543. else {
  98544. this._consumeTagOpen(start);
  98545. }
  98546. }
  98547. else if (!(this._tokenizeIcu && this._tokenizeExpansionForm())) {
  98548. this._consumeText();
  98549. }
  98550. }
  98551. catch (/** @type {?} */ e) {
  98552. if (e instanceof _ControlFlowError) {
  98553. this.errors.push(e.error);
  98554. }
  98555. else {
  98556. throw e;
  98557. }
  98558. }
  98559. }
  98560. this._beginToken(TokenType$1.EOF);
  98561. this._endToken([]);
  98562. return new TokenizeResult(mergeTextTokens(this.tokens), this.errors);
  98563. };
  98564. /**
  98565. * \@internal
  98566. * @return {?} whether an ICU token has been created
  98567. */
  98568. _Tokenizer.prototype._tokenizeExpansionForm = /**
  98569. * \@internal
  98570. * @return {?} whether an ICU token has been created
  98571. */
  98572. function () {
  98573. if (isExpansionFormStart(this._input, this._index, this._interpolationConfig)) {
  98574. this._consumeExpansionFormStart();
  98575. return true;
  98576. }
  98577. if (isExpansionCaseStart(this._peek) && this._isInExpansionForm()) {
  98578. this._consumeExpansionCaseStart();
  98579. return true;
  98580. }
  98581. if (this._peek === $RBRACE) {
  98582. if (this._isInExpansionCase()) {
  98583. this._consumeExpansionCaseEnd();
  98584. return true;
  98585. }
  98586. if (this._isInExpansionForm()) {
  98587. this._consumeExpansionFormEnd();
  98588. return true;
  98589. }
  98590. }
  98591. return false;
  98592. };
  98593. /**
  98594. * @return {?}
  98595. */
  98596. _Tokenizer.prototype._getLocation = /**
  98597. * @return {?}
  98598. */
  98599. function () {
  98600. return new ParseLocation(this._file, this._index, this._line, this._column);
  98601. };
  98602. /**
  98603. * @param {?=} start
  98604. * @param {?=} end
  98605. * @return {?}
  98606. */
  98607. _Tokenizer.prototype._getSpan = /**
  98608. * @param {?=} start
  98609. * @param {?=} end
  98610. * @return {?}
  98611. */
  98612. function (start, end) {
  98613. if (start === void 0) { start = this._getLocation(); }
  98614. if (end === void 0) { end = this._getLocation(); }
  98615. return new ParseSourceSpan(start, end);
  98616. };
  98617. /**
  98618. * @param {?} type
  98619. * @param {?=} start
  98620. * @return {?}
  98621. */
  98622. _Tokenizer.prototype._beginToken = /**
  98623. * @param {?} type
  98624. * @param {?=} start
  98625. * @return {?}
  98626. */
  98627. function (type, start) {
  98628. if (start === void 0) { start = this._getLocation(); }
  98629. this._currentTokenStart = start;
  98630. this._currentTokenType = type;
  98631. };
  98632. /**
  98633. * @param {?} parts
  98634. * @param {?=} end
  98635. * @return {?}
  98636. */
  98637. _Tokenizer.prototype._endToken = /**
  98638. * @param {?} parts
  98639. * @param {?=} end
  98640. * @return {?}
  98641. */
  98642. function (parts, end) {
  98643. if (end === void 0) { end = this._getLocation(); }
  98644. var /** @type {?} */ token = new Token$1(this._currentTokenType, parts, new ParseSourceSpan(this._currentTokenStart, end));
  98645. this.tokens.push(token);
  98646. this._currentTokenStart = /** @type {?} */ ((null));
  98647. this._currentTokenType = /** @type {?} */ ((null));
  98648. return token;
  98649. };
  98650. /**
  98651. * @param {?} msg
  98652. * @param {?} span
  98653. * @return {?}
  98654. */
  98655. _Tokenizer.prototype._createError = /**
  98656. * @param {?} msg
  98657. * @param {?} span
  98658. * @return {?}
  98659. */
  98660. function (msg, span) {
  98661. if (this._isInExpansionForm()) {
  98662. msg += " (Do you have an unescaped \"{\" in your template? Use \"{{ '{' }}\") to escape it.)";
  98663. }
  98664. var /** @type {?} */ error = new TokenError(msg, this._currentTokenType, span);
  98665. this._currentTokenStart = /** @type {?} */ ((null));
  98666. this._currentTokenType = /** @type {?} */ ((null));
  98667. return new _ControlFlowError(error);
  98668. };
  98669. /**
  98670. * @return {?}
  98671. */
  98672. _Tokenizer.prototype._advance = /**
  98673. * @return {?}
  98674. */
  98675. function () {
  98676. if (this._index >= this._length) {
  98677. throw this._createError(_unexpectedCharacterErrorMsg($EOF), this._getSpan());
  98678. }
  98679. if (this._peek === $LF) {
  98680. this._line++;
  98681. this._column = 0;
  98682. }
  98683. else if (this._peek !== $LF && this._peek !== $CR) {
  98684. this._column++;
  98685. }
  98686. this._index++;
  98687. this._peek = this._index >= this._length ? $EOF : this._input.charCodeAt(this._index);
  98688. this._nextPeek =
  98689. this._index + 1 >= this._length ? $EOF : this._input.charCodeAt(this._index + 1);
  98690. };
  98691. /**
  98692. * @param {?} charCode
  98693. * @return {?}
  98694. */
  98695. _Tokenizer.prototype._attemptCharCode = /**
  98696. * @param {?} charCode
  98697. * @return {?}
  98698. */
  98699. function (charCode) {
  98700. if (this._peek === charCode) {
  98701. this._advance();
  98702. return true;
  98703. }
  98704. return false;
  98705. };
  98706. /**
  98707. * @param {?} charCode
  98708. * @return {?}
  98709. */
  98710. _Tokenizer.prototype._attemptCharCodeCaseInsensitive = /**
  98711. * @param {?} charCode
  98712. * @return {?}
  98713. */
  98714. function (charCode) {
  98715. if (compareCharCodeCaseInsensitive(this._peek, charCode)) {
  98716. this._advance();
  98717. return true;
  98718. }
  98719. return false;
  98720. };
  98721. /**
  98722. * @param {?} charCode
  98723. * @return {?}
  98724. */
  98725. _Tokenizer.prototype._requireCharCode = /**
  98726. * @param {?} charCode
  98727. * @return {?}
  98728. */
  98729. function (charCode) {
  98730. var /** @type {?} */ location = this._getLocation();
  98731. if (!this._attemptCharCode(charCode)) {
  98732. throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(location, location));
  98733. }
  98734. };
  98735. /**
  98736. * @param {?} chars
  98737. * @return {?}
  98738. */
  98739. _Tokenizer.prototype._attemptStr = /**
  98740. * @param {?} chars
  98741. * @return {?}
  98742. */
  98743. function (chars) {
  98744. var /** @type {?} */ len = chars.length;
  98745. if (this._index + len > this._length) {
  98746. return false;
  98747. }
  98748. var /** @type {?} */ initialPosition = this._savePosition();
  98749. for (var /** @type {?} */ i = 0; i < len; i++) {
  98750. if (!this._attemptCharCode(chars.charCodeAt(i))) {
  98751. // If attempting to parse the string fails, we want to reset the parser
  98752. // to where it was before the attempt
  98753. this._restorePosition(initialPosition);
  98754. return false;
  98755. }
  98756. }
  98757. return true;
  98758. };
  98759. /**
  98760. * @param {?} chars
  98761. * @return {?}
  98762. */
  98763. _Tokenizer.prototype._attemptStrCaseInsensitive = /**
  98764. * @param {?} chars
  98765. * @return {?}
  98766. */
  98767. function (chars) {
  98768. for (var /** @type {?} */ i = 0; i < chars.length; i++) {
  98769. if (!this._attemptCharCodeCaseInsensitive(chars.charCodeAt(i))) {
  98770. return false;
  98771. }
  98772. }
  98773. return true;
  98774. };
  98775. /**
  98776. * @param {?} chars
  98777. * @return {?}
  98778. */
  98779. _Tokenizer.prototype._requireStr = /**
  98780. * @param {?} chars
  98781. * @return {?}
  98782. */
  98783. function (chars) {
  98784. var /** @type {?} */ location = this._getLocation();
  98785. if (!this._attemptStr(chars)) {
  98786. throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(location));
  98787. }
  98788. };
  98789. /**
  98790. * @param {?} predicate
  98791. * @return {?}
  98792. */
  98793. _Tokenizer.prototype._attemptCharCodeUntilFn = /**
  98794. * @param {?} predicate
  98795. * @return {?}
  98796. */
  98797. function (predicate) {
  98798. while (!predicate(this._peek)) {
  98799. this._advance();
  98800. }
  98801. };
  98802. /**
  98803. * @param {?} predicate
  98804. * @param {?} len
  98805. * @return {?}
  98806. */
  98807. _Tokenizer.prototype._requireCharCodeUntilFn = /**
  98808. * @param {?} predicate
  98809. * @param {?} len
  98810. * @return {?}
  98811. */
  98812. function (predicate, len) {
  98813. var /** @type {?} */ start = this._getLocation();
  98814. this._attemptCharCodeUntilFn(predicate);
  98815. if (this._index - start.offset < len) {
  98816. throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan(start, start));
  98817. }
  98818. };
  98819. /**
  98820. * @param {?} char
  98821. * @return {?}
  98822. */
  98823. _Tokenizer.prototype._attemptUntilChar = /**
  98824. * @param {?} char
  98825. * @return {?}
  98826. */
  98827. function (char) {
  98828. while (this._peek !== char) {
  98829. this._advance();
  98830. }
  98831. };
  98832. /**
  98833. * @param {?} decodeEntities
  98834. * @return {?}
  98835. */
  98836. _Tokenizer.prototype._readChar = /**
  98837. * @param {?} decodeEntities
  98838. * @return {?}
  98839. */
  98840. function (decodeEntities) {
  98841. if (decodeEntities && this._peek === $AMPERSAND) {
  98842. return this._decodeEntity();
  98843. }
  98844. else {
  98845. var /** @type {?} */ index = this._index;
  98846. this._advance();
  98847. return this._input[index];
  98848. }
  98849. };
  98850. /**
  98851. * @return {?}
  98852. */
  98853. _Tokenizer.prototype._decodeEntity = /**
  98854. * @return {?}
  98855. */
  98856. function () {
  98857. var /** @type {?} */ start = this._getLocation();
  98858. this._advance();
  98859. if (this._attemptCharCode($HASH)) {
  98860. var /** @type {?} */ isHex = this._attemptCharCode($x) || this._attemptCharCode($X);
  98861. var /** @type {?} */ numberStart = this._getLocation().offset;
  98862. this._attemptCharCodeUntilFn(isDigitEntityEnd);
  98863. if (this._peek != $SEMICOLON) {
  98864. throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan());
  98865. }
  98866. this._advance();
  98867. var /** @type {?} */ strNum = this._input.substring(numberStart, this._index - 1);
  98868. try {
  98869. var /** @type {?} */ charCode = parseInt(strNum, isHex ? 16 : 10);
  98870. return String.fromCharCode(charCode);
  98871. }
  98872. catch (/** @type {?} */ e) {
  98873. var /** @type {?} */ entity = this._input.substring(start.offset + 1, this._index - 1);
  98874. throw this._createError(_unknownEntityErrorMsg(entity), this._getSpan(start));
  98875. }
  98876. }
  98877. else {
  98878. var /** @type {?} */ startPosition = this._savePosition();
  98879. this._attemptCharCodeUntilFn(isNamedEntityEnd);
  98880. if (this._peek != $SEMICOLON) {
  98881. this._restorePosition(startPosition);
  98882. return '&';
  98883. }
  98884. this._advance();
  98885. var /** @type {?} */ name_1 = this._input.substring(start.offset + 1, this._index - 1);
  98886. var /** @type {?} */ char = NAMED_ENTITIES[name_1];
  98887. if (!char) {
  98888. throw this._createError(_unknownEntityErrorMsg(name_1), this._getSpan(start));
  98889. }
  98890. return char;
  98891. }
  98892. };
  98893. /**
  98894. * @param {?} decodeEntities
  98895. * @param {?} firstCharOfEnd
  98896. * @param {?} attemptEndRest
  98897. * @return {?}
  98898. */
  98899. _Tokenizer.prototype._consumeRawText = /**
  98900. * @param {?} decodeEntities
  98901. * @param {?} firstCharOfEnd
  98902. * @param {?} attemptEndRest
  98903. * @return {?}
  98904. */
  98905. function (decodeEntities, firstCharOfEnd, attemptEndRest) {
  98906. var /** @type {?} */ tagCloseStart;
  98907. var /** @type {?} */ textStart = this._getLocation();
  98908. this._beginToken(decodeEntities ? TokenType$1.ESCAPABLE_RAW_TEXT : TokenType$1.RAW_TEXT, textStart);
  98909. var /** @type {?} */ parts = [];
  98910. while (true) {
  98911. tagCloseStart = this._getLocation();
  98912. if (this._attemptCharCode(firstCharOfEnd) && attemptEndRest()) {
  98913. break;
  98914. }
  98915. if (this._index > tagCloseStart.offset) {
  98916. // add the characters consumed by the previous if statement to the output
  98917. parts.push(this._input.substring(tagCloseStart.offset, this._index));
  98918. }
  98919. while (this._peek !== firstCharOfEnd) {
  98920. parts.push(this._readChar(decodeEntities));
  98921. }
  98922. }
  98923. return this._endToken([this._processCarriageReturns(parts.join(''))], tagCloseStart);
  98924. };
  98925. /**
  98926. * @param {?} start
  98927. * @return {?}
  98928. */
  98929. _Tokenizer.prototype._consumeComment = /**
  98930. * @param {?} start
  98931. * @return {?}
  98932. */
  98933. function (start) {
  98934. var _this = this;
  98935. this._beginToken(TokenType$1.COMMENT_START, start);
  98936. this._requireCharCode($MINUS);
  98937. this._endToken([]);
  98938. var /** @type {?} */ textToken = this._consumeRawText(false, $MINUS, function () { return _this._attemptStr('->'); });
  98939. this._beginToken(TokenType$1.COMMENT_END, textToken.sourceSpan.end);
  98940. this._endToken([]);
  98941. };
  98942. /**
  98943. * @param {?} start
  98944. * @return {?}
  98945. */
  98946. _Tokenizer.prototype._consumeCdata = /**
  98947. * @param {?} start
  98948. * @return {?}
  98949. */
  98950. function (start) {
  98951. var _this = this;
  98952. this._beginToken(TokenType$1.CDATA_START, start);
  98953. this._requireStr('CDATA[');
  98954. this._endToken([]);
  98955. var /** @type {?} */ textToken = this._consumeRawText(false, $RBRACKET, function () { return _this._attemptStr(']>'); });
  98956. this._beginToken(TokenType$1.CDATA_END, textToken.sourceSpan.end);
  98957. this._endToken([]);
  98958. };
  98959. /**
  98960. * @param {?} start
  98961. * @return {?}
  98962. */
  98963. _Tokenizer.prototype._consumeDocType = /**
  98964. * @param {?} start
  98965. * @return {?}
  98966. */
  98967. function (start) {
  98968. this._beginToken(TokenType$1.DOC_TYPE, start);
  98969. this._attemptUntilChar($GT);
  98970. this._advance();
  98971. this._endToken([this._input.substring(start.offset + 2, this._index - 1)]);
  98972. };
  98973. /**
  98974. * @return {?}
  98975. */
  98976. _Tokenizer.prototype._consumePrefixAndName = /**
  98977. * @return {?}
  98978. */
  98979. function () {
  98980. var /** @type {?} */ nameOrPrefixStart = this._index;
  98981. var /** @type {?} */ prefix = /** @type {?} */ ((null));
  98982. while (this._peek !== $COLON && !isPrefixEnd(this._peek)) {
  98983. this._advance();
  98984. }
  98985. var /** @type {?} */ nameStart;
  98986. if (this._peek === $COLON) {
  98987. this._advance();
  98988. prefix = this._input.substring(nameOrPrefixStart, this._index - 1);
  98989. nameStart = this._index;
  98990. }
  98991. else {
  98992. nameStart = nameOrPrefixStart;
  98993. }
  98994. this._requireCharCodeUntilFn(isNameEnd, this._index === nameStart ? 1 : 0);
  98995. var /** @type {?} */ name = this._input.substring(nameStart, this._index);
  98996. return [prefix, name];
  98997. };
  98998. /**
  98999. * @param {?} start
  99000. * @return {?}
  99001. */
  99002. _Tokenizer.prototype._consumeTagOpen = /**
  99003. * @param {?} start
  99004. * @return {?}
  99005. */
  99006. function (start) {
  99007. var /** @type {?} */ savedPos = this._savePosition();
  99008. var /** @type {?} */ tagName;
  99009. var /** @type {?} */ lowercaseTagName;
  99010. try {
  99011. if (!isAsciiLetter(this._peek)) {
  99012. throw this._createError(_unexpectedCharacterErrorMsg(this._peek), this._getSpan());
  99013. }
  99014. var /** @type {?} */ nameStart = this._index;
  99015. this._consumeTagOpenStart(start);
  99016. tagName = this._input.substring(nameStart, this._index);
  99017. lowercaseTagName = tagName.toLowerCase();
  99018. this._attemptCharCodeUntilFn(isNotWhitespace);
  99019. while (this._peek !== $SLASH && this._peek !== $GT) {
  99020. this._consumeAttributeName();
  99021. this._attemptCharCodeUntilFn(isNotWhitespace);
  99022. if (this._attemptCharCode($EQ)) {
  99023. this._attemptCharCodeUntilFn(isNotWhitespace);
  99024. this._consumeAttributeValue();
  99025. }
  99026. this._attemptCharCodeUntilFn(isNotWhitespace);
  99027. }
  99028. this._consumeTagOpenEnd();
  99029. }
  99030. catch (/** @type {?} */ e) {
  99031. if (e instanceof _ControlFlowError) {
  99032. // When the start tag is invalid, assume we want a "<"
  99033. this._restorePosition(savedPos);
  99034. // Back to back text tokens are merged at the end
  99035. this._beginToken(TokenType$1.TEXT, start);
  99036. this._endToken(['<']);
  99037. return;
  99038. }
  99039. throw e;
  99040. }
  99041. var /** @type {?} */ contentTokenType = this._getTagDefinition(tagName).contentType;
  99042. if (contentTokenType === TagContentType.RAW_TEXT) {
  99043. this._consumeRawTextWithTagClose(lowercaseTagName, false);
  99044. }
  99045. else if (contentTokenType === TagContentType.ESCAPABLE_RAW_TEXT) {
  99046. this._consumeRawTextWithTagClose(lowercaseTagName, true);
  99047. }
  99048. };
  99049. /**
  99050. * @param {?} lowercaseTagName
  99051. * @param {?} decodeEntities
  99052. * @return {?}
  99053. */
  99054. _Tokenizer.prototype._consumeRawTextWithTagClose = /**
  99055. * @param {?} lowercaseTagName
  99056. * @param {?} decodeEntities
  99057. * @return {?}
  99058. */
  99059. function (lowercaseTagName, decodeEntities) {
  99060. var _this = this;
  99061. var /** @type {?} */ textToken = this._consumeRawText(decodeEntities, $LT, function () {
  99062. if (!_this._attemptCharCode($SLASH))
  99063. return false;
  99064. _this._attemptCharCodeUntilFn(isNotWhitespace);
  99065. if (!_this._attemptStrCaseInsensitive(lowercaseTagName))
  99066. return false;
  99067. _this._attemptCharCodeUntilFn(isNotWhitespace);
  99068. return _this._attemptCharCode($GT);
  99069. });
  99070. this._beginToken(TokenType$1.TAG_CLOSE, textToken.sourceSpan.end);
  99071. this._endToken([/** @type {?} */ ((null)), lowercaseTagName]);
  99072. };
  99073. /**
  99074. * @param {?} start
  99075. * @return {?}
  99076. */
  99077. _Tokenizer.prototype._consumeTagOpenStart = /**
  99078. * @param {?} start
  99079. * @return {?}
  99080. */
  99081. function (start) {
  99082. this._beginToken(TokenType$1.TAG_OPEN_START, start);
  99083. var /** @type {?} */ parts = this._consumePrefixAndName();
  99084. this._endToken(parts);
  99085. };
  99086. /**
  99087. * @return {?}
  99088. */
  99089. _Tokenizer.prototype._consumeAttributeName = /**
  99090. * @return {?}
  99091. */
  99092. function () {
  99093. this._beginToken(TokenType$1.ATTR_NAME);
  99094. var /** @type {?} */ prefixAndName = this._consumePrefixAndName();
  99095. this._endToken(prefixAndName);
  99096. };
  99097. /**
  99098. * @return {?}
  99099. */
  99100. _Tokenizer.prototype._consumeAttributeValue = /**
  99101. * @return {?}
  99102. */
  99103. function () {
  99104. this._beginToken(TokenType$1.ATTR_VALUE);
  99105. var /** @type {?} */ value;
  99106. if (this._peek === $SQ || this._peek === $DQ) {
  99107. var /** @type {?} */ quoteChar = this._peek;
  99108. this._advance();
  99109. var /** @type {?} */ parts = [];
  99110. while (this._peek !== quoteChar) {
  99111. parts.push(this._readChar(true));
  99112. }
  99113. value = parts.join('');
  99114. this._advance();
  99115. }
  99116. else {
  99117. var /** @type {?} */ valueStart = this._index;
  99118. this._requireCharCodeUntilFn(isNameEnd, 1);
  99119. value = this._input.substring(valueStart, this._index);
  99120. }
  99121. this._endToken([this._processCarriageReturns(value)]);
  99122. };
  99123. /**
  99124. * @return {?}
  99125. */
  99126. _Tokenizer.prototype._consumeTagOpenEnd = /**
  99127. * @return {?}
  99128. */
  99129. function () {
  99130. var /** @type {?} */ tokenType = this._attemptCharCode($SLASH) ? TokenType$1.TAG_OPEN_END_VOID : TokenType$1.TAG_OPEN_END;
  99131. this._beginToken(tokenType);
  99132. this._requireCharCode($GT);
  99133. this._endToken([]);
  99134. };
  99135. /**
  99136. * @param {?} start
  99137. * @return {?}
  99138. */
  99139. _Tokenizer.prototype._consumeTagClose = /**
  99140. * @param {?} start
  99141. * @return {?}
  99142. */
  99143. function (start) {
  99144. this._beginToken(TokenType$1.TAG_CLOSE, start);
  99145. this._attemptCharCodeUntilFn(isNotWhitespace);
  99146. var /** @type {?} */ prefixAndName = this._consumePrefixAndName();
  99147. this._attemptCharCodeUntilFn(isNotWhitespace);
  99148. this._requireCharCode($GT);
  99149. this._endToken(prefixAndName);
  99150. };
  99151. /**
  99152. * @return {?}
  99153. */
  99154. _Tokenizer.prototype._consumeExpansionFormStart = /**
  99155. * @return {?}
  99156. */
  99157. function () {
  99158. this._beginToken(TokenType$1.EXPANSION_FORM_START, this._getLocation());
  99159. this._requireCharCode($LBRACE);
  99160. this._endToken([]);
  99161. this._expansionCaseStack.push(TokenType$1.EXPANSION_FORM_START);
  99162. this._beginToken(TokenType$1.RAW_TEXT, this._getLocation());
  99163. var /** @type {?} */ condition = this._readUntil($COMMA);
  99164. this._endToken([condition], this._getLocation());
  99165. this._requireCharCode($COMMA);
  99166. this._attemptCharCodeUntilFn(isNotWhitespace);
  99167. this._beginToken(TokenType$1.RAW_TEXT, this._getLocation());
  99168. var /** @type {?} */ type = this._readUntil($COMMA);
  99169. this._endToken([type], this._getLocation());
  99170. this._requireCharCode($COMMA);
  99171. this._attemptCharCodeUntilFn(isNotWhitespace);
  99172. };
  99173. /**
  99174. * @return {?}
  99175. */
  99176. _Tokenizer.prototype._consumeExpansionCaseStart = /**
  99177. * @return {?}
  99178. */
  99179. function () {
  99180. this._beginToken(TokenType$1.EXPANSION_CASE_VALUE, this._getLocation());
  99181. var /** @type {?} */ value = this._readUntil($LBRACE).trim();
  99182. this._endToken([value], this._getLocation());
  99183. this._attemptCharCodeUntilFn(isNotWhitespace);
  99184. this._beginToken(TokenType$1.EXPANSION_CASE_EXP_START, this._getLocation());
  99185. this._requireCharCode($LBRACE);
  99186. this._endToken([], this._getLocation());
  99187. this._attemptCharCodeUntilFn(isNotWhitespace);
  99188. this._expansionCaseStack.push(TokenType$1.EXPANSION_CASE_EXP_START);
  99189. };
  99190. /**
  99191. * @return {?}
  99192. */
  99193. _Tokenizer.prototype._consumeExpansionCaseEnd = /**
  99194. * @return {?}
  99195. */
  99196. function () {
  99197. this._beginToken(TokenType$1.EXPANSION_CASE_EXP_END, this._getLocation());
  99198. this._requireCharCode($RBRACE);
  99199. this._endToken([], this._getLocation());
  99200. this._attemptCharCodeUntilFn(isNotWhitespace);
  99201. this._expansionCaseStack.pop();
  99202. };
  99203. /**
  99204. * @return {?}
  99205. */
  99206. _Tokenizer.prototype._consumeExpansionFormEnd = /**
  99207. * @return {?}
  99208. */
  99209. function () {
  99210. this._beginToken(TokenType$1.EXPANSION_FORM_END, this._getLocation());
  99211. this._requireCharCode($RBRACE);
  99212. this._endToken([]);
  99213. this._expansionCaseStack.pop();
  99214. };
  99215. /**
  99216. * @return {?}
  99217. */
  99218. _Tokenizer.prototype._consumeText = /**
  99219. * @return {?}
  99220. */
  99221. function () {
  99222. var /** @type {?} */ start = this._getLocation();
  99223. this._beginToken(TokenType$1.TEXT, start);
  99224. var /** @type {?} */ parts = [];
  99225. do {
  99226. if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) {
  99227. parts.push(this._interpolationConfig.start);
  99228. this._inInterpolation = true;
  99229. }
  99230. else if (this._interpolationConfig && this._inInterpolation &&
  99231. this._attemptStr(this._interpolationConfig.end)) {
  99232. parts.push(this._interpolationConfig.end);
  99233. this._inInterpolation = false;
  99234. }
  99235. else {
  99236. parts.push(this._readChar(true));
  99237. }
  99238. } while (!this._isTextEnd());
  99239. this._endToken([this._processCarriageReturns(parts.join(''))]);
  99240. };
  99241. /**
  99242. * @return {?}
  99243. */
  99244. _Tokenizer.prototype._isTextEnd = /**
  99245. * @return {?}
  99246. */
  99247. function () {
  99248. if (this._peek === $LT || this._peek === $EOF) {
  99249. return true;
  99250. }
  99251. if (this._tokenizeIcu && !this._inInterpolation) {
  99252. if (isExpansionFormStart(this._input, this._index, this._interpolationConfig)) {
  99253. // start of an expansion form
  99254. return true;
  99255. }
  99256. if (this._peek === $RBRACE && this._isInExpansionCase()) {
  99257. // end of and expansion case
  99258. return true;
  99259. }
  99260. }
  99261. return false;
  99262. };
  99263. /**
  99264. * @return {?}
  99265. */
  99266. _Tokenizer.prototype._savePosition = /**
  99267. * @return {?}
  99268. */
  99269. function () {
  99270. return [this._peek, this._index, this._column, this._line, this.tokens.length];
  99271. };
  99272. /**
  99273. * @param {?} char
  99274. * @return {?}
  99275. */
  99276. _Tokenizer.prototype._readUntil = /**
  99277. * @param {?} char
  99278. * @return {?}
  99279. */
  99280. function (char) {
  99281. var /** @type {?} */ start = this._index;
  99282. this._attemptUntilChar(char);
  99283. return this._input.substring(start, this._index);
  99284. };
  99285. /**
  99286. * @param {?} position
  99287. * @return {?}
  99288. */
  99289. _Tokenizer.prototype._restorePosition = /**
  99290. * @param {?} position
  99291. * @return {?}
  99292. */
  99293. function (position) {
  99294. this._peek = position[0];
  99295. this._index = position[1];
  99296. this._column = position[2];
  99297. this._line = position[3];
  99298. var /** @type {?} */ nbTokens = position[4];
  99299. if (nbTokens < this.tokens.length) {
  99300. // remove any extra tokens
  99301. this.tokens = this.tokens.slice(0, nbTokens);
  99302. }
  99303. };
  99304. /**
  99305. * @return {?}
  99306. */
  99307. _Tokenizer.prototype._isInExpansionCase = /**
  99308. * @return {?}
  99309. */
  99310. function () {
  99311. return this._expansionCaseStack.length > 0 &&
  99312. this._expansionCaseStack[this._expansionCaseStack.length - 1] ===
  99313. TokenType$1.EXPANSION_CASE_EXP_START;
  99314. };
  99315. /**
  99316. * @return {?}
  99317. */
  99318. _Tokenizer.prototype._isInExpansionForm = /**
  99319. * @return {?}
  99320. */
  99321. function () {
  99322. return this._expansionCaseStack.length > 0 &&
  99323. this._expansionCaseStack[this._expansionCaseStack.length - 1] ===
  99324. TokenType$1.EXPANSION_FORM_START;
  99325. };
  99326. return _Tokenizer;
  99327. }());
  99328. /**
  99329. * @param {?} code
  99330. * @return {?}
  99331. */
  99332. function isNotWhitespace(code) {
  99333. return !isWhitespace(code) || code === $EOF;
  99334. }
  99335. /**
  99336. * @param {?} code
  99337. * @return {?}
  99338. */
  99339. function isNameEnd(code) {
  99340. return isWhitespace(code) || code === $GT || code === $SLASH ||
  99341. code === $SQ || code === $DQ || code === $EQ;
  99342. }
  99343. /**
  99344. * @param {?} code
  99345. * @return {?}
  99346. */
  99347. function isPrefixEnd(code) {
  99348. return (code < $a || $z < code) && (code < $A || $Z < code) &&
  99349. (code < $0 || code > $9);
  99350. }
  99351. /**
  99352. * @param {?} code
  99353. * @return {?}
  99354. */
  99355. function isDigitEntityEnd(code) {
  99356. return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code);
  99357. }
  99358. /**
  99359. * @param {?} code
  99360. * @return {?}
  99361. */
  99362. function isNamedEntityEnd(code) {
  99363. return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code);
  99364. }
  99365. /**
  99366. * @param {?} input
  99367. * @param {?} offset
  99368. * @param {?} interpolationConfig
  99369. * @return {?}
  99370. */
  99371. function isExpansionFormStart(input, offset, interpolationConfig) {
  99372. var /** @type {?} */ isInterpolationStart = interpolationConfig ? input.indexOf(interpolationConfig.start, offset) == offset : false;
  99373. return input.charCodeAt(offset) == $LBRACE && !isInterpolationStart;
  99374. }
  99375. /**
  99376. * @param {?} peek
  99377. * @return {?}
  99378. */
  99379. function isExpansionCaseStart(peek) {
  99380. return peek === $EQ || isAsciiLetter(peek) || isDigit(peek);
  99381. }
  99382. /**
  99383. * @param {?} code1
  99384. * @param {?} code2
  99385. * @return {?}
  99386. */
  99387. function compareCharCodeCaseInsensitive(code1, code2) {
  99388. return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2);
  99389. }
  99390. /**
  99391. * @param {?} code
  99392. * @return {?}
  99393. */
  99394. function toUpperCaseCharCode(code) {
  99395. return code >= $a && code <= $z ? code - $a + $A : code;
  99396. }
  99397. /**
  99398. * @param {?} srcTokens
  99399. * @return {?}
  99400. */
  99401. function mergeTextTokens(srcTokens) {
  99402. var /** @type {?} */ dstTokens = [];
  99403. var /** @type {?} */ lastDstToken = undefined;
  99404. for (var /** @type {?} */ i = 0; i < srcTokens.length; i++) {
  99405. var /** @type {?} */ token = srcTokens[i];
  99406. if (lastDstToken && lastDstToken.type == TokenType$1.TEXT && token.type == TokenType$1.TEXT) {
  99407. lastDstToken.parts[0] += token.parts[0];
  99408. lastDstToken.sourceSpan.end = token.sourceSpan.end;
  99409. }
  99410. else {
  99411. lastDstToken = token;
  99412. dstTokens.push(lastDstToken);
  99413. }
  99414. }
  99415. return dstTokens;
  99416. }
  99417. /**
  99418. * @fileoverview added by tsickle
  99419. * @suppress {checkTypes} checked by tsc
  99420. */
  99421. /**
  99422. * @license
  99423. * Copyright Google Inc. All Rights Reserved.
  99424. *
  99425. * Use of this source code is governed by an MIT-style license that can be
  99426. * found in the LICENSE file at https://angular.io/license
  99427. */
  99428. var TreeError = /** @class */ (function (_super) {
  99429. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(TreeError, _super);
  99430. function TreeError(elementName, span, msg) {
  99431. var _this = _super.call(this, span, msg) || this;
  99432. _this.elementName = elementName;
  99433. return _this;
  99434. }
  99435. /**
  99436. * @param {?} elementName
  99437. * @param {?} span
  99438. * @param {?} msg
  99439. * @return {?}
  99440. */
  99441. TreeError.create = /**
  99442. * @param {?} elementName
  99443. * @param {?} span
  99444. * @param {?} msg
  99445. * @return {?}
  99446. */
  99447. function (elementName, span, msg) {
  99448. return new TreeError(elementName, span, msg);
  99449. };
  99450. return TreeError;
  99451. }(ParseError));
  99452. var ParseTreeResult = /** @class */ (function () {
  99453. function ParseTreeResult(rootNodes, errors) {
  99454. this.rootNodes = rootNodes;
  99455. this.errors = errors;
  99456. }
  99457. return ParseTreeResult;
  99458. }());
  99459. var Parser$1 = /** @class */ (function () {
  99460. function Parser(getTagDefinition) {
  99461. this.getTagDefinition = getTagDefinition;
  99462. }
  99463. /**
  99464. * @param {?} source
  99465. * @param {?} url
  99466. * @param {?=} parseExpansionForms
  99467. * @param {?=} interpolationConfig
  99468. * @return {?}
  99469. */
  99470. Parser.prototype.parse = /**
  99471. * @param {?} source
  99472. * @param {?} url
  99473. * @param {?=} parseExpansionForms
  99474. * @param {?=} interpolationConfig
  99475. * @return {?}
  99476. */
  99477. function (source, url, parseExpansionForms, interpolationConfig) {
  99478. if (parseExpansionForms === void 0) { parseExpansionForms = false; }
  99479. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  99480. var /** @type {?} */ tokensAndErrors = tokenize(source, url, this.getTagDefinition, parseExpansionForms, interpolationConfig);
  99481. var /** @type {?} */ treeAndErrors = new _TreeBuilder(tokensAndErrors.tokens, this.getTagDefinition).build();
  99482. return new ParseTreeResult(treeAndErrors.rootNodes, (/** @type {?} */ (tokensAndErrors.errors)).concat(treeAndErrors.errors));
  99483. };
  99484. return Parser;
  99485. }());
  99486. var _TreeBuilder = /** @class */ (function () {
  99487. function _TreeBuilder(tokens, getTagDefinition) {
  99488. this.tokens = tokens;
  99489. this.getTagDefinition = getTagDefinition;
  99490. this._index = -1;
  99491. this._rootNodes = [];
  99492. this._errors = [];
  99493. this._elementStack = [];
  99494. this._advance();
  99495. }
  99496. /**
  99497. * @return {?}
  99498. */
  99499. _TreeBuilder.prototype.build = /**
  99500. * @return {?}
  99501. */
  99502. function () {
  99503. while (this._peek.type !== TokenType$1.EOF) {
  99504. if (this._peek.type === TokenType$1.TAG_OPEN_START) {
  99505. this._consumeStartTag(this._advance());
  99506. }
  99507. else if (this._peek.type === TokenType$1.TAG_CLOSE) {
  99508. this._consumeEndTag(this._advance());
  99509. }
  99510. else if (this._peek.type === TokenType$1.CDATA_START) {
  99511. this._closeVoidElement();
  99512. this._consumeCdata(this._advance());
  99513. }
  99514. else if (this._peek.type === TokenType$1.COMMENT_START) {
  99515. this._closeVoidElement();
  99516. this._consumeComment(this._advance());
  99517. }
  99518. else if (this._peek.type === TokenType$1.TEXT || this._peek.type === TokenType$1.RAW_TEXT ||
  99519. this._peek.type === TokenType$1.ESCAPABLE_RAW_TEXT) {
  99520. this._closeVoidElement();
  99521. this._consumeText(this._advance());
  99522. }
  99523. else if (this._peek.type === TokenType$1.EXPANSION_FORM_START) {
  99524. this._consumeExpansion(this._advance());
  99525. }
  99526. else {
  99527. // Skip all other tokens...
  99528. this._advance();
  99529. }
  99530. }
  99531. return new ParseTreeResult(this._rootNodes, this._errors);
  99532. };
  99533. /**
  99534. * @return {?}
  99535. */
  99536. _TreeBuilder.prototype._advance = /**
  99537. * @return {?}
  99538. */
  99539. function () {
  99540. var /** @type {?} */ prev = this._peek;
  99541. if (this._index < this.tokens.length - 1) {
  99542. // Note: there is always an EOF token at the end
  99543. this._index++;
  99544. }
  99545. this._peek = this.tokens[this._index];
  99546. return prev;
  99547. };
  99548. /**
  99549. * @param {?} type
  99550. * @return {?}
  99551. */
  99552. _TreeBuilder.prototype._advanceIf = /**
  99553. * @param {?} type
  99554. * @return {?}
  99555. */
  99556. function (type) {
  99557. if (this._peek.type === type) {
  99558. return this._advance();
  99559. }
  99560. return null;
  99561. };
  99562. /**
  99563. * @param {?} startToken
  99564. * @return {?}
  99565. */
  99566. _TreeBuilder.prototype._consumeCdata = /**
  99567. * @param {?} startToken
  99568. * @return {?}
  99569. */
  99570. function (startToken) {
  99571. this._consumeText(this._advance());
  99572. this._advanceIf(TokenType$1.CDATA_END);
  99573. };
  99574. /**
  99575. * @param {?} token
  99576. * @return {?}
  99577. */
  99578. _TreeBuilder.prototype._consumeComment = /**
  99579. * @param {?} token
  99580. * @return {?}
  99581. */
  99582. function (token) {
  99583. var /** @type {?} */ text = this._advanceIf(TokenType$1.RAW_TEXT);
  99584. this._advanceIf(TokenType$1.COMMENT_END);
  99585. var /** @type {?} */ value = text != null ? text.parts[0].trim() : null;
  99586. this._addToParent(new Comment(value, token.sourceSpan));
  99587. };
  99588. /**
  99589. * @param {?} token
  99590. * @return {?}
  99591. */
  99592. _TreeBuilder.prototype._consumeExpansion = /**
  99593. * @param {?} token
  99594. * @return {?}
  99595. */
  99596. function (token) {
  99597. var /** @type {?} */ switchValue = this._advance();
  99598. var /** @type {?} */ type = this._advance();
  99599. var /** @type {?} */ cases = [];
  99600. // read =
  99601. while (this._peek.type === TokenType$1.EXPANSION_CASE_VALUE) {
  99602. var /** @type {?} */ expCase = this._parseExpansionCase();
  99603. if (!expCase)
  99604. return; // error
  99605. cases.push(expCase);
  99606. }
  99607. // read the final }
  99608. if (this._peek.type !== TokenType$1.EXPANSION_FORM_END) {
  99609. this._errors.push(TreeError.create(null, this._peek.sourceSpan, "Invalid ICU message. Missing '}'."));
  99610. return;
  99611. }
  99612. var /** @type {?} */ sourceSpan = new ParseSourceSpan(token.sourceSpan.start, this._peek.sourceSpan.end);
  99613. this._addToParent(new Expansion(switchValue.parts[0], type.parts[0], cases, sourceSpan, switchValue.sourceSpan));
  99614. this._advance();
  99615. };
  99616. /**
  99617. * @return {?}
  99618. */
  99619. _TreeBuilder.prototype._parseExpansionCase = /**
  99620. * @return {?}
  99621. */
  99622. function () {
  99623. var /** @type {?} */ value = this._advance();
  99624. // read {
  99625. if (this._peek.type !== TokenType$1.EXPANSION_CASE_EXP_START) {
  99626. this._errors.push(TreeError.create(null, this._peek.sourceSpan, "Invalid ICU message. Missing '{'."));
  99627. return null;
  99628. }
  99629. // read until }
  99630. var /** @type {?} */ start = this._advance();
  99631. var /** @type {?} */ exp = this._collectExpansionExpTokens(start);
  99632. if (!exp)
  99633. return null;
  99634. var /** @type {?} */ end = this._advance();
  99635. exp.push(new Token$1(TokenType$1.EOF, [], end.sourceSpan));
  99636. // parse everything in between { and }
  99637. var /** @type {?} */ parsedExp = new _TreeBuilder(exp, this.getTagDefinition).build();
  99638. if (parsedExp.errors.length > 0) {
  99639. this._errors = this._errors.concat(/** @type {?} */ (parsedExp.errors));
  99640. return null;
  99641. }
  99642. var /** @type {?} */ sourceSpan = new ParseSourceSpan(value.sourceSpan.start, end.sourceSpan.end);
  99643. var /** @type {?} */ expSourceSpan = new ParseSourceSpan(start.sourceSpan.start, end.sourceSpan.end);
  99644. return new ExpansionCase(value.parts[0], parsedExp.rootNodes, sourceSpan, value.sourceSpan, expSourceSpan);
  99645. };
  99646. /**
  99647. * @param {?} start
  99648. * @return {?}
  99649. */
  99650. _TreeBuilder.prototype._collectExpansionExpTokens = /**
  99651. * @param {?} start
  99652. * @return {?}
  99653. */
  99654. function (start) {
  99655. var /** @type {?} */ exp = [];
  99656. var /** @type {?} */ expansionFormStack = [TokenType$1.EXPANSION_CASE_EXP_START];
  99657. while (true) {
  99658. if (this._peek.type === TokenType$1.EXPANSION_FORM_START ||
  99659. this._peek.type === TokenType$1.EXPANSION_CASE_EXP_START) {
  99660. expansionFormStack.push(this._peek.type);
  99661. }
  99662. if (this._peek.type === TokenType$1.EXPANSION_CASE_EXP_END) {
  99663. if (lastOnStack(expansionFormStack, TokenType$1.EXPANSION_CASE_EXP_START)) {
  99664. expansionFormStack.pop();
  99665. if (expansionFormStack.length == 0)
  99666. return exp;
  99667. }
  99668. else {
  99669. this._errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'."));
  99670. return null;
  99671. }
  99672. }
  99673. if (this._peek.type === TokenType$1.EXPANSION_FORM_END) {
  99674. if (lastOnStack(expansionFormStack, TokenType$1.EXPANSION_FORM_START)) {
  99675. expansionFormStack.pop();
  99676. }
  99677. else {
  99678. this._errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'."));
  99679. return null;
  99680. }
  99681. }
  99682. if (this._peek.type === TokenType$1.EOF) {
  99683. this._errors.push(TreeError.create(null, start.sourceSpan, "Invalid ICU message. Missing '}'."));
  99684. return null;
  99685. }
  99686. exp.push(this._advance());
  99687. }
  99688. };
  99689. /**
  99690. * @param {?} token
  99691. * @return {?}
  99692. */
  99693. _TreeBuilder.prototype._consumeText = /**
  99694. * @param {?} token
  99695. * @return {?}
  99696. */
  99697. function (token) {
  99698. var /** @type {?} */ text = token.parts[0];
  99699. if (text.length > 0 && text[0] == '\n') {
  99700. var /** @type {?} */ parent_1 = this._getParentElement();
  99701. if (parent_1 != null && parent_1.children.length == 0 &&
  99702. this.getTagDefinition(parent_1.name).ignoreFirstLf) {
  99703. text = text.substring(1);
  99704. }
  99705. }
  99706. if (text.length > 0) {
  99707. this._addToParent(new Text(text, token.sourceSpan));
  99708. }
  99709. };
  99710. /**
  99711. * @return {?}
  99712. */
  99713. _TreeBuilder.prototype._closeVoidElement = /**
  99714. * @return {?}
  99715. */
  99716. function () {
  99717. var /** @type {?} */ el = this._getParentElement();
  99718. if (el && this.getTagDefinition(el.name).isVoid) {
  99719. this._elementStack.pop();
  99720. }
  99721. };
  99722. /**
  99723. * @param {?} startTagToken
  99724. * @return {?}
  99725. */
  99726. _TreeBuilder.prototype._consumeStartTag = /**
  99727. * @param {?} startTagToken
  99728. * @return {?}
  99729. */
  99730. function (startTagToken) {
  99731. var /** @type {?} */ prefix = startTagToken.parts[0];
  99732. var /** @type {?} */ name = startTagToken.parts[1];
  99733. var /** @type {?} */ attrs = [];
  99734. while (this._peek.type === TokenType$1.ATTR_NAME) {
  99735. attrs.push(this._consumeAttr(this._advance()));
  99736. }
  99737. var /** @type {?} */ fullName = this._getElementFullName(prefix, name, this._getParentElement());
  99738. var /** @type {?} */ selfClosing = false;
  99739. // Note: There could have been a tokenizer error
  99740. // so that we don't get a token for the end tag...
  99741. if (this._peek.type === TokenType$1.TAG_OPEN_END_VOID) {
  99742. this._advance();
  99743. selfClosing = true;
  99744. var /** @type {?} */ tagDef = this.getTagDefinition(fullName);
  99745. if (!(tagDef.canSelfClose || getNsPrefix(fullName) !== null || tagDef.isVoid)) {
  99746. this._errors.push(TreeError.create(fullName, startTagToken.sourceSpan, "Only void and foreign elements can be self closed \"" + startTagToken.parts[1] + "\""));
  99747. }
  99748. }
  99749. else if (this._peek.type === TokenType$1.TAG_OPEN_END) {
  99750. this._advance();
  99751. selfClosing = false;
  99752. }
  99753. var /** @type {?} */ end = this._peek.sourceSpan.start;
  99754. var /** @type {?} */ span = new ParseSourceSpan(startTagToken.sourceSpan.start, end);
  99755. var /** @type {?} */ el = new Element(fullName, attrs, [], span, span, undefined);
  99756. this._pushElement(el);
  99757. if (selfClosing) {
  99758. this._popElement(fullName);
  99759. el.endSourceSpan = span;
  99760. }
  99761. };
  99762. /**
  99763. * @param {?} el
  99764. * @return {?}
  99765. */
  99766. _TreeBuilder.prototype._pushElement = /**
  99767. * @param {?} el
  99768. * @return {?}
  99769. */
  99770. function (el) {
  99771. var /** @type {?} */ parentEl = this._getParentElement();
  99772. if (parentEl && this.getTagDefinition(parentEl.name).isClosedByChild(el.name)) {
  99773. this._elementStack.pop();
  99774. }
  99775. var /** @type {?} */ tagDef = this.getTagDefinition(el.name);
  99776. var _a = this._getParentElementSkippingContainers(), parent = _a.parent, container = _a.container;
  99777. if (parent && tagDef.requireExtraParent(parent.name)) {
  99778. var /** @type {?} */ newParent = new Element(tagDef.parentToAdd, [], [], el.sourceSpan, el.startSourceSpan, el.endSourceSpan);
  99779. this._insertBeforeContainer(parent, container, newParent);
  99780. }
  99781. this._addToParent(el);
  99782. this._elementStack.push(el);
  99783. };
  99784. /**
  99785. * @param {?} endTagToken
  99786. * @return {?}
  99787. */
  99788. _TreeBuilder.prototype._consumeEndTag = /**
  99789. * @param {?} endTagToken
  99790. * @return {?}
  99791. */
  99792. function (endTagToken) {
  99793. var /** @type {?} */ fullName = this._getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement());
  99794. if (this._getParentElement()) {
  99795. /** @type {?} */ ((this._getParentElement())).endSourceSpan = endTagToken.sourceSpan;
  99796. }
  99797. if (this.getTagDefinition(fullName).isVoid) {
  99798. this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, "Void elements do not have end tags \"" + endTagToken.parts[1] + "\""));
  99799. }
  99800. else if (!this._popElement(fullName)) {
  99801. var /** @type {?} */ errMsg = "Unexpected closing tag \"" + fullName + "\". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags";
  99802. this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, errMsg));
  99803. }
  99804. };
  99805. /**
  99806. * @param {?} fullName
  99807. * @return {?}
  99808. */
  99809. _TreeBuilder.prototype._popElement = /**
  99810. * @param {?} fullName
  99811. * @return {?}
  99812. */
  99813. function (fullName) {
  99814. for (var /** @type {?} */ stackIndex = this._elementStack.length - 1; stackIndex >= 0; stackIndex--) {
  99815. var /** @type {?} */ el = this._elementStack[stackIndex];
  99816. if (el.name == fullName) {
  99817. this._elementStack.splice(stackIndex, this._elementStack.length - stackIndex);
  99818. return true;
  99819. }
  99820. if (!this.getTagDefinition(el.name).closedByParent) {
  99821. return false;
  99822. }
  99823. }
  99824. return false;
  99825. };
  99826. /**
  99827. * @param {?} attrName
  99828. * @return {?}
  99829. */
  99830. _TreeBuilder.prototype._consumeAttr = /**
  99831. * @param {?} attrName
  99832. * @return {?}
  99833. */
  99834. function (attrName) {
  99835. var /** @type {?} */ fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]);
  99836. var /** @type {?} */ end = attrName.sourceSpan.end;
  99837. var /** @type {?} */ value = '';
  99838. var /** @type {?} */ valueSpan = /** @type {?} */ ((undefined));
  99839. if (this._peek.type === TokenType$1.ATTR_VALUE) {
  99840. var /** @type {?} */ valueToken = this._advance();
  99841. value = valueToken.parts[0];
  99842. end = valueToken.sourceSpan.end;
  99843. valueSpan = valueToken.sourceSpan;
  99844. }
  99845. return new Attribute$1(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end), valueSpan);
  99846. };
  99847. /**
  99848. * @return {?}
  99849. */
  99850. _TreeBuilder.prototype._getParentElement = /**
  99851. * @return {?}
  99852. */
  99853. function () {
  99854. return this._elementStack.length > 0 ? this._elementStack[this._elementStack.length - 1] : null;
  99855. };
  99856. /**
  99857. * Returns the parent in the DOM and the container.
  99858. *
  99859. * `<ng-container>` elements are skipped as they are not rendered as DOM element.
  99860. * @return {?}
  99861. */
  99862. _TreeBuilder.prototype._getParentElementSkippingContainers = /**
  99863. * Returns the parent in the DOM and the container.
  99864. *
  99865. * `<ng-container>` elements are skipped as they are not rendered as DOM element.
  99866. * @return {?}
  99867. */
  99868. function () {
  99869. var /** @type {?} */ container = null;
  99870. for (var /** @type {?} */ i = this._elementStack.length - 1; i >= 0; i--) {
  99871. if (!isNgContainer(this._elementStack[i].name)) {
  99872. return { parent: this._elementStack[i], container: container };
  99873. }
  99874. container = this._elementStack[i];
  99875. }
  99876. return { parent: null, container: container };
  99877. };
  99878. /**
  99879. * @param {?} node
  99880. * @return {?}
  99881. */
  99882. _TreeBuilder.prototype._addToParent = /**
  99883. * @param {?} node
  99884. * @return {?}
  99885. */
  99886. function (node) {
  99887. var /** @type {?} */ parent = this._getParentElement();
  99888. if (parent != null) {
  99889. parent.children.push(node);
  99890. }
  99891. else {
  99892. this._rootNodes.push(node);
  99893. }
  99894. };
  99895. /**
  99896. * Insert a node between the parent and the container.
  99897. * When no container is given, the node is appended as a child of the parent.
  99898. * Also updates the element stack accordingly.
  99899. *
  99900. * \@internal
  99901. * @param {?} parent
  99902. * @param {?} container
  99903. * @param {?} node
  99904. * @return {?}
  99905. */
  99906. _TreeBuilder.prototype._insertBeforeContainer = /**
  99907. * Insert a node between the parent and the container.
  99908. * When no container is given, the node is appended as a child of the parent.
  99909. * Also updates the element stack accordingly.
  99910. *
  99911. * \@internal
  99912. * @param {?} parent
  99913. * @param {?} container
  99914. * @param {?} node
  99915. * @return {?}
  99916. */
  99917. function (parent, container, node) {
  99918. if (!container) {
  99919. this._addToParent(node);
  99920. this._elementStack.push(node);
  99921. }
  99922. else {
  99923. if (parent) {
  99924. // replace the container with the new node in the children
  99925. var /** @type {?} */ index = parent.children.indexOf(container);
  99926. parent.children[index] = node;
  99927. }
  99928. else {
  99929. this._rootNodes.push(node);
  99930. }
  99931. node.children.push(container);
  99932. this._elementStack.splice(this._elementStack.indexOf(container), 0, node);
  99933. }
  99934. };
  99935. /**
  99936. * @param {?} prefix
  99937. * @param {?} localName
  99938. * @param {?} parentElement
  99939. * @return {?}
  99940. */
  99941. _TreeBuilder.prototype._getElementFullName = /**
  99942. * @param {?} prefix
  99943. * @param {?} localName
  99944. * @param {?} parentElement
  99945. * @return {?}
  99946. */
  99947. function (prefix, localName, parentElement) {
  99948. if (prefix == null) {
  99949. prefix = /** @type {?} */ ((this.getTagDefinition(localName).implicitNamespacePrefix));
  99950. if (prefix == null && parentElement != null) {
  99951. prefix = getNsPrefix(parentElement.name);
  99952. }
  99953. }
  99954. return mergeNsAndName(prefix, localName);
  99955. };
  99956. return _TreeBuilder;
  99957. }());
  99958. /**
  99959. * @param {?} stack
  99960. * @param {?} element
  99961. * @return {?}
  99962. */
  99963. function lastOnStack(stack, element) {
  99964. return stack.length > 0 && stack[stack.length - 1] === element;
  99965. }
  99966. /**
  99967. * @fileoverview added by tsickle
  99968. * @suppress {checkTypes} checked by tsc
  99969. */
  99970. /**
  99971. * @license
  99972. * Copyright Google Inc. All Rights Reserved.
  99973. *
  99974. * Use of this source code is governed by an MIT-style license that can be
  99975. * found in the LICENSE file at https://angular.io/license
  99976. */
  99977. /**
  99978. * @param {?} message
  99979. * @return {?}
  99980. */
  99981. function digest(message) {
  99982. return message.id || sha1(serializeNodes(message.nodes).join('') + ("[" + message.meaning + "]"));
  99983. }
  99984. /**
  99985. * @param {?} message
  99986. * @return {?}
  99987. */
  99988. function decimalDigest(message) {
  99989. if (message.id) {
  99990. return message.id;
  99991. }
  99992. var /** @type {?} */ visitor = new _SerializerIgnoreIcuExpVisitor();
  99993. var /** @type {?} */ parts = message.nodes.map(function (a) { return a.visit(visitor, null); });
  99994. return computeMsgId(parts.join(''), message.meaning);
  99995. }
  99996. /**
  99997. * Serialize the i18n ast to something xml-like in order to generate an UID.
  99998. *
  99999. * The visitor is also used in the i18n parser tests
  100000. *
  100001. * \@internal
  100002. */
  100003. var _SerializerVisitor = /** @class */ (function () {
  100004. function _SerializerVisitor() {
  100005. }
  100006. /**
  100007. * @param {?} text
  100008. * @param {?} context
  100009. * @return {?}
  100010. */
  100011. _SerializerVisitor.prototype.visitText = /**
  100012. * @param {?} text
  100013. * @param {?} context
  100014. * @return {?}
  100015. */
  100016. function (text, context) { return text.value; };
  100017. /**
  100018. * @param {?} container
  100019. * @param {?} context
  100020. * @return {?}
  100021. */
  100022. _SerializerVisitor.prototype.visitContainer = /**
  100023. * @param {?} container
  100024. * @param {?} context
  100025. * @return {?}
  100026. */
  100027. function (container, context) {
  100028. var _this = this;
  100029. return "[" + container.children.map(function (child) { return child.visit(_this); }).join(', ') + "]";
  100030. };
  100031. /**
  100032. * @param {?} icu
  100033. * @param {?} context
  100034. * @return {?}
  100035. */
  100036. _SerializerVisitor.prototype.visitIcu = /**
  100037. * @param {?} icu
  100038. * @param {?} context
  100039. * @return {?}
  100040. */
  100041. function (icu, context) {
  100042. var _this = this;
  100043. var /** @type {?} */ strCases = Object.keys(icu.cases).map(function (k) { return k + " {" + icu.cases[k].visit(_this) + "}"; });
  100044. return "{" + icu.expression + ", " + icu.type + ", " + strCases.join(', ') + "}";
  100045. };
  100046. /**
  100047. * @param {?} ph
  100048. * @param {?} context
  100049. * @return {?}
  100050. */
  100051. _SerializerVisitor.prototype.visitTagPlaceholder = /**
  100052. * @param {?} ph
  100053. * @param {?} context
  100054. * @return {?}
  100055. */
  100056. function (ph, context) {
  100057. var _this = this;
  100058. return ph.isVoid ?
  100059. "<ph tag name=\"" + ph.startName + "\"/>" :
  100060. "<ph tag name=\"" + ph.startName + "\">" + ph.children.map(function (child) { return child.visit(_this); }).join(', ') + "</ph name=\"" + ph.closeName + "\">";
  100061. };
  100062. /**
  100063. * @param {?} ph
  100064. * @param {?} context
  100065. * @return {?}
  100066. */
  100067. _SerializerVisitor.prototype.visitPlaceholder = /**
  100068. * @param {?} ph
  100069. * @param {?} context
  100070. * @return {?}
  100071. */
  100072. function (ph, context) {
  100073. return ph.value ? "<ph name=\"" + ph.name + "\">" + ph.value + "</ph>" : "<ph name=\"" + ph.name + "\"/>";
  100074. };
  100075. /**
  100076. * @param {?} ph
  100077. * @param {?=} context
  100078. * @return {?}
  100079. */
  100080. _SerializerVisitor.prototype.visitIcuPlaceholder = /**
  100081. * @param {?} ph
  100082. * @param {?=} context
  100083. * @return {?}
  100084. */
  100085. function (ph, context) {
  100086. return "<ph icu name=\"" + ph.name + "\">" + ph.value.visit(this) + "</ph>";
  100087. };
  100088. return _SerializerVisitor;
  100089. }());
  100090. var serializerVisitor = new _SerializerVisitor();
  100091. /**
  100092. * @param {?} nodes
  100093. * @return {?}
  100094. */
  100095. function serializeNodes(nodes) {
  100096. return nodes.map(function (a) { return a.visit(serializerVisitor, null); });
  100097. }
  100098. /**
  100099. * Serialize the i18n ast to something xml-like in order to generate an UID.
  100100. *
  100101. * Ignore the ICU expressions so that message IDs stays identical if only the expression changes.
  100102. *
  100103. * \@internal
  100104. */
  100105. var _SerializerIgnoreIcuExpVisitor = /** @class */ (function (_super) {
  100106. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_SerializerIgnoreIcuExpVisitor, _super);
  100107. function _SerializerIgnoreIcuExpVisitor() {
  100108. return _super !== null && _super.apply(this, arguments) || this;
  100109. }
  100110. /**
  100111. * @param {?} icu
  100112. * @param {?} context
  100113. * @return {?}
  100114. */
  100115. _SerializerIgnoreIcuExpVisitor.prototype.visitIcu = /**
  100116. * @param {?} icu
  100117. * @param {?} context
  100118. * @return {?}
  100119. */
  100120. function (icu, context) {
  100121. var _this = this;
  100122. var /** @type {?} */ strCases = Object.keys(icu.cases).map(function (k) { return k + " {" + icu.cases[k].visit(_this) + "}"; });
  100123. // Do not take the expression into account
  100124. return "{" + icu.type + ", " + strCases.join(', ') + "}";
  100125. };
  100126. return _SerializerIgnoreIcuExpVisitor;
  100127. }(_SerializerVisitor));
  100128. /**
  100129. * Compute the SHA1 of the given string
  100130. *
  100131. * see http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
  100132. *
  100133. * WARNING: this function has not been designed not tested with security in mind.
  100134. * DO NOT USE IT IN A SECURITY SENSITIVE CONTEXT.
  100135. * @param {?} str
  100136. * @return {?}
  100137. */
  100138. function sha1(str) {
  100139. var /** @type {?} */ utf8 = utf8Encode(str);
  100140. var /** @type {?} */ words32 = stringToWords32(utf8, Endian.Big);
  100141. var /** @type {?} */ len = utf8.length * 8;
  100142. var /** @type {?} */ w = new Array(80);
  100143. var _a = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0], a = _a[0], b = _a[1], c = _a[2], d = _a[3], e = _a[4];
  100144. words32[len >> 5] |= 0x80 << (24 - len % 32);
  100145. words32[((len + 64 >> 9) << 4) + 15] = len;
  100146. for (var /** @type {?} */ i = 0; i < words32.length; i += 16) {
  100147. var _b = [a, b, c, d, e], h0 = _b[0], h1 = _b[1], h2 = _b[2], h3 = _b[3], h4 = _b[4];
  100148. for (var /** @type {?} */ j = 0; j < 80; j++) {
  100149. if (j < 16) {
  100150. w[j] = words32[i + j];
  100151. }
  100152. else {
  100153. w[j] = rol32(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
  100154. }
  100155. var _c = fk(j, b, c, d), f = _c[0], k = _c[1];
  100156. var /** @type {?} */ temp = [rol32(a, 5), f, e, k, w[j]].reduce(add32);
  100157. _d = [d, c, rol32(b, 30), a, temp], e = _d[0], d = _d[1], c = _d[2], b = _d[3], a = _d[4];
  100158. }
  100159. _e = [add32(a, h0), add32(b, h1), add32(c, h2), add32(d, h3), add32(e, h4)], a = _e[0], b = _e[1], c = _e[2], d = _e[3], e = _e[4];
  100160. }
  100161. return byteStringToHexString(words32ToByteString([a, b, c, d, e]));
  100162. var _d, _e;
  100163. }
  100164. /**
  100165. * @param {?} index
  100166. * @param {?} b
  100167. * @param {?} c
  100168. * @param {?} d
  100169. * @return {?}
  100170. */
  100171. function fk(index, b, c, d) {
  100172. if (index < 20) {
  100173. return [(b & c) | (~b & d), 0x5a827999];
  100174. }
  100175. if (index < 40) {
  100176. return [b ^ c ^ d, 0x6ed9eba1];
  100177. }
  100178. if (index < 60) {
  100179. return [(b & c) | (b & d) | (c & d), 0x8f1bbcdc];
  100180. }
  100181. return [b ^ c ^ d, 0xca62c1d6];
  100182. }
  100183. /**
  100184. * Compute the fingerprint of the given string
  100185. *
  100186. * The output is 64 bit number encoded as a decimal string
  100187. *
  100188. * based on:
  100189. * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/GoogleJsMessageIdGenerator.java
  100190. * @param {?} str
  100191. * @return {?}
  100192. */
  100193. function fingerprint(str) {
  100194. var /** @type {?} */ utf8 = utf8Encode(str);
  100195. var _a = [hash32(utf8, 0), hash32(utf8, 102072)], hi = _a[0], lo = _a[1];
  100196. if (hi == 0 && (lo == 0 || lo == 1)) {
  100197. hi = hi ^ 0x130f9bef;
  100198. lo = lo ^ -0x6b5f56d8;
  100199. }
  100200. return [hi, lo];
  100201. }
  100202. /**
  100203. * @param {?} msg
  100204. * @param {?} meaning
  100205. * @return {?}
  100206. */
  100207. function computeMsgId(msg, meaning) {
  100208. var _a = fingerprint(msg), hi = _a[0], lo = _a[1];
  100209. if (meaning) {
  100210. var _b = fingerprint(meaning), him = _b[0], lom = _b[1];
  100211. _c = add64(rol64([hi, lo], 1), [him, lom]), hi = _c[0], lo = _c[1];
  100212. }
  100213. return byteStringToDecString(words32ToByteString([hi & 0x7fffffff, lo]));
  100214. var _c;
  100215. }
  100216. /**
  100217. * @param {?} str
  100218. * @param {?} c
  100219. * @return {?}
  100220. */
  100221. function hash32(str, c) {
  100222. var _a = [0x9e3779b9, 0x9e3779b9], a = _a[0], b = _a[1];
  100223. var /** @type {?} */ i;
  100224. var /** @type {?} */ len = str.length;
  100225. for (i = 0; i + 12 <= len; i += 12) {
  100226. a = add32(a, wordAt(str, i, Endian.Little));
  100227. b = add32(b, wordAt(str, i + 4, Endian.Little));
  100228. c = add32(c, wordAt(str, i + 8, Endian.Little));
  100229. _b = mix([a, b, c]), a = _b[0], b = _b[1], c = _b[2];
  100230. }
  100231. a = add32(a, wordAt(str, i, Endian.Little));
  100232. b = add32(b, wordAt(str, i + 4, Endian.Little));
  100233. // the first byte of c is reserved for the length
  100234. c = add32(c, len);
  100235. c = add32(c, wordAt(str, i + 8, Endian.Little) << 8);
  100236. return mix([a, b, c])[2];
  100237. var _b;
  100238. }
  100239. /**
  100240. * @param {?} __0
  100241. * @return {?}
  100242. */
  100243. function mix(_a) {
  100244. var a = _a[0], b = _a[1], c = _a[2];
  100245. a = sub32(a, b);
  100246. a = sub32(a, c);
  100247. a ^= c >>> 13;
  100248. b = sub32(b, c);
  100249. b = sub32(b, a);
  100250. b ^= a << 8;
  100251. c = sub32(c, a);
  100252. c = sub32(c, b);
  100253. c ^= b >>> 13;
  100254. a = sub32(a, b);
  100255. a = sub32(a, c);
  100256. a ^= c >>> 12;
  100257. b = sub32(b, c);
  100258. b = sub32(b, a);
  100259. b ^= a << 16;
  100260. c = sub32(c, a);
  100261. c = sub32(c, b);
  100262. c ^= b >>> 5;
  100263. a = sub32(a, b);
  100264. a = sub32(a, c);
  100265. a ^= c >>> 3;
  100266. b = sub32(b, c);
  100267. b = sub32(b, a);
  100268. b ^= a << 10;
  100269. c = sub32(c, a);
  100270. c = sub32(c, b);
  100271. c ^= b >>> 15;
  100272. return [a, b, c];
  100273. }
  100274. /** @enum {number} */
  100275. var Endian = {
  100276. Little: 0,
  100277. Big: 1,
  100278. };
  100279. Endian[Endian.Little] = "Little";
  100280. Endian[Endian.Big] = "Big";
  100281. /**
  100282. * @param {?} a
  100283. * @param {?} b
  100284. * @return {?}
  100285. */
  100286. function add32(a, b) {
  100287. return add32to64(a, b)[1];
  100288. }
  100289. /**
  100290. * @param {?} a
  100291. * @param {?} b
  100292. * @return {?}
  100293. */
  100294. function add32to64(a, b) {
  100295. var /** @type {?} */ low = (a & 0xffff) + (b & 0xffff);
  100296. var /** @type {?} */ high = (a >>> 16) + (b >>> 16) + (low >>> 16);
  100297. return [high >>> 16, (high << 16) | (low & 0xffff)];
  100298. }
  100299. /**
  100300. * @param {?} __0
  100301. * @param {?} __1
  100302. * @return {?}
  100303. */
  100304. function add64(_a, _b) {
  100305. var ah = _a[0], al = _a[1];
  100306. var bh = _b[0], bl = _b[1];
  100307. var _c = add32to64(al, bl), carry = _c[0], l = _c[1];
  100308. var /** @type {?} */ h = add32(add32(ah, bh), carry);
  100309. return [h, l];
  100310. }
  100311. /**
  100312. * @param {?} a
  100313. * @param {?} b
  100314. * @return {?}
  100315. */
  100316. function sub32(a, b) {
  100317. var /** @type {?} */ low = (a & 0xffff) - (b & 0xffff);
  100318. var /** @type {?} */ high = (a >> 16) - (b >> 16) + (low >> 16);
  100319. return (high << 16) | (low & 0xffff);
  100320. }
  100321. /**
  100322. * @param {?} a
  100323. * @param {?} count
  100324. * @return {?}
  100325. */
  100326. function rol32(a, count) {
  100327. return (a << count) | (a >>> (32 - count));
  100328. }
  100329. /**
  100330. * @param {?} __0
  100331. * @param {?} count
  100332. * @return {?}
  100333. */
  100334. function rol64(_a, count) {
  100335. var hi = _a[0], lo = _a[1];
  100336. var /** @type {?} */ h = (hi << count) | (lo >>> (32 - count));
  100337. var /** @type {?} */ l = (lo << count) | (hi >>> (32 - count));
  100338. return [h, l];
  100339. }
  100340. /**
  100341. * @param {?} str
  100342. * @param {?} endian
  100343. * @return {?}
  100344. */
  100345. function stringToWords32(str, endian) {
  100346. var /** @type {?} */ words32 = Array((str.length + 3) >>> 2);
  100347. for (var /** @type {?} */ i = 0; i < words32.length; i++) {
  100348. words32[i] = wordAt(str, i * 4, endian);
  100349. }
  100350. return words32;
  100351. }
  100352. /**
  100353. * @param {?} str
  100354. * @param {?} index
  100355. * @return {?}
  100356. */
  100357. function byteAt(str, index) {
  100358. return index >= str.length ? 0 : str.charCodeAt(index) & 0xff;
  100359. }
  100360. /**
  100361. * @param {?} str
  100362. * @param {?} index
  100363. * @param {?} endian
  100364. * @return {?}
  100365. */
  100366. function wordAt(str, index, endian) {
  100367. var /** @type {?} */ word = 0;
  100368. if (endian === Endian.Big) {
  100369. for (var /** @type {?} */ i = 0; i < 4; i++) {
  100370. word += byteAt(str, index + i) << (24 - 8 * i);
  100371. }
  100372. }
  100373. else {
  100374. for (var /** @type {?} */ i = 0; i < 4; i++) {
  100375. word += byteAt(str, index + i) << 8 * i;
  100376. }
  100377. }
  100378. return word;
  100379. }
  100380. /**
  100381. * @param {?} words32
  100382. * @return {?}
  100383. */
  100384. function words32ToByteString(words32) {
  100385. return words32.reduce(function (str, word) { return str + word32ToByteString(word); }, '');
  100386. }
  100387. /**
  100388. * @param {?} word
  100389. * @return {?}
  100390. */
  100391. function word32ToByteString(word) {
  100392. var /** @type {?} */ str = '';
  100393. for (var /** @type {?} */ i = 0; i < 4; i++) {
  100394. str += String.fromCharCode((word >>> 8 * (3 - i)) & 0xff);
  100395. }
  100396. return str;
  100397. }
  100398. /**
  100399. * @param {?} str
  100400. * @return {?}
  100401. */
  100402. function byteStringToHexString(str) {
  100403. var /** @type {?} */ hex = '';
  100404. for (var /** @type {?} */ i = 0; i < str.length; i++) {
  100405. var /** @type {?} */ b = byteAt(str, i);
  100406. hex += (b >>> 4).toString(16) + (b & 0x0f).toString(16);
  100407. }
  100408. return hex.toLowerCase();
  100409. }
  100410. /**
  100411. * @param {?} str
  100412. * @return {?}
  100413. */
  100414. function byteStringToDecString(str) {
  100415. var /** @type {?} */ decimal = '';
  100416. var /** @type {?} */ toThePower = '1';
  100417. for (var /** @type {?} */ i = str.length - 1; i >= 0; i--) {
  100418. decimal = addBigInt(decimal, numberTimesBigInt(byteAt(str, i), toThePower));
  100419. toThePower = numberTimesBigInt(256, toThePower);
  100420. }
  100421. return decimal.split('').reverse().join('');
  100422. }
  100423. /**
  100424. * @param {?} x
  100425. * @param {?} y
  100426. * @return {?}
  100427. */
  100428. function addBigInt(x, y) {
  100429. var /** @type {?} */ sum = '';
  100430. var /** @type {?} */ len = Math.max(x.length, y.length);
  100431. for (var /** @type {?} */ i = 0, /** @type {?} */ carry = 0; i < len || carry; i++) {
  100432. var /** @type {?} */ tmpSum = carry + +(x[i] || 0) + +(y[i] || 0);
  100433. if (tmpSum >= 10) {
  100434. carry = 1;
  100435. sum += tmpSum - 10;
  100436. }
  100437. else {
  100438. carry = 0;
  100439. sum += tmpSum;
  100440. }
  100441. }
  100442. return sum;
  100443. }
  100444. /**
  100445. * @param {?} num
  100446. * @param {?} b
  100447. * @return {?}
  100448. */
  100449. function numberTimesBigInt(num, b) {
  100450. var /** @type {?} */ product = '';
  100451. var /** @type {?} */ bToThePower = b;
  100452. for (; num !== 0; num = num >>> 1) {
  100453. if (num & 1)
  100454. product = addBigInt(product, bToThePower);
  100455. bToThePower = addBigInt(bToThePower, bToThePower);
  100456. }
  100457. return product;
  100458. }
  100459. /**
  100460. * @fileoverview added by tsickle
  100461. * @suppress {checkTypes} checked by tsc
  100462. */
  100463. /**
  100464. * @license
  100465. * Copyright Google Inc. All Rights Reserved.
  100466. *
  100467. * Use of this source code is governed by an MIT-style license that can be
  100468. * found in the LICENSE file at https://angular.io/license
  100469. */
  100470. var Message = /** @class */ (function () {
  100471. /**
  100472. * @param nodes message AST
  100473. * @param placeholders maps placeholder names to static content
  100474. * @param placeholderToMessage maps placeholder names to messages (used for nested ICU messages)
  100475. * @param meaning
  100476. * @param description
  100477. * @param id
  100478. */
  100479. function Message(nodes, placeholders, placeholderToMessage, meaning, description, id) {
  100480. this.nodes = nodes;
  100481. this.placeholders = placeholders;
  100482. this.placeholderToMessage = placeholderToMessage;
  100483. this.meaning = meaning;
  100484. this.description = description;
  100485. this.id = id;
  100486. if (nodes.length) {
  100487. this.sources = [{
  100488. filePath: nodes[0].sourceSpan.start.file.url,
  100489. startLine: nodes[0].sourceSpan.start.line + 1,
  100490. startCol: nodes[0].sourceSpan.start.col + 1,
  100491. endLine: nodes[nodes.length - 1].sourceSpan.end.line + 1,
  100492. endCol: nodes[0].sourceSpan.start.col + 1
  100493. }];
  100494. }
  100495. else {
  100496. this.sources = [];
  100497. }
  100498. }
  100499. return Message;
  100500. }());
  100501. /**
  100502. * @record
  100503. */
  100504. /**
  100505. * @record
  100506. */
  100507. var Text$1 = /** @class */ (function () {
  100508. function Text(value, sourceSpan) {
  100509. this.value = value;
  100510. this.sourceSpan = sourceSpan;
  100511. }
  100512. /**
  100513. * @param {?} visitor
  100514. * @param {?=} context
  100515. * @return {?}
  100516. */
  100517. Text.prototype.visit = /**
  100518. * @param {?} visitor
  100519. * @param {?=} context
  100520. * @return {?}
  100521. */
  100522. function (visitor, context) { return visitor.visitText(this, context); };
  100523. return Text;
  100524. }());
  100525. var Container = /** @class */ (function () {
  100526. function Container(children, sourceSpan) {
  100527. this.children = children;
  100528. this.sourceSpan = sourceSpan;
  100529. }
  100530. /**
  100531. * @param {?} visitor
  100532. * @param {?=} context
  100533. * @return {?}
  100534. */
  100535. Container.prototype.visit = /**
  100536. * @param {?} visitor
  100537. * @param {?=} context
  100538. * @return {?}
  100539. */
  100540. function (visitor, context) { return visitor.visitContainer(this, context); };
  100541. return Container;
  100542. }());
  100543. var Icu = /** @class */ (function () {
  100544. function Icu(expression, type, cases, sourceSpan) {
  100545. this.expression = expression;
  100546. this.type = type;
  100547. this.cases = cases;
  100548. this.sourceSpan = sourceSpan;
  100549. }
  100550. /**
  100551. * @param {?} visitor
  100552. * @param {?=} context
  100553. * @return {?}
  100554. */
  100555. Icu.prototype.visit = /**
  100556. * @param {?} visitor
  100557. * @param {?=} context
  100558. * @return {?}
  100559. */
  100560. function (visitor, context) { return visitor.visitIcu(this, context); };
  100561. return Icu;
  100562. }());
  100563. var TagPlaceholder = /** @class */ (function () {
  100564. function TagPlaceholder(tag, attrs, startName, closeName, children, isVoid, sourceSpan) {
  100565. this.tag = tag;
  100566. this.attrs = attrs;
  100567. this.startName = startName;
  100568. this.closeName = closeName;
  100569. this.children = children;
  100570. this.isVoid = isVoid;
  100571. this.sourceSpan = sourceSpan;
  100572. }
  100573. /**
  100574. * @param {?} visitor
  100575. * @param {?=} context
  100576. * @return {?}
  100577. */
  100578. TagPlaceholder.prototype.visit = /**
  100579. * @param {?} visitor
  100580. * @param {?=} context
  100581. * @return {?}
  100582. */
  100583. function (visitor, context) { return visitor.visitTagPlaceholder(this, context); };
  100584. return TagPlaceholder;
  100585. }());
  100586. var Placeholder = /** @class */ (function () {
  100587. function Placeholder(value, name, sourceSpan) {
  100588. this.value = value;
  100589. this.name = name;
  100590. this.sourceSpan = sourceSpan;
  100591. }
  100592. /**
  100593. * @param {?} visitor
  100594. * @param {?=} context
  100595. * @return {?}
  100596. */
  100597. Placeholder.prototype.visit = /**
  100598. * @param {?} visitor
  100599. * @param {?=} context
  100600. * @return {?}
  100601. */
  100602. function (visitor, context) { return visitor.visitPlaceholder(this, context); };
  100603. return Placeholder;
  100604. }());
  100605. var IcuPlaceholder = /** @class */ (function () {
  100606. function IcuPlaceholder(value, name, sourceSpan) {
  100607. this.value = value;
  100608. this.name = name;
  100609. this.sourceSpan = sourceSpan;
  100610. }
  100611. /**
  100612. * @param {?} visitor
  100613. * @param {?=} context
  100614. * @return {?}
  100615. */
  100616. IcuPlaceholder.prototype.visit = /**
  100617. * @param {?} visitor
  100618. * @param {?=} context
  100619. * @return {?}
  100620. */
  100621. function (visitor, context) { return visitor.visitIcuPlaceholder(this, context); };
  100622. return IcuPlaceholder;
  100623. }());
  100624. /**
  100625. * @record
  100626. */
  100627. var CloneVisitor = /** @class */ (function () {
  100628. function CloneVisitor() {
  100629. }
  100630. /**
  100631. * @param {?} text
  100632. * @param {?=} context
  100633. * @return {?}
  100634. */
  100635. CloneVisitor.prototype.visitText = /**
  100636. * @param {?} text
  100637. * @param {?=} context
  100638. * @return {?}
  100639. */
  100640. function (text, context) { return new Text$1(text.value, text.sourceSpan); };
  100641. /**
  100642. * @param {?} container
  100643. * @param {?=} context
  100644. * @return {?}
  100645. */
  100646. CloneVisitor.prototype.visitContainer = /**
  100647. * @param {?} container
  100648. * @param {?=} context
  100649. * @return {?}
  100650. */
  100651. function (container, context) {
  100652. var _this = this;
  100653. var /** @type {?} */ children = container.children.map(function (n) { return n.visit(_this, context); });
  100654. return new Container(children, container.sourceSpan);
  100655. };
  100656. /**
  100657. * @param {?} icu
  100658. * @param {?=} context
  100659. * @return {?}
  100660. */
  100661. CloneVisitor.prototype.visitIcu = /**
  100662. * @param {?} icu
  100663. * @param {?=} context
  100664. * @return {?}
  100665. */
  100666. function (icu, context) {
  100667. var _this = this;
  100668. var /** @type {?} */ cases = {};
  100669. Object.keys(icu.cases).forEach(function (key) { return cases[key] = icu.cases[key].visit(_this, context); });
  100670. var /** @type {?} */ msg = new Icu(icu.expression, icu.type, cases, icu.sourceSpan);
  100671. msg.expressionPlaceholder = icu.expressionPlaceholder;
  100672. return msg;
  100673. };
  100674. /**
  100675. * @param {?} ph
  100676. * @param {?=} context
  100677. * @return {?}
  100678. */
  100679. CloneVisitor.prototype.visitTagPlaceholder = /**
  100680. * @param {?} ph
  100681. * @param {?=} context
  100682. * @return {?}
  100683. */
  100684. function (ph, context) {
  100685. var _this = this;
  100686. var /** @type {?} */ children = ph.children.map(function (n) { return n.visit(_this, context); });
  100687. return new TagPlaceholder(ph.tag, ph.attrs, ph.startName, ph.closeName, children, ph.isVoid, ph.sourceSpan);
  100688. };
  100689. /**
  100690. * @param {?} ph
  100691. * @param {?=} context
  100692. * @return {?}
  100693. */
  100694. CloneVisitor.prototype.visitPlaceholder = /**
  100695. * @param {?} ph
  100696. * @param {?=} context
  100697. * @return {?}
  100698. */
  100699. function (ph, context) {
  100700. return new Placeholder(ph.value, ph.name, ph.sourceSpan);
  100701. };
  100702. /**
  100703. * @param {?} ph
  100704. * @param {?=} context
  100705. * @return {?}
  100706. */
  100707. CloneVisitor.prototype.visitIcuPlaceholder = /**
  100708. * @param {?} ph
  100709. * @param {?=} context
  100710. * @return {?}
  100711. */
  100712. function (ph, context) {
  100713. return new IcuPlaceholder(ph.value, ph.name, ph.sourceSpan);
  100714. };
  100715. return CloneVisitor;
  100716. }());
  100717. var RecurseVisitor = /** @class */ (function () {
  100718. function RecurseVisitor() {
  100719. }
  100720. /**
  100721. * @param {?} text
  100722. * @param {?=} context
  100723. * @return {?}
  100724. */
  100725. RecurseVisitor.prototype.visitText = /**
  100726. * @param {?} text
  100727. * @param {?=} context
  100728. * @return {?}
  100729. */
  100730. function (text, context) { };
  100731. /**
  100732. * @param {?} container
  100733. * @param {?=} context
  100734. * @return {?}
  100735. */
  100736. RecurseVisitor.prototype.visitContainer = /**
  100737. * @param {?} container
  100738. * @param {?=} context
  100739. * @return {?}
  100740. */
  100741. function (container, context) {
  100742. var _this = this;
  100743. container.children.forEach(function (child) { return child.visit(_this); });
  100744. };
  100745. /**
  100746. * @param {?} icu
  100747. * @param {?=} context
  100748. * @return {?}
  100749. */
  100750. RecurseVisitor.prototype.visitIcu = /**
  100751. * @param {?} icu
  100752. * @param {?=} context
  100753. * @return {?}
  100754. */
  100755. function (icu, context) {
  100756. var _this = this;
  100757. Object.keys(icu.cases).forEach(function (k) { icu.cases[k].visit(_this); });
  100758. };
  100759. /**
  100760. * @param {?} ph
  100761. * @param {?=} context
  100762. * @return {?}
  100763. */
  100764. RecurseVisitor.prototype.visitTagPlaceholder = /**
  100765. * @param {?} ph
  100766. * @param {?=} context
  100767. * @return {?}
  100768. */
  100769. function (ph, context) {
  100770. var _this = this;
  100771. ph.children.forEach(function (child) { return child.visit(_this); });
  100772. };
  100773. /**
  100774. * @param {?} ph
  100775. * @param {?=} context
  100776. * @return {?}
  100777. */
  100778. RecurseVisitor.prototype.visitPlaceholder = /**
  100779. * @param {?} ph
  100780. * @param {?=} context
  100781. * @return {?}
  100782. */
  100783. function (ph, context) { };
  100784. /**
  100785. * @param {?} ph
  100786. * @param {?=} context
  100787. * @return {?}
  100788. */
  100789. RecurseVisitor.prototype.visitIcuPlaceholder = /**
  100790. * @param {?} ph
  100791. * @param {?=} context
  100792. * @return {?}
  100793. */
  100794. function (ph, context) { };
  100795. return RecurseVisitor;
  100796. }());
  100797. /**
  100798. * @fileoverview added by tsickle
  100799. * @suppress {checkTypes} checked by tsc
  100800. */
  100801. /**
  100802. * @license
  100803. * Copyright Google Inc. All Rights Reserved.
  100804. *
  100805. * Use of this source code is governed by an MIT-style license that can be
  100806. * found in the LICENSE file at https://angular.io/license
  100807. */
  100808. var HtmlTagDefinition = /** @class */ (function () {
  100809. function HtmlTagDefinition(_a) {
  100810. var _b = _a === void 0 ? {} : _a, closedByChildren = _b.closedByChildren, requiredParents = _b.requiredParents, implicitNamespacePrefix = _b.implicitNamespacePrefix, _c = _b.contentType, contentType = _c === void 0 ? TagContentType.PARSABLE_DATA : _c, _d = _b.closedByParent, closedByParent = _d === void 0 ? false : _d, _e = _b.isVoid, isVoid = _e === void 0 ? false : _e, _f = _b.ignoreFirstLf, ignoreFirstLf = _f === void 0 ? false : _f;
  100811. var _this = this;
  100812. this.closedByChildren = {};
  100813. this.closedByParent = false;
  100814. this.canSelfClose = false;
  100815. if (closedByChildren && closedByChildren.length > 0) {
  100816. closedByChildren.forEach(function (tagName) { return _this.closedByChildren[tagName] = true; });
  100817. }
  100818. this.isVoid = isVoid;
  100819. this.closedByParent = closedByParent || isVoid;
  100820. if (requiredParents && requiredParents.length > 0) {
  100821. this.requiredParents = {};
  100822. // The first parent is the list is automatically when none of the listed parents are present
  100823. this.parentToAdd = requiredParents[0];
  100824. requiredParents.forEach(function (tagName) { return _this.requiredParents[tagName] = true; });
  100825. }
  100826. this.implicitNamespacePrefix = implicitNamespacePrefix || null;
  100827. this.contentType = contentType;
  100828. this.ignoreFirstLf = ignoreFirstLf;
  100829. }
  100830. /**
  100831. * @param {?} currentParent
  100832. * @return {?}
  100833. */
  100834. HtmlTagDefinition.prototype.requireExtraParent = /**
  100835. * @param {?} currentParent
  100836. * @return {?}
  100837. */
  100838. function (currentParent) {
  100839. if (!this.requiredParents) {
  100840. return false;
  100841. }
  100842. if (!currentParent) {
  100843. return true;
  100844. }
  100845. var /** @type {?} */ lcParent = currentParent.toLowerCase();
  100846. var /** @type {?} */ isParentTemplate = lcParent === 'template' || currentParent === 'ng-template';
  100847. return !isParentTemplate && this.requiredParents[lcParent] != true;
  100848. };
  100849. /**
  100850. * @param {?} name
  100851. * @return {?}
  100852. */
  100853. HtmlTagDefinition.prototype.isClosedByChild = /**
  100854. * @param {?} name
  100855. * @return {?}
  100856. */
  100857. function (name) {
  100858. return this.isVoid || name.toLowerCase() in this.closedByChildren;
  100859. };
  100860. return HtmlTagDefinition;
  100861. }());
  100862. // see http://www.w3.org/TR/html51/syntax.html#optional-tags
  100863. // This implementation does not fully conform to the HTML5 spec.
  100864. var TAG_DEFINITIONS = {
  100865. 'base': new HtmlTagDefinition({ isVoid: true }),
  100866. 'meta': new HtmlTagDefinition({ isVoid: true }),
  100867. 'area': new HtmlTagDefinition({ isVoid: true }),
  100868. 'embed': new HtmlTagDefinition({ isVoid: true }),
  100869. 'link': new HtmlTagDefinition({ isVoid: true }),
  100870. 'img': new HtmlTagDefinition({ isVoid: true }),
  100871. 'input': new HtmlTagDefinition({ isVoid: true }),
  100872. 'param': new HtmlTagDefinition({ isVoid: true }),
  100873. 'hr': new HtmlTagDefinition({ isVoid: true }),
  100874. 'br': new HtmlTagDefinition({ isVoid: true }),
  100875. 'source': new HtmlTagDefinition({ isVoid: true }),
  100876. 'track': new HtmlTagDefinition({ isVoid: true }),
  100877. 'wbr': new HtmlTagDefinition({ isVoid: true }),
  100878. 'p': new HtmlTagDefinition({
  100879. closedByChildren: [
  100880. 'address', 'article', 'aside', 'blockquote', 'div', 'dl', 'fieldset', 'footer', 'form',
  100881. 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr',
  100882. 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'
  100883. ],
  100884. closedByParent: true
  100885. }),
  100886. 'thead': new HtmlTagDefinition({ closedByChildren: ['tbody', 'tfoot'] }),
  100887. 'tbody': new HtmlTagDefinition({ closedByChildren: ['tbody', 'tfoot'], closedByParent: true }),
  100888. 'tfoot': new HtmlTagDefinition({ closedByChildren: ['tbody'], closedByParent: true }),
  100889. 'tr': new HtmlTagDefinition({
  100890. closedByChildren: ['tr'],
  100891. requiredParents: ['tbody', 'tfoot', 'thead'],
  100892. closedByParent: true
  100893. }),
  100894. 'td': new HtmlTagDefinition({ closedByChildren: ['td', 'th'], closedByParent: true }),
  100895. 'th': new HtmlTagDefinition({ closedByChildren: ['td', 'th'], closedByParent: true }),
  100896. 'col': new HtmlTagDefinition({ requiredParents: ['colgroup'], isVoid: true }),
  100897. 'svg': new HtmlTagDefinition({ implicitNamespacePrefix: 'svg' }),
  100898. 'math': new HtmlTagDefinition({ implicitNamespacePrefix: 'math' }),
  100899. 'li': new HtmlTagDefinition({ closedByChildren: ['li'], closedByParent: true }),
  100900. 'dt': new HtmlTagDefinition({ closedByChildren: ['dt', 'dd'] }),
  100901. 'dd': new HtmlTagDefinition({ closedByChildren: ['dt', 'dd'], closedByParent: true }),
  100902. 'rb': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),
  100903. 'rt': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),
  100904. 'rtc': new HtmlTagDefinition({ closedByChildren: ['rb', 'rtc', 'rp'], closedByParent: true }),
  100905. 'rp': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),
  100906. 'optgroup': new HtmlTagDefinition({ closedByChildren: ['optgroup'], closedByParent: true }),
  100907. 'option': new HtmlTagDefinition({ closedByChildren: ['option', 'optgroup'], closedByParent: true }),
  100908. 'pre': new HtmlTagDefinition({ ignoreFirstLf: true }),
  100909. 'listing': new HtmlTagDefinition({ ignoreFirstLf: true }),
  100910. 'style': new HtmlTagDefinition({ contentType: TagContentType.RAW_TEXT }),
  100911. 'script': new HtmlTagDefinition({ contentType: TagContentType.RAW_TEXT }),
  100912. 'title': new HtmlTagDefinition({ contentType: TagContentType.ESCAPABLE_RAW_TEXT }),
  100913. 'textarea': new HtmlTagDefinition({ contentType: TagContentType.ESCAPABLE_RAW_TEXT, ignoreFirstLf: true }),
  100914. };
  100915. var _DEFAULT_TAG_DEFINITION = new HtmlTagDefinition();
  100916. /**
  100917. * @param {?} tagName
  100918. * @return {?}
  100919. */
  100920. function getHtmlTagDefinition(tagName) {
  100921. return TAG_DEFINITIONS[tagName.toLowerCase()] || _DEFAULT_TAG_DEFINITION;
  100922. }
  100923. /**
  100924. * @fileoverview added by tsickle
  100925. * @suppress {checkTypes} checked by tsc
  100926. */
  100927. /**
  100928. * @license
  100929. * Copyright Google Inc. All Rights Reserved.
  100930. *
  100931. * Use of this source code is governed by an MIT-style license that can be
  100932. * found in the LICENSE file at https://angular.io/license
  100933. */
  100934. var TAG_TO_PLACEHOLDER_NAMES = {
  100935. 'A': 'LINK',
  100936. 'B': 'BOLD_TEXT',
  100937. 'BR': 'LINE_BREAK',
  100938. 'EM': 'EMPHASISED_TEXT',
  100939. 'H1': 'HEADING_LEVEL1',
  100940. 'H2': 'HEADING_LEVEL2',
  100941. 'H3': 'HEADING_LEVEL3',
  100942. 'H4': 'HEADING_LEVEL4',
  100943. 'H5': 'HEADING_LEVEL5',
  100944. 'H6': 'HEADING_LEVEL6',
  100945. 'HR': 'HORIZONTAL_RULE',
  100946. 'I': 'ITALIC_TEXT',
  100947. 'LI': 'LIST_ITEM',
  100948. 'LINK': 'MEDIA_LINK',
  100949. 'OL': 'ORDERED_LIST',
  100950. 'P': 'PARAGRAPH',
  100951. 'Q': 'QUOTATION',
  100952. 'S': 'STRIKETHROUGH_TEXT',
  100953. 'SMALL': 'SMALL_TEXT',
  100954. 'SUB': 'SUBSTRIPT',
  100955. 'SUP': 'SUPERSCRIPT',
  100956. 'TBODY': 'TABLE_BODY',
  100957. 'TD': 'TABLE_CELL',
  100958. 'TFOOT': 'TABLE_FOOTER',
  100959. 'TH': 'TABLE_HEADER_CELL',
  100960. 'THEAD': 'TABLE_HEADER',
  100961. 'TR': 'TABLE_ROW',
  100962. 'TT': 'MONOSPACED_TEXT',
  100963. 'U': 'UNDERLINED_TEXT',
  100964. 'UL': 'UNORDERED_LIST',
  100965. };
  100966. /**
  100967. * Creates unique names for placeholder with different content.
  100968. *
  100969. * Returns the same placeholder name when the content is identical.
  100970. */
  100971. var PlaceholderRegistry = /** @class */ (function () {
  100972. function PlaceholderRegistry() {
  100973. this._placeHolderNameCounts = {};
  100974. this._signatureToName = {};
  100975. }
  100976. /**
  100977. * @param {?} tag
  100978. * @param {?} attrs
  100979. * @param {?} isVoid
  100980. * @return {?}
  100981. */
  100982. PlaceholderRegistry.prototype.getStartTagPlaceholderName = /**
  100983. * @param {?} tag
  100984. * @param {?} attrs
  100985. * @param {?} isVoid
  100986. * @return {?}
  100987. */
  100988. function (tag, attrs, isVoid) {
  100989. var /** @type {?} */ signature = this._hashTag(tag, attrs, isVoid);
  100990. if (this._signatureToName[signature]) {
  100991. return this._signatureToName[signature];
  100992. }
  100993. var /** @type {?} */ upperTag = tag.toUpperCase();
  100994. var /** @type {?} */ baseName = TAG_TO_PLACEHOLDER_NAMES[upperTag] || "TAG_" + upperTag;
  100995. var /** @type {?} */ name = this._generateUniqueName(isVoid ? baseName : "START_" + baseName);
  100996. this._signatureToName[signature] = name;
  100997. return name;
  100998. };
  100999. /**
  101000. * @param {?} tag
  101001. * @return {?}
  101002. */
  101003. PlaceholderRegistry.prototype.getCloseTagPlaceholderName = /**
  101004. * @param {?} tag
  101005. * @return {?}
  101006. */
  101007. function (tag) {
  101008. var /** @type {?} */ signature = this._hashClosingTag(tag);
  101009. if (this._signatureToName[signature]) {
  101010. return this._signatureToName[signature];
  101011. }
  101012. var /** @type {?} */ upperTag = tag.toUpperCase();
  101013. var /** @type {?} */ baseName = TAG_TO_PLACEHOLDER_NAMES[upperTag] || "TAG_" + upperTag;
  101014. var /** @type {?} */ name = this._generateUniqueName("CLOSE_" + baseName);
  101015. this._signatureToName[signature] = name;
  101016. return name;
  101017. };
  101018. /**
  101019. * @param {?} name
  101020. * @param {?} content
  101021. * @return {?}
  101022. */
  101023. PlaceholderRegistry.prototype.getPlaceholderName = /**
  101024. * @param {?} name
  101025. * @param {?} content
  101026. * @return {?}
  101027. */
  101028. function (name, content) {
  101029. var /** @type {?} */ upperName = name.toUpperCase();
  101030. var /** @type {?} */ signature = "PH: " + upperName + "=" + content;
  101031. if (this._signatureToName[signature]) {
  101032. return this._signatureToName[signature];
  101033. }
  101034. var /** @type {?} */ uniqueName = this._generateUniqueName(upperName);
  101035. this._signatureToName[signature] = uniqueName;
  101036. return uniqueName;
  101037. };
  101038. /**
  101039. * @param {?} name
  101040. * @return {?}
  101041. */
  101042. PlaceholderRegistry.prototype.getUniquePlaceholder = /**
  101043. * @param {?} name
  101044. * @return {?}
  101045. */
  101046. function (name) {
  101047. return this._generateUniqueName(name.toUpperCase());
  101048. };
  101049. /**
  101050. * @param {?} tag
  101051. * @param {?} attrs
  101052. * @param {?} isVoid
  101053. * @return {?}
  101054. */
  101055. PlaceholderRegistry.prototype._hashTag = /**
  101056. * @param {?} tag
  101057. * @param {?} attrs
  101058. * @param {?} isVoid
  101059. * @return {?}
  101060. */
  101061. function (tag, attrs, isVoid) {
  101062. var /** @type {?} */ start = "<" + tag;
  101063. var /** @type {?} */ strAttrs = Object.keys(attrs).sort().map(function (name) { return " " + name + "=" + attrs[name]; }).join('');
  101064. var /** @type {?} */ end = isVoid ? '/>' : "></" + tag + ">";
  101065. return start + strAttrs + end;
  101066. };
  101067. /**
  101068. * @param {?} tag
  101069. * @return {?}
  101070. */
  101071. PlaceholderRegistry.prototype._hashClosingTag = /**
  101072. * @param {?} tag
  101073. * @return {?}
  101074. */
  101075. function (tag) { return this._hashTag("/" + tag, {}, false); };
  101076. /**
  101077. * @param {?} base
  101078. * @return {?}
  101079. */
  101080. PlaceholderRegistry.prototype._generateUniqueName = /**
  101081. * @param {?} base
  101082. * @return {?}
  101083. */
  101084. function (base) {
  101085. var /** @type {?} */ seen = this._placeHolderNameCounts.hasOwnProperty(base);
  101086. if (!seen) {
  101087. this._placeHolderNameCounts[base] = 1;
  101088. return base;
  101089. }
  101090. var /** @type {?} */ id = this._placeHolderNameCounts[base];
  101091. this._placeHolderNameCounts[base] = id + 1;
  101092. return base + "_" + id;
  101093. };
  101094. return PlaceholderRegistry;
  101095. }());
  101096. /**
  101097. * @fileoverview added by tsickle
  101098. * @suppress {checkTypes} checked by tsc
  101099. */
  101100. /**
  101101. * @license
  101102. * Copyright Google Inc. All Rights Reserved.
  101103. *
  101104. * Use of this source code is governed by an MIT-style license that can be
  101105. * found in the LICENSE file at https://angular.io/license
  101106. */
  101107. var _expParser = new Parser(new Lexer());
  101108. /**
  101109. * Returns a function converting html nodes to an i18n Message given an interpolationConfig
  101110. * @param {?} interpolationConfig
  101111. * @return {?}
  101112. */
  101113. function createI18nMessageFactory(interpolationConfig) {
  101114. var /** @type {?} */ visitor = new _I18nVisitor(_expParser, interpolationConfig);
  101115. return function (nodes, meaning, description, id) {
  101116. return visitor.toI18nMessage(nodes, meaning, description, id);
  101117. };
  101118. }
  101119. var _I18nVisitor = /** @class */ (function () {
  101120. function _I18nVisitor(_expressionParser, _interpolationConfig) {
  101121. this._expressionParser = _expressionParser;
  101122. this._interpolationConfig = _interpolationConfig;
  101123. }
  101124. /**
  101125. * @param {?} nodes
  101126. * @param {?} meaning
  101127. * @param {?} description
  101128. * @param {?} id
  101129. * @return {?}
  101130. */
  101131. _I18nVisitor.prototype.toI18nMessage = /**
  101132. * @param {?} nodes
  101133. * @param {?} meaning
  101134. * @param {?} description
  101135. * @param {?} id
  101136. * @return {?}
  101137. */
  101138. function (nodes, meaning, description, id) {
  101139. this._isIcu = nodes.length == 1 && nodes[0] instanceof Expansion;
  101140. this._icuDepth = 0;
  101141. this._placeholderRegistry = new PlaceholderRegistry();
  101142. this._placeholderToContent = {};
  101143. this._placeholderToMessage = {};
  101144. var /** @type {?} */ i18nodes = visitAll(this, nodes, {});
  101145. return new Message(i18nodes, this._placeholderToContent, this._placeholderToMessage, meaning, description, id);
  101146. };
  101147. /**
  101148. * @param {?} el
  101149. * @param {?} context
  101150. * @return {?}
  101151. */
  101152. _I18nVisitor.prototype.visitElement = /**
  101153. * @param {?} el
  101154. * @param {?} context
  101155. * @return {?}
  101156. */
  101157. function (el, context) {
  101158. var /** @type {?} */ children = visitAll(this, el.children);
  101159. var /** @type {?} */ attrs = {};
  101160. el.attrs.forEach(function (attr) {
  101161. // Do not visit the attributes, translatable ones are top-level ASTs
  101162. attrs[attr.name] = attr.value;
  101163. });
  101164. var /** @type {?} */ isVoid = getHtmlTagDefinition(el.name).isVoid;
  101165. var /** @type {?} */ startPhName = this._placeholderRegistry.getStartTagPlaceholderName(el.name, attrs, isVoid);
  101166. this._placeholderToContent[startPhName] = /** @type {?} */ ((el.sourceSpan)).toString();
  101167. var /** @type {?} */ closePhName = '';
  101168. if (!isVoid) {
  101169. closePhName = this._placeholderRegistry.getCloseTagPlaceholderName(el.name);
  101170. this._placeholderToContent[closePhName] = "</" + el.name + ">";
  101171. }
  101172. return new TagPlaceholder(el.name, attrs, startPhName, closePhName, children, isVoid, /** @type {?} */ ((el.sourceSpan)));
  101173. };
  101174. /**
  101175. * @param {?} attribute
  101176. * @param {?} context
  101177. * @return {?}
  101178. */
  101179. _I18nVisitor.prototype.visitAttribute = /**
  101180. * @param {?} attribute
  101181. * @param {?} context
  101182. * @return {?}
  101183. */
  101184. function (attribute, context) {
  101185. return this._visitTextWithInterpolation(attribute.value, attribute.sourceSpan);
  101186. };
  101187. /**
  101188. * @param {?} text
  101189. * @param {?} context
  101190. * @return {?}
  101191. */
  101192. _I18nVisitor.prototype.visitText = /**
  101193. * @param {?} text
  101194. * @param {?} context
  101195. * @return {?}
  101196. */
  101197. function (text, context) {
  101198. return this._visitTextWithInterpolation(text.value, /** @type {?} */ ((text.sourceSpan)));
  101199. };
  101200. /**
  101201. * @param {?} comment
  101202. * @param {?} context
  101203. * @return {?}
  101204. */
  101205. _I18nVisitor.prototype.visitComment = /**
  101206. * @param {?} comment
  101207. * @param {?} context
  101208. * @return {?}
  101209. */
  101210. function (comment, context) { return null; };
  101211. /**
  101212. * @param {?} icu
  101213. * @param {?} context
  101214. * @return {?}
  101215. */
  101216. _I18nVisitor.prototype.visitExpansion = /**
  101217. * @param {?} icu
  101218. * @param {?} context
  101219. * @return {?}
  101220. */
  101221. function (icu, context) {
  101222. var _this = this;
  101223. this._icuDepth++;
  101224. var /** @type {?} */ i18nIcuCases = {};
  101225. var /** @type {?} */ i18nIcu = new Icu(icu.switchValue, icu.type, i18nIcuCases, icu.sourceSpan);
  101226. icu.cases.forEach(function (caze) {
  101227. i18nIcuCases[caze.value] = new Container(caze.expression.map(function (node) { return node.visit(_this, {}); }), caze.expSourceSpan);
  101228. });
  101229. this._icuDepth--;
  101230. if (this._isIcu || this._icuDepth > 0) {
  101231. // Returns an ICU node when:
  101232. // - the message (vs a part of the message) is an ICU message, or
  101233. // - the ICU message is nested.
  101234. var /** @type {?} */ expPh = this._placeholderRegistry.getUniquePlaceholder("VAR_" + icu.type);
  101235. i18nIcu.expressionPlaceholder = expPh;
  101236. this._placeholderToContent[expPh] = icu.switchValue;
  101237. return i18nIcu;
  101238. }
  101239. // Else returns a placeholder
  101240. // ICU placeholders should not be replaced with their original content but with the their
  101241. // translations. We need to create a new visitor (they are not re-entrant) to compute the
  101242. // message id.
  101243. // TODO(vicb): add a html.Node -> i18n.Message cache to avoid having to re-create the msg
  101244. var /** @type {?} */ phName = this._placeholderRegistry.getPlaceholderName('ICU', icu.sourceSpan.toString());
  101245. var /** @type {?} */ visitor = new _I18nVisitor(this._expressionParser, this._interpolationConfig);
  101246. this._placeholderToMessage[phName] = visitor.toI18nMessage([icu], '', '', '');
  101247. return new IcuPlaceholder(i18nIcu, phName, icu.sourceSpan);
  101248. };
  101249. /**
  101250. * @param {?} icuCase
  101251. * @param {?} context
  101252. * @return {?}
  101253. */
  101254. _I18nVisitor.prototype.visitExpansionCase = /**
  101255. * @param {?} icuCase
  101256. * @param {?} context
  101257. * @return {?}
  101258. */
  101259. function (icuCase, context) {
  101260. throw new Error('Unreachable code');
  101261. };
  101262. /**
  101263. * @param {?} text
  101264. * @param {?} sourceSpan
  101265. * @return {?}
  101266. */
  101267. _I18nVisitor.prototype._visitTextWithInterpolation = /**
  101268. * @param {?} text
  101269. * @param {?} sourceSpan
  101270. * @return {?}
  101271. */
  101272. function (text, sourceSpan) {
  101273. var /** @type {?} */ splitInterpolation = this._expressionParser.splitInterpolation(text, sourceSpan.start.toString(), this._interpolationConfig);
  101274. if (!splitInterpolation) {
  101275. // No expression, return a single text
  101276. return new Text$1(text, sourceSpan);
  101277. }
  101278. // Return a group of text + expressions
  101279. var /** @type {?} */ nodes = [];
  101280. var /** @type {?} */ container = new Container(nodes, sourceSpan);
  101281. var _a = this._interpolationConfig, sDelimiter = _a.start, eDelimiter = _a.end;
  101282. for (var /** @type {?} */ i = 0; i < splitInterpolation.strings.length - 1; i++) {
  101283. var /** @type {?} */ expression = splitInterpolation.expressions[i];
  101284. var /** @type {?} */ baseName = _extractPlaceholderName(expression) || 'INTERPOLATION';
  101285. var /** @type {?} */ phName = this._placeholderRegistry.getPlaceholderName(baseName, expression);
  101286. if (splitInterpolation.strings[i].length) {
  101287. // No need to add empty strings
  101288. nodes.push(new Text$1(splitInterpolation.strings[i], sourceSpan));
  101289. }
  101290. nodes.push(new Placeholder(expression, phName, sourceSpan));
  101291. this._placeholderToContent[phName] = sDelimiter + expression + eDelimiter;
  101292. }
  101293. // The last index contains no expression
  101294. var /** @type {?} */ lastStringIdx = splitInterpolation.strings.length - 1;
  101295. if (splitInterpolation.strings[lastStringIdx].length) {
  101296. nodes.push(new Text$1(splitInterpolation.strings[lastStringIdx], sourceSpan));
  101297. }
  101298. return container;
  101299. };
  101300. return _I18nVisitor;
  101301. }());
  101302. var _CUSTOM_PH_EXP = /\/\/[\s\S]*i18n[\s\S]*\([\s\S]*ph[\s\S]*=[\s\S]*("|')([\s\S]*?)\1[\s\S]*\)/g;
  101303. /**
  101304. * @param {?} input
  101305. * @return {?}
  101306. */
  101307. function _extractPlaceholderName(input) {
  101308. return input.split(_CUSTOM_PH_EXP)[2];
  101309. }
  101310. /**
  101311. * @fileoverview added by tsickle
  101312. * @suppress {checkTypes} checked by tsc
  101313. */
  101314. /**
  101315. * @license
  101316. * Copyright Google Inc. All Rights Reserved.
  101317. *
  101318. * Use of this source code is governed by an MIT-style license that can be
  101319. * found in the LICENSE file at https://angular.io/license
  101320. */
  101321. /**
  101322. * An i18n error.
  101323. */
  101324. var I18nError = /** @class */ (function (_super) {
  101325. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(I18nError, _super);
  101326. function I18nError(span, msg) {
  101327. return _super.call(this, span, msg) || this;
  101328. }
  101329. return I18nError;
  101330. }(ParseError));
  101331. /**
  101332. * @fileoverview added by tsickle
  101333. * @suppress {checkTypes} checked by tsc
  101334. */
  101335. /**
  101336. * @license
  101337. * Copyright Google Inc. All Rights Reserved.
  101338. *
  101339. * Use of this source code is governed by an MIT-style license that can be
  101340. * found in the LICENSE file at https://angular.io/license
  101341. */
  101342. var _I18N_ATTR = 'i18n';
  101343. var _I18N_ATTR_PREFIX = 'i18n-';
  101344. var _I18N_COMMENT_PREFIX_REGEXP = /^i18n:?/;
  101345. var MEANING_SEPARATOR = '|';
  101346. var ID_SEPARATOR = '@@';
  101347. var i18nCommentsWarned = false;
  101348. /**
  101349. * Extract translatable messages from an html AST
  101350. * @param {?} nodes
  101351. * @param {?} interpolationConfig
  101352. * @param {?} implicitTags
  101353. * @param {?} implicitAttrs
  101354. * @return {?}
  101355. */
  101356. function extractMessages(nodes, interpolationConfig, implicitTags, implicitAttrs) {
  101357. var /** @type {?} */ visitor = new _Visitor(implicitTags, implicitAttrs);
  101358. return visitor.extract(nodes, interpolationConfig);
  101359. }
  101360. /**
  101361. * @param {?} nodes
  101362. * @param {?} translations
  101363. * @param {?} interpolationConfig
  101364. * @param {?} implicitTags
  101365. * @param {?} implicitAttrs
  101366. * @return {?}
  101367. */
  101368. function mergeTranslations(nodes, translations, interpolationConfig, implicitTags, implicitAttrs) {
  101369. var /** @type {?} */ visitor = new _Visitor(implicitTags, implicitAttrs);
  101370. return visitor.merge(nodes, translations, interpolationConfig);
  101371. }
  101372. var ExtractionResult = /** @class */ (function () {
  101373. function ExtractionResult(messages, errors) {
  101374. this.messages = messages;
  101375. this.errors = errors;
  101376. }
  101377. return ExtractionResult;
  101378. }());
  101379. /** @enum {number} */
  101380. var _VisitorMode = {
  101381. Extract: 0,
  101382. Merge: 1,
  101383. };
  101384. _VisitorMode[_VisitorMode.Extract] = "Extract";
  101385. _VisitorMode[_VisitorMode.Merge] = "Merge";
  101386. /**
  101387. * This Visitor is used:
  101388. * 1. to extract all the translatable strings from an html AST (see `extract()`),
  101389. * 2. to replace the translatable strings with the actual translations (see `merge()`)
  101390. *
  101391. * \@internal
  101392. */
  101393. var _Visitor = /** @class */ (function () {
  101394. function _Visitor(_implicitTags, _implicitAttrs) {
  101395. this._implicitTags = _implicitTags;
  101396. this._implicitAttrs = _implicitAttrs;
  101397. }
  101398. /**
  101399. * Extracts the messages from the tree
  101400. */
  101401. /**
  101402. * Extracts the messages from the tree
  101403. * @param {?} nodes
  101404. * @param {?} interpolationConfig
  101405. * @return {?}
  101406. */
  101407. _Visitor.prototype.extract = /**
  101408. * Extracts the messages from the tree
  101409. * @param {?} nodes
  101410. * @param {?} interpolationConfig
  101411. * @return {?}
  101412. */
  101413. function (nodes, interpolationConfig) {
  101414. var _this = this;
  101415. this._init(_VisitorMode.Extract, interpolationConfig);
  101416. nodes.forEach(function (node) { return node.visit(_this, null); });
  101417. if (this._inI18nBlock) {
  101418. this._reportError(nodes[nodes.length - 1], 'Unclosed block');
  101419. }
  101420. return new ExtractionResult(this._messages, this._errors);
  101421. };
  101422. /**
  101423. * Returns a tree where all translatable nodes are translated
  101424. */
  101425. /**
  101426. * Returns a tree where all translatable nodes are translated
  101427. * @param {?} nodes
  101428. * @param {?} translations
  101429. * @param {?} interpolationConfig
  101430. * @return {?}
  101431. */
  101432. _Visitor.prototype.merge = /**
  101433. * Returns a tree where all translatable nodes are translated
  101434. * @param {?} nodes
  101435. * @param {?} translations
  101436. * @param {?} interpolationConfig
  101437. * @return {?}
  101438. */
  101439. function (nodes, translations, interpolationConfig) {
  101440. this._init(_VisitorMode.Merge, interpolationConfig);
  101441. this._translations = translations;
  101442. // Construct a single fake root element
  101443. var /** @type {?} */ wrapper = new Element('wrapper', [], nodes, /** @type {?} */ ((undefined)), undefined, undefined);
  101444. var /** @type {?} */ translatedNode = wrapper.visit(this, null);
  101445. if (this._inI18nBlock) {
  101446. this._reportError(nodes[nodes.length - 1], 'Unclosed block');
  101447. }
  101448. return new ParseTreeResult(translatedNode.children, this._errors);
  101449. };
  101450. /**
  101451. * @param {?} icuCase
  101452. * @param {?} context
  101453. * @return {?}
  101454. */
  101455. _Visitor.prototype.visitExpansionCase = /**
  101456. * @param {?} icuCase
  101457. * @param {?} context
  101458. * @return {?}
  101459. */
  101460. function (icuCase, context) {
  101461. // Parse cases for translatable html attributes
  101462. var /** @type {?} */ expression = visitAll(this, icuCase.expression, context);
  101463. if (this._mode === _VisitorMode.Merge) {
  101464. return new ExpansionCase(icuCase.value, expression, icuCase.sourceSpan, icuCase.valueSourceSpan, icuCase.expSourceSpan);
  101465. }
  101466. };
  101467. /**
  101468. * @param {?} icu
  101469. * @param {?} context
  101470. * @return {?}
  101471. */
  101472. _Visitor.prototype.visitExpansion = /**
  101473. * @param {?} icu
  101474. * @param {?} context
  101475. * @return {?}
  101476. */
  101477. function (icu, context) {
  101478. this._mayBeAddBlockChildren(icu);
  101479. var /** @type {?} */ wasInIcu = this._inIcu;
  101480. if (!this._inIcu) {
  101481. // nested ICU messages should not be extracted but top-level translated as a whole
  101482. if (this._isInTranslatableSection) {
  101483. this._addMessage([icu]);
  101484. }
  101485. this._inIcu = true;
  101486. }
  101487. var /** @type {?} */ cases = visitAll(this, icu.cases, context);
  101488. if (this._mode === _VisitorMode.Merge) {
  101489. icu = new Expansion(icu.switchValue, icu.type, cases, icu.sourceSpan, icu.switchValueSourceSpan);
  101490. }
  101491. this._inIcu = wasInIcu;
  101492. return icu;
  101493. };
  101494. /**
  101495. * @param {?} comment
  101496. * @param {?} context
  101497. * @return {?}
  101498. */
  101499. _Visitor.prototype.visitComment = /**
  101500. * @param {?} comment
  101501. * @param {?} context
  101502. * @return {?}
  101503. */
  101504. function (comment, context) {
  101505. var /** @type {?} */ isOpening = _isOpeningComment(comment);
  101506. if (isOpening && this._isInTranslatableSection) {
  101507. this._reportError(comment, 'Could not start a block inside a translatable section');
  101508. return;
  101509. }
  101510. var /** @type {?} */ isClosing = _isClosingComment(comment);
  101511. if (isClosing && !this._inI18nBlock) {
  101512. this._reportError(comment, 'Trying to close an unopened block');
  101513. return;
  101514. }
  101515. if (!this._inI18nNode && !this._inIcu) {
  101516. if (!this._inI18nBlock) {
  101517. if (isOpening) {
  101518. // deprecated from v5 you should use <ng-container i18n> instead of i18n comments
  101519. if (!i18nCommentsWarned && /** @type {?} */ (console) && /** @type {?} */ (console.warn)) {
  101520. i18nCommentsWarned = true;
  101521. var /** @type {?} */ details = comment.sourceSpan.details ? ", " + comment.sourceSpan.details : '';
  101522. // TODO(ocombe): use a log service once there is a public one available
  101523. console.warn("I18n comments are deprecated, use an <ng-container> element instead (" + comment.sourceSpan.start + details + ")");
  101524. }
  101525. this._inI18nBlock = true;
  101526. this._blockStartDepth = this._depth;
  101527. this._blockChildren = [];
  101528. this._blockMeaningAndDesc = /** @type {?} */ ((comment.value)).replace(_I18N_COMMENT_PREFIX_REGEXP, '').trim();
  101529. this._openTranslatableSection(comment);
  101530. }
  101531. }
  101532. else {
  101533. if (isClosing) {
  101534. if (this._depth == this._blockStartDepth) {
  101535. this._closeTranslatableSection(comment, this._blockChildren);
  101536. this._inI18nBlock = false;
  101537. var /** @type {?} */ message = /** @type {?} */ ((this._addMessage(this._blockChildren, this._blockMeaningAndDesc)));
  101538. // merge attributes in sections
  101539. var /** @type {?} */ nodes = this._translateMessage(comment, message);
  101540. return visitAll(this, nodes);
  101541. }
  101542. else {
  101543. this._reportError(comment, 'I18N blocks should not cross element boundaries');
  101544. return;
  101545. }
  101546. }
  101547. }
  101548. }
  101549. };
  101550. /**
  101551. * @param {?} text
  101552. * @param {?} context
  101553. * @return {?}
  101554. */
  101555. _Visitor.prototype.visitText = /**
  101556. * @param {?} text
  101557. * @param {?} context
  101558. * @return {?}
  101559. */
  101560. function (text, context) {
  101561. if (this._isInTranslatableSection) {
  101562. this._mayBeAddBlockChildren(text);
  101563. }
  101564. return text;
  101565. };
  101566. /**
  101567. * @param {?} el
  101568. * @param {?} context
  101569. * @return {?}
  101570. */
  101571. _Visitor.prototype.visitElement = /**
  101572. * @param {?} el
  101573. * @param {?} context
  101574. * @return {?}
  101575. */
  101576. function (el, context) {
  101577. var _this = this;
  101578. this._mayBeAddBlockChildren(el);
  101579. this._depth++;
  101580. var /** @type {?} */ wasInI18nNode = this._inI18nNode;
  101581. var /** @type {?} */ wasInImplicitNode = this._inImplicitNode;
  101582. var /** @type {?} */ childNodes = [];
  101583. var /** @type {?} */ translatedChildNodes = /** @type {?} */ ((undefined));
  101584. // Extract:
  101585. // - top level nodes with the (implicit) "i18n" attribute if not already in a section
  101586. // - ICU messages
  101587. var /** @type {?} */ i18nAttr = _getI18nAttr(el);
  101588. var /** @type {?} */ i18nMeta = i18nAttr ? i18nAttr.value : '';
  101589. var /** @type {?} */ isImplicit = this._implicitTags.some(function (tag) { return el.name === tag; }) && !this._inIcu &&
  101590. !this._isInTranslatableSection;
  101591. var /** @type {?} */ isTopLevelImplicit = !wasInImplicitNode && isImplicit;
  101592. this._inImplicitNode = wasInImplicitNode || isImplicit;
  101593. if (!this._isInTranslatableSection && !this._inIcu) {
  101594. if (i18nAttr || isTopLevelImplicit) {
  101595. this._inI18nNode = true;
  101596. var /** @type {?} */ message = /** @type {?} */ ((this._addMessage(el.children, i18nMeta)));
  101597. translatedChildNodes = this._translateMessage(el, message);
  101598. }
  101599. if (this._mode == _VisitorMode.Extract) {
  101600. var /** @type {?} */ isTranslatable = i18nAttr || isTopLevelImplicit;
  101601. if (isTranslatable)
  101602. this._openTranslatableSection(el);
  101603. visitAll(this, el.children);
  101604. if (isTranslatable)
  101605. this._closeTranslatableSection(el, el.children);
  101606. }
  101607. }
  101608. else {
  101609. if (i18nAttr || isTopLevelImplicit) {
  101610. this._reportError(el, 'Could not mark an element as translatable inside a translatable section');
  101611. }
  101612. if (this._mode == _VisitorMode.Extract) {
  101613. // Descend into child nodes for extraction
  101614. visitAll(this, el.children);
  101615. }
  101616. }
  101617. if (this._mode === _VisitorMode.Merge) {
  101618. var /** @type {?} */ visitNodes = translatedChildNodes || el.children;
  101619. visitNodes.forEach(function (child) {
  101620. var /** @type {?} */ visited = child.visit(_this, context);
  101621. if (visited && !_this._isInTranslatableSection) {
  101622. // Do not add the children from translatable sections (= i18n blocks here)
  101623. // They will be added later in this loop when the block closes (i.e. on `<!-- /i18n -->`)
  101624. childNodes = childNodes.concat(visited);
  101625. }
  101626. });
  101627. }
  101628. this._visitAttributesOf(el);
  101629. this._depth--;
  101630. this._inI18nNode = wasInI18nNode;
  101631. this._inImplicitNode = wasInImplicitNode;
  101632. if (this._mode === _VisitorMode.Merge) {
  101633. var /** @type {?} */ translatedAttrs = this._translateAttributes(el);
  101634. return new Element(el.name, translatedAttrs, childNodes, el.sourceSpan, el.startSourceSpan, el.endSourceSpan);
  101635. }
  101636. return null;
  101637. };
  101638. /**
  101639. * @param {?} attribute
  101640. * @param {?} context
  101641. * @return {?}
  101642. */
  101643. _Visitor.prototype.visitAttribute = /**
  101644. * @param {?} attribute
  101645. * @param {?} context
  101646. * @return {?}
  101647. */
  101648. function (attribute, context) {
  101649. throw new Error('unreachable code');
  101650. };
  101651. /**
  101652. * @param {?} mode
  101653. * @param {?} interpolationConfig
  101654. * @return {?}
  101655. */
  101656. _Visitor.prototype._init = /**
  101657. * @param {?} mode
  101658. * @param {?} interpolationConfig
  101659. * @return {?}
  101660. */
  101661. function (mode, interpolationConfig) {
  101662. this._mode = mode;
  101663. this._inI18nBlock = false;
  101664. this._inI18nNode = false;
  101665. this._depth = 0;
  101666. this._inIcu = false;
  101667. this._msgCountAtSectionStart = undefined;
  101668. this._errors = [];
  101669. this._messages = [];
  101670. this._inImplicitNode = false;
  101671. this._createI18nMessage = createI18nMessageFactory(interpolationConfig);
  101672. };
  101673. /**
  101674. * @param {?} el
  101675. * @return {?}
  101676. */
  101677. _Visitor.prototype._visitAttributesOf = /**
  101678. * @param {?} el
  101679. * @return {?}
  101680. */
  101681. function (el) {
  101682. var _this = this;
  101683. var /** @type {?} */ explicitAttrNameToValue = {};
  101684. var /** @type {?} */ implicitAttrNames = this._implicitAttrs[el.name] || [];
  101685. el.attrs.filter(function (attr) { return attr.name.startsWith(_I18N_ATTR_PREFIX); })
  101686. .forEach(function (attr) {
  101687. return explicitAttrNameToValue[attr.name.slice(_I18N_ATTR_PREFIX.length)] =
  101688. attr.value;
  101689. });
  101690. el.attrs.forEach(function (attr) {
  101691. if (attr.name in explicitAttrNameToValue) {
  101692. _this._addMessage([attr], explicitAttrNameToValue[attr.name]);
  101693. }
  101694. else if (implicitAttrNames.some(function (name) { return attr.name === name; })) {
  101695. _this._addMessage([attr]);
  101696. }
  101697. });
  101698. };
  101699. /**
  101700. * @param {?} ast
  101701. * @param {?=} msgMeta
  101702. * @return {?}
  101703. */
  101704. _Visitor.prototype._addMessage = /**
  101705. * @param {?} ast
  101706. * @param {?=} msgMeta
  101707. * @return {?}
  101708. */
  101709. function (ast, msgMeta) {
  101710. if (ast.length == 0 ||
  101711. ast.length == 1 && ast[0] instanceof Attribute$1 && !(/** @type {?} */ (ast[0])).value) {
  101712. // Do not create empty messages
  101713. return null;
  101714. }
  101715. var _a = _parseMessageMeta(msgMeta), meaning = _a.meaning, description = _a.description, id = _a.id;
  101716. var /** @type {?} */ message = this._createI18nMessage(ast, meaning, description, id);
  101717. this._messages.push(message);
  101718. return message;
  101719. };
  101720. /**
  101721. * @param {?} el
  101722. * @param {?} message
  101723. * @return {?}
  101724. */
  101725. _Visitor.prototype._translateMessage = /**
  101726. * @param {?} el
  101727. * @param {?} message
  101728. * @return {?}
  101729. */
  101730. function (el, message) {
  101731. if (message && this._mode === _VisitorMode.Merge) {
  101732. var /** @type {?} */ nodes = this._translations.get(message);
  101733. if (nodes) {
  101734. return nodes;
  101735. }
  101736. this._reportError(el, "Translation unavailable for message id=\"" + this._translations.digest(message) + "\"");
  101737. }
  101738. return [];
  101739. };
  101740. /**
  101741. * @param {?} el
  101742. * @return {?}
  101743. */
  101744. _Visitor.prototype._translateAttributes = /**
  101745. * @param {?} el
  101746. * @return {?}
  101747. */
  101748. function (el) {
  101749. var _this = this;
  101750. var /** @type {?} */ attributes = el.attrs;
  101751. var /** @type {?} */ i18nParsedMessageMeta = {};
  101752. attributes.forEach(function (attr) {
  101753. if (attr.name.startsWith(_I18N_ATTR_PREFIX)) {
  101754. i18nParsedMessageMeta[attr.name.slice(_I18N_ATTR_PREFIX.length)] =
  101755. _parseMessageMeta(attr.value);
  101756. }
  101757. });
  101758. var /** @type {?} */ translatedAttributes = [];
  101759. attributes.forEach(function (attr) {
  101760. if (attr.name === _I18N_ATTR || attr.name.startsWith(_I18N_ATTR_PREFIX)) {
  101761. // strip i18n specific attributes
  101762. return;
  101763. }
  101764. if (attr.value && attr.value != '' && i18nParsedMessageMeta.hasOwnProperty(attr.name)) {
  101765. var _a = i18nParsedMessageMeta[attr.name], meaning = _a.meaning, description = _a.description, id = _a.id;
  101766. var /** @type {?} */ message = _this._createI18nMessage([attr], meaning, description, id);
  101767. var /** @type {?} */ nodes = _this._translations.get(message);
  101768. if (nodes) {
  101769. if (nodes.length == 0) {
  101770. translatedAttributes.push(new Attribute$1(attr.name, '', attr.sourceSpan));
  101771. }
  101772. else if (nodes[0] instanceof Text) {
  101773. var /** @type {?} */ value = (/** @type {?} */ (nodes[0])).value;
  101774. translatedAttributes.push(new Attribute$1(attr.name, value, attr.sourceSpan));
  101775. }
  101776. else {
  101777. _this._reportError(el, "Unexpected translation for attribute \"" + attr.name + "\" (id=\"" + (id || _this._translations.digest(message)) + "\")");
  101778. }
  101779. }
  101780. else {
  101781. _this._reportError(el, "Translation unavailable for attribute \"" + attr.name + "\" (id=\"" + (id || _this._translations.digest(message)) + "\")");
  101782. }
  101783. }
  101784. else {
  101785. translatedAttributes.push(attr);
  101786. }
  101787. });
  101788. return translatedAttributes;
  101789. };
  101790. /**
  101791. * Add the node as a child of the block when:
  101792. * - we are in a block,
  101793. * - we are not inside a ICU message (those are handled separately),
  101794. * - the node is a "direct child" of the block
  101795. * @param {?} node
  101796. * @return {?}
  101797. */
  101798. _Visitor.prototype._mayBeAddBlockChildren = /**
  101799. * Add the node as a child of the block when:
  101800. * - we are in a block,
  101801. * - we are not inside a ICU message (those are handled separately),
  101802. * - the node is a "direct child" of the block
  101803. * @param {?} node
  101804. * @return {?}
  101805. */
  101806. function (node) {
  101807. if (this._inI18nBlock && !this._inIcu && this._depth == this._blockStartDepth) {
  101808. this._blockChildren.push(node);
  101809. }
  101810. };
  101811. /**
  101812. * Marks the start of a section, see `_closeTranslatableSection`
  101813. * @param {?} node
  101814. * @return {?}
  101815. */
  101816. _Visitor.prototype._openTranslatableSection = /**
  101817. * Marks the start of a section, see `_closeTranslatableSection`
  101818. * @param {?} node
  101819. * @return {?}
  101820. */
  101821. function (node) {
  101822. if (this._isInTranslatableSection) {
  101823. this._reportError(node, 'Unexpected section start');
  101824. }
  101825. else {
  101826. this._msgCountAtSectionStart = this._messages.length;
  101827. }
  101828. };
  101829. Object.defineProperty(_Visitor.prototype, "_isInTranslatableSection", {
  101830. get: /**
  101831. * A translatable section could be:
  101832. * - the content of translatable element,
  101833. * - nodes between `<!-- i18n -->` and `<!-- /i18n -->` comments
  101834. * @return {?}
  101835. */
  101836. function () {
  101837. return this._msgCountAtSectionStart !== void 0;
  101838. },
  101839. enumerable: true,
  101840. configurable: true
  101841. });
  101842. /**
  101843. * Terminates a section.
  101844. *
  101845. * If a section has only one significant children (comments not significant) then we should not
  101846. * keep the message from this children:
  101847. *
  101848. * `<p i18n="meaning|description">{ICU message}</p>` would produce two messages:
  101849. * - one for the <p> content with meaning and description,
  101850. * - another one for the ICU message.
  101851. *
  101852. * In this case the last message is discarded as it contains less information (the AST is
  101853. * otherwise identical).
  101854. *
  101855. * Note that we should still keep messages extracted from attributes inside the section (ie in the
  101856. * ICU message here)
  101857. * @param {?} node
  101858. * @param {?} directChildren
  101859. * @return {?}
  101860. */
  101861. _Visitor.prototype._closeTranslatableSection = /**
  101862. * Terminates a section.
  101863. *
  101864. * If a section has only one significant children (comments not significant) then we should not
  101865. * keep the message from this children:
  101866. *
  101867. * `<p i18n="meaning|description">{ICU message}</p>` would produce two messages:
  101868. * - one for the <p> content with meaning and description,
  101869. * - another one for the ICU message.
  101870. *
  101871. * In this case the last message is discarded as it contains less information (the AST is
  101872. * otherwise identical).
  101873. *
  101874. * Note that we should still keep messages extracted from attributes inside the section (ie in the
  101875. * ICU message here)
  101876. * @param {?} node
  101877. * @param {?} directChildren
  101878. * @return {?}
  101879. */
  101880. function (node, directChildren) {
  101881. if (!this._isInTranslatableSection) {
  101882. this._reportError(node, 'Unexpected section end');
  101883. return;
  101884. }
  101885. var /** @type {?} */ startIndex = this._msgCountAtSectionStart;
  101886. var /** @type {?} */ significantChildren = directChildren.reduce(function (count, node) { return count + (node instanceof Comment ? 0 : 1); }, 0);
  101887. if (significantChildren == 1) {
  101888. for (var /** @type {?} */ i = this._messages.length - 1; i >= /** @type {?} */ ((startIndex)); i--) {
  101889. var /** @type {?} */ ast = this._messages[i].nodes;
  101890. if (!(ast.length == 1 && ast[0] instanceof Text$1)) {
  101891. this._messages.splice(i, 1);
  101892. break;
  101893. }
  101894. }
  101895. }
  101896. this._msgCountAtSectionStart = undefined;
  101897. };
  101898. /**
  101899. * @param {?} node
  101900. * @param {?} msg
  101901. * @return {?}
  101902. */
  101903. _Visitor.prototype._reportError = /**
  101904. * @param {?} node
  101905. * @param {?} msg
  101906. * @return {?}
  101907. */
  101908. function (node, msg) {
  101909. this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), msg));
  101910. };
  101911. return _Visitor;
  101912. }());
  101913. /**
  101914. * @param {?} n
  101915. * @return {?}
  101916. */
  101917. function _isOpeningComment(n) {
  101918. return !!(n instanceof Comment && n.value && n.value.startsWith('i18n'));
  101919. }
  101920. /**
  101921. * @param {?} n
  101922. * @return {?}
  101923. */
  101924. function _isClosingComment(n) {
  101925. return !!(n instanceof Comment && n.value && n.value === '/i18n');
  101926. }
  101927. /**
  101928. * @param {?} p
  101929. * @return {?}
  101930. */
  101931. function _getI18nAttr(p) {
  101932. return p.attrs.find(function (attr) { return attr.name === _I18N_ATTR; }) || null;
  101933. }
  101934. /**
  101935. * @param {?=} i18n
  101936. * @return {?}
  101937. */
  101938. function _parseMessageMeta(i18n) {
  101939. if (!i18n)
  101940. return { meaning: '', description: '', id: '' };
  101941. var /** @type {?} */ idIndex = i18n.indexOf(ID_SEPARATOR);
  101942. var /** @type {?} */ descIndex = i18n.indexOf(MEANING_SEPARATOR);
  101943. var _a = (idIndex > -1) ? [i18n.slice(0, idIndex), i18n.slice(idIndex + 2)] : [i18n, ''], meaningAndDesc = _a[0], id = _a[1];
  101944. var _b = (descIndex > -1) ?
  101945. [meaningAndDesc.slice(0, descIndex), meaningAndDesc.slice(descIndex + 1)] :
  101946. ['', meaningAndDesc], meaning = _b[0], description = _b[1];
  101947. return { meaning: meaning, description: description, id: id };
  101948. }
  101949. /**
  101950. * @fileoverview added by tsickle
  101951. * @suppress {checkTypes} checked by tsc
  101952. */
  101953. /**
  101954. * @license
  101955. * Copyright Google Inc. All Rights Reserved.
  101956. *
  101957. * Use of this source code is governed by an MIT-style license that can be
  101958. * found in the LICENSE file at https://angular.io/license
  101959. */
  101960. var XmlTagDefinition = /** @class */ (function () {
  101961. function XmlTagDefinition() {
  101962. this.closedByParent = false;
  101963. this.contentType = TagContentType.PARSABLE_DATA;
  101964. this.isVoid = false;
  101965. this.ignoreFirstLf = false;
  101966. this.canSelfClose = true;
  101967. }
  101968. /**
  101969. * @param {?} currentParent
  101970. * @return {?}
  101971. */
  101972. XmlTagDefinition.prototype.requireExtraParent = /**
  101973. * @param {?} currentParent
  101974. * @return {?}
  101975. */
  101976. function (currentParent) { return false; };
  101977. /**
  101978. * @param {?} name
  101979. * @return {?}
  101980. */
  101981. XmlTagDefinition.prototype.isClosedByChild = /**
  101982. * @param {?} name
  101983. * @return {?}
  101984. */
  101985. function (name) { return false; };
  101986. return XmlTagDefinition;
  101987. }());
  101988. var _TAG_DEFINITION = new XmlTagDefinition();
  101989. /**
  101990. * @param {?} tagName
  101991. * @return {?}
  101992. */
  101993. function getXmlTagDefinition(tagName) {
  101994. return _TAG_DEFINITION;
  101995. }
  101996. /**
  101997. * @fileoverview added by tsickle
  101998. * @suppress {checkTypes} checked by tsc
  101999. */
  102000. /**
  102001. * @license
  102002. * Copyright Google Inc. All Rights Reserved.
  102003. *
  102004. * Use of this source code is governed by an MIT-style license that can be
  102005. * found in the LICENSE file at https://angular.io/license
  102006. */
  102007. var XmlParser = /** @class */ (function (_super) {
  102008. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(XmlParser, _super);
  102009. function XmlParser() {
  102010. return _super.call(this, getXmlTagDefinition) || this;
  102011. }
  102012. /**
  102013. * @param {?} source
  102014. * @param {?} url
  102015. * @param {?=} parseExpansionForms
  102016. * @return {?}
  102017. */
  102018. XmlParser.prototype.parse = /**
  102019. * @param {?} source
  102020. * @param {?} url
  102021. * @param {?=} parseExpansionForms
  102022. * @return {?}
  102023. */
  102024. function (source, url, parseExpansionForms) {
  102025. if (parseExpansionForms === void 0) { parseExpansionForms = false; }
  102026. return _super.prototype.parse.call(this, source, url, parseExpansionForms);
  102027. };
  102028. return XmlParser;
  102029. }(Parser$1));
  102030. /**
  102031. * @fileoverview added by tsickle
  102032. * @suppress {checkTypes} checked by tsc
  102033. */
  102034. /**
  102035. * @license
  102036. * Copyright Google Inc. All Rights Reserved.
  102037. *
  102038. * Use of this source code is governed by an MIT-style license that can be
  102039. * found in the LICENSE file at https://angular.io/license
  102040. */
  102041. /**
  102042. * @abstract
  102043. */
  102044. var Serializer = /** @class */ (function () {
  102045. function Serializer() {
  102046. }
  102047. // Creates a name mapper, see `PlaceholderMapper`
  102048. // Returning `null` means that no name mapping is used.
  102049. /**
  102050. * @param {?} message
  102051. * @return {?}
  102052. */
  102053. Serializer.prototype.createNameMapper = /**
  102054. * @param {?} message
  102055. * @return {?}
  102056. */
  102057. function (message) { return null; };
  102058. return Serializer;
  102059. }());
  102060. /**
  102061. * A `PlaceholderMapper` converts placeholder names from internal to serialized representation and
  102062. * back.
  102063. *
  102064. * It should be used for serialization format that put constraints on the placeholder names.
  102065. * @record
  102066. */
  102067. /**
  102068. * A simple mapper that take a function to transform an internal name to a public name
  102069. */
  102070. var SimplePlaceholderMapper = /** @class */ (function (_super) {
  102071. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(SimplePlaceholderMapper, _super);
  102072. // create a mapping from the message
  102073. function SimplePlaceholderMapper(message, mapName) {
  102074. var _this = _super.call(this) || this;
  102075. _this.mapName = mapName;
  102076. _this.internalToPublic = {};
  102077. _this.publicToNextId = {};
  102078. _this.publicToInternal = {};
  102079. message.nodes.forEach(function (node) { return node.visit(_this); });
  102080. return _this;
  102081. }
  102082. /**
  102083. * @param {?} internalName
  102084. * @return {?}
  102085. */
  102086. SimplePlaceholderMapper.prototype.toPublicName = /**
  102087. * @param {?} internalName
  102088. * @return {?}
  102089. */
  102090. function (internalName) {
  102091. return this.internalToPublic.hasOwnProperty(internalName) ?
  102092. this.internalToPublic[internalName] :
  102093. null;
  102094. };
  102095. /**
  102096. * @param {?} publicName
  102097. * @return {?}
  102098. */
  102099. SimplePlaceholderMapper.prototype.toInternalName = /**
  102100. * @param {?} publicName
  102101. * @return {?}
  102102. */
  102103. function (publicName) {
  102104. return this.publicToInternal.hasOwnProperty(publicName) ? this.publicToInternal[publicName] :
  102105. null;
  102106. };
  102107. /**
  102108. * @param {?} text
  102109. * @param {?=} context
  102110. * @return {?}
  102111. */
  102112. SimplePlaceholderMapper.prototype.visitText = /**
  102113. * @param {?} text
  102114. * @param {?=} context
  102115. * @return {?}
  102116. */
  102117. function (text, context) { return null; };
  102118. /**
  102119. * @param {?} ph
  102120. * @param {?=} context
  102121. * @return {?}
  102122. */
  102123. SimplePlaceholderMapper.prototype.visitTagPlaceholder = /**
  102124. * @param {?} ph
  102125. * @param {?=} context
  102126. * @return {?}
  102127. */
  102128. function (ph, context) {
  102129. this.visitPlaceholderName(ph.startName);
  102130. _super.prototype.visitTagPlaceholder.call(this, ph, context);
  102131. this.visitPlaceholderName(ph.closeName);
  102132. };
  102133. /**
  102134. * @param {?} ph
  102135. * @param {?=} context
  102136. * @return {?}
  102137. */
  102138. SimplePlaceholderMapper.prototype.visitPlaceholder = /**
  102139. * @param {?} ph
  102140. * @param {?=} context
  102141. * @return {?}
  102142. */
  102143. function (ph, context) { this.visitPlaceholderName(ph.name); };
  102144. /**
  102145. * @param {?} ph
  102146. * @param {?=} context
  102147. * @return {?}
  102148. */
  102149. SimplePlaceholderMapper.prototype.visitIcuPlaceholder = /**
  102150. * @param {?} ph
  102151. * @param {?=} context
  102152. * @return {?}
  102153. */
  102154. function (ph, context) {
  102155. this.visitPlaceholderName(ph.name);
  102156. };
  102157. /**
  102158. * @param {?} internalName
  102159. * @return {?}
  102160. */
  102161. SimplePlaceholderMapper.prototype.visitPlaceholderName = /**
  102162. * @param {?} internalName
  102163. * @return {?}
  102164. */
  102165. function (internalName) {
  102166. if (!internalName || this.internalToPublic.hasOwnProperty(internalName)) {
  102167. return;
  102168. }
  102169. var /** @type {?} */ publicName = this.mapName(internalName);
  102170. if (this.publicToInternal.hasOwnProperty(publicName)) {
  102171. // Create a new XMB when it has already been used
  102172. var /** @type {?} */ nextId = this.publicToNextId[publicName];
  102173. this.publicToNextId[publicName] = nextId + 1;
  102174. publicName = publicName + "_" + nextId;
  102175. }
  102176. else {
  102177. this.publicToNextId[publicName] = 1;
  102178. }
  102179. this.internalToPublic[internalName] = publicName;
  102180. this.publicToInternal[publicName] = internalName;
  102181. };
  102182. return SimplePlaceholderMapper;
  102183. }(RecurseVisitor));
  102184. /**
  102185. * @fileoverview added by tsickle
  102186. * @suppress {checkTypes} checked by tsc
  102187. */
  102188. /**
  102189. * @license
  102190. * Copyright Google Inc. All Rights Reserved.
  102191. *
  102192. * Use of this source code is governed by an MIT-style license that can be
  102193. * found in the LICENSE file at https://angular.io/license
  102194. */
  102195. /**
  102196. * @record
  102197. */
  102198. var _Visitor$1 = /** @class */ (function () {
  102199. function _Visitor() {
  102200. }
  102201. /**
  102202. * @param {?} tag
  102203. * @return {?}
  102204. */
  102205. _Visitor.prototype.visitTag = /**
  102206. * @param {?} tag
  102207. * @return {?}
  102208. */
  102209. function (tag) {
  102210. var _this = this;
  102211. var /** @type {?} */ strAttrs = this._serializeAttributes(tag.attrs);
  102212. if (tag.children.length == 0) {
  102213. return "<" + tag.name + strAttrs + "/>";
  102214. }
  102215. var /** @type {?} */ strChildren = tag.children.map(function (node) { return node.visit(_this); });
  102216. return "<" + tag.name + strAttrs + ">" + strChildren.join('') + "</" + tag.name + ">";
  102217. };
  102218. /**
  102219. * @param {?} text
  102220. * @return {?}
  102221. */
  102222. _Visitor.prototype.visitText = /**
  102223. * @param {?} text
  102224. * @return {?}
  102225. */
  102226. function (text) { return text.value; };
  102227. /**
  102228. * @param {?} decl
  102229. * @return {?}
  102230. */
  102231. _Visitor.prototype.visitDeclaration = /**
  102232. * @param {?} decl
  102233. * @return {?}
  102234. */
  102235. function (decl) {
  102236. return "<?xml" + this._serializeAttributes(decl.attrs) + " ?>";
  102237. };
  102238. /**
  102239. * @param {?} attrs
  102240. * @return {?}
  102241. */
  102242. _Visitor.prototype._serializeAttributes = /**
  102243. * @param {?} attrs
  102244. * @return {?}
  102245. */
  102246. function (attrs) {
  102247. var /** @type {?} */ strAttrs = Object.keys(attrs).map(function (name) { return name + "=\"" + attrs[name] + "\""; }).join(' ');
  102248. return strAttrs.length > 0 ? ' ' + strAttrs : '';
  102249. };
  102250. /**
  102251. * @param {?} doctype
  102252. * @return {?}
  102253. */
  102254. _Visitor.prototype.visitDoctype = /**
  102255. * @param {?} doctype
  102256. * @return {?}
  102257. */
  102258. function (doctype) {
  102259. return "<!DOCTYPE " + doctype.rootTag + " [\n" + doctype.dtd + "\n]>";
  102260. };
  102261. return _Visitor;
  102262. }());
  102263. var _visitor = new _Visitor$1();
  102264. /**
  102265. * @param {?} nodes
  102266. * @return {?}
  102267. */
  102268. function serialize(nodes) {
  102269. return nodes.map(function (node) { return node.visit(_visitor); }).join('');
  102270. }
  102271. /**
  102272. * @record
  102273. */
  102274. var Declaration = /** @class */ (function () {
  102275. function Declaration(unescapedAttrs) {
  102276. var _this = this;
  102277. this.attrs = {};
  102278. Object.keys(unescapedAttrs).forEach(function (k) {
  102279. _this.attrs[k] = escapeXml(unescapedAttrs[k]);
  102280. });
  102281. }
  102282. /**
  102283. * @param {?} visitor
  102284. * @return {?}
  102285. */
  102286. Declaration.prototype.visit = /**
  102287. * @param {?} visitor
  102288. * @return {?}
  102289. */
  102290. function (visitor) { return visitor.visitDeclaration(this); };
  102291. return Declaration;
  102292. }());
  102293. var Doctype = /** @class */ (function () {
  102294. function Doctype(rootTag, dtd) {
  102295. this.rootTag = rootTag;
  102296. this.dtd = dtd;
  102297. }
  102298. /**
  102299. * @param {?} visitor
  102300. * @return {?}
  102301. */
  102302. Doctype.prototype.visit = /**
  102303. * @param {?} visitor
  102304. * @return {?}
  102305. */
  102306. function (visitor) { return visitor.visitDoctype(this); };
  102307. return Doctype;
  102308. }());
  102309. var Tag = /** @class */ (function () {
  102310. function Tag(name, unescapedAttrs, children) {
  102311. if (unescapedAttrs === void 0) { unescapedAttrs = {}; }
  102312. if (children === void 0) { children = []; }
  102313. var _this = this;
  102314. this.name = name;
  102315. this.children = children;
  102316. this.attrs = {};
  102317. Object.keys(unescapedAttrs).forEach(function (k) {
  102318. _this.attrs[k] = escapeXml(unescapedAttrs[k]);
  102319. });
  102320. }
  102321. /**
  102322. * @param {?} visitor
  102323. * @return {?}
  102324. */
  102325. Tag.prototype.visit = /**
  102326. * @param {?} visitor
  102327. * @return {?}
  102328. */
  102329. function (visitor) { return visitor.visitTag(this); };
  102330. return Tag;
  102331. }());
  102332. var Text$2 = /** @class */ (function () {
  102333. function Text(unescapedValue) {
  102334. this.value = escapeXml(unescapedValue);
  102335. }
  102336. /**
  102337. * @param {?} visitor
  102338. * @return {?}
  102339. */
  102340. Text.prototype.visit = /**
  102341. * @param {?} visitor
  102342. * @return {?}
  102343. */
  102344. function (visitor) { return visitor.visitText(this); };
  102345. return Text;
  102346. }());
  102347. var CR = /** @class */ (function (_super) {
  102348. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(CR, _super);
  102349. function CR(ws) {
  102350. if (ws === void 0) { ws = 0; }
  102351. return _super.call(this, "\n" + new Array(ws + 1).join(' ')) || this;
  102352. }
  102353. return CR;
  102354. }(Text$2));
  102355. var _ESCAPED_CHARS = [
  102356. [/&/g, '&amp;'],
  102357. [/"/g, '&quot;'],
  102358. [/'/g, '&apos;'],
  102359. [/</g, '&lt;'],
  102360. [/>/g, '&gt;'],
  102361. ];
  102362. /**
  102363. * @param {?} text
  102364. * @return {?}
  102365. */
  102366. function escapeXml(text) {
  102367. return _ESCAPED_CHARS.reduce(function (text, entry) { return text.replace(entry[0], entry[1]); }, text);
  102368. }
  102369. /**
  102370. * @fileoverview added by tsickle
  102371. * @suppress {checkTypes} checked by tsc
  102372. */
  102373. /**
  102374. * @license
  102375. * Copyright Google Inc. All Rights Reserved.
  102376. *
  102377. * Use of this source code is governed by an MIT-style license that can be
  102378. * found in the LICENSE file at https://angular.io/license
  102379. */
  102380. var _VERSION = '1.2';
  102381. var _XMLNS = 'urn:oasis:names:tc:xliff:document:1.2';
  102382. // TODO(vicb): make this a param (s/_/-/)
  102383. var _DEFAULT_SOURCE_LANG = 'en';
  102384. var _PLACEHOLDER_TAG = 'x';
  102385. var _MARKER_TAG = 'mrk';
  102386. var _FILE_TAG = 'file';
  102387. var _SOURCE_TAG = 'source';
  102388. var _SEGMENT_SOURCE_TAG = 'seg-source';
  102389. var _TARGET_TAG = 'target';
  102390. var _UNIT_TAG = 'trans-unit';
  102391. var _CONTEXT_GROUP_TAG = 'context-group';
  102392. var _CONTEXT_TAG = 'context';
  102393. var Xliff = /** @class */ (function (_super) {
  102394. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Xliff, _super);
  102395. function Xliff() {
  102396. return _super !== null && _super.apply(this, arguments) || this;
  102397. }
  102398. /**
  102399. * @param {?} messages
  102400. * @param {?} locale
  102401. * @return {?}
  102402. */
  102403. Xliff.prototype.write = /**
  102404. * @param {?} messages
  102405. * @param {?} locale
  102406. * @return {?}
  102407. */
  102408. function (messages, locale) {
  102409. var /** @type {?} */ visitor = new _WriteVisitor();
  102410. var /** @type {?} */ transUnits = [];
  102411. messages.forEach(function (message) {
  102412. var /** @type {?} */ contextTags = [];
  102413. message.sources.forEach(function (source) {
  102414. var /** @type {?} */ contextGroupTag = new Tag(_CONTEXT_GROUP_TAG, { purpose: 'location' });
  102415. contextGroupTag.children.push(new CR(10), new Tag(_CONTEXT_TAG, { 'context-type': 'sourcefile' }, [new Text$2(source.filePath)]), new CR(10), new Tag(_CONTEXT_TAG, { 'context-type': 'linenumber' }, [new Text$2("" + source.startLine)]), new CR(8));
  102416. contextTags.push(new CR(8), contextGroupTag);
  102417. });
  102418. var /** @type {?} */ transUnit = new Tag(_UNIT_TAG, { id: message.id, datatype: 'html' });
  102419. (_a = transUnit.children).push.apply(_a, [new CR(8), new Tag(_SOURCE_TAG, {}, visitor.serialize(message.nodes))].concat(contextTags));
  102420. if (message.description) {
  102421. transUnit.children.push(new CR(8), new Tag('note', { priority: '1', from: 'description' }, [new Text$2(message.description)]));
  102422. }
  102423. if (message.meaning) {
  102424. transUnit.children.push(new CR(8), new Tag('note', { priority: '1', from: 'meaning' }, [new Text$2(message.meaning)]));
  102425. }
  102426. transUnit.children.push(new CR(6));
  102427. transUnits.push(new CR(6), transUnit);
  102428. var _a;
  102429. });
  102430. var /** @type {?} */ body = new Tag('body', {}, transUnits.concat([new CR(4)]));
  102431. var /** @type {?} */ file = new Tag('file', {
  102432. 'source-language': locale || _DEFAULT_SOURCE_LANG,
  102433. datatype: 'plaintext',
  102434. original: 'ng2.template',
  102435. }, [new CR(4), body, new CR(2)]);
  102436. var /** @type {?} */ xliff = new Tag('xliff', { version: _VERSION, xmlns: _XMLNS }, [new CR(2), file, new CR()]);
  102437. return serialize([
  102438. new Declaration({ version: '1.0', encoding: 'UTF-8' }), new CR(), xliff, new CR()
  102439. ]);
  102440. };
  102441. /**
  102442. * @param {?} content
  102443. * @param {?} url
  102444. * @return {?}
  102445. */
  102446. Xliff.prototype.load = /**
  102447. * @param {?} content
  102448. * @param {?} url
  102449. * @return {?}
  102450. */
  102451. function (content, url) {
  102452. // xliff to xml nodes
  102453. var /** @type {?} */ xliffParser = new XliffParser();
  102454. var _a = xliffParser.parse(content, url), locale = _a.locale, msgIdToHtml = _a.msgIdToHtml, errors = _a.errors;
  102455. // xml nodes to i18n nodes
  102456. var /** @type {?} */ i18nNodesByMsgId = {};
  102457. var /** @type {?} */ converter = new XmlToI18n();
  102458. Object.keys(msgIdToHtml).forEach(function (msgId) {
  102459. var _a = converter.convert(msgIdToHtml[msgId], url), i18nNodes = _a.i18nNodes, e = _a.errors;
  102460. errors.push.apply(errors, e);
  102461. i18nNodesByMsgId[msgId] = i18nNodes;
  102462. });
  102463. if (errors.length) {
  102464. throw new Error("xliff parse errors:\n" + errors.join('\n'));
  102465. }
  102466. return { locale: /** @type {?} */ ((locale)), i18nNodesByMsgId: i18nNodesByMsgId };
  102467. };
  102468. /**
  102469. * @param {?} message
  102470. * @return {?}
  102471. */
  102472. Xliff.prototype.digest = /**
  102473. * @param {?} message
  102474. * @return {?}
  102475. */
  102476. function (message) { return digest(message); };
  102477. return Xliff;
  102478. }(Serializer));
  102479. var _WriteVisitor = /** @class */ (function () {
  102480. function _WriteVisitor() {
  102481. }
  102482. /**
  102483. * @param {?} text
  102484. * @param {?=} context
  102485. * @return {?}
  102486. */
  102487. _WriteVisitor.prototype.visitText = /**
  102488. * @param {?} text
  102489. * @param {?=} context
  102490. * @return {?}
  102491. */
  102492. function (text, context) { return [new Text$2(text.value)]; };
  102493. /**
  102494. * @param {?} container
  102495. * @param {?=} context
  102496. * @return {?}
  102497. */
  102498. _WriteVisitor.prototype.visitContainer = /**
  102499. * @param {?} container
  102500. * @param {?=} context
  102501. * @return {?}
  102502. */
  102503. function (container, context) {
  102504. var _this = this;
  102505. var /** @type {?} */ nodes = [];
  102506. container.children.forEach(function (node) { return nodes.push.apply(nodes, node.visit(_this)); });
  102507. return nodes;
  102508. };
  102509. /**
  102510. * @param {?} icu
  102511. * @param {?=} context
  102512. * @return {?}
  102513. */
  102514. _WriteVisitor.prototype.visitIcu = /**
  102515. * @param {?} icu
  102516. * @param {?=} context
  102517. * @return {?}
  102518. */
  102519. function (icu, context) {
  102520. var _this = this;
  102521. var /** @type {?} */ nodes = [new Text$2("{" + icu.expressionPlaceholder + ", " + icu.type + ", ")];
  102522. Object.keys(icu.cases).forEach(function (c) {
  102523. nodes.push.apply(nodes, [new Text$2(c + " {")].concat(icu.cases[c].visit(_this), [new Text$2("} ")]));
  102524. });
  102525. nodes.push(new Text$2("}"));
  102526. return nodes;
  102527. };
  102528. /**
  102529. * @param {?} ph
  102530. * @param {?=} context
  102531. * @return {?}
  102532. */
  102533. _WriteVisitor.prototype.visitTagPlaceholder = /**
  102534. * @param {?} ph
  102535. * @param {?=} context
  102536. * @return {?}
  102537. */
  102538. function (ph, context) {
  102539. var /** @type {?} */ ctype = getCtypeForTag(ph.tag);
  102540. if (ph.isVoid) {
  102541. // void tags have no children nor closing tags
  102542. return [new Tag(_PLACEHOLDER_TAG, { id: ph.startName, ctype: ctype, 'equiv-text': "<" + ph.tag + "/>" })];
  102543. }
  102544. var /** @type {?} */ startTagPh = new Tag(_PLACEHOLDER_TAG, { id: ph.startName, ctype: ctype, 'equiv-text': "<" + ph.tag + ">" });
  102545. var /** @type {?} */ closeTagPh = new Tag(_PLACEHOLDER_TAG, { id: ph.closeName, ctype: ctype, 'equiv-text': "</" + ph.tag + ">" });
  102546. return [startTagPh].concat(this.serialize(ph.children), [closeTagPh]);
  102547. };
  102548. /**
  102549. * @param {?} ph
  102550. * @param {?=} context
  102551. * @return {?}
  102552. */
  102553. _WriteVisitor.prototype.visitPlaceholder = /**
  102554. * @param {?} ph
  102555. * @param {?=} context
  102556. * @return {?}
  102557. */
  102558. function (ph, context) {
  102559. return [new Tag(_PLACEHOLDER_TAG, { id: ph.name, 'equiv-text': "{{" + ph.value + "}}" })];
  102560. };
  102561. /**
  102562. * @param {?} ph
  102563. * @param {?=} context
  102564. * @return {?}
  102565. */
  102566. _WriteVisitor.prototype.visitIcuPlaceholder = /**
  102567. * @param {?} ph
  102568. * @param {?=} context
  102569. * @return {?}
  102570. */
  102571. function (ph, context) {
  102572. var /** @type {?} */ equivText = "{" + ph.value.expression + ", " + ph.value.type + ", " + Object.keys(ph.value.cases).map(function (value) { return value + ' {...}'; }).join(' ') + "}";
  102573. return [new Tag(_PLACEHOLDER_TAG, { id: ph.name, 'equiv-text': equivText })];
  102574. };
  102575. /**
  102576. * @param {?} nodes
  102577. * @return {?}
  102578. */
  102579. _WriteVisitor.prototype.serialize = /**
  102580. * @param {?} nodes
  102581. * @return {?}
  102582. */
  102583. function (nodes) {
  102584. var _this = this;
  102585. return [].concat.apply([], nodes.map(function (node) { return node.visit(_this); }));
  102586. };
  102587. return _WriteVisitor;
  102588. }());
  102589. var XliffParser = /** @class */ (function () {
  102590. function XliffParser() {
  102591. this._locale = null;
  102592. }
  102593. /**
  102594. * @param {?} xliff
  102595. * @param {?} url
  102596. * @return {?}
  102597. */
  102598. XliffParser.prototype.parse = /**
  102599. * @param {?} xliff
  102600. * @param {?} url
  102601. * @return {?}
  102602. */
  102603. function (xliff, url) {
  102604. this._unitMlString = null;
  102605. this._msgIdToHtml = {};
  102606. var /** @type {?} */ xml = new XmlParser().parse(xliff, url, false);
  102607. this._errors = xml.errors;
  102608. visitAll(this, xml.rootNodes, null);
  102609. return {
  102610. msgIdToHtml: this._msgIdToHtml,
  102611. errors: this._errors,
  102612. locale: this._locale,
  102613. };
  102614. };
  102615. /**
  102616. * @param {?} element
  102617. * @param {?} context
  102618. * @return {?}
  102619. */
  102620. XliffParser.prototype.visitElement = /**
  102621. * @param {?} element
  102622. * @param {?} context
  102623. * @return {?}
  102624. */
  102625. function (element, context) {
  102626. switch (element.name) {
  102627. case _UNIT_TAG:
  102628. this._unitMlString = /** @type {?} */ ((null));
  102629. var /** @type {?} */ idAttr = element.attrs.find(function (attr) { return attr.name === 'id'; });
  102630. if (!idAttr) {
  102631. this._addError(element, "<" + _UNIT_TAG + "> misses the \"id\" attribute");
  102632. }
  102633. else {
  102634. var /** @type {?} */ id = idAttr.value;
  102635. if (this._msgIdToHtml.hasOwnProperty(id)) {
  102636. this._addError(element, "Duplicated translations for msg " + id);
  102637. }
  102638. else {
  102639. visitAll(this, element.children, null);
  102640. if (typeof this._unitMlString === 'string') {
  102641. this._msgIdToHtml[id] = this._unitMlString;
  102642. }
  102643. else {
  102644. this._addError(element, "Message " + id + " misses a translation");
  102645. }
  102646. }
  102647. }
  102648. break;
  102649. // ignore those tags
  102650. case _SOURCE_TAG:
  102651. case _SEGMENT_SOURCE_TAG:
  102652. break;
  102653. case _TARGET_TAG:
  102654. var /** @type {?} */ innerTextStart = /** @type {?} */ ((element.startSourceSpan)).end.offset;
  102655. var /** @type {?} */ innerTextEnd = /** @type {?} */ ((element.endSourceSpan)).start.offset;
  102656. var /** @type {?} */ content = /** @type {?} */ ((element.startSourceSpan)).start.file.content;
  102657. var /** @type {?} */ innerText = content.slice(innerTextStart, innerTextEnd);
  102658. this._unitMlString = innerText;
  102659. break;
  102660. case _FILE_TAG:
  102661. var /** @type {?} */ localeAttr = element.attrs.find(function (attr) { return attr.name === 'target-language'; });
  102662. if (localeAttr) {
  102663. this._locale = localeAttr.value;
  102664. }
  102665. visitAll(this, element.children, null);
  102666. break;
  102667. default:
  102668. // TODO(vicb): assert file structure, xliff version
  102669. // For now only recurse on unhandled nodes
  102670. visitAll(this, element.children, null);
  102671. }
  102672. };
  102673. /**
  102674. * @param {?} attribute
  102675. * @param {?} context
  102676. * @return {?}
  102677. */
  102678. XliffParser.prototype.visitAttribute = /**
  102679. * @param {?} attribute
  102680. * @param {?} context
  102681. * @return {?}
  102682. */
  102683. function (attribute, context) { };
  102684. /**
  102685. * @param {?} text
  102686. * @param {?} context
  102687. * @return {?}
  102688. */
  102689. XliffParser.prototype.visitText = /**
  102690. * @param {?} text
  102691. * @param {?} context
  102692. * @return {?}
  102693. */
  102694. function (text, context) { };
  102695. /**
  102696. * @param {?} comment
  102697. * @param {?} context
  102698. * @return {?}
  102699. */
  102700. XliffParser.prototype.visitComment = /**
  102701. * @param {?} comment
  102702. * @param {?} context
  102703. * @return {?}
  102704. */
  102705. function (comment, context) { };
  102706. /**
  102707. * @param {?} expansion
  102708. * @param {?} context
  102709. * @return {?}
  102710. */
  102711. XliffParser.prototype.visitExpansion = /**
  102712. * @param {?} expansion
  102713. * @param {?} context
  102714. * @return {?}
  102715. */
  102716. function (expansion, context) { };
  102717. /**
  102718. * @param {?} expansionCase
  102719. * @param {?} context
  102720. * @return {?}
  102721. */
  102722. XliffParser.prototype.visitExpansionCase = /**
  102723. * @param {?} expansionCase
  102724. * @param {?} context
  102725. * @return {?}
  102726. */
  102727. function (expansionCase, context) { };
  102728. /**
  102729. * @param {?} node
  102730. * @param {?} message
  102731. * @return {?}
  102732. */
  102733. XliffParser.prototype._addError = /**
  102734. * @param {?} node
  102735. * @param {?} message
  102736. * @return {?}
  102737. */
  102738. function (node, message) {
  102739. this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));
  102740. };
  102741. return XliffParser;
  102742. }());
  102743. var XmlToI18n = /** @class */ (function () {
  102744. function XmlToI18n() {
  102745. }
  102746. /**
  102747. * @param {?} message
  102748. * @param {?} url
  102749. * @return {?}
  102750. */
  102751. XmlToI18n.prototype.convert = /**
  102752. * @param {?} message
  102753. * @param {?} url
  102754. * @return {?}
  102755. */
  102756. function (message, url) {
  102757. var /** @type {?} */ xmlIcu = new XmlParser().parse(message, url, true);
  102758. this._errors = xmlIcu.errors;
  102759. var /** @type {?} */ i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ?
  102760. [] : [].concat.apply([], visitAll(this, xmlIcu.rootNodes));
  102761. return {
  102762. i18nNodes: i18nNodes,
  102763. errors: this._errors,
  102764. };
  102765. };
  102766. /**
  102767. * @param {?} text
  102768. * @param {?} context
  102769. * @return {?}
  102770. */
  102771. XmlToI18n.prototype.visitText = /**
  102772. * @param {?} text
  102773. * @param {?} context
  102774. * @return {?}
  102775. */
  102776. function (text, context) { return new Text$1(text.value, /** @type {?} */ ((text.sourceSpan))); };
  102777. /**
  102778. * @param {?} el
  102779. * @param {?} context
  102780. * @return {?}
  102781. */
  102782. XmlToI18n.prototype.visitElement = /**
  102783. * @param {?} el
  102784. * @param {?} context
  102785. * @return {?}
  102786. */
  102787. function (el, context) {
  102788. if (el.name === _PLACEHOLDER_TAG) {
  102789. var /** @type {?} */ nameAttr = el.attrs.find(function (attr) { return attr.name === 'id'; });
  102790. if (nameAttr) {
  102791. return new Placeholder('', nameAttr.value, /** @type {?} */ ((el.sourceSpan)));
  102792. }
  102793. this._addError(el, "<" + _PLACEHOLDER_TAG + "> misses the \"id\" attribute");
  102794. return null;
  102795. }
  102796. if (el.name === _MARKER_TAG) {
  102797. return [].concat.apply([], visitAll(this, el.children));
  102798. }
  102799. this._addError(el, "Unexpected tag");
  102800. return null;
  102801. };
  102802. /**
  102803. * @param {?} icu
  102804. * @param {?} context
  102805. * @return {?}
  102806. */
  102807. XmlToI18n.prototype.visitExpansion = /**
  102808. * @param {?} icu
  102809. * @param {?} context
  102810. * @return {?}
  102811. */
  102812. function (icu, context) {
  102813. var /** @type {?} */ caseMap = {};
  102814. visitAll(this, icu.cases).forEach(function (c) {
  102815. caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);
  102816. });
  102817. return new Icu(icu.switchValue, icu.type, caseMap, icu.sourceSpan);
  102818. };
  102819. /**
  102820. * @param {?} icuCase
  102821. * @param {?} context
  102822. * @return {?}
  102823. */
  102824. XmlToI18n.prototype.visitExpansionCase = /**
  102825. * @param {?} icuCase
  102826. * @param {?} context
  102827. * @return {?}
  102828. */
  102829. function (icuCase, context) {
  102830. return {
  102831. value: icuCase.value,
  102832. nodes: visitAll(this, icuCase.expression),
  102833. };
  102834. };
  102835. /**
  102836. * @param {?} comment
  102837. * @param {?} context
  102838. * @return {?}
  102839. */
  102840. XmlToI18n.prototype.visitComment = /**
  102841. * @param {?} comment
  102842. * @param {?} context
  102843. * @return {?}
  102844. */
  102845. function (comment, context) { };
  102846. /**
  102847. * @param {?} attribute
  102848. * @param {?} context
  102849. * @return {?}
  102850. */
  102851. XmlToI18n.prototype.visitAttribute = /**
  102852. * @param {?} attribute
  102853. * @param {?} context
  102854. * @return {?}
  102855. */
  102856. function (attribute, context) { };
  102857. /**
  102858. * @param {?} node
  102859. * @param {?} message
  102860. * @return {?}
  102861. */
  102862. XmlToI18n.prototype._addError = /**
  102863. * @param {?} node
  102864. * @param {?} message
  102865. * @return {?}
  102866. */
  102867. function (node, message) {
  102868. this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));
  102869. };
  102870. return XmlToI18n;
  102871. }());
  102872. /**
  102873. * @param {?} tag
  102874. * @return {?}
  102875. */
  102876. function getCtypeForTag(tag) {
  102877. switch (tag.toLowerCase()) {
  102878. case 'br':
  102879. return 'lb';
  102880. case 'img':
  102881. return 'image';
  102882. default:
  102883. return "x-" + tag;
  102884. }
  102885. }
  102886. /**
  102887. * @fileoverview added by tsickle
  102888. * @suppress {checkTypes} checked by tsc
  102889. */
  102890. /**
  102891. * @license
  102892. * Copyright Google Inc. All Rights Reserved.
  102893. *
  102894. * Use of this source code is governed by an MIT-style license that can be
  102895. * found in the LICENSE file at https://angular.io/license
  102896. */
  102897. var _VERSION$1 = '2.0';
  102898. var _XMLNS$1 = 'urn:oasis:names:tc:xliff:document:2.0';
  102899. // TODO(vicb): make this a param (s/_/-/)
  102900. var _DEFAULT_SOURCE_LANG$1 = 'en';
  102901. var _PLACEHOLDER_TAG$1 = 'ph';
  102902. var _PLACEHOLDER_SPANNING_TAG = 'pc';
  102903. var _MARKER_TAG$1 = 'mrk';
  102904. var _XLIFF_TAG = 'xliff';
  102905. var _SOURCE_TAG$1 = 'source';
  102906. var _TARGET_TAG$1 = 'target';
  102907. var _UNIT_TAG$1 = 'unit';
  102908. var Xliff2 = /** @class */ (function (_super) {
  102909. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Xliff2, _super);
  102910. function Xliff2() {
  102911. return _super !== null && _super.apply(this, arguments) || this;
  102912. }
  102913. /**
  102914. * @param {?} messages
  102915. * @param {?} locale
  102916. * @return {?}
  102917. */
  102918. Xliff2.prototype.write = /**
  102919. * @param {?} messages
  102920. * @param {?} locale
  102921. * @return {?}
  102922. */
  102923. function (messages, locale) {
  102924. var /** @type {?} */ visitor = new _WriteVisitor$1();
  102925. var /** @type {?} */ units = [];
  102926. messages.forEach(function (message) {
  102927. var /** @type {?} */ unit = new Tag(_UNIT_TAG$1, { id: message.id });
  102928. var /** @type {?} */ notes = new Tag('notes');
  102929. if (message.description || message.meaning) {
  102930. if (message.description) {
  102931. notes.children.push(new CR(8), new Tag('note', { category: 'description' }, [new Text$2(message.description)]));
  102932. }
  102933. if (message.meaning) {
  102934. notes.children.push(new CR(8), new Tag('note', { category: 'meaning' }, [new Text$2(message.meaning)]));
  102935. }
  102936. }
  102937. message.sources.forEach(function (source) {
  102938. notes.children.push(new CR(8), new Tag('note', { category: 'location' }, [
  102939. new Text$2(source.filePath + ":" + source.startLine + (source.endLine !== source.startLine ? ',' + source.endLine : ''))
  102940. ]));
  102941. });
  102942. notes.children.push(new CR(6));
  102943. unit.children.push(new CR(6), notes);
  102944. var /** @type {?} */ segment = new Tag('segment');
  102945. segment.children.push(new CR(8), new Tag(_SOURCE_TAG$1, {}, visitor.serialize(message.nodes)), new CR(6));
  102946. unit.children.push(new CR(6), segment, new CR(4));
  102947. units.push(new CR(4), unit);
  102948. });
  102949. var /** @type {?} */ file = new Tag('file', { 'original': 'ng.template', id: 'ngi18n' }, units.concat([new CR(2)]));
  102950. var /** @type {?} */ xliff = new Tag(_XLIFF_TAG, { version: _VERSION$1, xmlns: _XMLNS$1, srcLang: locale || _DEFAULT_SOURCE_LANG$1 }, [new CR(2), file, new CR()]);
  102951. return serialize([
  102952. new Declaration({ version: '1.0', encoding: 'UTF-8' }), new CR(), xliff, new CR()
  102953. ]);
  102954. };
  102955. /**
  102956. * @param {?} content
  102957. * @param {?} url
  102958. * @return {?}
  102959. */
  102960. Xliff2.prototype.load = /**
  102961. * @param {?} content
  102962. * @param {?} url
  102963. * @return {?}
  102964. */
  102965. function (content, url) {
  102966. // xliff to xml nodes
  102967. var /** @type {?} */ xliff2Parser = new Xliff2Parser();
  102968. var _a = xliff2Parser.parse(content, url), locale = _a.locale, msgIdToHtml = _a.msgIdToHtml, errors = _a.errors;
  102969. // xml nodes to i18n nodes
  102970. var /** @type {?} */ i18nNodesByMsgId = {};
  102971. var /** @type {?} */ converter = new XmlToI18n$1();
  102972. Object.keys(msgIdToHtml).forEach(function (msgId) {
  102973. var _a = converter.convert(msgIdToHtml[msgId], url), i18nNodes = _a.i18nNodes, e = _a.errors;
  102974. errors.push.apply(errors, e);
  102975. i18nNodesByMsgId[msgId] = i18nNodes;
  102976. });
  102977. if (errors.length) {
  102978. throw new Error("xliff2 parse errors:\n" + errors.join('\n'));
  102979. }
  102980. return { locale: /** @type {?} */ ((locale)), i18nNodesByMsgId: i18nNodesByMsgId };
  102981. };
  102982. /**
  102983. * @param {?} message
  102984. * @return {?}
  102985. */
  102986. Xliff2.prototype.digest = /**
  102987. * @param {?} message
  102988. * @return {?}
  102989. */
  102990. function (message) { return decimalDigest(message); };
  102991. return Xliff2;
  102992. }(Serializer));
  102993. var _WriteVisitor$1 = /** @class */ (function () {
  102994. function _WriteVisitor() {
  102995. }
  102996. /**
  102997. * @param {?} text
  102998. * @param {?=} context
  102999. * @return {?}
  103000. */
  103001. _WriteVisitor.prototype.visitText = /**
  103002. * @param {?} text
  103003. * @param {?=} context
  103004. * @return {?}
  103005. */
  103006. function (text, context) { return [new Text$2(text.value)]; };
  103007. /**
  103008. * @param {?} container
  103009. * @param {?=} context
  103010. * @return {?}
  103011. */
  103012. _WriteVisitor.prototype.visitContainer = /**
  103013. * @param {?} container
  103014. * @param {?=} context
  103015. * @return {?}
  103016. */
  103017. function (container, context) {
  103018. var _this = this;
  103019. var /** @type {?} */ nodes = [];
  103020. container.children.forEach(function (node) { return nodes.push.apply(nodes, node.visit(_this)); });
  103021. return nodes;
  103022. };
  103023. /**
  103024. * @param {?} icu
  103025. * @param {?=} context
  103026. * @return {?}
  103027. */
  103028. _WriteVisitor.prototype.visitIcu = /**
  103029. * @param {?} icu
  103030. * @param {?=} context
  103031. * @return {?}
  103032. */
  103033. function (icu, context) {
  103034. var _this = this;
  103035. var /** @type {?} */ nodes = [new Text$2("{" + icu.expressionPlaceholder + ", " + icu.type + ", ")];
  103036. Object.keys(icu.cases).forEach(function (c) {
  103037. nodes.push.apply(nodes, [new Text$2(c + " {")].concat(icu.cases[c].visit(_this), [new Text$2("} ")]));
  103038. });
  103039. nodes.push(new Text$2("}"));
  103040. return nodes;
  103041. };
  103042. /**
  103043. * @param {?} ph
  103044. * @param {?=} context
  103045. * @return {?}
  103046. */
  103047. _WriteVisitor.prototype.visitTagPlaceholder = /**
  103048. * @param {?} ph
  103049. * @param {?=} context
  103050. * @return {?}
  103051. */
  103052. function (ph, context) {
  103053. var _this = this;
  103054. var /** @type {?} */ type = getTypeForTag(ph.tag);
  103055. if (ph.isVoid) {
  103056. var /** @type {?} */ tagPh = new Tag(_PLACEHOLDER_TAG$1, {
  103057. id: (this._nextPlaceholderId++).toString(),
  103058. equiv: ph.startName,
  103059. type: type,
  103060. disp: "<" + ph.tag + "/>",
  103061. });
  103062. return [tagPh];
  103063. }
  103064. var /** @type {?} */ tagPc = new Tag(_PLACEHOLDER_SPANNING_TAG, {
  103065. id: (this._nextPlaceholderId++).toString(),
  103066. equivStart: ph.startName,
  103067. equivEnd: ph.closeName,
  103068. type: type,
  103069. dispStart: "<" + ph.tag + ">",
  103070. dispEnd: "</" + ph.tag + ">",
  103071. });
  103072. var /** @type {?} */ nodes = [].concat.apply([], ph.children.map(function (node) { return node.visit(_this); }));
  103073. if (nodes.length) {
  103074. nodes.forEach(function (node) { return tagPc.children.push(node); });
  103075. }
  103076. else {
  103077. tagPc.children.push(new Text$2(''));
  103078. }
  103079. return [tagPc];
  103080. };
  103081. /**
  103082. * @param {?} ph
  103083. * @param {?=} context
  103084. * @return {?}
  103085. */
  103086. _WriteVisitor.prototype.visitPlaceholder = /**
  103087. * @param {?} ph
  103088. * @param {?=} context
  103089. * @return {?}
  103090. */
  103091. function (ph, context) {
  103092. var /** @type {?} */ idStr = (this._nextPlaceholderId++).toString();
  103093. return [new Tag(_PLACEHOLDER_TAG$1, {
  103094. id: idStr,
  103095. equiv: ph.name,
  103096. disp: "{{" + ph.value + "}}",
  103097. })];
  103098. };
  103099. /**
  103100. * @param {?} ph
  103101. * @param {?=} context
  103102. * @return {?}
  103103. */
  103104. _WriteVisitor.prototype.visitIcuPlaceholder = /**
  103105. * @param {?} ph
  103106. * @param {?=} context
  103107. * @return {?}
  103108. */
  103109. function (ph, context) {
  103110. var /** @type {?} */ cases = Object.keys(ph.value.cases).map(function (value) { return value + ' {...}'; }).join(' ');
  103111. var /** @type {?} */ idStr = (this._nextPlaceholderId++).toString();
  103112. return [new Tag(_PLACEHOLDER_TAG$1, { id: idStr, equiv: ph.name, disp: "{" + ph.value.expression + ", " + ph.value.type + ", " + cases + "}" })];
  103113. };
  103114. /**
  103115. * @param {?} nodes
  103116. * @return {?}
  103117. */
  103118. _WriteVisitor.prototype.serialize = /**
  103119. * @param {?} nodes
  103120. * @return {?}
  103121. */
  103122. function (nodes) {
  103123. var _this = this;
  103124. this._nextPlaceholderId = 0;
  103125. return [].concat.apply([], nodes.map(function (node) { return node.visit(_this); }));
  103126. };
  103127. return _WriteVisitor;
  103128. }());
  103129. var Xliff2Parser = /** @class */ (function () {
  103130. function Xliff2Parser() {
  103131. this._locale = null;
  103132. }
  103133. /**
  103134. * @param {?} xliff
  103135. * @param {?} url
  103136. * @return {?}
  103137. */
  103138. Xliff2Parser.prototype.parse = /**
  103139. * @param {?} xliff
  103140. * @param {?} url
  103141. * @return {?}
  103142. */
  103143. function (xliff, url) {
  103144. this._unitMlString = null;
  103145. this._msgIdToHtml = {};
  103146. var /** @type {?} */ xml = new XmlParser().parse(xliff, url, false);
  103147. this._errors = xml.errors;
  103148. visitAll(this, xml.rootNodes, null);
  103149. return {
  103150. msgIdToHtml: this._msgIdToHtml,
  103151. errors: this._errors,
  103152. locale: this._locale,
  103153. };
  103154. };
  103155. /**
  103156. * @param {?} element
  103157. * @param {?} context
  103158. * @return {?}
  103159. */
  103160. Xliff2Parser.prototype.visitElement = /**
  103161. * @param {?} element
  103162. * @param {?} context
  103163. * @return {?}
  103164. */
  103165. function (element, context) {
  103166. switch (element.name) {
  103167. case _UNIT_TAG$1:
  103168. this._unitMlString = null;
  103169. var /** @type {?} */ idAttr = element.attrs.find(function (attr) { return attr.name === 'id'; });
  103170. if (!idAttr) {
  103171. this._addError(element, "<" + _UNIT_TAG$1 + "> misses the \"id\" attribute");
  103172. }
  103173. else {
  103174. var /** @type {?} */ id = idAttr.value;
  103175. if (this._msgIdToHtml.hasOwnProperty(id)) {
  103176. this._addError(element, "Duplicated translations for msg " + id);
  103177. }
  103178. else {
  103179. visitAll(this, element.children, null);
  103180. if (typeof this._unitMlString === 'string') {
  103181. this._msgIdToHtml[id] = this._unitMlString;
  103182. }
  103183. else {
  103184. this._addError(element, "Message " + id + " misses a translation");
  103185. }
  103186. }
  103187. }
  103188. break;
  103189. case _SOURCE_TAG$1:
  103190. // ignore source message
  103191. break;
  103192. case _TARGET_TAG$1:
  103193. var /** @type {?} */ innerTextStart = /** @type {?} */ ((element.startSourceSpan)).end.offset;
  103194. var /** @type {?} */ innerTextEnd = /** @type {?} */ ((element.endSourceSpan)).start.offset;
  103195. var /** @type {?} */ content = /** @type {?} */ ((element.startSourceSpan)).start.file.content;
  103196. var /** @type {?} */ innerText = content.slice(innerTextStart, innerTextEnd);
  103197. this._unitMlString = innerText;
  103198. break;
  103199. case _XLIFF_TAG:
  103200. var /** @type {?} */ localeAttr = element.attrs.find(function (attr) { return attr.name === 'trgLang'; });
  103201. if (localeAttr) {
  103202. this._locale = localeAttr.value;
  103203. }
  103204. var /** @type {?} */ versionAttr = element.attrs.find(function (attr) { return attr.name === 'version'; });
  103205. if (versionAttr) {
  103206. var /** @type {?} */ version = versionAttr.value;
  103207. if (version !== '2.0') {
  103208. this._addError(element, "The XLIFF file version " + version + " is not compatible with XLIFF 2.0 serializer");
  103209. }
  103210. else {
  103211. visitAll(this, element.children, null);
  103212. }
  103213. }
  103214. break;
  103215. default:
  103216. visitAll(this, element.children, null);
  103217. }
  103218. };
  103219. /**
  103220. * @param {?} attribute
  103221. * @param {?} context
  103222. * @return {?}
  103223. */
  103224. Xliff2Parser.prototype.visitAttribute = /**
  103225. * @param {?} attribute
  103226. * @param {?} context
  103227. * @return {?}
  103228. */
  103229. function (attribute, context) { };
  103230. /**
  103231. * @param {?} text
  103232. * @param {?} context
  103233. * @return {?}
  103234. */
  103235. Xliff2Parser.prototype.visitText = /**
  103236. * @param {?} text
  103237. * @param {?} context
  103238. * @return {?}
  103239. */
  103240. function (text, context) { };
  103241. /**
  103242. * @param {?} comment
  103243. * @param {?} context
  103244. * @return {?}
  103245. */
  103246. Xliff2Parser.prototype.visitComment = /**
  103247. * @param {?} comment
  103248. * @param {?} context
  103249. * @return {?}
  103250. */
  103251. function (comment, context) { };
  103252. /**
  103253. * @param {?} expansion
  103254. * @param {?} context
  103255. * @return {?}
  103256. */
  103257. Xliff2Parser.prototype.visitExpansion = /**
  103258. * @param {?} expansion
  103259. * @param {?} context
  103260. * @return {?}
  103261. */
  103262. function (expansion, context) { };
  103263. /**
  103264. * @param {?} expansionCase
  103265. * @param {?} context
  103266. * @return {?}
  103267. */
  103268. Xliff2Parser.prototype.visitExpansionCase = /**
  103269. * @param {?} expansionCase
  103270. * @param {?} context
  103271. * @return {?}
  103272. */
  103273. function (expansionCase, context) { };
  103274. /**
  103275. * @param {?} node
  103276. * @param {?} message
  103277. * @return {?}
  103278. */
  103279. Xliff2Parser.prototype._addError = /**
  103280. * @param {?} node
  103281. * @param {?} message
  103282. * @return {?}
  103283. */
  103284. function (node, message) {
  103285. this._errors.push(new I18nError(node.sourceSpan, message));
  103286. };
  103287. return Xliff2Parser;
  103288. }());
  103289. var XmlToI18n$1 = /** @class */ (function () {
  103290. function XmlToI18n() {
  103291. }
  103292. /**
  103293. * @param {?} message
  103294. * @param {?} url
  103295. * @return {?}
  103296. */
  103297. XmlToI18n.prototype.convert = /**
  103298. * @param {?} message
  103299. * @param {?} url
  103300. * @return {?}
  103301. */
  103302. function (message, url) {
  103303. var /** @type {?} */ xmlIcu = new XmlParser().parse(message, url, true);
  103304. this._errors = xmlIcu.errors;
  103305. var /** @type {?} */ i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ?
  103306. [] : [].concat.apply([], visitAll(this, xmlIcu.rootNodes));
  103307. return {
  103308. i18nNodes: i18nNodes,
  103309. errors: this._errors,
  103310. };
  103311. };
  103312. /**
  103313. * @param {?} text
  103314. * @param {?} context
  103315. * @return {?}
  103316. */
  103317. XmlToI18n.prototype.visitText = /**
  103318. * @param {?} text
  103319. * @param {?} context
  103320. * @return {?}
  103321. */
  103322. function (text, context) { return new Text$1(text.value, text.sourceSpan); };
  103323. /**
  103324. * @param {?} el
  103325. * @param {?} context
  103326. * @return {?}
  103327. */
  103328. XmlToI18n.prototype.visitElement = /**
  103329. * @param {?} el
  103330. * @param {?} context
  103331. * @return {?}
  103332. */
  103333. function (el, context) {
  103334. var _this = this;
  103335. switch (el.name) {
  103336. case _PLACEHOLDER_TAG$1:
  103337. var /** @type {?} */ nameAttr = el.attrs.find(function (attr) { return attr.name === 'equiv'; });
  103338. if (nameAttr) {
  103339. return [new Placeholder('', nameAttr.value, el.sourceSpan)];
  103340. }
  103341. this._addError(el, "<" + _PLACEHOLDER_TAG$1 + "> misses the \"equiv\" attribute");
  103342. break;
  103343. case _PLACEHOLDER_SPANNING_TAG:
  103344. var /** @type {?} */ startAttr = el.attrs.find(function (attr) { return attr.name === 'equivStart'; });
  103345. var /** @type {?} */ endAttr = el.attrs.find(function (attr) { return attr.name === 'equivEnd'; });
  103346. if (!startAttr) {
  103347. this._addError(el, "<" + _PLACEHOLDER_TAG$1 + "> misses the \"equivStart\" attribute");
  103348. }
  103349. else if (!endAttr) {
  103350. this._addError(el, "<" + _PLACEHOLDER_TAG$1 + "> misses the \"equivEnd\" attribute");
  103351. }
  103352. else {
  103353. var /** @type {?} */ startId = startAttr.value;
  103354. var /** @type {?} */ endId = endAttr.value;
  103355. var /** @type {?} */ nodes = [];
  103356. return nodes.concat.apply(nodes, [new Placeholder('', startId, el.sourceSpan)].concat(el.children.map(function (node) { return node.visit(_this, null); }), [new Placeholder('', endId, el.sourceSpan)]));
  103357. }
  103358. break;
  103359. case _MARKER_TAG$1:
  103360. return [].concat.apply([], visitAll(this, el.children));
  103361. default:
  103362. this._addError(el, "Unexpected tag");
  103363. }
  103364. return null;
  103365. };
  103366. /**
  103367. * @param {?} icu
  103368. * @param {?} context
  103369. * @return {?}
  103370. */
  103371. XmlToI18n.prototype.visitExpansion = /**
  103372. * @param {?} icu
  103373. * @param {?} context
  103374. * @return {?}
  103375. */
  103376. function (icu, context) {
  103377. var /** @type {?} */ caseMap = {};
  103378. visitAll(this, icu.cases).forEach(function (c) {
  103379. caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);
  103380. });
  103381. return new Icu(icu.switchValue, icu.type, caseMap, icu.sourceSpan);
  103382. };
  103383. /**
  103384. * @param {?} icuCase
  103385. * @param {?} context
  103386. * @return {?}
  103387. */
  103388. XmlToI18n.prototype.visitExpansionCase = /**
  103389. * @param {?} icuCase
  103390. * @param {?} context
  103391. * @return {?}
  103392. */
  103393. function (icuCase, context) {
  103394. return {
  103395. value: icuCase.value,
  103396. nodes: [].concat.apply([], visitAll(this, icuCase.expression)),
  103397. };
  103398. };
  103399. /**
  103400. * @param {?} comment
  103401. * @param {?} context
  103402. * @return {?}
  103403. */
  103404. XmlToI18n.prototype.visitComment = /**
  103405. * @param {?} comment
  103406. * @param {?} context
  103407. * @return {?}
  103408. */
  103409. function (comment, context) { };
  103410. /**
  103411. * @param {?} attribute
  103412. * @param {?} context
  103413. * @return {?}
  103414. */
  103415. XmlToI18n.prototype.visitAttribute = /**
  103416. * @param {?} attribute
  103417. * @param {?} context
  103418. * @return {?}
  103419. */
  103420. function (attribute, context) { };
  103421. /**
  103422. * @param {?} node
  103423. * @param {?} message
  103424. * @return {?}
  103425. */
  103426. XmlToI18n.prototype._addError = /**
  103427. * @param {?} node
  103428. * @param {?} message
  103429. * @return {?}
  103430. */
  103431. function (node, message) {
  103432. this._errors.push(new I18nError(node.sourceSpan, message));
  103433. };
  103434. return XmlToI18n;
  103435. }());
  103436. /**
  103437. * @param {?} tag
  103438. * @return {?}
  103439. */
  103440. function getTypeForTag(tag) {
  103441. switch (tag.toLowerCase()) {
  103442. case 'br':
  103443. case 'b':
  103444. case 'i':
  103445. case 'u':
  103446. return 'fmt';
  103447. case 'img':
  103448. return 'image';
  103449. case 'a':
  103450. return 'link';
  103451. default:
  103452. return 'other';
  103453. }
  103454. }
  103455. /**
  103456. * @fileoverview added by tsickle
  103457. * @suppress {checkTypes} checked by tsc
  103458. */
  103459. /**
  103460. * @license
  103461. * Copyright Google Inc. All Rights Reserved.
  103462. *
  103463. * Use of this source code is governed by an MIT-style license that can be
  103464. * found in the LICENSE file at https://angular.io/license
  103465. */
  103466. var _MESSAGES_TAG = 'messagebundle';
  103467. var _MESSAGE_TAG = 'msg';
  103468. var _PLACEHOLDER_TAG$2 = 'ph';
  103469. var _EXEMPLE_TAG = 'ex';
  103470. var _SOURCE_TAG$2 = 'source';
  103471. var _DOCTYPE = "<!ELEMENT messagebundle (msg)*>\n<!ATTLIST messagebundle class CDATA #IMPLIED>\n\n<!ELEMENT msg (#PCDATA|ph|source)*>\n<!ATTLIST msg id CDATA #IMPLIED>\n<!ATTLIST msg seq CDATA #IMPLIED>\n<!ATTLIST msg name CDATA #IMPLIED>\n<!ATTLIST msg desc CDATA #IMPLIED>\n<!ATTLIST msg meaning CDATA #IMPLIED>\n<!ATTLIST msg obsolete (obsolete) #IMPLIED>\n<!ATTLIST msg xml:space (default|preserve) \"default\">\n<!ATTLIST msg is_hidden CDATA #IMPLIED>\n\n<!ELEMENT source (#PCDATA)>\n\n<!ELEMENT ph (#PCDATA|ex)*>\n<!ATTLIST ph name CDATA #REQUIRED>\n\n<!ELEMENT ex (#PCDATA)>";
  103472. var Xmb = /** @class */ (function (_super) {
  103473. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Xmb, _super);
  103474. function Xmb() {
  103475. return _super !== null && _super.apply(this, arguments) || this;
  103476. }
  103477. /**
  103478. * @param {?} messages
  103479. * @param {?} locale
  103480. * @return {?}
  103481. */
  103482. Xmb.prototype.write = /**
  103483. * @param {?} messages
  103484. * @param {?} locale
  103485. * @return {?}
  103486. */
  103487. function (messages, locale) {
  103488. var /** @type {?} */ exampleVisitor = new ExampleVisitor();
  103489. var /** @type {?} */ visitor = new _Visitor$2();
  103490. var /** @type {?} */ rootNode = new Tag(_MESSAGES_TAG);
  103491. messages.forEach(function (message) {
  103492. var /** @type {?} */ attrs = { id: message.id };
  103493. if (message.description) {
  103494. attrs['desc'] = message.description;
  103495. }
  103496. if (message.meaning) {
  103497. attrs['meaning'] = message.meaning;
  103498. }
  103499. var /** @type {?} */ sourceTags = [];
  103500. message.sources.forEach(function (source) {
  103501. sourceTags.push(new Tag(_SOURCE_TAG$2, {}, [
  103502. new Text$2(source.filePath + ":" + source.startLine + (source.endLine !== source.startLine ? ',' + source.endLine : ''))
  103503. ]));
  103504. });
  103505. rootNode.children.push(new CR(2), new Tag(_MESSAGE_TAG, attrs, sourceTags.concat(visitor.serialize(message.nodes))));
  103506. });
  103507. rootNode.children.push(new CR());
  103508. return serialize([
  103509. new Declaration({ version: '1.0', encoding: 'UTF-8' }),
  103510. new CR(),
  103511. new Doctype(_MESSAGES_TAG, _DOCTYPE),
  103512. new CR(),
  103513. exampleVisitor.addDefaultExamples(rootNode),
  103514. new CR(),
  103515. ]);
  103516. };
  103517. /**
  103518. * @param {?} content
  103519. * @param {?} url
  103520. * @return {?}
  103521. */
  103522. Xmb.prototype.load = /**
  103523. * @param {?} content
  103524. * @param {?} url
  103525. * @return {?}
  103526. */
  103527. function (content, url) {
  103528. throw new Error('Unsupported');
  103529. };
  103530. /**
  103531. * @param {?} message
  103532. * @return {?}
  103533. */
  103534. Xmb.prototype.digest = /**
  103535. * @param {?} message
  103536. * @return {?}
  103537. */
  103538. function (message) { return digest$1(message); };
  103539. /**
  103540. * @param {?} message
  103541. * @return {?}
  103542. */
  103543. Xmb.prototype.createNameMapper = /**
  103544. * @param {?} message
  103545. * @return {?}
  103546. */
  103547. function (message) {
  103548. return new SimplePlaceholderMapper(message, toPublicName);
  103549. };
  103550. return Xmb;
  103551. }(Serializer));
  103552. var _Visitor$2 = /** @class */ (function () {
  103553. function _Visitor() {
  103554. }
  103555. /**
  103556. * @param {?} text
  103557. * @param {?=} context
  103558. * @return {?}
  103559. */
  103560. _Visitor.prototype.visitText = /**
  103561. * @param {?} text
  103562. * @param {?=} context
  103563. * @return {?}
  103564. */
  103565. function (text, context) { return [new Text$2(text.value)]; };
  103566. /**
  103567. * @param {?} container
  103568. * @param {?} context
  103569. * @return {?}
  103570. */
  103571. _Visitor.prototype.visitContainer = /**
  103572. * @param {?} container
  103573. * @param {?} context
  103574. * @return {?}
  103575. */
  103576. function (container, context) {
  103577. var _this = this;
  103578. var /** @type {?} */ nodes = [];
  103579. container.children.forEach(function (node) { return nodes.push.apply(nodes, node.visit(_this)); });
  103580. return nodes;
  103581. };
  103582. /**
  103583. * @param {?} icu
  103584. * @param {?=} context
  103585. * @return {?}
  103586. */
  103587. _Visitor.prototype.visitIcu = /**
  103588. * @param {?} icu
  103589. * @param {?=} context
  103590. * @return {?}
  103591. */
  103592. function (icu, context) {
  103593. var _this = this;
  103594. var /** @type {?} */ nodes = [new Text$2("{" + icu.expressionPlaceholder + ", " + icu.type + ", ")];
  103595. Object.keys(icu.cases).forEach(function (c) {
  103596. nodes.push.apply(nodes, [new Text$2(c + " {")].concat(icu.cases[c].visit(_this), [new Text$2("} ")]));
  103597. });
  103598. nodes.push(new Text$2("}"));
  103599. return nodes;
  103600. };
  103601. /**
  103602. * @param {?} ph
  103603. * @param {?=} context
  103604. * @return {?}
  103605. */
  103606. _Visitor.prototype.visitTagPlaceholder = /**
  103607. * @param {?} ph
  103608. * @param {?=} context
  103609. * @return {?}
  103610. */
  103611. function (ph, context) {
  103612. var /** @type {?} */ startEx = new Tag(_EXEMPLE_TAG, {}, [new Text$2("<" + ph.tag + ">")]);
  103613. var /** @type {?} */ startTagPh = new Tag(_PLACEHOLDER_TAG$2, { name: ph.startName }, [startEx]);
  103614. if (ph.isVoid) {
  103615. // void tags have no children nor closing tags
  103616. return [startTagPh];
  103617. }
  103618. var /** @type {?} */ closeEx = new Tag(_EXEMPLE_TAG, {}, [new Text$2("</" + ph.tag + ">")]);
  103619. var /** @type {?} */ closeTagPh = new Tag(_PLACEHOLDER_TAG$2, { name: ph.closeName }, [closeEx]);
  103620. return [startTagPh].concat(this.serialize(ph.children), [closeTagPh]);
  103621. };
  103622. /**
  103623. * @param {?} ph
  103624. * @param {?=} context
  103625. * @return {?}
  103626. */
  103627. _Visitor.prototype.visitPlaceholder = /**
  103628. * @param {?} ph
  103629. * @param {?=} context
  103630. * @return {?}
  103631. */
  103632. function (ph, context) {
  103633. var /** @type {?} */ exTag = new Tag(_EXEMPLE_TAG, {}, [new Text$2("{{" + ph.value + "}}")]);
  103634. return [new Tag(_PLACEHOLDER_TAG$2, { name: ph.name }, [exTag])];
  103635. };
  103636. /**
  103637. * @param {?} ph
  103638. * @param {?=} context
  103639. * @return {?}
  103640. */
  103641. _Visitor.prototype.visitIcuPlaceholder = /**
  103642. * @param {?} ph
  103643. * @param {?=} context
  103644. * @return {?}
  103645. */
  103646. function (ph, context) {
  103647. var /** @type {?} */ exTag = new Tag(_EXEMPLE_TAG, {}, [
  103648. new Text$2("{" + ph.value.expression + ", " + ph.value.type + ", " + Object.keys(ph.value.cases).map(function (value) { return value + ' {...}'; }).join(' ') + "}")
  103649. ]);
  103650. return [new Tag(_PLACEHOLDER_TAG$2, { name: ph.name }, [exTag])];
  103651. };
  103652. /**
  103653. * @param {?} nodes
  103654. * @return {?}
  103655. */
  103656. _Visitor.prototype.serialize = /**
  103657. * @param {?} nodes
  103658. * @return {?}
  103659. */
  103660. function (nodes) {
  103661. var _this = this;
  103662. return [].concat.apply([], nodes.map(function (node) { return node.visit(_this); }));
  103663. };
  103664. return _Visitor;
  103665. }());
  103666. /**
  103667. * @param {?} message
  103668. * @return {?}
  103669. */
  103670. function digest$1(message) {
  103671. return decimalDigest(message);
  103672. }
  103673. var ExampleVisitor = /** @class */ (function () {
  103674. function ExampleVisitor() {
  103675. }
  103676. /**
  103677. * @param {?} node
  103678. * @return {?}
  103679. */
  103680. ExampleVisitor.prototype.addDefaultExamples = /**
  103681. * @param {?} node
  103682. * @return {?}
  103683. */
  103684. function (node) {
  103685. node.visit(this);
  103686. return node;
  103687. };
  103688. /**
  103689. * @param {?} tag
  103690. * @return {?}
  103691. */
  103692. ExampleVisitor.prototype.visitTag = /**
  103693. * @param {?} tag
  103694. * @return {?}
  103695. */
  103696. function (tag) {
  103697. var _this = this;
  103698. if (tag.name === _PLACEHOLDER_TAG$2) {
  103699. if (!tag.children || tag.children.length == 0) {
  103700. var /** @type {?} */ exText = new Text$2(tag.attrs['name'] || '...');
  103701. tag.children = [new Tag(_EXEMPLE_TAG, {}, [exText])];
  103702. }
  103703. }
  103704. else if (tag.children) {
  103705. tag.children.forEach(function (node) { return node.visit(_this); });
  103706. }
  103707. };
  103708. /**
  103709. * @param {?} text
  103710. * @return {?}
  103711. */
  103712. ExampleVisitor.prototype.visitText = /**
  103713. * @param {?} text
  103714. * @return {?}
  103715. */
  103716. function (text) { };
  103717. /**
  103718. * @param {?} decl
  103719. * @return {?}
  103720. */
  103721. ExampleVisitor.prototype.visitDeclaration = /**
  103722. * @param {?} decl
  103723. * @return {?}
  103724. */
  103725. function (decl) { };
  103726. /**
  103727. * @param {?} doctype
  103728. * @return {?}
  103729. */
  103730. ExampleVisitor.prototype.visitDoctype = /**
  103731. * @param {?} doctype
  103732. * @return {?}
  103733. */
  103734. function (doctype) { };
  103735. return ExampleVisitor;
  103736. }());
  103737. /**
  103738. * @param {?} internalName
  103739. * @return {?}
  103740. */
  103741. function toPublicName(internalName) {
  103742. return internalName.toUpperCase().replace(/[^A-Z0-9_]/g, '_');
  103743. }
  103744. /**
  103745. * @fileoverview added by tsickle
  103746. * @suppress {checkTypes} checked by tsc
  103747. */
  103748. /**
  103749. * @license
  103750. * Copyright Google Inc. All Rights Reserved.
  103751. *
  103752. * Use of this source code is governed by an MIT-style license that can be
  103753. * found in the LICENSE file at https://angular.io/license
  103754. */
  103755. var _TRANSLATIONS_TAG = 'translationbundle';
  103756. var _TRANSLATION_TAG = 'translation';
  103757. var _PLACEHOLDER_TAG$3 = 'ph';
  103758. var Xtb = /** @class */ (function (_super) {
  103759. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(Xtb, _super);
  103760. function Xtb() {
  103761. return _super !== null && _super.apply(this, arguments) || this;
  103762. }
  103763. /**
  103764. * @param {?} messages
  103765. * @param {?} locale
  103766. * @return {?}
  103767. */
  103768. Xtb.prototype.write = /**
  103769. * @param {?} messages
  103770. * @param {?} locale
  103771. * @return {?}
  103772. */
  103773. function (messages, locale) { throw new Error('Unsupported'); };
  103774. /**
  103775. * @param {?} content
  103776. * @param {?} url
  103777. * @return {?}
  103778. */
  103779. Xtb.prototype.load = /**
  103780. * @param {?} content
  103781. * @param {?} url
  103782. * @return {?}
  103783. */
  103784. function (content, url) {
  103785. // xtb to xml nodes
  103786. var /** @type {?} */ xtbParser = new XtbParser();
  103787. var _a = xtbParser.parse(content, url), locale = _a.locale, msgIdToHtml = _a.msgIdToHtml, errors = _a.errors;
  103788. // xml nodes to i18n nodes
  103789. var /** @type {?} */ i18nNodesByMsgId = {};
  103790. var /** @type {?} */ converter = new XmlToI18n$2();
  103791. // Because we should be able to load xtb files that rely on features not supported by angular,
  103792. // we need to delay the conversion of html to i18n nodes so that non angular messages are not
  103793. // converted
  103794. Object.keys(msgIdToHtml).forEach(function (msgId) {
  103795. var /** @type {?} */ valueFn = function () {
  103796. var _a = converter.convert(msgIdToHtml[msgId], url), i18nNodes = _a.i18nNodes, errors = _a.errors;
  103797. if (errors.length) {
  103798. throw new Error("xtb parse errors:\n" + errors.join('\n'));
  103799. }
  103800. return i18nNodes;
  103801. };
  103802. createLazyProperty(i18nNodesByMsgId, msgId, valueFn);
  103803. });
  103804. if (errors.length) {
  103805. throw new Error("xtb parse errors:\n" + errors.join('\n'));
  103806. }
  103807. return { locale: /** @type {?} */ ((locale)), i18nNodesByMsgId: i18nNodesByMsgId };
  103808. };
  103809. /**
  103810. * @param {?} message
  103811. * @return {?}
  103812. */
  103813. Xtb.prototype.digest = /**
  103814. * @param {?} message
  103815. * @return {?}
  103816. */
  103817. function (message) { return digest$1(message); };
  103818. /**
  103819. * @param {?} message
  103820. * @return {?}
  103821. */
  103822. Xtb.prototype.createNameMapper = /**
  103823. * @param {?} message
  103824. * @return {?}
  103825. */
  103826. function (message) {
  103827. return new SimplePlaceholderMapper(message, toPublicName);
  103828. };
  103829. return Xtb;
  103830. }(Serializer));
  103831. /**
  103832. * @param {?} messages
  103833. * @param {?} id
  103834. * @param {?} valueFn
  103835. * @return {?}
  103836. */
  103837. function createLazyProperty(messages, id, valueFn) {
  103838. Object.defineProperty(messages, id, {
  103839. configurable: true,
  103840. enumerable: true,
  103841. get: function () {
  103842. var /** @type {?} */ value = valueFn();
  103843. Object.defineProperty(messages, id, { enumerable: true, value: value });
  103844. return value;
  103845. },
  103846. set: function (_) { throw new Error('Could not overwrite an XTB translation'); },
  103847. });
  103848. }
  103849. var XtbParser = /** @class */ (function () {
  103850. function XtbParser() {
  103851. this._locale = null;
  103852. }
  103853. /**
  103854. * @param {?} xtb
  103855. * @param {?} url
  103856. * @return {?}
  103857. */
  103858. XtbParser.prototype.parse = /**
  103859. * @param {?} xtb
  103860. * @param {?} url
  103861. * @return {?}
  103862. */
  103863. function (xtb, url) {
  103864. this._bundleDepth = 0;
  103865. this._msgIdToHtml = {};
  103866. // We can not parse the ICU messages at this point as some messages might not originate
  103867. // from Angular that could not be lex'd.
  103868. var /** @type {?} */ xml = new XmlParser().parse(xtb, url, false);
  103869. this._errors = xml.errors;
  103870. visitAll(this, xml.rootNodes);
  103871. return {
  103872. msgIdToHtml: this._msgIdToHtml,
  103873. errors: this._errors,
  103874. locale: this._locale,
  103875. };
  103876. };
  103877. /**
  103878. * @param {?} element
  103879. * @param {?} context
  103880. * @return {?}
  103881. */
  103882. XtbParser.prototype.visitElement = /**
  103883. * @param {?} element
  103884. * @param {?} context
  103885. * @return {?}
  103886. */
  103887. function (element, context) {
  103888. switch (element.name) {
  103889. case _TRANSLATIONS_TAG:
  103890. this._bundleDepth++;
  103891. if (this._bundleDepth > 1) {
  103892. this._addError(element, "<" + _TRANSLATIONS_TAG + "> elements can not be nested");
  103893. }
  103894. var /** @type {?} */ langAttr = element.attrs.find(function (attr) { return attr.name === 'lang'; });
  103895. if (langAttr) {
  103896. this._locale = langAttr.value;
  103897. }
  103898. visitAll(this, element.children, null);
  103899. this._bundleDepth--;
  103900. break;
  103901. case _TRANSLATION_TAG:
  103902. var /** @type {?} */ idAttr = element.attrs.find(function (attr) { return attr.name === 'id'; });
  103903. if (!idAttr) {
  103904. this._addError(element, "<" + _TRANSLATION_TAG + "> misses the \"id\" attribute");
  103905. }
  103906. else {
  103907. var /** @type {?} */ id = idAttr.value;
  103908. if (this._msgIdToHtml.hasOwnProperty(id)) {
  103909. this._addError(element, "Duplicated translations for msg " + id);
  103910. }
  103911. else {
  103912. var /** @type {?} */ innerTextStart = /** @type {?} */ ((element.startSourceSpan)).end.offset;
  103913. var /** @type {?} */ innerTextEnd = /** @type {?} */ ((element.endSourceSpan)).start.offset;
  103914. var /** @type {?} */ content = /** @type {?} */ ((element.startSourceSpan)).start.file.content;
  103915. var /** @type {?} */ innerText = content.slice(/** @type {?} */ ((innerTextStart)), /** @type {?} */ ((innerTextEnd)));
  103916. this._msgIdToHtml[id] = innerText;
  103917. }
  103918. }
  103919. break;
  103920. default:
  103921. this._addError(element, 'Unexpected tag');
  103922. }
  103923. };
  103924. /**
  103925. * @param {?} attribute
  103926. * @param {?} context
  103927. * @return {?}
  103928. */
  103929. XtbParser.prototype.visitAttribute = /**
  103930. * @param {?} attribute
  103931. * @param {?} context
  103932. * @return {?}
  103933. */
  103934. function (attribute, context) { };
  103935. /**
  103936. * @param {?} text
  103937. * @param {?} context
  103938. * @return {?}
  103939. */
  103940. XtbParser.prototype.visitText = /**
  103941. * @param {?} text
  103942. * @param {?} context
  103943. * @return {?}
  103944. */
  103945. function (text, context) { };
  103946. /**
  103947. * @param {?} comment
  103948. * @param {?} context
  103949. * @return {?}
  103950. */
  103951. XtbParser.prototype.visitComment = /**
  103952. * @param {?} comment
  103953. * @param {?} context
  103954. * @return {?}
  103955. */
  103956. function (comment, context) { };
  103957. /**
  103958. * @param {?} expansion
  103959. * @param {?} context
  103960. * @return {?}
  103961. */
  103962. XtbParser.prototype.visitExpansion = /**
  103963. * @param {?} expansion
  103964. * @param {?} context
  103965. * @return {?}
  103966. */
  103967. function (expansion, context) { };
  103968. /**
  103969. * @param {?} expansionCase
  103970. * @param {?} context
  103971. * @return {?}
  103972. */
  103973. XtbParser.prototype.visitExpansionCase = /**
  103974. * @param {?} expansionCase
  103975. * @param {?} context
  103976. * @return {?}
  103977. */
  103978. function (expansionCase, context) { };
  103979. /**
  103980. * @param {?} node
  103981. * @param {?} message
  103982. * @return {?}
  103983. */
  103984. XtbParser.prototype._addError = /**
  103985. * @param {?} node
  103986. * @param {?} message
  103987. * @return {?}
  103988. */
  103989. function (node, message) {
  103990. this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));
  103991. };
  103992. return XtbParser;
  103993. }());
  103994. var XmlToI18n$2 = /** @class */ (function () {
  103995. function XmlToI18n() {
  103996. }
  103997. /**
  103998. * @param {?} message
  103999. * @param {?} url
  104000. * @return {?}
  104001. */
  104002. XmlToI18n.prototype.convert = /**
  104003. * @param {?} message
  104004. * @param {?} url
  104005. * @return {?}
  104006. */
  104007. function (message, url) {
  104008. var /** @type {?} */ xmlIcu = new XmlParser().parse(message, url, true);
  104009. this._errors = xmlIcu.errors;
  104010. var /** @type {?} */ i18nNodes = this._errors.length > 0 || xmlIcu.rootNodes.length == 0 ?
  104011. [] :
  104012. visitAll(this, xmlIcu.rootNodes);
  104013. return {
  104014. i18nNodes: i18nNodes,
  104015. errors: this._errors,
  104016. };
  104017. };
  104018. /**
  104019. * @param {?} text
  104020. * @param {?} context
  104021. * @return {?}
  104022. */
  104023. XmlToI18n.prototype.visitText = /**
  104024. * @param {?} text
  104025. * @param {?} context
  104026. * @return {?}
  104027. */
  104028. function (text, context) { return new Text$1(text.value, /** @type {?} */ ((text.sourceSpan))); };
  104029. /**
  104030. * @param {?} icu
  104031. * @param {?} context
  104032. * @return {?}
  104033. */
  104034. XmlToI18n.prototype.visitExpansion = /**
  104035. * @param {?} icu
  104036. * @param {?} context
  104037. * @return {?}
  104038. */
  104039. function (icu, context) {
  104040. var /** @type {?} */ caseMap = {};
  104041. visitAll(this, icu.cases).forEach(function (c) {
  104042. caseMap[c.value] = new Container(c.nodes, icu.sourceSpan);
  104043. });
  104044. return new Icu(icu.switchValue, icu.type, caseMap, icu.sourceSpan);
  104045. };
  104046. /**
  104047. * @param {?} icuCase
  104048. * @param {?} context
  104049. * @return {?}
  104050. */
  104051. XmlToI18n.prototype.visitExpansionCase = /**
  104052. * @param {?} icuCase
  104053. * @param {?} context
  104054. * @return {?}
  104055. */
  104056. function (icuCase, context) {
  104057. return {
  104058. value: icuCase.value,
  104059. nodes: visitAll(this, icuCase.expression),
  104060. };
  104061. };
  104062. /**
  104063. * @param {?} el
  104064. * @param {?} context
  104065. * @return {?}
  104066. */
  104067. XmlToI18n.prototype.visitElement = /**
  104068. * @param {?} el
  104069. * @param {?} context
  104070. * @return {?}
  104071. */
  104072. function (el, context) {
  104073. if (el.name === _PLACEHOLDER_TAG$3) {
  104074. var /** @type {?} */ nameAttr = el.attrs.find(function (attr) { return attr.name === 'name'; });
  104075. if (nameAttr) {
  104076. return new Placeholder('', nameAttr.value, /** @type {?} */ ((el.sourceSpan)));
  104077. }
  104078. this._addError(el, "<" + _PLACEHOLDER_TAG$3 + "> misses the \"name\" attribute");
  104079. }
  104080. else {
  104081. this._addError(el, "Unexpected tag");
  104082. }
  104083. return null;
  104084. };
  104085. /**
  104086. * @param {?} comment
  104087. * @param {?} context
  104088. * @return {?}
  104089. */
  104090. XmlToI18n.prototype.visitComment = /**
  104091. * @param {?} comment
  104092. * @param {?} context
  104093. * @return {?}
  104094. */
  104095. function (comment, context) { };
  104096. /**
  104097. * @param {?} attribute
  104098. * @param {?} context
  104099. * @return {?}
  104100. */
  104101. XmlToI18n.prototype.visitAttribute = /**
  104102. * @param {?} attribute
  104103. * @param {?} context
  104104. * @return {?}
  104105. */
  104106. function (attribute, context) { };
  104107. /**
  104108. * @param {?} node
  104109. * @param {?} message
  104110. * @return {?}
  104111. */
  104112. XmlToI18n.prototype._addError = /**
  104113. * @param {?} node
  104114. * @param {?} message
  104115. * @return {?}
  104116. */
  104117. function (node, message) {
  104118. this._errors.push(new I18nError(/** @type {?} */ ((node.sourceSpan)), message));
  104119. };
  104120. return XmlToI18n;
  104121. }());
  104122. /**
  104123. * @fileoverview added by tsickle
  104124. * @suppress {checkTypes} checked by tsc
  104125. */
  104126. /**
  104127. * @license
  104128. * Copyright Google Inc. All Rights Reserved.
  104129. *
  104130. * Use of this source code is governed by an MIT-style license that can be
  104131. * found in the LICENSE file at https://angular.io/license
  104132. */
  104133. var HtmlParser = /** @class */ (function (_super) {
  104134. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(HtmlParser, _super);
  104135. function HtmlParser() {
  104136. return _super.call(this, getHtmlTagDefinition) || this;
  104137. }
  104138. /**
  104139. * @param {?} source
  104140. * @param {?} url
  104141. * @param {?=} parseExpansionForms
  104142. * @param {?=} interpolationConfig
  104143. * @return {?}
  104144. */
  104145. HtmlParser.prototype.parse = /**
  104146. * @param {?} source
  104147. * @param {?} url
  104148. * @param {?=} parseExpansionForms
  104149. * @param {?=} interpolationConfig
  104150. * @return {?}
  104151. */
  104152. function (source, url, parseExpansionForms, interpolationConfig) {
  104153. if (parseExpansionForms === void 0) { parseExpansionForms = false; }
  104154. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  104155. return _super.prototype.parse.call(this, source, url, parseExpansionForms, interpolationConfig);
  104156. };
  104157. return HtmlParser;
  104158. }(Parser$1));
  104159. /**
  104160. * @fileoverview added by tsickle
  104161. * @suppress {checkTypes} checked by tsc
  104162. */
  104163. /**
  104164. * @license
  104165. * Copyright Google Inc. All Rights Reserved.
  104166. *
  104167. * Use of this source code is governed by an MIT-style license that can be
  104168. * found in the LICENSE file at https://angular.io/license
  104169. */
  104170. /**
  104171. * A container for translated messages
  104172. */
  104173. var TranslationBundle = /** @class */ (function () {
  104174. function TranslationBundle(_i18nNodesByMsgId, locale, digest, mapperFactory, missingTranslationStrategy, console) {
  104175. if (_i18nNodesByMsgId === void 0) { _i18nNodesByMsgId = {}; }
  104176. if (missingTranslationStrategy === void 0) { missingTranslationStrategy = MissingTranslationStrategy.Warning; }
  104177. this._i18nNodesByMsgId = _i18nNodesByMsgId;
  104178. this.digest = digest;
  104179. this.mapperFactory = mapperFactory;
  104180. this._i18nToHtml = new I18nToHtmlVisitor(_i18nNodesByMsgId, locale, digest, /** @type {?} */ ((mapperFactory)), missingTranslationStrategy, console);
  104181. }
  104182. // Creates a `TranslationBundle` by parsing the given `content` with the `serializer`.
  104183. /**
  104184. * @param {?} content
  104185. * @param {?} url
  104186. * @param {?} serializer
  104187. * @param {?} missingTranslationStrategy
  104188. * @param {?=} console
  104189. * @return {?}
  104190. */
  104191. TranslationBundle.load = /**
  104192. * @param {?} content
  104193. * @param {?} url
  104194. * @param {?} serializer
  104195. * @param {?} missingTranslationStrategy
  104196. * @param {?=} console
  104197. * @return {?}
  104198. */
  104199. function (content, url, serializer, missingTranslationStrategy, console) {
  104200. var _a = serializer.load(content, url), locale = _a.locale, i18nNodesByMsgId = _a.i18nNodesByMsgId;
  104201. var /** @type {?} */ digestFn = function (m) { return serializer.digest(m); };
  104202. var /** @type {?} */ mapperFactory = function (m) { return ((serializer.createNameMapper(m))); };
  104203. return new TranslationBundle(i18nNodesByMsgId, locale, digestFn, mapperFactory, missingTranslationStrategy, console);
  104204. };
  104205. // Returns the translation as HTML nodes from the given source message.
  104206. /**
  104207. * @param {?} srcMsg
  104208. * @return {?}
  104209. */
  104210. TranslationBundle.prototype.get = /**
  104211. * @param {?} srcMsg
  104212. * @return {?}
  104213. */
  104214. function (srcMsg) {
  104215. var /** @type {?} */ html = this._i18nToHtml.convert(srcMsg);
  104216. if (html.errors.length) {
  104217. throw new Error(html.errors.join('\n'));
  104218. }
  104219. return html.nodes;
  104220. };
  104221. /**
  104222. * @param {?} srcMsg
  104223. * @return {?}
  104224. */
  104225. TranslationBundle.prototype.has = /**
  104226. * @param {?} srcMsg
  104227. * @return {?}
  104228. */
  104229. function (srcMsg) { return this.digest(srcMsg) in this._i18nNodesByMsgId; };
  104230. return TranslationBundle;
  104231. }());
  104232. var I18nToHtmlVisitor = /** @class */ (function () {
  104233. function I18nToHtmlVisitor(_i18nNodesByMsgId, _locale, _digest, _mapperFactory, _missingTranslationStrategy, _console) {
  104234. if (_i18nNodesByMsgId === void 0) { _i18nNodesByMsgId = {}; }
  104235. this._i18nNodesByMsgId = _i18nNodesByMsgId;
  104236. this._locale = _locale;
  104237. this._digest = _digest;
  104238. this._mapperFactory = _mapperFactory;
  104239. this._missingTranslationStrategy = _missingTranslationStrategy;
  104240. this._console = _console;
  104241. this._contextStack = [];
  104242. this._errors = [];
  104243. }
  104244. /**
  104245. * @param {?} srcMsg
  104246. * @return {?}
  104247. */
  104248. I18nToHtmlVisitor.prototype.convert = /**
  104249. * @param {?} srcMsg
  104250. * @return {?}
  104251. */
  104252. function (srcMsg) {
  104253. this._contextStack.length = 0;
  104254. this._errors.length = 0;
  104255. // i18n to text
  104256. var /** @type {?} */ text = this._convertToText(srcMsg);
  104257. // text to html
  104258. var /** @type {?} */ url = srcMsg.nodes[0].sourceSpan.start.file.url;
  104259. var /** @type {?} */ html = new HtmlParser().parse(text, url, true);
  104260. return {
  104261. nodes: html.rootNodes,
  104262. errors: this._errors.concat(html.errors),
  104263. };
  104264. };
  104265. /**
  104266. * @param {?} text
  104267. * @param {?=} context
  104268. * @return {?}
  104269. */
  104270. I18nToHtmlVisitor.prototype.visitText = /**
  104271. * @param {?} text
  104272. * @param {?=} context
  104273. * @return {?}
  104274. */
  104275. function (text, context) {
  104276. // `convert()` uses an `HtmlParser` to return `html.Node`s
  104277. // we should then make sure that any special characters are escaped
  104278. return escapeXml(text.value);
  104279. };
  104280. /**
  104281. * @param {?} container
  104282. * @param {?=} context
  104283. * @return {?}
  104284. */
  104285. I18nToHtmlVisitor.prototype.visitContainer = /**
  104286. * @param {?} container
  104287. * @param {?=} context
  104288. * @return {?}
  104289. */
  104290. function (container, context) {
  104291. var _this = this;
  104292. return container.children.map(function (n) { return n.visit(_this); }).join('');
  104293. };
  104294. /**
  104295. * @param {?} icu
  104296. * @param {?=} context
  104297. * @return {?}
  104298. */
  104299. I18nToHtmlVisitor.prototype.visitIcu = /**
  104300. * @param {?} icu
  104301. * @param {?=} context
  104302. * @return {?}
  104303. */
  104304. function (icu, context) {
  104305. var _this = this;
  104306. var /** @type {?} */ cases = Object.keys(icu.cases).map(function (k) { return k + " {" + icu.cases[k].visit(_this) + "}"; });
  104307. // TODO(vicb): Once all format switch to using expression placeholders
  104308. // we should throw when the placeholder is not in the source message
  104309. var /** @type {?} */ exp = this._srcMsg.placeholders.hasOwnProperty(icu.expression) ?
  104310. this._srcMsg.placeholders[icu.expression] :
  104311. icu.expression;
  104312. return "{" + exp + ", " + icu.type + ", " + cases.join(' ') + "}";
  104313. };
  104314. /**
  104315. * @param {?} ph
  104316. * @param {?=} context
  104317. * @return {?}
  104318. */
  104319. I18nToHtmlVisitor.prototype.visitPlaceholder = /**
  104320. * @param {?} ph
  104321. * @param {?=} context
  104322. * @return {?}
  104323. */
  104324. function (ph, context) {
  104325. var /** @type {?} */ phName = this._mapper(ph.name);
  104326. if (this._srcMsg.placeholders.hasOwnProperty(phName)) {
  104327. return this._srcMsg.placeholders[phName];
  104328. }
  104329. if (this._srcMsg.placeholderToMessage.hasOwnProperty(phName)) {
  104330. return this._convertToText(this._srcMsg.placeholderToMessage[phName]);
  104331. }
  104332. this._addError(ph, "Unknown placeholder \"" + ph.name + "\"");
  104333. return '';
  104334. };
  104335. // Loaded message contains only placeholders (vs tag and icu placeholders).
  104336. // However when a translation can not be found, we need to serialize the source message
  104337. // which can contain tag placeholders
  104338. /**
  104339. * @param {?} ph
  104340. * @param {?=} context
  104341. * @return {?}
  104342. */
  104343. I18nToHtmlVisitor.prototype.visitTagPlaceholder = /**
  104344. * @param {?} ph
  104345. * @param {?=} context
  104346. * @return {?}
  104347. */
  104348. function (ph, context) {
  104349. var _this = this;
  104350. var /** @type {?} */ tag = "" + ph.tag;
  104351. var /** @type {?} */ attrs = Object.keys(ph.attrs).map(function (name) { return name + "=\"" + ph.attrs[name] + "\""; }).join(' ');
  104352. if (ph.isVoid) {
  104353. return "<" + tag + " " + attrs + "/>";
  104354. }
  104355. var /** @type {?} */ children = ph.children.map(function (c) { return c.visit(_this); }).join('');
  104356. return "<" + tag + " " + attrs + ">" + children + "</" + tag + ">";
  104357. };
  104358. // Loaded message contains only placeholders (vs tag and icu placeholders).
  104359. // However when a translation can not be found, we need to serialize the source message
  104360. // which can contain tag placeholders
  104361. /**
  104362. * @param {?} ph
  104363. * @param {?=} context
  104364. * @return {?}
  104365. */
  104366. I18nToHtmlVisitor.prototype.visitIcuPlaceholder = /**
  104367. * @param {?} ph
  104368. * @param {?=} context
  104369. * @return {?}
  104370. */
  104371. function (ph, context) {
  104372. // An ICU placeholder references the source message to be serialized
  104373. return this._convertToText(this._srcMsg.placeholderToMessage[ph.name]);
  104374. };
  104375. /**
  104376. * Convert a source message to a translated text string:
  104377. * - text nodes are replaced with their translation,
  104378. * - placeholders are replaced with their content,
  104379. * - ICU nodes are converted to ICU expressions.
  104380. * @param {?} srcMsg
  104381. * @return {?}
  104382. */
  104383. I18nToHtmlVisitor.prototype._convertToText = /**
  104384. * Convert a source message to a translated text string:
  104385. * - text nodes are replaced with their translation,
  104386. * - placeholders are replaced with their content,
  104387. * - ICU nodes are converted to ICU expressions.
  104388. * @param {?} srcMsg
  104389. * @return {?}
  104390. */
  104391. function (srcMsg) {
  104392. var _this = this;
  104393. var /** @type {?} */ id = this._digest(srcMsg);
  104394. var /** @type {?} */ mapper = this._mapperFactory ? this._mapperFactory(srcMsg) : null;
  104395. var /** @type {?} */ nodes;
  104396. this._contextStack.push({ msg: this._srcMsg, mapper: this._mapper });
  104397. this._srcMsg = srcMsg;
  104398. if (this._i18nNodesByMsgId.hasOwnProperty(id)) {
  104399. // When there is a translation use its nodes as the source
  104400. // And create a mapper to convert serialized placeholder names to internal names
  104401. nodes = this._i18nNodesByMsgId[id];
  104402. this._mapper = function (name) { return mapper ? /** @type {?} */ ((mapper.toInternalName(name))) : name; };
  104403. }
  104404. else {
  104405. // When no translation has been found
  104406. // - report an error / a warning / nothing,
  104407. // - use the nodes from the original message
  104408. // - placeholders are already internal and need no mapper
  104409. if (this._missingTranslationStrategy === MissingTranslationStrategy.Error) {
  104410. var /** @type {?} */ ctx = this._locale ? " for locale \"" + this._locale + "\"" : '';
  104411. this._addError(srcMsg.nodes[0], "Missing translation for message \"" + id + "\"" + ctx);
  104412. }
  104413. else if (this._console &&
  104414. this._missingTranslationStrategy === MissingTranslationStrategy.Warning) {
  104415. var /** @type {?} */ ctx = this._locale ? " for locale \"" + this._locale + "\"" : '';
  104416. this._console.warn("Missing translation for message \"" + id + "\"" + ctx);
  104417. }
  104418. nodes = srcMsg.nodes;
  104419. this._mapper = function (name) { return name; };
  104420. }
  104421. var /** @type {?} */ text = nodes.map(function (node) { return node.visit(_this); }).join('');
  104422. var /** @type {?} */ context = /** @type {?} */ ((this._contextStack.pop()));
  104423. this._srcMsg = context.msg;
  104424. this._mapper = context.mapper;
  104425. return text;
  104426. };
  104427. /**
  104428. * @param {?} el
  104429. * @param {?} msg
  104430. * @return {?}
  104431. */
  104432. I18nToHtmlVisitor.prototype._addError = /**
  104433. * @param {?} el
  104434. * @param {?} msg
  104435. * @return {?}
  104436. */
  104437. function (el, msg) {
  104438. this._errors.push(new I18nError(el.sourceSpan, msg));
  104439. };
  104440. return I18nToHtmlVisitor;
  104441. }());
  104442. /**
  104443. * @fileoverview added by tsickle
  104444. * @suppress {checkTypes} checked by tsc
  104445. */
  104446. /**
  104447. * @license
  104448. * Copyright Google Inc. All Rights Reserved.
  104449. *
  104450. * Use of this source code is governed by an MIT-style license that can be
  104451. * found in the LICENSE file at https://angular.io/license
  104452. */
  104453. var I18NHtmlParser = /** @class */ (function () {
  104454. function I18NHtmlParser(_htmlParser, translations, translationsFormat, missingTranslation, console) {
  104455. if (missingTranslation === void 0) { missingTranslation = MissingTranslationStrategy.Warning; }
  104456. this._htmlParser = _htmlParser;
  104457. if (translations) {
  104458. var /** @type {?} */ serializer = createSerializer(translationsFormat);
  104459. this._translationBundle =
  104460. TranslationBundle.load(translations, 'i18n', serializer, missingTranslation, console);
  104461. }
  104462. else {
  104463. this._translationBundle =
  104464. new TranslationBundle({}, null, digest, undefined, missingTranslation, console);
  104465. }
  104466. }
  104467. /**
  104468. * @param {?} source
  104469. * @param {?} url
  104470. * @param {?=} parseExpansionForms
  104471. * @param {?=} interpolationConfig
  104472. * @return {?}
  104473. */
  104474. I18NHtmlParser.prototype.parse = /**
  104475. * @param {?} source
  104476. * @param {?} url
  104477. * @param {?=} parseExpansionForms
  104478. * @param {?=} interpolationConfig
  104479. * @return {?}
  104480. */
  104481. function (source, url, parseExpansionForms, interpolationConfig) {
  104482. if (parseExpansionForms === void 0) { parseExpansionForms = false; }
  104483. if (interpolationConfig === void 0) { interpolationConfig = DEFAULT_INTERPOLATION_CONFIG; }
  104484. var /** @type {?} */ parseResult = this._htmlParser.parse(source, url, parseExpansionForms, interpolationConfig);
  104485. if (parseResult.errors.length) {
  104486. return new ParseTreeResult(parseResult.rootNodes, parseResult.errors);
  104487. }
  104488. return mergeTranslations(parseResult.rootNodes, this._translationBundle, interpolationConfig, [], {});
  104489. };
  104490. return I18NHtmlParser;
  104491. }());
  104492. /**
  104493. * @param {?=} format
  104494. * @return {?}
  104495. */
  104496. function createSerializer(format) {
  104497. format = (format || 'xlf').toLowerCase();
  104498. switch (format) {
  104499. case 'xmb':
  104500. return new Xmb();
  104501. case 'xtb':
  104502. return new Xtb();
  104503. case 'xliff2':
  104504. case 'xlf2':
  104505. return new Xliff2();
  104506. case 'xliff':
  104507. case 'xlf':
  104508. default:
  104509. return new Xliff();
  104510. }
  104511. }
  104512. /**
  104513. * @fileoverview added by tsickle
  104514. * @suppress {checkTypes} checked by tsc
  104515. */
  104516. /**
  104517. * @license
  104518. * Copyright Google Inc. All Rights Reserved.
  104519. *
  104520. * Use of this source code is governed by an MIT-style license that can be
  104521. * found in the LICENSE file at https://angular.io/license
  104522. */
  104523. var STRIP_SRC_FILE_SUFFIXES = /(\.ts|\.d\.ts|\.js|\.jsx|\.tsx)$/;
  104524. var GENERATED_FILE = /\.ngfactory\.|\.ngsummary\./;
  104525. var JIT_SUMMARY_FILE = /\.ngsummary\./;
  104526. var JIT_SUMMARY_NAME = /NgSummary$/;
  104527. /**
  104528. * @param {?} filePath
  104529. * @param {?=} forceSourceFile
  104530. * @return {?}
  104531. */
  104532. function ngfactoryFilePath(filePath, forceSourceFile) {
  104533. if (forceSourceFile === void 0) { forceSourceFile = false; }
  104534. var /** @type {?} */ urlWithSuffix = splitTypescriptSuffix(filePath, forceSourceFile);
  104535. return urlWithSuffix[0] + ".ngfactory" + normalizeGenFileSuffix(urlWithSuffix[1]);
  104536. }
  104537. /**
  104538. * @param {?} filePath
  104539. * @return {?}
  104540. */
  104541. function stripGeneratedFileSuffix(filePath) {
  104542. return filePath.replace(GENERATED_FILE, '.');
  104543. }
  104544. /**
  104545. * @param {?} filePath
  104546. * @return {?}
  104547. */
  104548. function isGeneratedFile(filePath) {
  104549. return GENERATED_FILE.test(filePath);
  104550. }
  104551. /**
  104552. * @param {?} path
  104553. * @param {?=} forceSourceFile
  104554. * @return {?}
  104555. */
  104556. function splitTypescriptSuffix(path, forceSourceFile) {
  104557. if (forceSourceFile === void 0) { forceSourceFile = false; }
  104558. if (path.endsWith('.d.ts')) {
  104559. return [path.slice(0, -5), forceSourceFile ? '.ts' : '.d.ts'];
  104560. }
  104561. var /** @type {?} */ lastDot = path.lastIndexOf('.');
  104562. if (lastDot !== -1) {
  104563. return [path.substring(0, lastDot), path.substring(lastDot)];
  104564. }
  104565. return [path, ''];
  104566. }
  104567. /**
  104568. * @param {?} srcFileSuffix
  104569. * @return {?}
  104570. */
  104571. function normalizeGenFileSuffix(srcFileSuffix) {
  104572. return srcFileSuffix === '.tsx' ? '.ts' : srcFileSuffix;
  104573. }
  104574. /**
  104575. * @param {?} fileName
  104576. * @return {?}
  104577. */
  104578. function summaryFileName(fileName) {
  104579. var /** @type {?} */ fileNameWithoutSuffix = fileName.replace(STRIP_SRC_FILE_SUFFIXES, '');
  104580. return fileNameWithoutSuffix + ".ngsummary.json";
  104581. }
  104582. /**
  104583. * @param {?} fileName
  104584. * @param {?=} forceSourceFile
  104585. * @return {?}
  104586. */
  104587. function summaryForJitFileName(fileName, forceSourceFile) {
  104588. if (forceSourceFile === void 0) { forceSourceFile = false; }
  104589. var /** @type {?} */ urlWithSuffix = splitTypescriptSuffix(stripGeneratedFileSuffix(fileName), forceSourceFile);
  104590. return urlWithSuffix[0] + ".ngsummary" + urlWithSuffix[1];
  104591. }
  104592. /**
  104593. * @param {?} filePath
  104594. * @return {?}
  104595. */
  104596. function stripSummaryForJitFileSuffix(filePath) {
  104597. return filePath.replace(JIT_SUMMARY_FILE, '.');
  104598. }
  104599. /**
  104600. * @param {?} symbolName
  104601. * @return {?}
  104602. */
  104603. function summaryForJitName(symbolName) {
  104604. return symbolName + "NgSummary";
  104605. }
  104606. /**
  104607. * @param {?} symbolName
  104608. * @return {?}
  104609. */
  104610. function stripSummaryForJitNameSuffix(symbolName) {
  104611. return symbolName.replace(JIT_SUMMARY_NAME, '');
  104612. }
  104613. var LOWERED_SYMBOL = /\u0275\d+/;
  104614. /**
  104615. * @param {?} name
  104616. * @return {?}
  104617. */
  104618. function isLoweredSymbol(name) {
  104619. return LOWERED_SYMBOL.test(name);
  104620. }
  104621. /**
  104622. * @param {?} id
  104623. * @return {?}
  104624. */
  104625. function createLoweredSymbol(id) {
  104626. return "\u0275" + id;
  104627. }
  104628. /**
  104629. * @fileoverview added by tsickle
  104630. * @suppress {checkTypes} checked by tsc
  104631. */
  104632. /**
  104633. * @license
  104634. * Copyright Google Inc. All Rights Reserved.
  104635. *
  104636. * Use of this source code is governed by an MIT-style license that can be
  104637. * found in the LICENSE file at https://angular.io/license
  104638. */
  104639. var CORE = '@angular/core';
  104640. var Identifiers = /** @class */ (function () {
  104641. function Identifiers() {
  104642. }
  104643. Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS = {
  104644. name: 'ANALYZE_FOR_ENTRY_COMPONENTS',
  104645. moduleName: CORE,
  104646. };
  104647. Identifiers.ElementRef = { name: 'ElementRef', moduleName: CORE };
  104648. Identifiers.NgModuleRef = { name: 'NgModuleRef', moduleName: CORE };
  104649. Identifiers.ViewContainerRef = { name: 'ViewContainerRef', moduleName: CORE };
  104650. Identifiers.ChangeDetectorRef = {
  104651. name: 'ChangeDetectorRef',
  104652. moduleName: CORE,
  104653. };
  104654. Identifiers.QueryList = { name: 'QueryList', moduleName: CORE };
  104655. Identifiers.TemplateRef = { name: 'TemplateRef', moduleName: CORE };
  104656. Identifiers.CodegenComponentFactoryResolver = {
  104657. name: 'ɵCodegenComponentFactoryResolver',
  104658. moduleName: CORE,
  104659. };
  104660. Identifiers.ComponentFactoryResolver = {
  104661. name: 'ComponentFactoryResolver',
  104662. moduleName: CORE,
  104663. };
  104664. Identifiers.ComponentFactory = { name: 'ComponentFactory', moduleName: CORE };
  104665. Identifiers.ComponentRef = { name: 'ComponentRef', moduleName: CORE };
  104666. Identifiers.NgModuleFactory = { name: 'NgModuleFactory', moduleName: CORE };
  104667. Identifiers.createModuleFactory = {
  104668. name: 'ɵcmf',
  104669. moduleName: CORE,
  104670. };
  104671. Identifiers.moduleDef = {
  104672. name: 'ɵmod',
  104673. moduleName: CORE,
  104674. };
  104675. Identifiers.moduleProviderDef = {
  104676. name: 'ɵmpd',
  104677. moduleName: CORE,
  104678. };
  104679. Identifiers.RegisterModuleFactoryFn = {
  104680. name: 'ɵregisterModuleFactory',
  104681. moduleName: CORE,
  104682. };
  104683. Identifiers.Injector = { name: 'Injector', moduleName: CORE };
  104684. Identifiers.ViewEncapsulation = {
  104685. name: 'ViewEncapsulation',
  104686. moduleName: CORE,
  104687. };
  104688. Identifiers.ChangeDetectionStrategy = {
  104689. name: 'ChangeDetectionStrategy',
  104690. moduleName: CORE,
  104691. };
  104692. Identifiers.SecurityContext = {
  104693. name: 'SecurityContext',
  104694. moduleName: CORE,
  104695. };
  104696. Identifiers.LOCALE_ID = { name: 'LOCALE_ID', moduleName: CORE };
  104697. Identifiers.TRANSLATIONS_FORMAT = {
  104698. name: 'TRANSLATIONS_FORMAT',
  104699. moduleName: CORE,
  104700. };
  104701. Identifiers.inlineInterpolate = {
  104702. name: 'ɵinlineInterpolate',
  104703. moduleName: CORE,
  104704. };
  104705. Identifiers.interpolate = { name: 'ɵinterpolate', moduleName: CORE };
  104706. Identifiers.EMPTY_ARRAY = { name: 'ɵEMPTY_ARRAY', moduleName: CORE };
  104707. Identifiers.EMPTY_MAP = { name: 'ɵEMPTY_MAP', moduleName: CORE };
  104708. Identifiers.Renderer = { name: 'Renderer', moduleName: CORE };
  104709. Identifiers.viewDef = { name: 'ɵvid', moduleName: CORE };
  104710. Identifiers.elementDef = { name: 'ɵeld', moduleName: CORE };
  104711. Identifiers.anchorDef = { name: 'ɵand', moduleName: CORE };
  104712. Identifiers.textDef = { name: 'ɵted', moduleName: CORE };
  104713. Identifiers.directiveDef = { name: 'ɵdid', moduleName: CORE };
  104714. Identifiers.providerDef = { name: 'ɵprd', moduleName: CORE };
  104715. Identifiers.queryDef = { name: 'ɵqud', moduleName: CORE };
  104716. Identifiers.pureArrayDef = { name: 'ɵpad', moduleName: CORE };
  104717. Identifiers.pureObjectDef = { name: 'ɵpod', moduleName: CORE };
  104718. Identifiers.purePipeDef = { name: 'ɵppd', moduleName: CORE };
  104719. Identifiers.pipeDef = { name: 'ɵpid', moduleName: CORE };
  104720. Identifiers.nodeValue = { name: 'ɵnov', moduleName: CORE };
  104721. Identifiers.ngContentDef = { name: 'ɵncd', moduleName: CORE };
  104722. Identifiers.unwrapValue = { name: 'ɵunv', moduleName: CORE };
  104723. Identifiers.createRendererType2 = { name: 'ɵcrt', moduleName: CORE };
  104724. // type only
  104725. Identifiers.RendererType2 = {
  104726. name: 'RendererType2',
  104727. moduleName: CORE,
  104728. };
  104729. // type only
  104730. Identifiers.ViewDefinition = {
  104731. name: 'ɵViewDefinition',
  104732. moduleName: CORE,
  104733. };
  104734. Identifiers.createComponentFactory = { name: 'ɵccf', moduleName: CORE };
  104735. return Identifiers;
  104736. }());
  104737. /**
  104738. * @param {?} reference
  104739. * @return {?}
  104740. */
  104741. function createTokenForReference(reference) {
  104742. return { identifier: { reference: reference } };
  104743. }
  104744. /**
  104745. * @param {?} reflector
  104746. * @param {?} reference
  104747. * @return {?}
  104748. */
  104749. function createTokenForExternalReference(reflector, reference) {
  104750. return createTokenForReference(reflector.resolveExternalReference(reference));
  104751. }
  104752. /**
  104753. * @fileoverview added by tsickle
  104754. * @suppress {checkTypes} checked by tsc
  104755. */
  104756. /**
  104757. * @license
  104758. * Copyright Google Inc. All Rights Reserved.
  104759. *
  104760. * Use of this source code is governed by an MIT-style license that can be
  104761. * found in the LICENSE file at https://angular.io/license
  104762. */
  104763. /** @enum {number} */
  104764. var LifecycleHooks = {
  104765. OnInit: 0,
  104766. OnDestroy: 1,
  104767. DoCheck: 2,
  104768. OnChanges: 3,
  104769. AfterContentInit: 4,
  104770. AfterContentChecked: 5,
  104771. AfterViewInit: 6,
  104772. AfterViewChecked: 7,
  104773. };
  104774. LifecycleHooks[LifecycleHooks.OnInit] = "OnInit";
  104775. LifecycleHooks[LifecycleHooks.OnDestroy] = "OnDestroy";
  104776. LifecycleHooks[LifecycleHooks.DoCheck] = "DoCheck";
  104777. LifecycleHooks[LifecycleHooks.OnChanges] = "OnChanges";
  104778. LifecycleHooks[LifecycleHooks.AfterContentInit] = "AfterContentInit";
  104779. LifecycleHooks[LifecycleHooks.AfterContentChecked] = "AfterContentChecked";
  104780. LifecycleHooks[LifecycleHooks.AfterViewInit] = "AfterViewInit";
  104781. LifecycleHooks[LifecycleHooks.AfterViewChecked] = "AfterViewChecked";
  104782. var LIFECYCLE_HOOKS_VALUES = [
  104783. LifecycleHooks.OnInit, LifecycleHooks.OnDestroy, LifecycleHooks.DoCheck, LifecycleHooks.OnChanges,
  104784. LifecycleHooks.AfterContentInit, LifecycleHooks.AfterContentChecked, LifecycleHooks.AfterViewInit,
  104785. LifecycleHooks.AfterViewChecked
  104786. ];
  104787. /**
  104788. * @param {?} reflector
  104789. * @param {?} hook
  104790. * @param {?} token
  104791. * @return {?}
  104792. */
  104793. function hasLifecycleHook(reflector, hook, token) {
  104794. return reflector.hasLifecycleHook(token, getHookName(hook));
  104795. }
  104796. /**
  104797. * @param {?} reflector
  104798. * @param {?} token
  104799. * @return {?}
  104800. */
  104801. function getAllLifecycleHooks(reflector, token) {
  104802. return LIFECYCLE_HOOKS_VALUES.filter(function (hook) { return hasLifecycleHook(reflector, hook, token); });
  104803. }
  104804. /**
  104805. * @param {?} hook
  104806. * @return {?}
  104807. */
  104808. function getHookName(hook) {
  104809. switch (hook) {
  104810. case LifecycleHooks.OnInit:
  104811. return 'ngOnInit';
  104812. case LifecycleHooks.OnDestroy:
  104813. return 'ngOnDestroy';
  104814. case LifecycleHooks.DoCheck:
  104815. return 'ngDoCheck';
  104816. case LifecycleHooks.OnChanges:
  104817. return 'ngOnChanges';
  104818. case LifecycleHooks.AfterContentInit:
  104819. return 'ngAfterContentInit';
  104820. case LifecycleHooks.AfterContentChecked:
  104821. return 'ngAfterContentChecked';
  104822. case LifecycleHooks.AfterViewInit:
  104823. return 'ngAfterViewInit';
  104824. case LifecycleHooks.AfterViewChecked:
  104825. return 'ngAfterViewChecked';
  104826. }
  104827. }
  104828. /**
  104829. * @fileoverview added by tsickle
  104830. * @suppress {checkTypes} checked by tsc
  104831. */
  104832. /**
  104833. * @license
  104834. * Copyright Google Inc. All Rights Reserved.
  104835. *
  104836. * Use of this source code is governed by an MIT-style license that can be
  104837. * found in the LICENSE file at https://angular.io/license
  104838. */
  104839. var _SELECTOR_REGEXP = new RegExp('(\\:not\\()|' + //":not("
  104840. '([-\\w]+)|' + // "tag"
  104841. '(?:\\.([-\\w]+))|' + // ".class"
  104842. '(?:\\[([-.\\w*]+)(?:=([\"\']?)([^\\]\"\']*)\\5)?\\])|' + // "[name]", "[name=value]",
  104843. '(\\))|' + // ")"
  104844. '(\\s*,\\s*)', // ","
  104845. 'g');
  104846. /**
  104847. * A css selector contains an element name,
  104848. * css classes and attribute/value pairs with the purpose
  104849. * of selecting subsets out of them.
  104850. */
  104851. var CssSelector = /** @class */ (function () {
  104852. function CssSelector() {
  104853. this.element = null;
  104854. this.classNames = [];
  104855. this.attrs = [];
  104856. this.notSelectors = [];
  104857. }
  104858. /**
  104859. * @param {?} selector
  104860. * @return {?}
  104861. */
  104862. CssSelector.parse = /**
  104863. * @param {?} selector
  104864. * @return {?}
  104865. */
  104866. function (selector) {
  104867. var /** @type {?} */ results = [];
  104868. var /** @type {?} */ _addResult = function (res, cssSel) {
  104869. if (cssSel.notSelectors.length > 0 && !cssSel.element && cssSel.classNames.length == 0 &&
  104870. cssSel.attrs.length == 0) {
  104871. cssSel.element = '*';
  104872. }
  104873. res.push(cssSel);
  104874. };
  104875. var /** @type {?} */ cssSelector = new CssSelector();
  104876. var /** @type {?} */ match;
  104877. var /** @type {?} */ current = cssSelector;
  104878. var /** @type {?} */ inNot = false;
  104879. _SELECTOR_REGEXP.lastIndex = 0;
  104880. while (match = _SELECTOR_REGEXP.exec(selector)) {
  104881. if (match[1]) {
  104882. if (inNot) {
  104883. throw new Error('Nesting :not is not allowed in a selector');
  104884. }
  104885. inNot = true;
  104886. current = new CssSelector();
  104887. cssSelector.notSelectors.push(current);
  104888. }
  104889. if (match[2]) {
  104890. current.setElement(match[2]);
  104891. }
  104892. if (match[3]) {
  104893. current.addClassName(match[3]);
  104894. }
  104895. if (match[4]) {
  104896. current.addAttribute(match[4], match[6]);
  104897. }
  104898. if (match[7]) {
  104899. inNot = false;
  104900. current = cssSelector;
  104901. }
  104902. if (match[8]) {
  104903. if (inNot) {
  104904. throw new Error('Multiple selectors in :not are not supported');
  104905. }
  104906. _addResult(results, cssSelector);
  104907. cssSelector = current = new CssSelector();
  104908. }
  104909. }
  104910. _addResult(results, cssSelector);
  104911. return results;
  104912. };
  104913. /**
  104914. * @return {?}
  104915. */
  104916. CssSelector.prototype.isElementSelector = /**
  104917. * @return {?}
  104918. */
  104919. function () {
  104920. return this.hasElementSelector() && this.classNames.length == 0 && this.attrs.length == 0 &&
  104921. this.notSelectors.length === 0;
  104922. };
  104923. /**
  104924. * @return {?}
  104925. */
  104926. CssSelector.prototype.hasElementSelector = /**
  104927. * @return {?}
  104928. */
  104929. function () { return !!this.element; };
  104930. /**
  104931. * @param {?=} element
  104932. * @return {?}
  104933. */
  104934. CssSelector.prototype.setElement = /**
  104935. * @param {?=} element
  104936. * @return {?}
  104937. */
  104938. function (element) {
  104939. if (element === void 0) { element = null; }
  104940. this.element = element;
  104941. };
  104942. /** Gets a template string for an element that matches the selector. */
  104943. /**
  104944. * Gets a template string for an element that matches the selector.
  104945. * @return {?}
  104946. */
  104947. CssSelector.prototype.getMatchingElementTemplate = /**
  104948. * Gets a template string for an element that matches the selector.
  104949. * @return {?}
  104950. */
  104951. function () {
  104952. var /** @type {?} */ tagName = this.element || 'div';
  104953. var /** @type {?} */ classAttr = this.classNames.length > 0 ? " class=\"" + this.classNames.join(' ') + "\"" : '';
  104954. var /** @type {?} */ attrs = '';
  104955. for (var /** @type {?} */ i = 0; i < this.attrs.length; i += 2) {
  104956. var /** @type {?} */ attrName = this.attrs[i];
  104957. var /** @type {?} */ attrValue = this.attrs[i + 1] !== '' ? "=\"" + this.attrs[i + 1] + "\"" : '';
  104958. attrs += " " + attrName + attrValue;
  104959. }
  104960. return getHtmlTagDefinition(tagName).isVoid ? "<" + tagName + classAttr + attrs + "/>" :
  104961. "<" + tagName + classAttr + attrs + "></" + tagName + ">";
  104962. };
  104963. /**
  104964. * @param {?} name
  104965. * @param {?=} value
  104966. * @return {?}
  104967. */
  104968. CssSelector.prototype.addAttribute = /**
  104969. * @param {?} name
  104970. * @param {?=} value
  104971. * @return {?}
  104972. */
  104973. function (name, value) {
  104974. if (value === void 0) { value = ''; }
  104975. this.attrs.push(name, value && value.toLowerCase() || '');
  104976. };
  104977. /**
  104978. * @param {?} name
  104979. * @return {?}
  104980. */
  104981. CssSelector.prototype.addClassName = /**
  104982. * @param {?} name
  104983. * @return {?}
  104984. */
  104985. function (name) { this.classNames.push(name.toLowerCase()); };
  104986. /**
  104987. * @return {?}
  104988. */
  104989. CssSelector.prototype.toString = /**
  104990. * @return {?}
  104991. */
  104992. function () {
  104993. var /** @type {?} */ res = this.element || '';
  104994. if (this.classNames) {
  104995. this.classNames.forEach(function (klass) { return res += "." + klass; });
  104996. }
  104997. if (this.attrs) {
  104998. for (var /** @type {?} */ i = 0; i < this.attrs.length; i += 2) {
  104999. var /** @type {?} */ name_1 = this.attrs[i];
  105000. var /** @type {?} */ value = this.attrs[i + 1];
  105001. res += "[" + name_1 + (value ? '=' + value : '') + "]";
  105002. }
  105003. }
  105004. this.notSelectors.forEach(function (notSelector) { return res += ":not(" + notSelector + ")"; });
  105005. return res;
  105006. };
  105007. return CssSelector;
  105008. }());
  105009. /**
  105010. * Reads a list of CssSelectors and allows to calculate which ones
  105011. * are contained in a given CssSelector.
  105012. */
  105013. var SelectorMatcher = /** @class */ (function () {
  105014. function SelectorMatcher() {
  105015. this._elementMap = new Map();
  105016. this._elementPartialMap = new Map();
  105017. this._classMap = new Map();
  105018. this._classPartialMap = new Map();
  105019. this._attrValueMap = new Map();
  105020. this._attrValuePartialMap = new Map();
  105021. this._listContexts = [];
  105022. }
  105023. /**
  105024. * @param {?} notSelectors
  105025. * @return {?}
  105026. */
  105027. SelectorMatcher.createNotMatcher = /**
  105028. * @param {?} notSelectors
  105029. * @return {?}
  105030. */
  105031. function (notSelectors) {
  105032. var /** @type {?} */ notMatcher = new SelectorMatcher();
  105033. notMatcher.addSelectables(notSelectors, null);
  105034. return notMatcher;
  105035. };
  105036. /**
  105037. * @param {?} cssSelectors
  105038. * @param {?=} callbackCtxt
  105039. * @return {?}
  105040. */
  105041. SelectorMatcher.prototype.addSelectables = /**
  105042. * @param {?} cssSelectors
  105043. * @param {?=} callbackCtxt
  105044. * @return {?}
  105045. */
  105046. function (cssSelectors, callbackCtxt) {
  105047. var /** @type {?} */ listContext = /** @type {?} */ ((null));
  105048. if (cssSelectors.length > 1) {
  105049. listContext = new SelectorListContext(cssSelectors);
  105050. this._listContexts.push(listContext);
  105051. }
  105052. for (var /** @type {?} */ i = 0; i < cssSelectors.length; i++) {
  105053. this._addSelectable(cssSelectors[i], callbackCtxt, listContext);
  105054. }
  105055. };
  105056. /**
  105057. * Add an object that can be found later on by calling `match`.
  105058. * @param {?} cssSelector A css selector
  105059. * @param {?} callbackCtxt An opaque object that will be given to the callback of the `match` function
  105060. * @param {?} listContext
  105061. * @return {?}
  105062. */
  105063. SelectorMatcher.prototype._addSelectable = /**
  105064. * Add an object that can be found later on by calling `match`.
  105065. * @param {?} cssSelector A css selector
  105066. * @param {?} callbackCtxt An opaque object that will be given to the callback of the `match` function
  105067. * @param {?} listContext
  105068. * @return {?}
  105069. */
  105070. function (cssSelector, callbackCtxt, listContext) {
  105071. var /** @type {?} */ matcher = this;
  105072. var /** @type {?} */ element = cssSelector.element;
  105073. var /** @type {?} */ classNames = cssSelector.classNames;
  105074. var /** @type {?} */ attrs = cssSelector.attrs;
  105075. var /** @type {?} */ selectable = new SelectorContext(cssSelector, callbackCtxt, listContext);
  105076. if (element) {
  105077. var /** @type {?} */ isTerminal = attrs.length === 0 && classNames.length === 0;
  105078. if (isTerminal) {
  105079. this._addTerminal(matcher._elementMap, element, selectable);
  105080. }
  105081. else {
  105082. matcher = this._addPartial(matcher._elementPartialMap, element);
  105083. }
  105084. }
  105085. if (classNames) {
  105086. for (var /** @type {?} */ i = 0; i < classNames.length; i++) {
  105087. var /** @type {?} */ isTerminal = attrs.length === 0 && i === classNames.length - 1;
  105088. var /** @type {?} */ className = classNames[i];
  105089. if (isTerminal) {
  105090. this._addTerminal(matcher._classMap, className, selectable);
  105091. }
  105092. else {
  105093. matcher = this._addPartial(matcher._classPartialMap, className);
  105094. }
  105095. }
  105096. }
  105097. if (attrs) {
  105098. for (var /** @type {?} */ i = 0; i < attrs.length; i += 2) {
  105099. var /** @type {?} */ isTerminal = i === attrs.length - 2;
  105100. var /** @type {?} */ name_2 = attrs[i];
  105101. var /** @type {?} */ value = attrs[i + 1];
  105102. if (isTerminal) {
  105103. var /** @type {?} */ terminalMap = matcher._attrValueMap;
  105104. var /** @type {?} */ terminalValuesMap = terminalMap.get(name_2);
  105105. if (!terminalValuesMap) {
  105106. terminalValuesMap = new Map();
  105107. terminalMap.set(name_2, terminalValuesMap);
  105108. }
  105109. this._addTerminal(terminalValuesMap, value, selectable);
  105110. }
  105111. else {
  105112. var /** @type {?} */ partialMap = matcher._attrValuePartialMap;
  105113. var /** @type {?} */ partialValuesMap = partialMap.get(name_2);
  105114. if (!partialValuesMap) {
  105115. partialValuesMap = new Map();
  105116. partialMap.set(name_2, partialValuesMap);
  105117. }
  105118. matcher = this._addPartial(partialValuesMap, value);
  105119. }
  105120. }
  105121. }
  105122. };
  105123. /**
  105124. * @param {?} map
  105125. * @param {?} name
  105126. * @param {?} selectable
  105127. * @return {?}
  105128. */
  105129. SelectorMatcher.prototype._addTerminal = /**
  105130. * @param {?} map
  105131. * @param {?} name
  105132. * @param {?} selectable
  105133. * @return {?}
  105134. */
  105135. function (map, name, selectable) {
  105136. var /** @type {?} */ terminalList = map.get(name);
  105137. if (!terminalList) {
  105138. terminalList = [];
  105139. map.set(name, terminalList);
  105140. }
  105141. terminalList.push(selectable);
  105142. };
  105143. /**
  105144. * @param {?} map
  105145. * @param {?} name
  105146. * @return {?}
  105147. */
  105148. SelectorMatcher.prototype._addPartial = /**
  105149. * @param {?} map
  105150. * @param {?} name
  105151. * @return {?}
  105152. */
  105153. function (map, name) {
  105154. var /** @type {?} */ matcher = map.get(name);
  105155. if (!matcher) {
  105156. matcher = new SelectorMatcher();
  105157. map.set(name, matcher);
  105158. }
  105159. return matcher;
  105160. };
  105161. /**
  105162. * Find the objects that have been added via `addSelectable`
  105163. * whose css selector is contained in the given css selector.
  105164. * @param cssSelector A css selector
  105165. * @param matchedCallback This callback will be called with the object handed into `addSelectable`
  105166. * @return boolean true if a match was found
  105167. */
  105168. /**
  105169. * Find the objects that have been added via `addSelectable`
  105170. * whose css selector is contained in the given css selector.
  105171. * @param {?} cssSelector A css selector
  105172. * @param {?} matchedCallback This callback will be called with the object handed into `addSelectable`
  105173. * @return {?} boolean true if a match was found
  105174. */
  105175. SelectorMatcher.prototype.match = /**
  105176. * Find the objects that have been added via `addSelectable`
  105177. * whose css selector is contained in the given css selector.
  105178. * @param {?} cssSelector A css selector
  105179. * @param {?} matchedCallback This callback will be called with the object handed into `addSelectable`
  105180. * @return {?} boolean true if a match was found
  105181. */
  105182. function (cssSelector, matchedCallback) {
  105183. var /** @type {?} */ result = false;
  105184. var /** @type {?} */ element = /** @type {?} */ ((cssSelector.element));
  105185. var /** @type {?} */ classNames = cssSelector.classNames;
  105186. var /** @type {?} */ attrs = cssSelector.attrs;
  105187. for (var /** @type {?} */ i = 0; i < this._listContexts.length; i++) {
  105188. this._listContexts[i].alreadyMatched = false;
  105189. }
  105190. result = this._matchTerminal(this._elementMap, element, cssSelector, matchedCallback) || result;
  105191. result = this._matchPartial(this._elementPartialMap, element, cssSelector, matchedCallback) ||
  105192. result;
  105193. if (classNames) {
  105194. for (var /** @type {?} */ i = 0; i < classNames.length; i++) {
  105195. var /** @type {?} */ className = classNames[i];
  105196. result =
  105197. this._matchTerminal(this._classMap, className, cssSelector, matchedCallback) || result;
  105198. result =
  105199. this._matchPartial(this._classPartialMap, className, cssSelector, matchedCallback) ||
  105200. result;
  105201. }
  105202. }
  105203. if (attrs) {
  105204. for (var /** @type {?} */ i = 0; i < attrs.length; i += 2) {
  105205. var /** @type {?} */ name_3 = attrs[i];
  105206. var /** @type {?} */ value = attrs[i + 1];
  105207. var /** @type {?} */ terminalValuesMap = /** @type {?} */ ((this._attrValueMap.get(name_3)));
  105208. if (value) {
  105209. result =
  105210. this._matchTerminal(terminalValuesMap, '', cssSelector, matchedCallback) || result;
  105211. }
  105212. result =
  105213. this._matchTerminal(terminalValuesMap, value, cssSelector, matchedCallback) || result;
  105214. var /** @type {?} */ partialValuesMap = /** @type {?} */ ((this._attrValuePartialMap.get(name_3)));
  105215. if (value) {
  105216. result = this._matchPartial(partialValuesMap, '', cssSelector, matchedCallback) || result;
  105217. }
  105218. result =
  105219. this._matchPartial(partialValuesMap, value, cssSelector, matchedCallback) || result;
  105220. }
  105221. }
  105222. return result;
  105223. };
  105224. /** @internal */
  105225. /**
  105226. * \@internal
  105227. * @param {?} map
  105228. * @param {?} name
  105229. * @param {?} cssSelector
  105230. * @param {?} matchedCallback
  105231. * @return {?}
  105232. */
  105233. SelectorMatcher.prototype._matchTerminal = /**
  105234. * \@internal
  105235. * @param {?} map
  105236. * @param {?} name
  105237. * @param {?} cssSelector
  105238. * @param {?} matchedCallback
  105239. * @return {?}
  105240. */
  105241. function (map, name, cssSelector, matchedCallback) {
  105242. if (!map || typeof name !== 'string') {
  105243. return false;
  105244. }
  105245. var /** @type {?} */ selectables = map.get(name) || [];
  105246. var /** @type {?} */ starSelectables = /** @type {?} */ ((map.get('*')));
  105247. if (starSelectables) {
  105248. selectables = selectables.concat(starSelectables);
  105249. }
  105250. if (selectables.length === 0) {
  105251. return false;
  105252. }
  105253. var /** @type {?} */ selectable;
  105254. var /** @type {?} */ result = false;
  105255. for (var /** @type {?} */ i = 0; i < selectables.length; i++) {
  105256. selectable = selectables[i];
  105257. result = selectable.finalize(cssSelector, matchedCallback) || result;
  105258. }
  105259. return result;
  105260. };
  105261. /** @internal */
  105262. /**
  105263. * \@internal
  105264. * @param {?} map
  105265. * @param {?} name
  105266. * @param {?} cssSelector
  105267. * @param {?} matchedCallback
  105268. * @return {?}
  105269. */
  105270. SelectorMatcher.prototype._matchPartial = /**
  105271. * \@internal
  105272. * @param {?} map
  105273. * @param {?} name
  105274. * @param {?} cssSelector
  105275. * @param {?} matchedCallback
  105276. * @return {?}
  105277. */
  105278. function (map, name, cssSelector, matchedCallback) {
  105279. if (!map || typeof name !== 'string') {
  105280. return false;
  105281. }
  105282. var /** @type {?} */ nestedSelector = map.get(name);
  105283. if (!nestedSelector) {
  105284. return false;
  105285. }
  105286. // TODO(perf): get rid of recursion and measure again
  105287. // TODO(perf): don't pass the whole selector into the recursion,
  105288. // but only the not processed parts
  105289. return nestedSelector.match(cssSelector, matchedCallback);
  105290. };
  105291. return SelectorMatcher;
  105292. }());
  105293. var SelectorListContext = /** @class */ (function () {
  105294. function SelectorListContext(selectors) {
  105295. this.selectors = selectors;
  105296. this.alreadyMatched = false;
  105297. }
  105298. return SelectorListContext;
  105299. }());
  105300. var SelectorContext = /** @class */ (function () {
  105301. function SelectorContext(selector, cbContext, listContext) {
  105302. this.selector = selector;
  105303. this.cbContext = cbContext;
  105304. this.listContext = listContext;
  105305. this.notSelectors = selector.notSelectors;
  105306. }
  105307. /**
  105308. * @param {?} cssSelector
  105309. * @param {?} callback
  105310. * @return {?}
  105311. */
  105312. SelectorContext.prototype.finalize = /**
  105313. * @param {?} cssSelector
  105314. * @param {?} callback
  105315. * @return {?}
  105316. */
  105317. function (cssSelector, callback) {
  105318. var /** @type {?} */ result = true;
  105319. if (this.notSelectors.length > 0 && (!this.listContext || !this.listContext.alreadyMatched)) {
  105320. var /** @type {?} */ notMatcher = SelectorMatcher.createNotMatcher(this.notSelectors);
  105321. result = !notMatcher.match(cssSelector, null);
  105322. }
  105323. if (result && callback && (!this.listContext || !this.listContext.alreadyMatched)) {
  105324. if (this.listContext) {
  105325. this.listContext.alreadyMatched = true;
  105326. }
  105327. callback(this.selector, this.cbContext);
  105328. }
  105329. return result;
  105330. };
  105331. return SelectorContext;
  105332. }());
  105333. /**
  105334. * @fileoverview added by tsickle
  105335. * @suppress {checkTypes} checked by tsc
  105336. */
  105337. /**
  105338. * @license
  105339. * Copyright Google Inc. All Rights Reserved.
  105340. *
  105341. * Use of this source code is governed by an MIT-style license that can be
  105342. * found in the LICENSE file at https://angular.io/license
  105343. */
  105344. var ERROR_COMPONENT_TYPE = 'ngComponentType';
  105345. var CompileMetadataResolver = /** @class */ (function () {
  105346. function CompileMetadataResolver(_config, _htmlParser, _ngModuleResolver, _directiveResolver, _pipeResolver, _summaryResolver, _schemaRegistry, _directiveNormalizer, _console, _staticSymbolCache, _reflector, _errorCollector) {
  105347. this._config = _config;
  105348. this._htmlParser = _htmlParser;
  105349. this._ngModuleResolver = _ngModuleResolver;
  105350. this._directiveResolver = _directiveResolver;
  105351. this._pipeResolver = _pipeResolver;
  105352. this._summaryResolver = _summaryResolver;
  105353. this._schemaRegistry = _schemaRegistry;
  105354. this._directiveNormalizer = _directiveNormalizer;
  105355. this._console = _console;
  105356. this._staticSymbolCache = _staticSymbolCache;
  105357. this._reflector = _reflector;
  105358. this._errorCollector = _errorCollector;
  105359. this._nonNormalizedDirectiveCache = new Map();
  105360. this._directiveCache = new Map();
  105361. this._summaryCache = new Map();
  105362. this._pipeCache = new Map();
  105363. this._ngModuleCache = new Map();
  105364. this._ngModuleOfTypes = new Map();
  105365. }
  105366. /**
  105367. * @return {?}
  105368. */
  105369. CompileMetadataResolver.prototype.getReflector = /**
  105370. * @return {?}
  105371. */
  105372. function () { return this._reflector; };
  105373. /**
  105374. * @param {?} type
  105375. * @return {?}
  105376. */
  105377. CompileMetadataResolver.prototype.clearCacheFor = /**
  105378. * @param {?} type
  105379. * @return {?}
  105380. */
  105381. function (type) {
  105382. var /** @type {?} */ dirMeta = this._directiveCache.get(type);
  105383. this._directiveCache.delete(type);
  105384. this._nonNormalizedDirectiveCache.delete(type);
  105385. this._summaryCache.delete(type);
  105386. this._pipeCache.delete(type);
  105387. this._ngModuleOfTypes.delete(type);
  105388. // Clear all of the NgModule as they contain transitive information!
  105389. this._ngModuleCache.clear();
  105390. if (dirMeta) {
  105391. this._directiveNormalizer.clearCacheFor(dirMeta);
  105392. }
  105393. };
  105394. /**
  105395. * @return {?}
  105396. */
  105397. CompileMetadataResolver.prototype.clearCache = /**
  105398. * @return {?}
  105399. */
  105400. function () {
  105401. this._directiveCache.clear();
  105402. this._nonNormalizedDirectiveCache.clear();
  105403. this._summaryCache.clear();
  105404. this._pipeCache.clear();
  105405. this._ngModuleCache.clear();
  105406. this._ngModuleOfTypes.clear();
  105407. this._directiveNormalizer.clearCache();
  105408. };
  105409. /**
  105410. * @param {?} baseType
  105411. * @param {?} name
  105412. * @return {?}
  105413. */
  105414. CompileMetadataResolver.prototype._createProxyClass = /**
  105415. * @param {?} baseType
  105416. * @param {?} name
  105417. * @return {?}
  105418. */
  105419. function (baseType, name) {
  105420. var /** @type {?} */ delegate = null;
  105421. var /** @type {?} */ proxyClass = /** @type {?} */ (function () {
  105422. if (!delegate) {
  105423. throw new Error("Illegal state: Class " + name + " for type " + stringify(baseType) + " is not compiled yet!");
  105424. }
  105425. return delegate.apply(this, arguments);
  105426. });
  105427. proxyClass.setDelegate = function (d) {
  105428. delegate = d;
  105429. (/** @type {?} */ (proxyClass)).prototype = d.prototype;
  105430. };
  105431. // Make stringify work correctly
  105432. (/** @type {?} */ (proxyClass)).overriddenName = name;
  105433. return proxyClass;
  105434. };
  105435. /**
  105436. * @param {?} dirType
  105437. * @param {?} name
  105438. * @return {?}
  105439. */
  105440. CompileMetadataResolver.prototype.getGeneratedClass = /**
  105441. * @param {?} dirType
  105442. * @param {?} name
  105443. * @return {?}
  105444. */
  105445. function (dirType, name) {
  105446. if (dirType instanceof StaticSymbol) {
  105447. return this._staticSymbolCache.get(ngfactoryFilePath(dirType.filePath), name);
  105448. }
  105449. else {
  105450. return this._createProxyClass(dirType, name);
  105451. }
  105452. };
  105453. /**
  105454. * @param {?} dirType
  105455. * @return {?}
  105456. */
  105457. CompileMetadataResolver.prototype.getComponentViewClass = /**
  105458. * @param {?} dirType
  105459. * @return {?}
  105460. */
  105461. function (dirType) {
  105462. return this.getGeneratedClass(dirType, viewClassName(dirType, 0));
  105463. };
  105464. /**
  105465. * @param {?} dirType
  105466. * @return {?}
  105467. */
  105468. CompileMetadataResolver.prototype.getHostComponentViewClass = /**
  105469. * @param {?} dirType
  105470. * @return {?}
  105471. */
  105472. function (dirType) {
  105473. return this.getGeneratedClass(dirType, hostViewClassName(dirType));
  105474. };
  105475. /**
  105476. * @param {?} dirType
  105477. * @return {?}
  105478. */
  105479. CompileMetadataResolver.prototype.getHostComponentType = /**
  105480. * @param {?} dirType
  105481. * @return {?}
  105482. */
  105483. function (dirType) {
  105484. var /** @type {?} */ name = identifierName({ reference: dirType }) + "_Host";
  105485. if (dirType instanceof StaticSymbol) {
  105486. return this._staticSymbolCache.get(dirType.filePath, name);
  105487. }
  105488. else {
  105489. var /** @type {?} */ HostClass = /** @type {?} */ (function HostClass() { });
  105490. HostClass.overriddenName = name;
  105491. return HostClass;
  105492. }
  105493. };
  105494. /**
  105495. * @param {?} dirType
  105496. * @return {?}
  105497. */
  105498. CompileMetadataResolver.prototype.getRendererType = /**
  105499. * @param {?} dirType
  105500. * @return {?}
  105501. */
  105502. function (dirType) {
  105503. if (dirType instanceof StaticSymbol) {
  105504. return this._staticSymbolCache.get(ngfactoryFilePath(dirType.filePath), rendererTypeName(dirType));
  105505. }
  105506. else {
  105507. // returning an object as proxy,
  105508. // that we fill later during runtime compilation.
  105509. return /** @type {?} */ ({});
  105510. }
  105511. };
  105512. /**
  105513. * @param {?} selector
  105514. * @param {?} dirType
  105515. * @param {?} inputs
  105516. * @param {?} outputs
  105517. * @return {?}
  105518. */
  105519. CompileMetadataResolver.prototype.getComponentFactory = /**
  105520. * @param {?} selector
  105521. * @param {?} dirType
  105522. * @param {?} inputs
  105523. * @param {?} outputs
  105524. * @return {?}
  105525. */
  105526. function (selector, dirType, inputs, outputs) {
  105527. if (dirType instanceof StaticSymbol) {
  105528. return this._staticSymbolCache.get(ngfactoryFilePath(dirType.filePath), componentFactoryName(dirType));
  105529. }
  105530. else {
  105531. var /** @type {?} */ hostView = this.getHostComponentViewClass(dirType);
  105532. // Note: ngContentSelectors will be filled later once the template is
  105533. // loaded.
  105534. var /** @type {?} */ createComponentFactory = this._reflector.resolveExternalReference(Identifiers.createComponentFactory);
  105535. return createComponentFactory(selector, dirType, /** @type {?} */ (hostView), inputs, outputs, []);
  105536. }
  105537. };
  105538. /**
  105539. * @param {?} factory
  105540. * @param {?} ngContentSelectors
  105541. * @return {?}
  105542. */
  105543. CompileMetadataResolver.prototype.initComponentFactory = /**
  105544. * @param {?} factory
  105545. * @param {?} ngContentSelectors
  105546. * @return {?}
  105547. */
  105548. function (factory, ngContentSelectors) {
  105549. if (!(factory instanceof StaticSymbol)) {
  105550. (_a = (/** @type {?} */ (factory)).ngContentSelectors).push.apply(_a, ngContentSelectors);
  105551. }
  105552. var _a;
  105553. };
  105554. /**
  105555. * @param {?} type
  105556. * @param {?} kind
  105557. * @return {?}
  105558. */
  105559. CompileMetadataResolver.prototype._loadSummary = /**
  105560. * @param {?} type
  105561. * @param {?} kind
  105562. * @return {?}
  105563. */
  105564. function (type, kind) {
  105565. var /** @type {?} */ typeSummary = this._summaryCache.get(type);
  105566. if (!typeSummary) {
  105567. var /** @type {?} */ summary = this._summaryResolver.resolveSummary(type);
  105568. typeSummary = summary ? summary.type : null;
  105569. this._summaryCache.set(type, typeSummary || null);
  105570. }
  105571. return typeSummary && typeSummary.summaryKind === kind ? typeSummary : null;
  105572. };
  105573. /**
  105574. * @param {?} compMeta
  105575. * @param {?=} hostViewType
  105576. * @return {?}
  105577. */
  105578. CompileMetadataResolver.prototype.getHostComponentMetadata = /**
  105579. * @param {?} compMeta
  105580. * @param {?=} hostViewType
  105581. * @return {?}
  105582. */
  105583. function (compMeta, hostViewType) {
  105584. var /** @type {?} */ hostType = this.getHostComponentType(compMeta.type.reference);
  105585. if (!hostViewType) {
  105586. hostViewType = this.getHostComponentViewClass(hostType);
  105587. }
  105588. // Note: ! is ok here as this method should only be called with normalized directive
  105589. // metadata, which always fills in the selector.
  105590. var /** @type {?} */ template = CssSelector.parse(/** @type {?} */ ((compMeta.selector)))[0].getMatchingElementTemplate();
  105591. var /** @type {?} */ templateUrl = '';
  105592. var /** @type {?} */ htmlAst = this._htmlParser.parse(template, templateUrl);
  105593. return CompileDirectiveMetadata.create({
  105594. isHost: true,
  105595. type: { reference: hostType, diDeps: [], lifecycleHooks: [] },
  105596. template: new CompileTemplateMetadata({
  105597. encapsulation: ViewEncapsulation.None,
  105598. template: template,
  105599. templateUrl: templateUrl,
  105600. htmlAst: htmlAst,
  105601. styles: [],
  105602. styleUrls: [],
  105603. ngContentSelectors: [],
  105604. animations: [],
  105605. isInline: true,
  105606. externalStylesheets: [],
  105607. interpolation: null,
  105608. preserveWhitespaces: false,
  105609. }),
  105610. exportAs: null,
  105611. changeDetection: ChangeDetectionStrategy.Default,
  105612. inputs: [],
  105613. outputs: [],
  105614. host: {},
  105615. isComponent: true,
  105616. selector: '*',
  105617. providers: [],
  105618. viewProviders: [],
  105619. queries: [],
  105620. guards: {},
  105621. viewQueries: [],
  105622. componentViewType: hostViewType,
  105623. rendererType: /** @type {?} */ ({ id: '__Host__', encapsulation: ViewEncapsulation.None, styles: [], data: {} }),
  105624. entryComponents: [],
  105625. componentFactory: null
  105626. });
  105627. };
  105628. /**
  105629. * @param {?} ngModuleType
  105630. * @param {?} directiveType
  105631. * @param {?} isSync
  105632. * @return {?}
  105633. */
  105634. CompileMetadataResolver.prototype.loadDirectiveMetadata = /**
  105635. * @param {?} ngModuleType
  105636. * @param {?} directiveType
  105637. * @param {?} isSync
  105638. * @return {?}
  105639. */
  105640. function (ngModuleType, directiveType, isSync) {
  105641. var _this = this;
  105642. if (this._directiveCache.has(directiveType)) {
  105643. return null;
  105644. }
  105645. directiveType = resolveForwardRef(directiveType);
  105646. var _a = /** @type {?} */ ((this.getNonNormalizedDirectiveMetadata(directiveType))), annotation = _a.annotation, metadata = _a.metadata;
  105647. var /** @type {?} */ createDirectiveMetadata = function (templateMetadata) {
  105648. var /** @type {?} */ normalizedDirMeta = new CompileDirectiveMetadata({
  105649. isHost: false,
  105650. type: metadata.type,
  105651. isComponent: metadata.isComponent,
  105652. selector: metadata.selector,
  105653. exportAs: metadata.exportAs,
  105654. changeDetection: metadata.changeDetection,
  105655. inputs: metadata.inputs,
  105656. outputs: metadata.outputs,
  105657. hostListeners: metadata.hostListeners,
  105658. hostProperties: metadata.hostProperties,
  105659. hostAttributes: metadata.hostAttributes,
  105660. providers: metadata.providers,
  105661. viewProviders: metadata.viewProviders,
  105662. queries: metadata.queries,
  105663. guards: metadata.guards,
  105664. viewQueries: metadata.viewQueries,
  105665. entryComponents: metadata.entryComponents,
  105666. componentViewType: metadata.componentViewType,
  105667. rendererType: metadata.rendererType,
  105668. componentFactory: metadata.componentFactory,
  105669. template: templateMetadata
  105670. });
  105671. if (templateMetadata) {
  105672. _this.initComponentFactory(/** @type {?} */ ((metadata.componentFactory)), templateMetadata.ngContentSelectors);
  105673. }
  105674. _this._directiveCache.set(directiveType, normalizedDirMeta);
  105675. _this._summaryCache.set(directiveType, normalizedDirMeta.toSummary());
  105676. return null;
  105677. };
  105678. if (metadata.isComponent) {
  105679. var /** @type {?} */ template = /** @type {?} */ ((metadata.template));
  105680. var /** @type {?} */ templateMeta = this._directiveNormalizer.normalizeTemplate({
  105681. ngModuleType: ngModuleType,
  105682. componentType: directiveType,
  105683. moduleUrl: this._reflector.componentModuleUrl(directiveType, annotation),
  105684. encapsulation: template.encapsulation,
  105685. template: template.template,
  105686. templateUrl: template.templateUrl,
  105687. styles: template.styles,
  105688. styleUrls: template.styleUrls,
  105689. animations: template.animations,
  105690. interpolation: template.interpolation,
  105691. preserveWhitespaces: template.preserveWhitespaces
  105692. });
  105693. if (isPromise(templateMeta) && isSync) {
  105694. this._reportError(componentStillLoadingError(directiveType), directiveType);
  105695. return null;
  105696. }
  105697. return SyncAsync.then(templateMeta, createDirectiveMetadata);
  105698. }
  105699. else {
  105700. // directive
  105701. createDirectiveMetadata(null);
  105702. return null;
  105703. }
  105704. };
  105705. /**
  105706. * @param {?} directiveType
  105707. * @return {?}
  105708. */
  105709. CompileMetadataResolver.prototype.getNonNormalizedDirectiveMetadata = /**
  105710. * @param {?} directiveType
  105711. * @return {?}
  105712. */
  105713. function (directiveType) {
  105714. var _this = this;
  105715. directiveType = resolveForwardRef(directiveType);
  105716. if (!directiveType) {
  105717. return null;
  105718. }
  105719. var /** @type {?} */ cacheEntry = this._nonNormalizedDirectiveCache.get(directiveType);
  105720. if (cacheEntry) {
  105721. return cacheEntry;
  105722. }
  105723. var /** @type {?} */ dirMeta = this._directiveResolver.resolve(directiveType, false);
  105724. if (!dirMeta) {
  105725. return null;
  105726. }
  105727. var /** @type {?} */ nonNormalizedTemplateMetadata = /** @type {?} */ ((undefined));
  105728. if (createComponent.isTypeOf(dirMeta)) {
  105729. // component
  105730. var /** @type {?} */ compMeta = /** @type {?} */ (dirMeta);
  105731. assertArrayOfStrings('styles', compMeta.styles);
  105732. assertArrayOfStrings('styleUrls', compMeta.styleUrls);
  105733. assertInterpolationSymbols('interpolation', compMeta.interpolation);
  105734. var /** @type {?} */ animations = compMeta.animations;
  105735. nonNormalizedTemplateMetadata = new CompileTemplateMetadata({
  105736. encapsulation: noUndefined(compMeta.encapsulation),
  105737. template: noUndefined(compMeta.template),
  105738. templateUrl: noUndefined(compMeta.templateUrl),
  105739. htmlAst: null,
  105740. styles: compMeta.styles || [],
  105741. styleUrls: compMeta.styleUrls || [],
  105742. animations: animations || [],
  105743. interpolation: noUndefined(compMeta.interpolation),
  105744. isInline: !!compMeta.template,
  105745. externalStylesheets: [],
  105746. ngContentSelectors: [],
  105747. preserveWhitespaces: noUndefined(dirMeta.preserveWhitespaces),
  105748. });
  105749. }
  105750. var /** @type {?} */ changeDetectionStrategy = /** @type {?} */ ((null));
  105751. var /** @type {?} */ viewProviders = [];
  105752. var /** @type {?} */ entryComponentMetadata = [];
  105753. var /** @type {?} */ selector = dirMeta.selector;
  105754. if (createComponent.isTypeOf(dirMeta)) {
  105755. // Component
  105756. var /** @type {?} */ compMeta = /** @type {?} */ (dirMeta);
  105757. changeDetectionStrategy = /** @type {?} */ ((compMeta.changeDetection));
  105758. if (compMeta.viewProviders) {
  105759. viewProviders = this._getProvidersMetadata(compMeta.viewProviders, entryComponentMetadata, "viewProviders for \"" + stringifyType(directiveType) + "\"", [], directiveType);
  105760. }
  105761. if (compMeta.entryComponents) {
  105762. entryComponentMetadata = flattenAndDedupeArray(compMeta.entryComponents)
  105763. .map(function (type) { return ((_this._getEntryComponentMetadata(type))); })
  105764. .concat(entryComponentMetadata);
  105765. }
  105766. if (!selector) {
  105767. selector = this._schemaRegistry.getDefaultComponentElementName();
  105768. }
  105769. }
  105770. else {
  105771. // Directive
  105772. if (!selector) {
  105773. this._reportError(syntaxError("Directive " + stringifyType(directiveType) + " has no selector, please add it!"), directiveType);
  105774. selector = 'error';
  105775. }
  105776. }
  105777. var /** @type {?} */ providers = [];
  105778. if (dirMeta.providers != null) {
  105779. providers = this._getProvidersMetadata(dirMeta.providers, entryComponentMetadata, "providers for \"" + stringifyType(directiveType) + "\"", [], directiveType);
  105780. }
  105781. var /** @type {?} */ queries = [];
  105782. var /** @type {?} */ viewQueries = [];
  105783. if (dirMeta.queries != null) {
  105784. queries = this._getQueriesMetadata(dirMeta.queries, false, directiveType);
  105785. viewQueries = this._getQueriesMetadata(dirMeta.queries, true, directiveType);
  105786. }
  105787. var /** @type {?} */ metadata = CompileDirectiveMetadata.create({
  105788. isHost: false,
  105789. selector: selector,
  105790. exportAs: noUndefined(dirMeta.exportAs),
  105791. isComponent: !!nonNormalizedTemplateMetadata,
  105792. type: this._getTypeMetadata(directiveType),
  105793. template: nonNormalizedTemplateMetadata,
  105794. changeDetection: changeDetectionStrategy,
  105795. inputs: dirMeta.inputs || [],
  105796. outputs: dirMeta.outputs || [],
  105797. host: dirMeta.host || {},
  105798. providers: providers || [],
  105799. viewProviders: viewProviders || [],
  105800. queries: queries || [],
  105801. guards: dirMeta.guards || {},
  105802. viewQueries: viewQueries || [],
  105803. entryComponents: entryComponentMetadata,
  105804. componentViewType: nonNormalizedTemplateMetadata ? this.getComponentViewClass(directiveType) :
  105805. null,
  105806. rendererType: nonNormalizedTemplateMetadata ? this.getRendererType(directiveType) : null,
  105807. componentFactory: null
  105808. });
  105809. if (nonNormalizedTemplateMetadata) {
  105810. metadata.componentFactory =
  105811. this.getComponentFactory(selector, directiveType, metadata.inputs, metadata.outputs);
  105812. }
  105813. cacheEntry = { metadata: metadata, annotation: dirMeta };
  105814. this._nonNormalizedDirectiveCache.set(directiveType, cacheEntry);
  105815. return cacheEntry;
  105816. };
  105817. /**
  105818. * Gets the metadata for the given directive.
  105819. * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
  105820. */
  105821. /**
  105822. * Gets the metadata for the given directive.
  105823. * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
  105824. * @param {?} directiveType
  105825. * @return {?}
  105826. */
  105827. CompileMetadataResolver.prototype.getDirectiveMetadata = /**
  105828. * Gets the metadata for the given directive.
  105829. * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
  105830. * @param {?} directiveType
  105831. * @return {?}
  105832. */
  105833. function (directiveType) {
  105834. var /** @type {?} */ dirMeta = /** @type {?} */ ((this._directiveCache.get(directiveType)));
  105835. if (!dirMeta) {
  105836. this._reportError(syntaxError("Illegal state: getDirectiveMetadata can only be called after loadNgModuleDirectiveAndPipeMetadata for a module that declares it. Directive " + stringifyType(directiveType) + "."), directiveType);
  105837. }
  105838. return dirMeta;
  105839. };
  105840. /**
  105841. * @param {?} dirType
  105842. * @return {?}
  105843. */
  105844. CompileMetadataResolver.prototype.getDirectiveSummary = /**
  105845. * @param {?} dirType
  105846. * @return {?}
  105847. */
  105848. function (dirType) {
  105849. var /** @type {?} */ dirSummary = /** @type {?} */ (this._loadSummary(dirType, CompileSummaryKind.Directive));
  105850. if (!dirSummary) {
  105851. this._reportError(syntaxError("Illegal state: Could not load the summary for directive " + stringifyType(dirType) + "."), dirType);
  105852. }
  105853. return dirSummary;
  105854. };
  105855. /**
  105856. * @param {?} type
  105857. * @return {?}
  105858. */
  105859. CompileMetadataResolver.prototype.isDirective = /**
  105860. * @param {?} type
  105861. * @return {?}
  105862. */
  105863. function (type) {
  105864. return !!this._loadSummary(type, CompileSummaryKind.Directive) ||
  105865. this._directiveResolver.isDirective(type);
  105866. };
  105867. /**
  105868. * @param {?} type
  105869. * @return {?}
  105870. */
  105871. CompileMetadataResolver.prototype.isPipe = /**
  105872. * @param {?} type
  105873. * @return {?}
  105874. */
  105875. function (type) {
  105876. return !!this._loadSummary(type, CompileSummaryKind.Pipe) ||
  105877. this._pipeResolver.isPipe(type);
  105878. };
  105879. /**
  105880. * @param {?} type
  105881. * @return {?}
  105882. */
  105883. CompileMetadataResolver.prototype.isNgModule = /**
  105884. * @param {?} type
  105885. * @return {?}
  105886. */
  105887. function (type) {
  105888. return !!this._loadSummary(type, CompileSummaryKind.NgModule) ||
  105889. this._ngModuleResolver.isNgModule(type);
  105890. };
  105891. /**
  105892. * @param {?} moduleType
  105893. * @param {?=} alreadyCollecting
  105894. * @return {?}
  105895. */
  105896. CompileMetadataResolver.prototype.getNgModuleSummary = /**
  105897. * @param {?} moduleType
  105898. * @param {?=} alreadyCollecting
  105899. * @return {?}
  105900. */
  105901. function (moduleType, alreadyCollecting) {
  105902. if (alreadyCollecting === void 0) { alreadyCollecting = null; }
  105903. var /** @type {?} */ moduleSummary = /** @type {?} */ (this._loadSummary(moduleType, CompileSummaryKind.NgModule));
  105904. if (!moduleSummary) {
  105905. var /** @type {?} */ moduleMeta = this.getNgModuleMetadata(moduleType, false, alreadyCollecting);
  105906. moduleSummary = moduleMeta ? moduleMeta.toSummary() : null;
  105907. if (moduleSummary) {
  105908. this._summaryCache.set(moduleType, moduleSummary);
  105909. }
  105910. }
  105911. return moduleSummary;
  105912. };
  105913. /**
  105914. * Loads the declared directives and pipes of an NgModule.
  105915. */
  105916. /**
  105917. * Loads the declared directives and pipes of an NgModule.
  105918. * @param {?} moduleType
  105919. * @param {?} isSync
  105920. * @param {?=} throwIfNotFound
  105921. * @return {?}
  105922. */
  105923. CompileMetadataResolver.prototype.loadNgModuleDirectiveAndPipeMetadata = /**
  105924. * Loads the declared directives and pipes of an NgModule.
  105925. * @param {?} moduleType
  105926. * @param {?} isSync
  105927. * @param {?=} throwIfNotFound
  105928. * @return {?}
  105929. */
  105930. function (moduleType, isSync, throwIfNotFound) {
  105931. var _this = this;
  105932. if (throwIfNotFound === void 0) { throwIfNotFound = true; }
  105933. var /** @type {?} */ ngModule = this.getNgModuleMetadata(moduleType, throwIfNotFound);
  105934. var /** @type {?} */ loading = [];
  105935. if (ngModule) {
  105936. ngModule.declaredDirectives.forEach(function (id) {
  105937. var /** @type {?} */ promise = _this.loadDirectiveMetadata(moduleType, id.reference, isSync);
  105938. if (promise) {
  105939. loading.push(promise);
  105940. }
  105941. });
  105942. ngModule.declaredPipes.forEach(function (id) { return _this._loadPipeMetadata(id.reference); });
  105943. }
  105944. return Promise.all(loading);
  105945. };
  105946. /**
  105947. * @param {?} moduleType
  105948. * @param {?=} throwIfNotFound
  105949. * @param {?=} alreadyCollecting
  105950. * @return {?}
  105951. */
  105952. CompileMetadataResolver.prototype.getNgModuleMetadata = /**
  105953. * @param {?} moduleType
  105954. * @param {?=} throwIfNotFound
  105955. * @param {?=} alreadyCollecting
  105956. * @return {?}
  105957. */
  105958. function (moduleType, throwIfNotFound, alreadyCollecting) {
  105959. var _this = this;
  105960. if (throwIfNotFound === void 0) { throwIfNotFound = true; }
  105961. if (alreadyCollecting === void 0) { alreadyCollecting = null; }
  105962. moduleType = resolveForwardRef(moduleType);
  105963. var /** @type {?} */ compileMeta = this._ngModuleCache.get(moduleType);
  105964. if (compileMeta) {
  105965. return compileMeta;
  105966. }
  105967. var /** @type {?} */ meta = this._ngModuleResolver.resolve(moduleType, throwIfNotFound);
  105968. if (!meta) {
  105969. return null;
  105970. }
  105971. var /** @type {?} */ declaredDirectives = [];
  105972. var /** @type {?} */ exportedNonModuleIdentifiers = [];
  105973. var /** @type {?} */ declaredPipes = [];
  105974. var /** @type {?} */ importedModules = [];
  105975. var /** @type {?} */ exportedModules = [];
  105976. var /** @type {?} */ providers = [];
  105977. var /** @type {?} */ entryComponents = [];
  105978. var /** @type {?} */ bootstrapComponents = [];
  105979. var /** @type {?} */ schemas = [];
  105980. if (meta.imports) {
  105981. flattenAndDedupeArray(meta.imports).forEach(function (importedType) {
  105982. var /** @type {?} */ importedModuleType = /** @type {?} */ ((undefined));
  105983. if (isValidType(importedType)) {
  105984. importedModuleType = importedType;
  105985. }
  105986. else if (importedType && importedType.ngModule) {
  105987. var /** @type {?} */ moduleWithProviders = importedType;
  105988. importedModuleType = moduleWithProviders.ngModule;
  105989. if (moduleWithProviders.providers) {
  105990. providers.push.apply(providers, _this._getProvidersMetadata(moduleWithProviders.providers, entryComponents, "provider for the NgModule '" + stringifyType(importedModuleType) + "'", [], importedType));
  105991. }
  105992. }
  105993. if (importedModuleType) {
  105994. if (_this._checkSelfImport(moduleType, importedModuleType))
  105995. return;
  105996. if (!alreadyCollecting)
  105997. alreadyCollecting = new Set();
  105998. if (alreadyCollecting.has(importedModuleType)) {
  105999. _this._reportError(syntaxError(_this._getTypeDescriptor(importedModuleType) + " '" + stringifyType(importedType) + "' is imported recursively by the module '" + stringifyType(moduleType) + "'."), moduleType);
  106000. return;
  106001. }
  106002. alreadyCollecting.add(importedModuleType);
  106003. var /** @type {?} */ importedModuleSummary = _this.getNgModuleSummary(importedModuleType, alreadyCollecting);
  106004. alreadyCollecting.delete(importedModuleType);
  106005. if (!importedModuleSummary) {
  106006. _this._reportError(syntaxError("Unexpected " + _this._getTypeDescriptor(importedType) + " '" + stringifyType(importedType) + "' imported by the module '" + stringifyType(moduleType) + "'. Please add a @NgModule annotation."), moduleType);
  106007. return;
  106008. }
  106009. importedModules.push(importedModuleSummary);
  106010. }
  106011. else {
  106012. _this._reportError(syntaxError("Unexpected value '" + stringifyType(importedType) + "' imported by the module '" + stringifyType(moduleType) + "'"), moduleType);
  106013. return;
  106014. }
  106015. });
  106016. }
  106017. if (meta.exports) {
  106018. flattenAndDedupeArray(meta.exports).forEach(function (exportedType) {
  106019. if (!isValidType(exportedType)) {
  106020. _this._reportError(syntaxError("Unexpected value '" + stringifyType(exportedType) + "' exported by the module '" + stringifyType(moduleType) + "'"), moduleType);
  106021. return;
  106022. }
  106023. if (!alreadyCollecting)
  106024. alreadyCollecting = new Set();
  106025. if (alreadyCollecting.has(exportedType)) {
  106026. _this._reportError(syntaxError(_this._getTypeDescriptor(exportedType) + " '" + stringify(exportedType) + "' is exported recursively by the module '" + stringifyType(moduleType) + "'"), moduleType);
  106027. return;
  106028. }
  106029. alreadyCollecting.add(exportedType);
  106030. var /** @type {?} */ exportedModuleSummary = _this.getNgModuleSummary(exportedType, alreadyCollecting);
  106031. alreadyCollecting.delete(exportedType);
  106032. if (exportedModuleSummary) {
  106033. exportedModules.push(exportedModuleSummary);
  106034. }
  106035. else {
  106036. exportedNonModuleIdentifiers.push(_this._getIdentifierMetadata(exportedType));
  106037. }
  106038. });
  106039. }
  106040. // Note: This will be modified later, so we rely on
  106041. // getting a new instance every time!
  106042. var /** @type {?} */ transitiveModule = this._getTransitiveNgModuleMetadata(importedModules, exportedModules);
  106043. if (meta.declarations) {
  106044. flattenAndDedupeArray(meta.declarations).forEach(function (declaredType) {
  106045. if (!isValidType(declaredType)) {
  106046. _this._reportError(syntaxError("Unexpected value '" + stringifyType(declaredType) + "' declared by the module '" + stringifyType(moduleType) + "'"), moduleType);
  106047. return;
  106048. }
  106049. var /** @type {?} */ declaredIdentifier = _this._getIdentifierMetadata(declaredType);
  106050. if (_this.isDirective(declaredType)) {
  106051. transitiveModule.addDirective(declaredIdentifier);
  106052. declaredDirectives.push(declaredIdentifier);
  106053. _this._addTypeToModule(declaredType, moduleType);
  106054. }
  106055. else if (_this.isPipe(declaredType)) {
  106056. transitiveModule.addPipe(declaredIdentifier);
  106057. transitiveModule.pipes.push(declaredIdentifier);
  106058. declaredPipes.push(declaredIdentifier);
  106059. _this._addTypeToModule(declaredType, moduleType);
  106060. }
  106061. else {
  106062. _this._reportError(syntaxError("Unexpected " + _this._getTypeDescriptor(declaredType) + " '" + stringifyType(declaredType) + "' declared by the module '" + stringifyType(moduleType) + "'. Please add a @Pipe/@Directive/@Component annotation."), moduleType);
  106063. return;
  106064. }
  106065. });
  106066. }
  106067. var /** @type {?} */ exportedDirectives = [];
  106068. var /** @type {?} */ exportedPipes = [];
  106069. exportedNonModuleIdentifiers.forEach(function (exportedId) {
  106070. if (transitiveModule.directivesSet.has(exportedId.reference)) {
  106071. exportedDirectives.push(exportedId);
  106072. transitiveModule.addExportedDirective(exportedId);
  106073. }
  106074. else if (transitiveModule.pipesSet.has(exportedId.reference)) {
  106075. exportedPipes.push(exportedId);
  106076. transitiveModule.addExportedPipe(exportedId);
  106077. }
  106078. else {
  106079. _this._reportError(syntaxError("Can't export " + _this._getTypeDescriptor(exportedId.reference) + " " + stringifyType(exportedId.reference) + " from " + stringifyType(moduleType) + " as it was neither declared nor imported!"), moduleType);
  106080. return;
  106081. }
  106082. });
  106083. // The providers of the module have to go last
  106084. // so that they overwrite any other provider we already added.
  106085. if (meta.providers) {
  106086. providers.push.apply(providers, this._getProvidersMetadata(meta.providers, entryComponents, "provider for the NgModule '" + stringifyType(moduleType) + "'", [], moduleType));
  106087. }
  106088. if (meta.entryComponents) {
  106089. entryComponents.push.apply(entryComponents, flattenAndDedupeArray(meta.entryComponents)
  106090. .map(function (type) { return ((_this._getEntryComponentMetadata(type))); }));
  106091. }
  106092. if (meta.bootstrap) {
  106093. flattenAndDedupeArray(meta.bootstrap).forEach(function (type) {
  106094. if (!isValidType(type)) {
  106095. _this._reportError(syntaxError("Unexpected value '" + stringifyType(type) + "' used in the bootstrap property of module '" + stringifyType(moduleType) + "'"), moduleType);
  106096. return;
  106097. }
  106098. bootstrapComponents.push(_this._getIdentifierMetadata(type));
  106099. });
  106100. }
  106101. entryComponents.push.apply(entryComponents, bootstrapComponents.map(function (type) { return ((_this._getEntryComponentMetadata(type.reference))); }));
  106102. if (meta.schemas) {
  106103. schemas.push.apply(schemas, flattenAndDedupeArray(meta.schemas));
  106104. }
  106105. compileMeta = new CompileNgModuleMetadata({
  106106. type: this._getTypeMetadata(moduleType),
  106107. providers: providers,
  106108. entryComponents: entryComponents,
  106109. bootstrapComponents: bootstrapComponents,
  106110. schemas: schemas,
  106111. declaredDirectives: declaredDirectives,
  106112. exportedDirectives: exportedDirectives,
  106113. declaredPipes: declaredPipes,
  106114. exportedPipes: exportedPipes,
  106115. importedModules: importedModules,
  106116. exportedModules: exportedModules,
  106117. transitiveModule: transitiveModule,
  106118. id: meta.id || null,
  106119. });
  106120. entryComponents.forEach(function (id) { return transitiveModule.addEntryComponent(id); });
  106121. providers.forEach(function (provider) { return transitiveModule.addProvider(provider, /** @type {?} */ ((compileMeta)).type); });
  106122. transitiveModule.addModule(compileMeta.type);
  106123. this._ngModuleCache.set(moduleType, compileMeta);
  106124. return compileMeta;
  106125. };
  106126. /**
  106127. * @param {?} moduleType
  106128. * @param {?} importedModuleType
  106129. * @return {?}
  106130. */
  106131. CompileMetadataResolver.prototype._checkSelfImport = /**
  106132. * @param {?} moduleType
  106133. * @param {?} importedModuleType
  106134. * @return {?}
  106135. */
  106136. function (moduleType, importedModuleType) {
  106137. if (moduleType === importedModuleType) {
  106138. this._reportError(syntaxError("'" + stringifyType(moduleType) + "' module can't import itself"), moduleType);
  106139. return true;
  106140. }
  106141. return false;
  106142. };
  106143. /**
  106144. * @param {?} type
  106145. * @return {?}
  106146. */
  106147. CompileMetadataResolver.prototype._getTypeDescriptor = /**
  106148. * @param {?} type
  106149. * @return {?}
  106150. */
  106151. function (type) {
  106152. if (isValidType(type)) {
  106153. if (this.isDirective(type)) {
  106154. return 'directive';
  106155. }
  106156. if (this.isPipe(type)) {
  106157. return 'pipe';
  106158. }
  106159. if (this.isNgModule(type)) {
  106160. return 'module';
  106161. }
  106162. }
  106163. if ((/** @type {?} */ (type)).provide) {
  106164. return 'provider';
  106165. }
  106166. return 'value';
  106167. };
  106168. /**
  106169. * @param {?} type
  106170. * @param {?} moduleType
  106171. * @return {?}
  106172. */
  106173. CompileMetadataResolver.prototype._addTypeToModule = /**
  106174. * @param {?} type
  106175. * @param {?} moduleType
  106176. * @return {?}
  106177. */
  106178. function (type, moduleType) {
  106179. var /** @type {?} */ oldModule = this._ngModuleOfTypes.get(type);
  106180. if (oldModule && oldModule !== moduleType) {
  106181. this._reportError(syntaxError("Type " + stringifyType(type) + " is part of the declarations of 2 modules: " + stringifyType(oldModule) + " and " + stringifyType(moduleType) + "! " +
  106182. ("Please consider moving " + stringifyType(type) + " to a higher module that imports " + stringifyType(oldModule) + " and " + stringifyType(moduleType) + ". ") +
  106183. ("You can also create a new NgModule that exports and includes " + stringifyType(type) + " then import that NgModule in " + stringifyType(oldModule) + " and " + stringifyType(moduleType) + ".")), moduleType);
  106184. return;
  106185. }
  106186. this._ngModuleOfTypes.set(type, moduleType);
  106187. };
  106188. /**
  106189. * @param {?} importedModules
  106190. * @param {?} exportedModules
  106191. * @return {?}
  106192. */
  106193. CompileMetadataResolver.prototype._getTransitiveNgModuleMetadata = /**
  106194. * @param {?} importedModules
  106195. * @param {?} exportedModules
  106196. * @return {?}
  106197. */
  106198. function (importedModules, exportedModules) {
  106199. // collect `providers` / `entryComponents` from all imported and all exported modules
  106200. var /** @type {?} */ result = new TransitiveCompileNgModuleMetadata();
  106201. var /** @type {?} */ modulesByToken = new Map();
  106202. importedModules.concat(exportedModules).forEach(function (modSummary) {
  106203. modSummary.modules.forEach(function (mod) { return result.addModule(mod); });
  106204. modSummary.entryComponents.forEach(function (comp) { return result.addEntryComponent(comp); });
  106205. var /** @type {?} */ addedTokens = new Set();
  106206. modSummary.providers.forEach(function (entry) {
  106207. var /** @type {?} */ tokenRef = tokenReference(entry.provider.token);
  106208. var /** @type {?} */ prevModules = modulesByToken.get(tokenRef);
  106209. if (!prevModules) {
  106210. prevModules = new Set();
  106211. modulesByToken.set(tokenRef, prevModules);
  106212. }
  106213. var /** @type {?} */ moduleRef = entry.module.reference;
  106214. // Note: the providers of one module may still contain multiple providers
  106215. // per token (e.g. for multi providers), and we need to preserve these.
  106216. if (addedTokens.has(tokenRef) || !prevModules.has(moduleRef)) {
  106217. prevModules.add(moduleRef);
  106218. addedTokens.add(tokenRef);
  106219. result.addProvider(entry.provider, entry.module);
  106220. }
  106221. });
  106222. });
  106223. exportedModules.forEach(function (modSummary) {
  106224. modSummary.exportedDirectives.forEach(function (id) { return result.addExportedDirective(id); });
  106225. modSummary.exportedPipes.forEach(function (id) { return result.addExportedPipe(id); });
  106226. });
  106227. importedModules.forEach(function (modSummary) {
  106228. modSummary.exportedDirectives.forEach(function (id) { return result.addDirective(id); });
  106229. modSummary.exportedPipes.forEach(function (id) { return result.addPipe(id); });
  106230. });
  106231. return result;
  106232. };
  106233. /**
  106234. * @param {?} type
  106235. * @return {?}
  106236. */
  106237. CompileMetadataResolver.prototype._getIdentifierMetadata = /**
  106238. * @param {?} type
  106239. * @return {?}
  106240. */
  106241. function (type) {
  106242. type = resolveForwardRef(type);
  106243. return { reference: type };
  106244. };
  106245. /**
  106246. * @param {?} type
  106247. * @return {?}
  106248. */
  106249. CompileMetadataResolver.prototype.isInjectable = /**
  106250. * @param {?} type
  106251. * @return {?}
  106252. */
  106253. function (type) {
  106254. var /** @type {?} */ annotations = this._reflector.annotations(type);
  106255. return annotations.some(function (ann) { return createInjectable.isTypeOf(ann); });
  106256. };
  106257. /**
  106258. * @param {?} type
  106259. * @return {?}
  106260. */
  106261. CompileMetadataResolver.prototype.getInjectableSummary = /**
  106262. * @param {?} type
  106263. * @return {?}
  106264. */
  106265. function (type) {
  106266. return {
  106267. summaryKind: CompileSummaryKind.Injectable,
  106268. type: this._getTypeMetadata(type, null, false)
  106269. };
  106270. };
  106271. /**
  106272. * @param {?} type
  106273. * @param {?=} dependencies
  106274. * @return {?}
  106275. */
  106276. CompileMetadataResolver.prototype._getInjectableMetadata = /**
  106277. * @param {?} type
  106278. * @param {?=} dependencies
  106279. * @return {?}
  106280. */
  106281. function (type, dependencies) {
  106282. if (dependencies === void 0) { dependencies = null; }
  106283. var /** @type {?} */ typeSummary = this._loadSummary(type, CompileSummaryKind.Injectable);
  106284. if (typeSummary) {
  106285. return typeSummary.type;
  106286. }
  106287. return this._getTypeMetadata(type, dependencies);
  106288. };
  106289. /**
  106290. * @param {?} type
  106291. * @param {?=} dependencies
  106292. * @param {?=} throwOnUnknownDeps
  106293. * @return {?}
  106294. */
  106295. CompileMetadataResolver.prototype._getTypeMetadata = /**
  106296. * @param {?} type
  106297. * @param {?=} dependencies
  106298. * @param {?=} throwOnUnknownDeps
  106299. * @return {?}
  106300. */
  106301. function (type, dependencies, throwOnUnknownDeps) {
  106302. if (dependencies === void 0) { dependencies = null; }
  106303. if (throwOnUnknownDeps === void 0) { throwOnUnknownDeps = true; }
  106304. var /** @type {?} */ identifier = this._getIdentifierMetadata(type);
  106305. return {
  106306. reference: identifier.reference,
  106307. diDeps: this._getDependenciesMetadata(identifier.reference, dependencies, throwOnUnknownDeps),
  106308. lifecycleHooks: getAllLifecycleHooks(this._reflector, identifier.reference),
  106309. };
  106310. };
  106311. /**
  106312. * @param {?} factory
  106313. * @param {?=} dependencies
  106314. * @return {?}
  106315. */
  106316. CompileMetadataResolver.prototype._getFactoryMetadata = /**
  106317. * @param {?} factory
  106318. * @param {?=} dependencies
  106319. * @return {?}
  106320. */
  106321. function (factory, dependencies) {
  106322. if (dependencies === void 0) { dependencies = null; }
  106323. factory = resolveForwardRef(factory);
  106324. return { reference: factory, diDeps: this._getDependenciesMetadata(factory, dependencies) };
  106325. };
  106326. /**
  106327. * Gets the metadata for the given pipe.
  106328. * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
  106329. */
  106330. /**
  106331. * Gets the metadata for the given pipe.
  106332. * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
  106333. * @param {?} pipeType
  106334. * @return {?}
  106335. */
  106336. CompileMetadataResolver.prototype.getPipeMetadata = /**
  106337. * Gets the metadata for the given pipe.
  106338. * This assumes `loadNgModuleDirectiveAndPipeMetadata` has been called first.
  106339. * @param {?} pipeType
  106340. * @return {?}
  106341. */
  106342. function (pipeType) {
  106343. var /** @type {?} */ pipeMeta = this._pipeCache.get(pipeType);
  106344. if (!pipeMeta) {
  106345. this._reportError(syntaxError("Illegal state: getPipeMetadata can only be called after loadNgModuleDirectiveAndPipeMetadata for a module that declares it. Pipe " + stringifyType(pipeType) + "."), pipeType);
  106346. }
  106347. return pipeMeta || null;
  106348. };
  106349. /**
  106350. * @param {?} pipeType
  106351. * @return {?}
  106352. */
  106353. CompileMetadataResolver.prototype.getPipeSummary = /**
  106354. * @param {?} pipeType
  106355. * @return {?}
  106356. */
  106357. function (pipeType) {
  106358. var /** @type {?} */ pipeSummary = /** @type {?} */ (this._loadSummary(pipeType, CompileSummaryKind.Pipe));
  106359. if (!pipeSummary) {
  106360. this._reportError(syntaxError("Illegal state: Could not load the summary for pipe " + stringifyType(pipeType) + "."), pipeType);
  106361. }
  106362. return pipeSummary;
  106363. };
  106364. /**
  106365. * @param {?} pipeType
  106366. * @return {?}
  106367. */
  106368. CompileMetadataResolver.prototype.getOrLoadPipeMetadata = /**
  106369. * @param {?} pipeType
  106370. * @return {?}
  106371. */
  106372. function (pipeType) {
  106373. var /** @type {?} */ pipeMeta = this._pipeCache.get(pipeType);
  106374. if (!pipeMeta) {
  106375. pipeMeta = this._loadPipeMetadata(pipeType);
  106376. }
  106377. return pipeMeta;
  106378. };
  106379. /**
  106380. * @param {?} pipeType
  106381. * @return {?}
  106382. */
  106383. CompileMetadataResolver.prototype._loadPipeMetadata = /**
  106384. * @param {?} pipeType
  106385. * @return {?}
  106386. */
  106387. function (pipeType) {
  106388. pipeType = resolveForwardRef(pipeType);
  106389. var /** @type {?} */ pipeAnnotation = /** @type {?} */ ((this._pipeResolver.resolve(pipeType)));
  106390. var /** @type {?} */ pipeMeta = new CompilePipeMetadata({
  106391. type: this._getTypeMetadata(pipeType),
  106392. name: pipeAnnotation.name,
  106393. pure: !!pipeAnnotation.pure
  106394. });
  106395. this._pipeCache.set(pipeType, pipeMeta);
  106396. this._summaryCache.set(pipeType, pipeMeta.toSummary());
  106397. return pipeMeta;
  106398. };
  106399. /**
  106400. * @param {?} typeOrFunc
  106401. * @param {?} dependencies
  106402. * @param {?=} throwOnUnknownDeps
  106403. * @return {?}
  106404. */
  106405. CompileMetadataResolver.prototype._getDependenciesMetadata = /**
  106406. * @param {?} typeOrFunc
  106407. * @param {?} dependencies
  106408. * @param {?=} throwOnUnknownDeps
  106409. * @return {?}
  106410. */
  106411. function (typeOrFunc, dependencies, throwOnUnknownDeps) {
  106412. var _this = this;
  106413. if (throwOnUnknownDeps === void 0) { throwOnUnknownDeps = true; }
  106414. var /** @type {?} */ hasUnknownDeps = false;
  106415. var /** @type {?} */ params = dependencies || this._reflector.parameters(typeOrFunc) || [];
  106416. var /** @type {?} */ dependenciesMetadata = params.map(function (param) {
  106417. var /** @type {?} */ isAttribute = false;
  106418. var /** @type {?} */ isHost = false;
  106419. var /** @type {?} */ isSelf = false;
  106420. var /** @type {?} */ isSkipSelf = false;
  106421. var /** @type {?} */ isOptional = false;
  106422. var /** @type {?} */ token = null;
  106423. if (Array.isArray(param)) {
  106424. param.forEach(function (paramEntry) {
  106425. if (createHost.isTypeOf(paramEntry)) {
  106426. isHost = true;
  106427. }
  106428. else if (createSelf.isTypeOf(paramEntry)) {
  106429. isSelf = true;
  106430. }
  106431. else if (createSkipSelf.isTypeOf(paramEntry)) {
  106432. isSkipSelf = true;
  106433. }
  106434. else if (createOptional.isTypeOf(paramEntry)) {
  106435. isOptional = true;
  106436. }
  106437. else if (createAttribute.isTypeOf(paramEntry)) {
  106438. isAttribute = true;
  106439. token = paramEntry.attributeName;
  106440. }
  106441. else if (createInject.isTypeOf(paramEntry)) {
  106442. token = paramEntry.token;
  106443. }
  106444. else if (createInjectionToken.isTypeOf(paramEntry) || paramEntry instanceof StaticSymbol) {
  106445. token = paramEntry;
  106446. }
  106447. else if (isValidType(paramEntry) && token == null) {
  106448. token = paramEntry;
  106449. }
  106450. });
  106451. }
  106452. else {
  106453. token = param;
  106454. }
  106455. if (token == null) {
  106456. hasUnknownDeps = true;
  106457. return /** @type {?} */ ((null));
  106458. }
  106459. return {
  106460. isAttribute: isAttribute,
  106461. isHost: isHost,
  106462. isSelf: isSelf,
  106463. isSkipSelf: isSkipSelf,
  106464. isOptional: isOptional,
  106465. token: _this._getTokenMetadata(token)
  106466. };
  106467. });
  106468. if (hasUnknownDeps) {
  106469. var /** @type {?} */ depsTokens = dependenciesMetadata.map(function (dep) { return dep ? stringifyType(dep.token) : '?'; }).join(', ');
  106470. var /** @type {?} */ message = "Can't resolve all parameters for " + stringifyType(typeOrFunc) + ": (" + depsTokens + ").";
  106471. if (throwOnUnknownDeps || this._config.strictInjectionParameters) {
  106472. this._reportError(syntaxError(message), typeOrFunc);
  106473. }
  106474. else {
  106475. this._console.warn("Warning: " + message + " This will become an error in Angular v6.x");
  106476. }
  106477. }
  106478. return dependenciesMetadata;
  106479. };
  106480. /**
  106481. * @param {?} token
  106482. * @return {?}
  106483. */
  106484. CompileMetadataResolver.prototype._getTokenMetadata = /**
  106485. * @param {?} token
  106486. * @return {?}
  106487. */
  106488. function (token) {
  106489. token = resolveForwardRef(token);
  106490. var /** @type {?} */ compileToken;
  106491. if (typeof token === 'string') {
  106492. compileToken = { value: token };
  106493. }
  106494. else {
  106495. compileToken = { identifier: { reference: token } };
  106496. }
  106497. return compileToken;
  106498. };
  106499. /**
  106500. * @param {?} providers
  106501. * @param {?} targetEntryComponents
  106502. * @param {?=} debugInfo
  106503. * @param {?=} compileProviders
  106504. * @param {?=} type
  106505. * @return {?}
  106506. */
  106507. CompileMetadataResolver.prototype._getProvidersMetadata = /**
  106508. * @param {?} providers
  106509. * @param {?} targetEntryComponents
  106510. * @param {?=} debugInfo
  106511. * @param {?=} compileProviders
  106512. * @param {?=} type
  106513. * @return {?}
  106514. */
  106515. function (providers, targetEntryComponents, debugInfo, compileProviders, type) {
  106516. var _this = this;
  106517. if (compileProviders === void 0) { compileProviders = []; }
  106518. providers.forEach(function (provider, providerIdx) {
  106519. if (Array.isArray(provider)) {
  106520. _this._getProvidersMetadata(provider, targetEntryComponents, debugInfo, compileProviders);
  106521. }
  106522. else {
  106523. provider = resolveForwardRef(provider);
  106524. var /** @type {?} */ providerMeta = /** @type {?} */ ((undefined));
  106525. if (provider && typeof provider === 'object' && provider.hasOwnProperty('provide')) {
  106526. _this._validateProvider(provider);
  106527. providerMeta = new ProviderMeta(provider.provide, provider);
  106528. }
  106529. else if (isValidType(provider)) {
  106530. providerMeta = new ProviderMeta(provider, { useClass: provider });
  106531. }
  106532. else if (provider === void 0) {
  106533. _this._reportError(syntaxError("Encountered undefined provider! Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files."));
  106534. return;
  106535. }
  106536. else {
  106537. var /** @type {?} */ providersInfo = (/** @type {?} */ (providers.reduce(function (soFar, seenProvider, seenProviderIdx) {
  106538. if (seenProviderIdx < providerIdx) {
  106539. soFar.push("" + stringifyType(seenProvider));
  106540. }
  106541. else if (seenProviderIdx == providerIdx) {
  106542. soFar.push("?" + stringifyType(seenProvider) + "?");
  106543. }
  106544. else if (seenProviderIdx == providerIdx + 1) {
  106545. soFar.push('...');
  106546. }
  106547. return soFar;
  106548. }, [])))
  106549. .join(', ');
  106550. _this._reportError(syntaxError("Invalid " + (debugInfo ? debugInfo : 'provider') + " - only instances of Provider and Type are allowed, got: [" + providersInfo + "]"), type);
  106551. return;
  106552. }
  106553. if (providerMeta.token ===
  106554. _this._reflector.resolveExternalReference(Identifiers.ANALYZE_FOR_ENTRY_COMPONENTS)) {
  106555. targetEntryComponents.push.apply(targetEntryComponents, _this._getEntryComponentsFromProvider(providerMeta, type));
  106556. }
  106557. else {
  106558. compileProviders.push(_this.getProviderMetadata(providerMeta));
  106559. }
  106560. }
  106561. });
  106562. return compileProviders;
  106563. };
  106564. /**
  106565. * @param {?} provider
  106566. * @return {?}
  106567. */
  106568. CompileMetadataResolver.prototype._validateProvider = /**
  106569. * @param {?} provider
  106570. * @return {?}
  106571. */
  106572. function (provider) {
  106573. if (provider.hasOwnProperty('useClass') && provider.useClass == null) {
  106574. this._reportError(syntaxError("Invalid provider for " + stringifyType(provider.provide) + ". useClass cannot be " + provider.useClass + ".\n Usually it happens when:\n 1. There's a circular dependency (might be caused by using index.ts (barrel) files).\n 2. Class was used before it was declared. Use forwardRef in this case."));
  106575. }
  106576. };
  106577. /**
  106578. * @param {?} provider
  106579. * @param {?=} type
  106580. * @return {?}
  106581. */
  106582. CompileMetadataResolver.prototype._getEntryComponentsFromProvider = /**
  106583. * @param {?} provider
  106584. * @param {?=} type
  106585. * @return {?}
  106586. */
  106587. function (provider, type) {
  106588. var _this = this;
  106589. var /** @type {?} */ components = [];
  106590. var /** @type {?} */ collectedIdentifiers = [];
  106591. if (provider.useFactory || provider.useExisting || provider.useClass) {
  106592. this._reportError(syntaxError("The ANALYZE_FOR_ENTRY_COMPONENTS token only supports useValue!"), type);
  106593. return [];
  106594. }
  106595. if (!provider.multi) {
  106596. this._reportError(syntaxError("The ANALYZE_FOR_ENTRY_COMPONENTS token only supports 'multi = true'!"), type);
  106597. return [];
  106598. }
  106599. extractIdentifiers(provider.useValue, collectedIdentifiers);
  106600. collectedIdentifiers.forEach(function (identifier) {
  106601. var /** @type {?} */ entry = _this._getEntryComponentMetadata(identifier.reference, false);
  106602. if (entry) {
  106603. components.push(entry);
  106604. }
  106605. });
  106606. return components;
  106607. };
  106608. /**
  106609. * @param {?} dirType
  106610. * @param {?=} throwIfNotFound
  106611. * @return {?}
  106612. */
  106613. CompileMetadataResolver.prototype._getEntryComponentMetadata = /**
  106614. * @param {?} dirType
  106615. * @param {?=} throwIfNotFound
  106616. * @return {?}
  106617. */
  106618. function (dirType, throwIfNotFound) {
  106619. if (throwIfNotFound === void 0) { throwIfNotFound = true; }
  106620. var /** @type {?} */ dirMeta = this.getNonNormalizedDirectiveMetadata(dirType);
  106621. if (dirMeta && dirMeta.metadata.isComponent) {
  106622. return { componentType: dirType, componentFactory: /** @type {?} */ ((dirMeta.metadata.componentFactory)) };
  106623. }
  106624. var /** @type {?} */ dirSummary = /** @type {?} */ (this._loadSummary(dirType, CompileSummaryKind.Directive));
  106625. if (dirSummary && dirSummary.isComponent) {
  106626. return { componentType: dirType, componentFactory: /** @type {?} */ ((dirSummary.componentFactory)) };
  106627. }
  106628. if (throwIfNotFound) {
  106629. throw syntaxError(dirType.name + " cannot be used as an entry component.");
  106630. }
  106631. return null;
  106632. };
  106633. /**
  106634. * @param {?} provider
  106635. * @return {?}
  106636. */
  106637. CompileMetadataResolver.prototype.getProviderMetadata = /**
  106638. * @param {?} provider
  106639. * @return {?}
  106640. */
  106641. function (provider) {
  106642. var /** @type {?} */ compileDeps = /** @type {?} */ ((undefined));
  106643. var /** @type {?} */ compileTypeMetadata = /** @type {?} */ ((null));
  106644. var /** @type {?} */ compileFactoryMetadata = /** @type {?} */ ((null));
  106645. var /** @type {?} */ token = this._getTokenMetadata(provider.token);
  106646. if (provider.useClass) {
  106647. compileTypeMetadata = this._getInjectableMetadata(provider.useClass, provider.dependencies);
  106648. compileDeps = compileTypeMetadata.diDeps;
  106649. if (provider.token === provider.useClass) {
  106650. // use the compileTypeMetadata as it contains information about lifecycleHooks...
  106651. token = { identifier: compileTypeMetadata };
  106652. }
  106653. }
  106654. else if (provider.useFactory) {
  106655. compileFactoryMetadata = this._getFactoryMetadata(provider.useFactory, provider.dependencies);
  106656. compileDeps = compileFactoryMetadata.diDeps;
  106657. }
  106658. return {
  106659. token: token,
  106660. useClass: compileTypeMetadata,
  106661. useValue: provider.useValue,
  106662. useFactory: compileFactoryMetadata,
  106663. useExisting: provider.useExisting ? this._getTokenMetadata(provider.useExisting) : undefined,
  106664. deps: compileDeps,
  106665. multi: provider.multi
  106666. };
  106667. };
  106668. /**
  106669. * @param {?} queries
  106670. * @param {?} isViewQuery
  106671. * @param {?} directiveType
  106672. * @return {?}
  106673. */
  106674. CompileMetadataResolver.prototype._getQueriesMetadata = /**
  106675. * @param {?} queries
  106676. * @param {?} isViewQuery
  106677. * @param {?} directiveType
  106678. * @return {?}
  106679. */
  106680. function (queries, isViewQuery, directiveType) {
  106681. var _this = this;
  106682. var /** @type {?} */ res = [];
  106683. Object.keys(queries).forEach(function (propertyName) {
  106684. var /** @type {?} */ query = queries[propertyName];
  106685. if (query.isViewQuery === isViewQuery) {
  106686. res.push(_this._getQueryMetadata(query, propertyName, directiveType));
  106687. }
  106688. });
  106689. return res;
  106690. };
  106691. /**
  106692. * @param {?} selector
  106693. * @return {?}
  106694. */
  106695. CompileMetadataResolver.prototype._queryVarBindings = /**
  106696. * @param {?} selector
  106697. * @return {?}
  106698. */
  106699. function (selector) { return selector.split(/\s*,\s*/); };
  106700. /**
  106701. * @param {?} q
  106702. * @param {?} propertyName
  106703. * @param {?} typeOrFunc
  106704. * @return {?}
  106705. */
  106706. CompileMetadataResolver.prototype._getQueryMetadata = /**
  106707. * @param {?} q
  106708. * @param {?} propertyName
  106709. * @param {?} typeOrFunc
  106710. * @return {?}
  106711. */
  106712. function (q, propertyName, typeOrFunc) {
  106713. var _this = this;
  106714. var /** @type {?} */ selectors;
  106715. if (typeof q.selector === 'string') {
  106716. selectors =
  106717. this._queryVarBindings(q.selector).map(function (varName) { return _this._getTokenMetadata(varName); });
  106718. }
  106719. else {
  106720. if (!q.selector) {
  106721. this._reportError(syntaxError("Can't construct a query for the property \"" + propertyName + "\" of \"" + stringifyType(typeOrFunc) + "\" since the query selector wasn't defined."), typeOrFunc);
  106722. selectors = [];
  106723. }
  106724. else {
  106725. selectors = [this._getTokenMetadata(q.selector)];
  106726. }
  106727. }
  106728. return {
  106729. selectors: selectors,
  106730. first: q.first,
  106731. descendants: q.descendants, propertyName: propertyName,
  106732. read: q.read ? this._getTokenMetadata(q.read) : /** @type {?} */ ((null))
  106733. };
  106734. };
  106735. /**
  106736. * @param {?} error
  106737. * @param {?=} type
  106738. * @param {?=} otherType
  106739. * @return {?}
  106740. */
  106741. CompileMetadataResolver.prototype._reportError = /**
  106742. * @param {?} error
  106743. * @param {?=} type
  106744. * @param {?=} otherType
  106745. * @return {?}
  106746. */
  106747. function (error, type, otherType) {
  106748. if (this._errorCollector) {
  106749. this._errorCollector(error, type);
  106750. if (otherType) {
  106751. this._errorCollector(error, otherType);
  106752. }
  106753. }
  106754. else {
  106755. throw error;
  106756. }
  106757. };
  106758. return CompileMetadataResolver;
  106759. }());
  106760. /**
  106761. * @param {?} tree
  106762. * @param {?=} out
  106763. * @return {?}
  106764. */
  106765. function flattenArray(tree, out) {
  106766. if (out === void 0) { out = []; }
  106767. if (tree) {
  106768. for (var /** @type {?} */ i = 0; i < tree.length; i++) {
  106769. var /** @type {?} */ item = resolveForwardRef(tree[i]);
  106770. if (Array.isArray(item)) {
  106771. flattenArray(item, out);
  106772. }
  106773. else {
  106774. out.push(item);
  106775. }
  106776. }
  106777. }
  106778. return out;
  106779. }
  106780. /**
  106781. * @param {?} array
  106782. * @return {?}
  106783. */
  106784. function dedupeArray(array) {
  106785. if (array) {
  106786. return Array.from(new Set(array));
  106787. }
  106788. return [];
  106789. }
  106790. /**
  106791. * @param {?} tree
  106792. * @return {?}
  106793. */
  106794. function flattenAndDedupeArray(tree) {
  106795. return dedupeArray(flattenArray(tree));
  106796. }
  106797. /**
  106798. * @param {?} value
  106799. * @return {?}
  106800. */
  106801. function isValidType(value) {
  106802. return (value instanceof StaticSymbol) || (value instanceof Type);
  106803. }
  106804. /**
  106805. * @param {?} value
  106806. * @param {?} targetIdentifiers
  106807. * @return {?}
  106808. */
  106809. function extractIdentifiers(value, targetIdentifiers) {
  106810. visitValue(value, new _CompileValueConverter(), targetIdentifiers);
  106811. }
  106812. var _CompileValueConverter = /** @class */ (function (_super) {
  106813. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_CompileValueConverter, _super);
  106814. function _CompileValueConverter() {
  106815. return _super !== null && _super.apply(this, arguments) || this;
  106816. }
  106817. /**
  106818. * @param {?} value
  106819. * @param {?} targetIdentifiers
  106820. * @return {?}
  106821. */
  106822. _CompileValueConverter.prototype.visitOther = /**
  106823. * @param {?} value
  106824. * @param {?} targetIdentifiers
  106825. * @return {?}
  106826. */
  106827. function (value, targetIdentifiers) {
  106828. targetIdentifiers.push({ reference: value });
  106829. };
  106830. return _CompileValueConverter;
  106831. }(ValueTransformer));
  106832. /**
  106833. * @param {?} type
  106834. * @return {?}
  106835. */
  106836. function stringifyType(type) {
  106837. if (type instanceof StaticSymbol) {
  106838. return type.name + " in " + type.filePath;
  106839. }
  106840. else {
  106841. return stringify(type);
  106842. }
  106843. }
  106844. /**
  106845. * Indicates that a component is still being loaded in a synchronous compile.
  106846. * @param {?} compType
  106847. * @return {?}
  106848. */
  106849. function componentStillLoadingError(compType) {
  106850. var /** @type {?} */ error = Error("Can't compile synchronously as " + stringify(compType) + " is still being loaded!");
  106851. (/** @type {?} */ (error))[ERROR_COMPONENT_TYPE] = compType;
  106852. return error;
  106853. }
  106854. /**
  106855. * @fileoverview added by tsickle
  106856. * @suppress {checkTypes} checked by tsc
  106857. */
  106858. /**
  106859. * @license
  106860. * Copyright Google Inc. All Rights Reserved.
  106861. *
  106862. * Use of this source code is governed by an MIT-style license that can be
  106863. * found in the LICENSE file at https://angular.io/license
  106864. */
  106865. /** @enum {number} */
  106866. var TypeModifier = {
  106867. Const: 0,
  106868. };
  106869. TypeModifier[TypeModifier.Const] = "Const";
  106870. /**
  106871. * @abstract
  106872. */
  106873. var Type$1 = /** @class */ (function () {
  106874. function Type(modifiers) {
  106875. if (modifiers === void 0) { modifiers = null; }
  106876. this.modifiers = modifiers;
  106877. if (!modifiers) {
  106878. this.modifiers = [];
  106879. }
  106880. }
  106881. /**
  106882. * @param {?} modifier
  106883. * @return {?}
  106884. */
  106885. Type.prototype.hasModifier = /**
  106886. * @param {?} modifier
  106887. * @return {?}
  106888. */
  106889. function (modifier) { return /** @type {?} */ ((this.modifiers)).indexOf(modifier) !== -1; };
  106890. return Type;
  106891. }());
  106892. /** @enum {number} */
  106893. var BuiltinTypeName = {
  106894. Dynamic: 0,
  106895. Bool: 1,
  106896. String: 2,
  106897. Int: 3,
  106898. Number: 4,
  106899. Function: 5,
  106900. Inferred: 6,
  106901. };
  106902. BuiltinTypeName[BuiltinTypeName.Dynamic] = "Dynamic";
  106903. BuiltinTypeName[BuiltinTypeName.Bool] = "Bool";
  106904. BuiltinTypeName[BuiltinTypeName.String] = "String";
  106905. BuiltinTypeName[BuiltinTypeName.Int] = "Int";
  106906. BuiltinTypeName[BuiltinTypeName.Number] = "Number";
  106907. BuiltinTypeName[BuiltinTypeName.Function] = "Function";
  106908. BuiltinTypeName[BuiltinTypeName.Inferred] = "Inferred";
  106909. var BuiltinType = /** @class */ (function (_super) {
  106910. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(BuiltinType, _super);
  106911. function BuiltinType(name, modifiers) {
  106912. if (modifiers === void 0) { modifiers = null; }
  106913. var _this = _super.call(this, modifiers) || this;
  106914. _this.name = name;
  106915. return _this;
  106916. }
  106917. /**
  106918. * @param {?} visitor
  106919. * @param {?} context
  106920. * @return {?}
  106921. */
  106922. BuiltinType.prototype.visitType = /**
  106923. * @param {?} visitor
  106924. * @param {?} context
  106925. * @return {?}
  106926. */
  106927. function (visitor, context) {
  106928. return visitor.visitBuiltintType(this, context);
  106929. };
  106930. return BuiltinType;
  106931. }(Type$1));
  106932. var ExpressionType = /** @class */ (function (_super) {
  106933. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ExpressionType, _super);
  106934. function ExpressionType(value, modifiers) {
  106935. if (modifiers === void 0) { modifiers = null; }
  106936. var _this = _super.call(this, modifiers) || this;
  106937. _this.value = value;
  106938. return _this;
  106939. }
  106940. /**
  106941. * @param {?} visitor
  106942. * @param {?} context
  106943. * @return {?}
  106944. */
  106945. ExpressionType.prototype.visitType = /**
  106946. * @param {?} visitor
  106947. * @param {?} context
  106948. * @return {?}
  106949. */
  106950. function (visitor, context) {
  106951. return visitor.visitExpressionType(this, context);
  106952. };
  106953. return ExpressionType;
  106954. }(Type$1));
  106955. var ArrayType = /** @class */ (function (_super) {
  106956. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ArrayType, _super);
  106957. function ArrayType(of, modifiers) {
  106958. if (modifiers === void 0) { modifiers = null; }
  106959. var _this = _super.call(this, modifiers) || this;
  106960. _this.of = of;
  106961. return _this;
  106962. }
  106963. /**
  106964. * @param {?} visitor
  106965. * @param {?} context
  106966. * @return {?}
  106967. */
  106968. ArrayType.prototype.visitType = /**
  106969. * @param {?} visitor
  106970. * @param {?} context
  106971. * @return {?}
  106972. */
  106973. function (visitor, context) {
  106974. return visitor.visitArrayType(this, context);
  106975. };
  106976. return ArrayType;
  106977. }(Type$1));
  106978. var MapType = /** @class */ (function (_super) {
  106979. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(MapType, _super);
  106980. function MapType(valueType, modifiers) {
  106981. if (modifiers === void 0) { modifiers = null; }
  106982. var _this = _super.call(this, modifiers) || this;
  106983. _this.valueType = valueType || null;
  106984. return _this;
  106985. }
  106986. /**
  106987. * @param {?} visitor
  106988. * @param {?} context
  106989. * @return {?}
  106990. */
  106991. MapType.prototype.visitType = /**
  106992. * @param {?} visitor
  106993. * @param {?} context
  106994. * @return {?}
  106995. */
  106996. function (visitor, context) { return visitor.visitMapType(this, context); };
  106997. return MapType;
  106998. }(Type$1));
  106999. var DYNAMIC_TYPE = new BuiltinType(BuiltinTypeName.Dynamic);
  107000. var INFERRED_TYPE = new BuiltinType(BuiltinTypeName.Inferred);
  107001. var BOOL_TYPE = new BuiltinType(BuiltinTypeName.Bool);
  107002. var INT_TYPE = new BuiltinType(BuiltinTypeName.Int);
  107003. var NUMBER_TYPE = new BuiltinType(BuiltinTypeName.Number);
  107004. var STRING_TYPE = new BuiltinType(BuiltinTypeName.String);
  107005. var FUNCTION_TYPE = new BuiltinType(BuiltinTypeName.Function);
  107006. /**
  107007. * @record
  107008. */
  107009. /** @enum {number} */
  107010. var BinaryOperator = {
  107011. Equals: 0,
  107012. NotEquals: 1,
  107013. Identical: 2,
  107014. NotIdentical: 3,
  107015. Minus: 4,
  107016. Plus: 5,
  107017. Divide: 6,
  107018. Multiply: 7,
  107019. Modulo: 8,
  107020. And: 9,
  107021. Or: 10,
  107022. Lower: 11,
  107023. LowerEquals: 12,
  107024. Bigger: 13,
  107025. BiggerEquals: 14,
  107026. };
  107027. BinaryOperator[BinaryOperator.Equals] = "Equals";
  107028. BinaryOperator[BinaryOperator.NotEquals] = "NotEquals";
  107029. BinaryOperator[BinaryOperator.Identical] = "Identical";
  107030. BinaryOperator[BinaryOperator.NotIdentical] = "NotIdentical";
  107031. BinaryOperator[BinaryOperator.Minus] = "Minus";
  107032. BinaryOperator[BinaryOperator.Plus] = "Plus";
  107033. BinaryOperator[BinaryOperator.Divide] = "Divide";
  107034. BinaryOperator[BinaryOperator.Multiply] = "Multiply";
  107035. BinaryOperator[BinaryOperator.Modulo] = "Modulo";
  107036. BinaryOperator[BinaryOperator.And] = "And";
  107037. BinaryOperator[BinaryOperator.Or] = "Or";
  107038. BinaryOperator[BinaryOperator.Lower] = "Lower";
  107039. BinaryOperator[BinaryOperator.LowerEquals] = "LowerEquals";
  107040. BinaryOperator[BinaryOperator.Bigger] = "Bigger";
  107041. BinaryOperator[BinaryOperator.BiggerEquals] = "BiggerEquals";
  107042. /**
  107043. * @template T
  107044. * @param {?} base
  107045. * @param {?} other
  107046. * @return {?}
  107047. */
  107048. function nullSafeIsEquivalent(base, other) {
  107049. if (base == null || other == null) {
  107050. return base == other;
  107051. }
  107052. return base.isEquivalent(other);
  107053. }
  107054. /**
  107055. * @template T
  107056. * @param {?} base
  107057. * @param {?} other
  107058. * @return {?}
  107059. */
  107060. function areAllEquivalent(base, other) {
  107061. var /** @type {?} */ len = base.length;
  107062. if (len !== other.length) {
  107063. return false;
  107064. }
  107065. for (var /** @type {?} */ i = 0; i < len; i++) {
  107066. if (!base[i].isEquivalent(other[i])) {
  107067. return false;
  107068. }
  107069. }
  107070. return true;
  107071. }
  107072. /**
  107073. * @abstract
  107074. */
  107075. var Expression = /** @class */ (function () {
  107076. function Expression(type, sourceSpan) {
  107077. this.type = type || null;
  107078. this.sourceSpan = sourceSpan || null;
  107079. }
  107080. /**
  107081. * @param {?} name
  107082. * @param {?=} sourceSpan
  107083. * @return {?}
  107084. */
  107085. Expression.prototype.prop = /**
  107086. * @param {?} name
  107087. * @param {?=} sourceSpan
  107088. * @return {?}
  107089. */
  107090. function (name, sourceSpan) {
  107091. return new ReadPropExpr(this, name, null, sourceSpan);
  107092. };
  107093. /**
  107094. * @param {?} index
  107095. * @param {?=} type
  107096. * @param {?=} sourceSpan
  107097. * @return {?}
  107098. */
  107099. Expression.prototype.key = /**
  107100. * @param {?} index
  107101. * @param {?=} type
  107102. * @param {?=} sourceSpan
  107103. * @return {?}
  107104. */
  107105. function (index, type, sourceSpan) {
  107106. return new ReadKeyExpr(this, index, type, sourceSpan);
  107107. };
  107108. /**
  107109. * @param {?} name
  107110. * @param {?} params
  107111. * @param {?=} sourceSpan
  107112. * @return {?}
  107113. */
  107114. Expression.prototype.callMethod = /**
  107115. * @param {?} name
  107116. * @param {?} params
  107117. * @param {?=} sourceSpan
  107118. * @return {?}
  107119. */
  107120. function (name, params, sourceSpan) {
  107121. return new InvokeMethodExpr(this, name, params, null, sourceSpan);
  107122. };
  107123. /**
  107124. * @param {?} params
  107125. * @param {?=} sourceSpan
  107126. * @return {?}
  107127. */
  107128. Expression.prototype.callFn = /**
  107129. * @param {?} params
  107130. * @param {?=} sourceSpan
  107131. * @return {?}
  107132. */
  107133. function (params, sourceSpan) {
  107134. return new InvokeFunctionExpr(this, params, null, sourceSpan);
  107135. };
  107136. /**
  107137. * @param {?} params
  107138. * @param {?=} type
  107139. * @param {?=} sourceSpan
  107140. * @return {?}
  107141. */
  107142. Expression.prototype.instantiate = /**
  107143. * @param {?} params
  107144. * @param {?=} type
  107145. * @param {?=} sourceSpan
  107146. * @return {?}
  107147. */
  107148. function (params, type, sourceSpan) {
  107149. return new InstantiateExpr(this, params, type, sourceSpan);
  107150. };
  107151. /**
  107152. * @param {?} trueCase
  107153. * @param {?=} falseCase
  107154. * @param {?=} sourceSpan
  107155. * @return {?}
  107156. */
  107157. Expression.prototype.conditional = /**
  107158. * @param {?} trueCase
  107159. * @param {?=} falseCase
  107160. * @param {?=} sourceSpan
  107161. * @return {?}
  107162. */
  107163. function (trueCase, falseCase, sourceSpan) {
  107164. if (falseCase === void 0) { falseCase = null; }
  107165. return new ConditionalExpr(this, trueCase, falseCase, null, sourceSpan);
  107166. };
  107167. /**
  107168. * @param {?} rhs
  107169. * @param {?=} sourceSpan
  107170. * @return {?}
  107171. */
  107172. Expression.prototype.equals = /**
  107173. * @param {?} rhs
  107174. * @param {?=} sourceSpan
  107175. * @return {?}
  107176. */
  107177. function (rhs, sourceSpan) {
  107178. return new BinaryOperatorExpr(BinaryOperator.Equals, this, rhs, null, sourceSpan);
  107179. };
  107180. /**
  107181. * @param {?} rhs
  107182. * @param {?=} sourceSpan
  107183. * @return {?}
  107184. */
  107185. Expression.prototype.notEquals = /**
  107186. * @param {?} rhs
  107187. * @param {?=} sourceSpan
  107188. * @return {?}
  107189. */
  107190. function (rhs, sourceSpan) {
  107191. return new BinaryOperatorExpr(BinaryOperator.NotEquals, this, rhs, null, sourceSpan);
  107192. };
  107193. /**
  107194. * @param {?} rhs
  107195. * @param {?=} sourceSpan
  107196. * @return {?}
  107197. */
  107198. Expression.prototype.identical = /**
  107199. * @param {?} rhs
  107200. * @param {?=} sourceSpan
  107201. * @return {?}
  107202. */
  107203. function (rhs, sourceSpan) {
  107204. return new BinaryOperatorExpr(BinaryOperator.Identical, this, rhs, null, sourceSpan);
  107205. };
  107206. /**
  107207. * @param {?} rhs
  107208. * @param {?=} sourceSpan
  107209. * @return {?}
  107210. */
  107211. Expression.prototype.notIdentical = /**
  107212. * @param {?} rhs
  107213. * @param {?=} sourceSpan
  107214. * @return {?}
  107215. */
  107216. function (rhs, sourceSpan) {
  107217. return new BinaryOperatorExpr(BinaryOperator.NotIdentical, this, rhs, null, sourceSpan);
  107218. };
  107219. /**
  107220. * @param {?} rhs
  107221. * @param {?=} sourceSpan
  107222. * @return {?}
  107223. */
  107224. Expression.prototype.minus = /**
  107225. * @param {?} rhs
  107226. * @param {?=} sourceSpan
  107227. * @return {?}
  107228. */
  107229. function (rhs, sourceSpan) {
  107230. return new BinaryOperatorExpr(BinaryOperator.Minus, this, rhs, null, sourceSpan);
  107231. };
  107232. /**
  107233. * @param {?} rhs
  107234. * @param {?=} sourceSpan
  107235. * @return {?}
  107236. */
  107237. Expression.prototype.plus = /**
  107238. * @param {?} rhs
  107239. * @param {?=} sourceSpan
  107240. * @return {?}
  107241. */
  107242. function (rhs, sourceSpan) {
  107243. return new BinaryOperatorExpr(BinaryOperator.Plus, this, rhs, null, sourceSpan);
  107244. };
  107245. /**
  107246. * @param {?} rhs
  107247. * @param {?=} sourceSpan
  107248. * @return {?}
  107249. */
  107250. Expression.prototype.divide = /**
  107251. * @param {?} rhs
  107252. * @param {?=} sourceSpan
  107253. * @return {?}
  107254. */
  107255. function (rhs, sourceSpan) {
  107256. return new BinaryOperatorExpr(BinaryOperator.Divide, this, rhs, null, sourceSpan);
  107257. };
  107258. /**
  107259. * @param {?} rhs
  107260. * @param {?=} sourceSpan
  107261. * @return {?}
  107262. */
  107263. Expression.prototype.multiply = /**
  107264. * @param {?} rhs
  107265. * @param {?=} sourceSpan
  107266. * @return {?}
  107267. */
  107268. function (rhs, sourceSpan) {
  107269. return new BinaryOperatorExpr(BinaryOperator.Multiply, this, rhs, null, sourceSpan);
  107270. };
  107271. /**
  107272. * @param {?} rhs
  107273. * @param {?=} sourceSpan
  107274. * @return {?}
  107275. */
  107276. Expression.prototype.modulo = /**
  107277. * @param {?} rhs
  107278. * @param {?=} sourceSpan
  107279. * @return {?}
  107280. */
  107281. function (rhs, sourceSpan) {
  107282. return new BinaryOperatorExpr(BinaryOperator.Modulo, this, rhs, null, sourceSpan);
  107283. };
  107284. /**
  107285. * @param {?} rhs
  107286. * @param {?=} sourceSpan
  107287. * @return {?}
  107288. */
  107289. Expression.prototype.and = /**
  107290. * @param {?} rhs
  107291. * @param {?=} sourceSpan
  107292. * @return {?}
  107293. */
  107294. function (rhs, sourceSpan) {
  107295. return new BinaryOperatorExpr(BinaryOperator.And, this, rhs, null, sourceSpan);
  107296. };
  107297. /**
  107298. * @param {?} rhs
  107299. * @param {?=} sourceSpan
  107300. * @return {?}
  107301. */
  107302. Expression.prototype.or = /**
  107303. * @param {?} rhs
  107304. * @param {?=} sourceSpan
  107305. * @return {?}
  107306. */
  107307. function (rhs, sourceSpan) {
  107308. return new BinaryOperatorExpr(BinaryOperator.Or, this, rhs, null, sourceSpan);
  107309. };
  107310. /**
  107311. * @param {?} rhs
  107312. * @param {?=} sourceSpan
  107313. * @return {?}
  107314. */
  107315. Expression.prototype.lower = /**
  107316. * @param {?} rhs
  107317. * @param {?=} sourceSpan
  107318. * @return {?}
  107319. */
  107320. function (rhs, sourceSpan) {
  107321. return new BinaryOperatorExpr(BinaryOperator.Lower, this, rhs, null, sourceSpan);
  107322. };
  107323. /**
  107324. * @param {?} rhs
  107325. * @param {?=} sourceSpan
  107326. * @return {?}
  107327. */
  107328. Expression.prototype.lowerEquals = /**
  107329. * @param {?} rhs
  107330. * @param {?=} sourceSpan
  107331. * @return {?}
  107332. */
  107333. function (rhs, sourceSpan) {
  107334. return new BinaryOperatorExpr(BinaryOperator.LowerEquals, this, rhs, null, sourceSpan);
  107335. };
  107336. /**
  107337. * @param {?} rhs
  107338. * @param {?=} sourceSpan
  107339. * @return {?}
  107340. */
  107341. Expression.prototype.bigger = /**
  107342. * @param {?} rhs
  107343. * @param {?=} sourceSpan
  107344. * @return {?}
  107345. */
  107346. function (rhs, sourceSpan) {
  107347. return new BinaryOperatorExpr(BinaryOperator.Bigger, this, rhs, null, sourceSpan);
  107348. };
  107349. /**
  107350. * @param {?} rhs
  107351. * @param {?=} sourceSpan
  107352. * @return {?}
  107353. */
  107354. Expression.prototype.biggerEquals = /**
  107355. * @param {?} rhs
  107356. * @param {?=} sourceSpan
  107357. * @return {?}
  107358. */
  107359. function (rhs, sourceSpan) {
  107360. return new BinaryOperatorExpr(BinaryOperator.BiggerEquals, this, rhs, null, sourceSpan);
  107361. };
  107362. /**
  107363. * @param {?=} sourceSpan
  107364. * @return {?}
  107365. */
  107366. Expression.prototype.isBlank = /**
  107367. * @param {?=} sourceSpan
  107368. * @return {?}
  107369. */
  107370. function (sourceSpan) {
  107371. // Note: We use equals by purpose here to compare to null and undefined in JS.
  107372. // We use the typed null to allow strictNullChecks to narrow types.
  107373. return this.equals(TYPED_NULL_EXPR, sourceSpan);
  107374. };
  107375. /**
  107376. * @param {?} type
  107377. * @param {?=} sourceSpan
  107378. * @return {?}
  107379. */
  107380. Expression.prototype.cast = /**
  107381. * @param {?} type
  107382. * @param {?=} sourceSpan
  107383. * @return {?}
  107384. */
  107385. function (type, sourceSpan) {
  107386. return new CastExpr(this, type, sourceSpan);
  107387. };
  107388. /**
  107389. * @return {?}
  107390. */
  107391. Expression.prototype.toStmt = /**
  107392. * @return {?}
  107393. */
  107394. function () { return new ExpressionStatement(this, null); };
  107395. return Expression;
  107396. }());
  107397. /** @enum {number} */
  107398. var BuiltinVar = {
  107399. This: 0,
  107400. Super: 1,
  107401. CatchError: 2,
  107402. CatchStack: 3,
  107403. };
  107404. BuiltinVar[BuiltinVar.This] = "This";
  107405. BuiltinVar[BuiltinVar.Super] = "Super";
  107406. BuiltinVar[BuiltinVar.CatchError] = "CatchError";
  107407. BuiltinVar[BuiltinVar.CatchStack] = "CatchStack";
  107408. var ReadVarExpr = /** @class */ (function (_super) {
  107409. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ReadVarExpr, _super);
  107410. function ReadVarExpr(name, type, sourceSpan) {
  107411. var _this = _super.call(this, type, sourceSpan) || this;
  107412. if (typeof name === 'string') {
  107413. _this.name = name;
  107414. _this.builtin = null;
  107415. }
  107416. else {
  107417. _this.name = null;
  107418. _this.builtin = /** @type {?} */ (name);
  107419. }
  107420. return _this;
  107421. }
  107422. /**
  107423. * @param {?} e
  107424. * @return {?}
  107425. */
  107426. ReadVarExpr.prototype.isEquivalent = /**
  107427. * @param {?} e
  107428. * @return {?}
  107429. */
  107430. function (e) {
  107431. return e instanceof ReadVarExpr && this.name === e.name && this.builtin === e.builtin;
  107432. };
  107433. /**
  107434. * @param {?} visitor
  107435. * @param {?} context
  107436. * @return {?}
  107437. */
  107438. ReadVarExpr.prototype.visitExpression = /**
  107439. * @param {?} visitor
  107440. * @param {?} context
  107441. * @return {?}
  107442. */
  107443. function (visitor, context) {
  107444. return visitor.visitReadVarExpr(this, context);
  107445. };
  107446. /**
  107447. * @param {?} value
  107448. * @return {?}
  107449. */
  107450. ReadVarExpr.prototype.set = /**
  107451. * @param {?} value
  107452. * @return {?}
  107453. */
  107454. function (value) {
  107455. if (!this.name) {
  107456. throw new Error("Built in variable " + this.builtin + " can not be assigned to.");
  107457. }
  107458. return new WriteVarExpr(this.name, value, null, this.sourceSpan);
  107459. };
  107460. return ReadVarExpr;
  107461. }(Expression));
  107462. var WriteVarExpr = /** @class */ (function (_super) {
  107463. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(WriteVarExpr, _super);
  107464. function WriteVarExpr(name, value, type, sourceSpan) {
  107465. var _this = _super.call(this, type || value.type, sourceSpan) || this;
  107466. _this.name = name;
  107467. _this.value = value;
  107468. return _this;
  107469. }
  107470. /**
  107471. * @param {?} e
  107472. * @return {?}
  107473. */
  107474. WriteVarExpr.prototype.isEquivalent = /**
  107475. * @param {?} e
  107476. * @return {?}
  107477. */
  107478. function (e) {
  107479. return e instanceof WriteVarExpr && this.name === e.name && this.value.isEquivalent(e.value);
  107480. };
  107481. /**
  107482. * @param {?} visitor
  107483. * @param {?} context
  107484. * @return {?}
  107485. */
  107486. WriteVarExpr.prototype.visitExpression = /**
  107487. * @param {?} visitor
  107488. * @param {?} context
  107489. * @return {?}
  107490. */
  107491. function (visitor, context) {
  107492. return visitor.visitWriteVarExpr(this, context);
  107493. };
  107494. /**
  107495. * @param {?=} type
  107496. * @param {?=} modifiers
  107497. * @return {?}
  107498. */
  107499. WriteVarExpr.prototype.toDeclStmt = /**
  107500. * @param {?=} type
  107501. * @param {?=} modifiers
  107502. * @return {?}
  107503. */
  107504. function (type, modifiers) {
  107505. return new DeclareVarStmt(this.name, this.value, type, modifiers, this.sourceSpan);
  107506. };
  107507. return WriteVarExpr;
  107508. }(Expression));
  107509. var WriteKeyExpr = /** @class */ (function (_super) {
  107510. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(WriteKeyExpr, _super);
  107511. function WriteKeyExpr(receiver, index, value, type, sourceSpan) {
  107512. var _this = _super.call(this, type || value.type, sourceSpan) || this;
  107513. _this.receiver = receiver;
  107514. _this.index = index;
  107515. _this.value = value;
  107516. return _this;
  107517. }
  107518. /**
  107519. * @param {?} e
  107520. * @return {?}
  107521. */
  107522. WriteKeyExpr.prototype.isEquivalent = /**
  107523. * @param {?} e
  107524. * @return {?}
  107525. */
  107526. function (e) {
  107527. return e instanceof WriteKeyExpr && this.receiver.isEquivalent(e.receiver) &&
  107528. this.index.isEquivalent(e.index) && this.value.isEquivalent(e.value);
  107529. };
  107530. /**
  107531. * @param {?} visitor
  107532. * @param {?} context
  107533. * @return {?}
  107534. */
  107535. WriteKeyExpr.prototype.visitExpression = /**
  107536. * @param {?} visitor
  107537. * @param {?} context
  107538. * @return {?}
  107539. */
  107540. function (visitor, context) {
  107541. return visitor.visitWriteKeyExpr(this, context);
  107542. };
  107543. return WriteKeyExpr;
  107544. }(Expression));
  107545. var WritePropExpr = /** @class */ (function (_super) {
  107546. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(WritePropExpr, _super);
  107547. function WritePropExpr(receiver, name, value, type, sourceSpan) {
  107548. var _this = _super.call(this, type || value.type, sourceSpan) || this;
  107549. _this.receiver = receiver;
  107550. _this.name = name;
  107551. _this.value = value;
  107552. return _this;
  107553. }
  107554. /**
  107555. * @param {?} e
  107556. * @return {?}
  107557. */
  107558. WritePropExpr.prototype.isEquivalent = /**
  107559. * @param {?} e
  107560. * @return {?}
  107561. */
  107562. function (e) {
  107563. return e instanceof WritePropExpr && this.receiver.isEquivalent(e.receiver) &&
  107564. this.name === e.name && this.value.isEquivalent(e.value);
  107565. };
  107566. /**
  107567. * @param {?} visitor
  107568. * @param {?} context
  107569. * @return {?}
  107570. */
  107571. WritePropExpr.prototype.visitExpression = /**
  107572. * @param {?} visitor
  107573. * @param {?} context
  107574. * @return {?}
  107575. */
  107576. function (visitor, context) {
  107577. return visitor.visitWritePropExpr(this, context);
  107578. };
  107579. return WritePropExpr;
  107580. }(Expression));
  107581. /** @enum {number} */
  107582. var BuiltinMethod = {
  107583. ConcatArray: 0,
  107584. SubscribeObservable: 1,
  107585. Bind: 2,
  107586. };
  107587. BuiltinMethod[BuiltinMethod.ConcatArray] = "ConcatArray";
  107588. BuiltinMethod[BuiltinMethod.SubscribeObservable] = "SubscribeObservable";
  107589. BuiltinMethod[BuiltinMethod.Bind] = "Bind";
  107590. var InvokeMethodExpr = /** @class */ (function (_super) {
  107591. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(InvokeMethodExpr, _super);
  107592. function InvokeMethodExpr(receiver, method, args, type, sourceSpan) {
  107593. var _this = _super.call(this, type, sourceSpan) || this;
  107594. _this.receiver = receiver;
  107595. _this.args = args;
  107596. if (typeof method === 'string') {
  107597. _this.name = method;
  107598. _this.builtin = null;
  107599. }
  107600. else {
  107601. _this.name = null;
  107602. _this.builtin = /** @type {?} */ (method);
  107603. }
  107604. return _this;
  107605. }
  107606. /**
  107607. * @param {?} e
  107608. * @return {?}
  107609. */
  107610. InvokeMethodExpr.prototype.isEquivalent = /**
  107611. * @param {?} e
  107612. * @return {?}
  107613. */
  107614. function (e) {
  107615. return e instanceof InvokeMethodExpr && this.receiver.isEquivalent(e.receiver) &&
  107616. this.name === e.name && this.builtin === e.builtin && areAllEquivalent(this.args, e.args);
  107617. };
  107618. /**
  107619. * @param {?} visitor
  107620. * @param {?} context
  107621. * @return {?}
  107622. */
  107623. InvokeMethodExpr.prototype.visitExpression = /**
  107624. * @param {?} visitor
  107625. * @param {?} context
  107626. * @return {?}
  107627. */
  107628. function (visitor, context) {
  107629. return visitor.visitInvokeMethodExpr(this, context);
  107630. };
  107631. return InvokeMethodExpr;
  107632. }(Expression));
  107633. var InvokeFunctionExpr = /** @class */ (function (_super) {
  107634. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(InvokeFunctionExpr, _super);
  107635. function InvokeFunctionExpr(fn, args, type, sourceSpan) {
  107636. var _this = _super.call(this, type, sourceSpan) || this;
  107637. _this.fn = fn;
  107638. _this.args = args;
  107639. return _this;
  107640. }
  107641. /**
  107642. * @param {?} e
  107643. * @return {?}
  107644. */
  107645. InvokeFunctionExpr.prototype.isEquivalent = /**
  107646. * @param {?} e
  107647. * @return {?}
  107648. */
  107649. function (e) {
  107650. return e instanceof InvokeFunctionExpr && this.fn.isEquivalent(e.fn) &&
  107651. areAllEquivalent(this.args, e.args);
  107652. };
  107653. /**
  107654. * @param {?} visitor
  107655. * @param {?} context
  107656. * @return {?}
  107657. */
  107658. InvokeFunctionExpr.prototype.visitExpression = /**
  107659. * @param {?} visitor
  107660. * @param {?} context
  107661. * @return {?}
  107662. */
  107663. function (visitor, context) {
  107664. return visitor.visitInvokeFunctionExpr(this, context);
  107665. };
  107666. return InvokeFunctionExpr;
  107667. }(Expression));
  107668. var InstantiateExpr = /** @class */ (function (_super) {
  107669. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(InstantiateExpr, _super);
  107670. function InstantiateExpr(classExpr, args, type, sourceSpan) {
  107671. var _this = _super.call(this, type, sourceSpan) || this;
  107672. _this.classExpr = classExpr;
  107673. _this.args = args;
  107674. return _this;
  107675. }
  107676. /**
  107677. * @param {?} e
  107678. * @return {?}
  107679. */
  107680. InstantiateExpr.prototype.isEquivalent = /**
  107681. * @param {?} e
  107682. * @return {?}
  107683. */
  107684. function (e) {
  107685. return e instanceof InstantiateExpr && this.classExpr.isEquivalent(e.classExpr) &&
  107686. areAllEquivalent(this.args, e.args);
  107687. };
  107688. /**
  107689. * @param {?} visitor
  107690. * @param {?} context
  107691. * @return {?}
  107692. */
  107693. InstantiateExpr.prototype.visitExpression = /**
  107694. * @param {?} visitor
  107695. * @param {?} context
  107696. * @return {?}
  107697. */
  107698. function (visitor, context) {
  107699. return visitor.visitInstantiateExpr(this, context);
  107700. };
  107701. return InstantiateExpr;
  107702. }(Expression));
  107703. var LiteralExpr = /** @class */ (function (_super) {
  107704. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(LiteralExpr, _super);
  107705. function LiteralExpr(value, type, sourceSpan) {
  107706. var _this = _super.call(this, type, sourceSpan) || this;
  107707. _this.value = value;
  107708. return _this;
  107709. }
  107710. /**
  107711. * @param {?} e
  107712. * @return {?}
  107713. */
  107714. LiteralExpr.prototype.isEquivalent = /**
  107715. * @param {?} e
  107716. * @return {?}
  107717. */
  107718. function (e) {
  107719. return e instanceof LiteralExpr && this.value === e.value;
  107720. };
  107721. /**
  107722. * @param {?} visitor
  107723. * @param {?} context
  107724. * @return {?}
  107725. */
  107726. LiteralExpr.prototype.visitExpression = /**
  107727. * @param {?} visitor
  107728. * @param {?} context
  107729. * @return {?}
  107730. */
  107731. function (visitor, context) {
  107732. return visitor.visitLiteralExpr(this, context);
  107733. };
  107734. return LiteralExpr;
  107735. }(Expression));
  107736. var ExternalExpr = /** @class */ (function (_super) {
  107737. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ExternalExpr, _super);
  107738. function ExternalExpr(value, type, typeParams, sourceSpan) {
  107739. if (typeParams === void 0) { typeParams = null; }
  107740. var _this = _super.call(this, type, sourceSpan) || this;
  107741. _this.value = value;
  107742. _this.typeParams = typeParams;
  107743. return _this;
  107744. }
  107745. /**
  107746. * @param {?} e
  107747. * @return {?}
  107748. */
  107749. ExternalExpr.prototype.isEquivalent = /**
  107750. * @param {?} e
  107751. * @return {?}
  107752. */
  107753. function (e) {
  107754. return e instanceof ExternalExpr && this.value.name === e.value.name &&
  107755. this.value.moduleName === e.value.moduleName && this.value.runtime === e.value.runtime;
  107756. };
  107757. /**
  107758. * @param {?} visitor
  107759. * @param {?} context
  107760. * @return {?}
  107761. */
  107762. ExternalExpr.prototype.visitExpression = /**
  107763. * @param {?} visitor
  107764. * @param {?} context
  107765. * @return {?}
  107766. */
  107767. function (visitor, context) {
  107768. return visitor.visitExternalExpr(this, context);
  107769. };
  107770. return ExternalExpr;
  107771. }(Expression));
  107772. var ExternalReference = /** @class */ (function () {
  107773. function ExternalReference(moduleName, name, runtime) {
  107774. this.moduleName = moduleName;
  107775. this.name = name;
  107776. this.runtime = runtime;
  107777. }
  107778. return ExternalReference;
  107779. }());
  107780. var ConditionalExpr = /** @class */ (function (_super) {
  107781. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ConditionalExpr, _super);
  107782. function ConditionalExpr(condition, trueCase, falseCase, type, sourceSpan) {
  107783. if (falseCase === void 0) { falseCase = null; }
  107784. var _this = _super.call(this, type || trueCase.type, sourceSpan) || this;
  107785. _this.condition = condition;
  107786. _this.falseCase = falseCase;
  107787. _this.trueCase = trueCase;
  107788. return _this;
  107789. }
  107790. /**
  107791. * @param {?} e
  107792. * @return {?}
  107793. */
  107794. ConditionalExpr.prototype.isEquivalent = /**
  107795. * @param {?} e
  107796. * @return {?}
  107797. */
  107798. function (e) {
  107799. return e instanceof ConditionalExpr && this.condition.isEquivalent(e.condition) &&
  107800. this.trueCase.isEquivalent(e.trueCase) && nullSafeIsEquivalent(this.falseCase, e.falseCase);
  107801. };
  107802. /**
  107803. * @param {?} visitor
  107804. * @param {?} context
  107805. * @return {?}
  107806. */
  107807. ConditionalExpr.prototype.visitExpression = /**
  107808. * @param {?} visitor
  107809. * @param {?} context
  107810. * @return {?}
  107811. */
  107812. function (visitor, context) {
  107813. return visitor.visitConditionalExpr(this, context);
  107814. };
  107815. return ConditionalExpr;
  107816. }(Expression));
  107817. var NotExpr = /** @class */ (function (_super) {
  107818. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(NotExpr, _super);
  107819. function NotExpr(condition, sourceSpan) {
  107820. var _this = _super.call(this, BOOL_TYPE, sourceSpan) || this;
  107821. _this.condition = condition;
  107822. return _this;
  107823. }
  107824. /**
  107825. * @param {?} e
  107826. * @return {?}
  107827. */
  107828. NotExpr.prototype.isEquivalent = /**
  107829. * @param {?} e
  107830. * @return {?}
  107831. */
  107832. function (e) {
  107833. return e instanceof NotExpr && this.condition.isEquivalent(e.condition);
  107834. };
  107835. /**
  107836. * @param {?} visitor
  107837. * @param {?} context
  107838. * @return {?}
  107839. */
  107840. NotExpr.prototype.visitExpression = /**
  107841. * @param {?} visitor
  107842. * @param {?} context
  107843. * @return {?}
  107844. */
  107845. function (visitor, context) {
  107846. return visitor.visitNotExpr(this, context);
  107847. };
  107848. return NotExpr;
  107849. }(Expression));
  107850. var AssertNotNull = /** @class */ (function (_super) {
  107851. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(AssertNotNull, _super);
  107852. function AssertNotNull(condition, sourceSpan) {
  107853. var _this = _super.call(this, condition.type, sourceSpan) || this;
  107854. _this.condition = condition;
  107855. return _this;
  107856. }
  107857. /**
  107858. * @param {?} e
  107859. * @return {?}
  107860. */
  107861. AssertNotNull.prototype.isEquivalent = /**
  107862. * @param {?} e
  107863. * @return {?}
  107864. */
  107865. function (e) {
  107866. return e instanceof AssertNotNull && this.condition.isEquivalent(e.condition);
  107867. };
  107868. /**
  107869. * @param {?} visitor
  107870. * @param {?} context
  107871. * @return {?}
  107872. */
  107873. AssertNotNull.prototype.visitExpression = /**
  107874. * @param {?} visitor
  107875. * @param {?} context
  107876. * @return {?}
  107877. */
  107878. function (visitor, context) {
  107879. return visitor.visitAssertNotNullExpr(this, context);
  107880. };
  107881. return AssertNotNull;
  107882. }(Expression));
  107883. var CastExpr = /** @class */ (function (_super) {
  107884. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(CastExpr, _super);
  107885. function CastExpr(value, type, sourceSpan) {
  107886. var _this = _super.call(this, type, sourceSpan) || this;
  107887. _this.value = value;
  107888. return _this;
  107889. }
  107890. /**
  107891. * @param {?} e
  107892. * @return {?}
  107893. */
  107894. CastExpr.prototype.isEquivalent = /**
  107895. * @param {?} e
  107896. * @return {?}
  107897. */
  107898. function (e) {
  107899. return e instanceof CastExpr && this.value.isEquivalent(e.value);
  107900. };
  107901. /**
  107902. * @param {?} visitor
  107903. * @param {?} context
  107904. * @return {?}
  107905. */
  107906. CastExpr.prototype.visitExpression = /**
  107907. * @param {?} visitor
  107908. * @param {?} context
  107909. * @return {?}
  107910. */
  107911. function (visitor, context) {
  107912. return visitor.visitCastExpr(this, context);
  107913. };
  107914. return CastExpr;
  107915. }(Expression));
  107916. var FnParam = /** @class */ (function () {
  107917. function FnParam(name, type) {
  107918. if (type === void 0) { type = null; }
  107919. this.name = name;
  107920. this.type = type;
  107921. }
  107922. /**
  107923. * @param {?} param
  107924. * @return {?}
  107925. */
  107926. FnParam.prototype.isEquivalent = /**
  107927. * @param {?} param
  107928. * @return {?}
  107929. */
  107930. function (param) { return this.name === param.name; };
  107931. return FnParam;
  107932. }());
  107933. var FunctionExpr = /** @class */ (function (_super) {
  107934. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FunctionExpr, _super);
  107935. function FunctionExpr(params, statements, type, sourceSpan) {
  107936. var _this = _super.call(this, type, sourceSpan) || this;
  107937. _this.params = params;
  107938. _this.statements = statements;
  107939. return _this;
  107940. }
  107941. /**
  107942. * @param {?} e
  107943. * @return {?}
  107944. */
  107945. FunctionExpr.prototype.isEquivalent = /**
  107946. * @param {?} e
  107947. * @return {?}
  107948. */
  107949. function (e) {
  107950. return e instanceof FunctionExpr && areAllEquivalent(this.params, e.params) &&
  107951. areAllEquivalent(this.statements, e.statements);
  107952. };
  107953. /**
  107954. * @param {?} visitor
  107955. * @param {?} context
  107956. * @return {?}
  107957. */
  107958. FunctionExpr.prototype.visitExpression = /**
  107959. * @param {?} visitor
  107960. * @param {?} context
  107961. * @return {?}
  107962. */
  107963. function (visitor, context) {
  107964. return visitor.visitFunctionExpr(this, context);
  107965. };
  107966. /**
  107967. * @param {?} name
  107968. * @param {?=} modifiers
  107969. * @return {?}
  107970. */
  107971. FunctionExpr.prototype.toDeclStmt = /**
  107972. * @param {?} name
  107973. * @param {?=} modifiers
  107974. * @return {?}
  107975. */
  107976. function (name, modifiers) {
  107977. if (modifiers === void 0) { modifiers = null; }
  107978. return new DeclareFunctionStmt(name, this.params, this.statements, this.type, modifiers, this.sourceSpan);
  107979. };
  107980. return FunctionExpr;
  107981. }(Expression));
  107982. var BinaryOperatorExpr = /** @class */ (function (_super) {
  107983. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(BinaryOperatorExpr, _super);
  107984. function BinaryOperatorExpr(operator, lhs, rhs, type, sourceSpan) {
  107985. var _this = _super.call(this, type || lhs.type, sourceSpan) || this;
  107986. _this.operator = operator;
  107987. _this.rhs = rhs;
  107988. _this.lhs = lhs;
  107989. return _this;
  107990. }
  107991. /**
  107992. * @param {?} e
  107993. * @return {?}
  107994. */
  107995. BinaryOperatorExpr.prototype.isEquivalent = /**
  107996. * @param {?} e
  107997. * @return {?}
  107998. */
  107999. function (e) {
  108000. return e instanceof BinaryOperatorExpr && this.operator === e.operator &&
  108001. this.lhs.isEquivalent(e.lhs) && this.rhs.isEquivalent(e.rhs);
  108002. };
  108003. /**
  108004. * @param {?} visitor
  108005. * @param {?} context
  108006. * @return {?}
  108007. */
  108008. BinaryOperatorExpr.prototype.visitExpression = /**
  108009. * @param {?} visitor
  108010. * @param {?} context
  108011. * @return {?}
  108012. */
  108013. function (visitor, context) {
  108014. return visitor.visitBinaryOperatorExpr(this, context);
  108015. };
  108016. return BinaryOperatorExpr;
  108017. }(Expression));
  108018. var ReadPropExpr = /** @class */ (function (_super) {
  108019. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ReadPropExpr, _super);
  108020. function ReadPropExpr(receiver, name, type, sourceSpan) {
  108021. var _this = _super.call(this, type, sourceSpan) || this;
  108022. _this.receiver = receiver;
  108023. _this.name = name;
  108024. return _this;
  108025. }
  108026. /**
  108027. * @param {?} e
  108028. * @return {?}
  108029. */
  108030. ReadPropExpr.prototype.isEquivalent = /**
  108031. * @param {?} e
  108032. * @return {?}
  108033. */
  108034. function (e) {
  108035. return e instanceof ReadPropExpr && this.receiver.isEquivalent(e.receiver) &&
  108036. this.name === e.name;
  108037. };
  108038. /**
  108039. * @param {?} visitor
  108040. * @param {?} context
  108041. * @return {?}
  108042. */
  108043. ReadPropExpr.prototype.visitExpression = /**
  108044. * @param {?} visitor
  108045. * @param {?} context
  108046. * @return {?}
  108047. */
  108048. function (visitor, context) {
  108049. return visitor.visitReadPropExpr(this, context);
  108050. };
  108051. /**
  108052. * @param {?} value
  108053. * @return {?}
  108054. */
  108055. ReadPropExpr.prototype.set = /**
  108056. * @param {?} value
  108057. * @return {?}
  108058. */
  108059. function (value) {
  108060. return new WritePropExpr(this.receiver, this.name, value, null, this.sourceSpan);
  108061. };
  108062. return ReadPropExpr;
  108063. }(Expression));
  108064. var ReadKeyExpr = /** @class */ (function (_super) {
  108065. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ReadKeyExpr, _super);
  108066. function ReadKeyExpr(receiver, index, type, sourceSpan) {
  108067. var _this = _super.call(this, type, sourceSpan) || this;
  108068. _this.receiver = receiver;
  108069. _this.index = index;
  108070. return _this;
  108071. }
  108072. /**
  108073. * @param {?} e
  108074. * @return {?}
  108075. */
  108076. ReadKeyExpr.prototype.isEquivalent = /**
  108077. * @param {?} e
  108078. * @return {?}
  108079. */
  108080. function (e) {
  108081. return e instanceof ReadKeyExpr && this.receiver.isEquivalent(e.receiver) &&
  108082. this.index.isEquivalent(e.index);
  108083. };
  108084. /**
  108085. * @param {?} visitor
  108086. * @param {?} context
  108087. * @return {?}
  108088. */
  108089. ReadKeyExpr.prototype.visitExpression = /**
  108090. * @param {?} visitor
  108091. * @param {?} context
  108092. * @return {?}
  108093. */
  108094. function (visitor, context) {
  108095. return visitor.visitReadKeyExpr(this, context);
  108096. };
  108097. /**
  108098. * @param {?} value
  108099. * @return {?}
  108100. */
  108101. ReadKeyExpr.prototype.set = /**
  108102. * @param {?} value
  108103. * @return {?}
  108104. */
  108105. function (value) {
  108106. return new WriteKeyExpr(this.receiver, this.index, value, null, this.sourceSpan);
  108107. };
  108108. return ReadKeyExpr;
  108109. }(Expression));
  108110. var LiteralArrayExpr = /** @class */ (function (_super) {
  108111. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(LiteralArrayExpr, _super);
  108112. function LiteralArrayExpr(entries, type, sourceSpan) {
  108113. var _this = _super.call(this, type, sourceSpan) || this;
  108114. _this.entries = entries;
  108115. return _this;
  108116. }
  108117. /**
  108118. * @param {?} e
  108119. * @return {?}
  108120. */
  108121. LiteralArrayExpr.prototype.isEquivalent = /**
  108122. * @param {?} e
  108123. * @return {?}
  108124. */
  108125. function (e) {
  108126. return e instanceof LiteralArrayExpr && areAllEquivalent(this.entries, e.entries);
  108127. };
  108128. /**
  108129. * @param {?} visitor
  108130. * @param {?} context
  108131. * @return {?}
  108132. */
  108133. LiteralArrayExpr.prototype.visitExpression = /**
  108134. * @param {?} visitor
  108135. * @param {?} context
  108136. * @return {?}
  108137. */
  108138. function (visitor, context) {
  108139. return visitor.visitLiteralArrayExpr(this, context);
  108140. };
  108141. return LiteralArrayExpr;
  108142. }(Expression));
  108143. var LiteralMapEntry = /** @class */ (function () {
  108144. function LiteralMapEntry(key, value, quoted) {
  108145. this.key = key;
  108146. this.value = value;
  108147. this.quoted = quoted;
  108148. }
  108149. /**
  108150. * @param {?} e
  108151. * @return {?}
  108152. */
  108153. LiteralMapEntry.prototype.isEquivalent = /**
  108154. * @param {?} e
  108155. * @return {?}
  108156. */
  108157. function (e) {
  108158. return this.key === e.key && this.value.isEquivalent(e.value);
  108159. };
  108160. return LiteralMapEntry;
  108161. }());
  108162. var LiteralMapExpr = /** @class */ (function (_super) {
  108163. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(LiteralMapExpr, _super);
  108164. function LiteralMapExpr(entries, type, sourceSpan) {
  108165. var _this = _super.call(this, type, sourceSpan) || this;
  108166. _this.entries = entries;
  108167. _this.valueType = null;
  108168. if (type) {
  108169. _this.valueType = type.valueType;
  108170. }
  108171. return _this;
  108172. }
  108173. /**
  108174. * @param {?} e
  108175. * @return {?}
  108176. */
  108177. LiteralMapExpr.prototype.isEquivalent = /**
  108178. * @param {?} e
  108179. * @return {?}
  108180. */
  108181. function (e) {
  108182. return e instanceof LiteralMapExpr && areAllEquivalent(this.entries, e.entries);
  108183. };
  108184. /**
  108185. * @param {?} visitor
  108186. * @param {?} context
  108187. * @return {?}
  108188. */
  108189. LiteralMapExpr.prototype.visitExpression = /**
  108190. * @param {?} visitor
  108191. * @param {?} context
  108192. * @return {?}
  108193. */
  108194. function (visitor, context) {
  108195. return visitor.visitLiteralMapExpr(this, context);
  108196. };
  108197. return LiteralMapExpr;
  108198. }(Expression));
  108199. var CommaExpr = /** @class */ (function (_super) {
  108200. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(CommaExpr, _super);
  108201. function CommaExpr(parts, sourceSpan) {
  108202. var _this = _super.call(this, parts[parts.length - 1].type, sourceSpan) || this;
  108203. _this.parts = parts;
  108204. return _this;
  108205. }
  108206. /**
  108207. * @param {?} e
  108208. * @return {?}
  108209. */
  108210. CommaExpr.prototype.isEquivalent = /**
  108211. * @param {?} e
  108212. * @return {?}
  108213. */
  108214. function (e) {
  108215. return e instanceof CommaExpr && areAllEquivalent(this.parts, e.parts);
  108216. };
  108217. /**
  108218. * @param {?} visitor
  108219. * @param {?} context
  108220. * @return {?}
  108221. */
  108222. CommaExpr.prototype.visitExpression = /**
  108223. * @param {?} visitor
  108224. * @param {?} context
  108225. * @return {?}
  108226. */
  108227. function (visitor, context) {
  108228. return visitor.visitCommaExpr(this, context);
  108229. };
  108230. return CommaExpr;
  108231. }(Expression));
  108232. /**
  108233. * @record
  108234. */
  108235. var THIS_EXPR = new ReadVarExpr(BuiltinVar.This, null, null);
  108236. var SUPER_EXPR = new ReadVarExpr(BuiltinVar.Super, null, null);
  108237. var CATCH_ERROR_VAR = new ReadVarExpr(BuiltinVar.CatchError, null, null);
  108238. var CATCH_STACK_VAR = new ReadVarExpr(BuiltinVar.CatchStack, null, null);
  108239. var NULL_EXPR = new LiteralExpr(null, null, null);
  108240. var TYPED_NULL_EXPR = new LiteralExpr(null, INFERRED_TYPE, null);
  108241. /** @enum {number} */
  108242. var StmtModifier = {
  108243. Final: 0,
  108244. Private: 1,
  108245. Exported: 2,
  108246. };
  108247. StmtModifier[StmtModifier.Final] = "Final";
  108248. StmtModifier[StmtModifier.Private] = "Private";
  108249. StmtModifier[StmtModifier.Exported] = "Exported";
  108250. /**
  108251. * @abstract
  108252. */
  108253. var Statement = /** @class */ (function () {
  108254. function Statement(modifiers, sourceSpan) {
  108255. this.modifiers = modifiers || [];
  108256. this.sourceSpan = sourceSpan || null;
  108257. }
  108258. /**
  108259. * @param {?} modifier
  108260. * @return {?}
  108261. */
  108262. Statement.prototype.hasModifier = /**
  108263. * @param {?} modifier
  108264. * @return {?}
  108265. */
  108266. function (modifier) { return /** @type {?} */ ((this.modifiers)).indexOf(modifier) !== -1; };
  108267. return Statement;
  108268. }());
  108269. var DeclareVarStmt = /** @class */ (function (_super) {
  108270. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(DeclareVarStmt, _super);
  108271. function DeclareVarStmt(name, value, type, modifiers, sourceSpan) {
  108272. if (modifiers === void 0) { modifiers = null; }
  108273. var _this = _super.call(this, modifiers, sourceSpan) || this;
  108274. _this.name = name;
  108275. _this.value = value;
  108276. _this.type = type || value.type;
  108277. return _this;
  108278. }
  108279. /**
  108280. * @param {?} stmt
  108281. * @return {?}
  108282. */
  108283. DeclareVarStmt.prototype.isEquivalent = /**
  108284. * @param {?} stmt
  108285. * @return {?}
  108286. */
  108287. function (stmt) {
  108288. return stmt instanceof DeclareVarStmt && this.name === stmt.name &&
  108289. this.value.isEquivalent(stmt.value);
  108290. };
  108291. /**
  108292. * @param {?} visitor
  108293. * @param {?} context
  108294. * @return {?}
  108295. */
  108296. DeclareVarStmt.prototype.visitStatement = /**
  108297. * @param {?} visitor
  108298. * @param {?} context
  108299. * @return {?}
  108300. */
  108301. function (visitor, context) {
  108302. return visitor.visitDeclareVarStmt(this, context);
  108303. };
  108304. return DeclareVarStmt;
  108305. }(Statement));
  108306. var DeclareFunctionStmt = /** @class */ (function (_super) {
  108307. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(DeclareFunctionStmt, _super);
  108308. function DeclareFunctionStmt(name, params, statements, type, modifiers, sourceSpan) {
  108309. if (modifiers === void 0) { modifiers = null; }
  108310. var _this = _super.call(this, modifiers, sourceSpan) || this;
  108311. _this.name = name;
  108312. _this.params = params;
  108313. _this.statements = statements;
  108314. _this.type = type || null;
  108315. return _this;
  108316. }
  108317. /**
  108318. * @param {?} stmt
  108319. * @return {?}
  108320. */
  108321. DeclareFunctionStmt.prototype.isEquivalent = /**
  108322. * @param {?} stmt
  108323. * @return {?}
  108324. */
  108325. function (stmt) {
  108326. return stmt instanceof DeclareFunctionStmt && areAllEquivalent(this.params, stmt.params) &&
  108327. areAllEquivalent(this.statements, stmt.statements);
  108328. };
  108329. /**
  108330. * @param {?} visitor
  108331. * @param {?} context
  108332. * @return {?}
  108333. */
  108334. DeclareFunctionStmt.prototype.visitStatement = /**
  108335. * @param {?} visitor
  108336. * @param {?} context
  108337. * @return {?}
  108338. */
  108339. function (visitor, context) {
  108340. return visitor.visitDeclareFunctionStmt(this, context);
  108341. };
  108342. return DeclareFunctionStmt;
  108343. }(Statement));
  108344. var ExpressionStatement = /** @class */ (function (_super) {
  108345. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ExpressionStatement, _super);
  108346. function ExpressionStatement(expr, sourceSpan) {
  108347. var _this = _super.call(this, null, sourceSpan) || this;
  108348. _this.expr = expr;
  108349. return _this;
  108350. }
  108351. /**
  108352. * @param {?} stmt
  108353. * @return {?}
  108354. */
  108355. ExpressionStatement.prototype.isEquivalent = /**
  108356. * @param {?} stmt
  108357. * @return {?}
  108358. */
  108359. function (stmt) {
  108360. return stmt instanceof ExpressionStatement && this.expr.isEquivalent(stmt.expr);
  108361. };
  108362. /**
  108363. * @param {?} visitor
  108364. * @param {?} context
  108365. * @return {?}
  108366. */
  108367. ExpressionStatement.prototype.visitStatement = /**
  108368. * @param {?} visitor
  108369. * @param {?} context
  108370. * @return {?}
  108371. */
  108372. function (visitor, context) {
  108373. return visitor.visitExpressionStmt(this, context);
  108374. };
  108375. return ExpressionStatement;
  108376. }(Statement));
  108377. var ReturnStatement = /** @class */ (function (_super) {
  108378. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ReturnStatement, _super);
  108379. function ReturnStatement(value, sourceSpan) {
  108380. var _this = _super.call(this, null, sourceSpan) || this;
  108381. _this.value = value;
  108382. return _this;
  108383. }
  108384. /**
  108385. * @param {?} stmt
  108386. * @return {?}
  108387. */
  108388. ReturnStatement.prototype.isEquivalent = /**
  108389. * @param {?} stmt
  108390. * @return {?}
  108391. */
  108392. function (stmt) {
  108393. return stmt instanceof ReturnStatement && this.value.isEquivalent(stmt.value);
  108394. };
  108395. /**
  108396. * @param {?} visitor
  108397. * @param {?} context
  108398. * @return {?}
  108399. */
  108400. ReturnStatement.prototype.visitStatement = /**
  108401. * @param {?} visitor
  108402. * @param {?} context
  108403. * @return {?}
  108404. */
  108405. function (visitor, context) {
  108406. return visitor.visitReturnStmt(this, context);
  108407. };
  108408. return ReturnStatement;
  108409. }(Statement));
  108410. var AbstractClassPart = /** @class */ (function () {
  108411. function AbstractClassPart(type, modifiers) {
  108412. this.modifiers = modifiers;
  108413. if (!modifiers) {
  108414. this.modifiers = [];
  108415. }
  108416. this.type = type || null;
  108417. }
  108418. /**
  108419. * @param {?} modifier
  108420. * @return {?}
  108421. */
  108422. AbstractClassPart.prototype.hasModifier = /**
  108423. * @param {?} modifier
  108424. * @return {?}
  108425. */
  108426. function (modifier) { return /** @type {?} */ ((this.modifiers)).indexOf(modifier) !== -1; };
  108427. return AbstractClassPart;
  108428. }());
  108429. var ClassField = /** @class */ (function (_super) {
  108430. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ClassField, _super);
  108431. function ClassField(name, type, modifiers) {
  108432. if (modifiers === void 0) { modifiers = null; }
  108433. var _this = _super.call(this, type, modifiers) || this;
  108434. _this.name = name;
  108435. return _this;
  108436. }
  108437. /**
  108438. * @param {?} f
  108439. * @return {?}
  108440. */
  108441. ClassField.prototype.isEquivalent = /**
  108442. * @param {?} f
  108443. * @return {?}
  108444. */
  108445. function (f) { return this.name === f.name; };
  108446. return ClassField;
  108447. }(AbstractClassPart));
  108448. var ClassMethod = /** @class */ (function (_super) {
  108449. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ClassMethod, _super);
  108450. function ClassMethod(name, params, body, type, modifiers) {
  108451. if (modifiers === void 0) { modifiers = null; }
  108452. var _this = _super.call(this, type, modifiers) || this;
  108453. _this.name = name;
  108454. _this.params = params;
  108455. _this.body = body;
  108456. return _this;
  108457. }
  108458. /**
  108459. * @param {?} m
  108460. * @return {?}
  108461. */
  108462. ClassMethod.prototype.isEquivalent = /**
  108463. * @param {?} m
  108464. * @return {?}
  108465. */
  108466. function (m) {
  108467. return this.name === m.name && areAllEquivalent(this.body, m.body);
  108468. };
  108469. return ClassMethod;
  108470. }(AbstractClassPart));
  108471. var ClassGetter = /** @class */ (function (_super) {
  108472. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ClassGetter, _super);
  108473. function ClassGetter(name, body, type, modifiers) {
  108474. if (modifiers === void 0) { modifiers = null; }
  108475. var _this = _super.call(this, type, modifiers) || this;
  108476. _this.name = name;
  108477. _this.body = body;
  108478. return _this;
  108479. }
  108480. /**
  108481. * @param {?} m
  108482. * @return {?}
  108483. */
  108484. ClassGetter.prototype.isEquivalent = /**
  108485. * @param {?} m
  108486. * @return {?}
  108487. */
  108488. function (m) {
  108489. return this.name === m.name && areAllEquivalent(this.body, m.body);
  108490. };
  108491. return ClassGetter;
  108492. }(AbstractClassPart));
  108493. var ClassStmt = /** @class */ (function (_super) {
  108494. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ClassStmt, _super);
  108495. function ClassStmt(name, parent, fields, getters, constructorMethod, methods, modifiers, sourceSpan) {
  108496. if (modifiers === void 0) { modifiers = null; }
  108497. var _this = _super.call(this, modifiers, sourceSpan) || this;
  108498. _this.name = name;
  108499. _this.parent = parent;
  108500. _this.fields = fields;
  108501. _this.getters = getters;
  108502. _this.constructorMethod = constructorMethod;
  108503. _this.methods = methods;
  108504. return _this;
  108505. }
  108506. /**
  108507. * @param {?} stmt
  108508. * @return {?}
  108509. */
  108510. ClassStmt.prototype.isEquivalent = /**
  108511. * @param {?} stmt
  108512. * @return {?}
  108513. */
  108514. function (stmt) {
  108515. return stmt instanceof ClassStmt && this.name === stmt.name &&
  108516. nullSafeIsEquivalent(this.parent, stmt.parent) &&
  108517. areAllEquivalent(this.fields, stmt.fields) &&
  108518. areAllEquivalent(this.getters, stmt.getters) &&
  108519. this.constructorMethod.isEquivalent(stmt.constructorMethod) &&
  108520. areAllEquivalent(this.methods, stmt.methods);
  108521. };
  108522. /**
  108523. * @param {?} visitor
  108524. * @param {?} context
  108525. * @return {?}
  108526. */
  108527. ClassStmt.prototype.visitStatement = /**
  108528. * @param {?} visitor
  108529. * @param {?} context
  108530. * @return {?}
  108531. */
  108532. function (visitor, context) {
  108533. return visitor.visitDeclareClassStmt(this, context);
  108534. };
  108535. return ClassStmt;
  108536. }(Statement));
  108537. var IfStmt = /** @class */ (function (_super) {
  108538. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(IfStmt, _super);
  108539. function IfStmt(condition, trueCase, falseCase, sourceSpan) {
  108540. if (falseCase === void 0) { falseCase = []; }
  108541. var _this = _super.call(this, null, sourceSpan) || this;
  108542. _this.condition = condition;
  108543. _this.trueCase = trueCase;
  108544. _this.falseCase = falseCase;
  108545. return _this;
  108546. }
  108547. /**
  108548. * @param {?} stmt
  108549. * @return {?}
  108550. */
  108551. IfStmt.prototype.isEquivalent = /**
  108552. * @param {?} stmt
  108553. * @return {?}
  108554. */
  108555. function (stmt) {
  108556. return stmt instanceof IfStmt && this.condition.isEquivalent(stmt.condition) &&
  108557. areAllEquivalent(this.trueCase, stmt.trueCase) &&
  108558. areAllEquivalent(this.falseCase, stmt.falseCase);
  108559. };
  108560. /**
  108561. * @param {?} visitor
  108562. * @param {?} context
  108563. * @return {?}
  108564. */
  108565. IfStmt.prototype.visitStatement = /**
  108566. * @param {?} visitor
  108567. * @param {?} context
  108568. * @return {?}
  108569. */
  108570. function (visitor, context) {
  108571. return visitor.visitIfStmt(this, context);
  108572. };
  108573. return IfStmt;
  108574. }(Statement));
  108575. var CommentStmt = /** @class */ (function (_super) {
  108576. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(CommentStmt, _super);
  108577. function CommentStmt(comment, sourceSpan) {
  108578. var _this = _super.call(this, null, sourceSpan) || this;
  108579. _this.comment = comment;
  108580. return _this;
  108581. }
  108582. /**
  108583. * @param {?} stmt
  108584. * @return {?}
  108585. */
  108586. CommentStmt.prototype.isEquivalent = /**
  108587. * @param {?} stmt
  108588. * @return {?}
  108589. */
  108590. function (stmt) { return stmt instanceof CommentStmt; };
  108591. /**
  108592. * @param {?} visitor
  108593. * @param {?} context
  108594. * @return {?}
  108595. */
  108596. CommentStmt.prototype.visitStatement = /**
  108597. * @param {?} visitor
  108598. * @param {?} context
  108599. * @return {?}
  108600. */
  108601. function (visitor, context) {
  108602. return visitor.visitCommentStmt(this, context);
  108603. };
  108604. return CommentStmt;
  108605. }(Statement));
  108606. var TryCatchStmt = /** @class */ (function (_super) {
  108607. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(TryCatchStmt, _super);
  108608. function TryCatchStmt(bodyStmts, catchStmts, sourceSpan) {
  108609. var _this = _super.call(this, null, sourceSpan) || this;
  108610. _this.bodyStmts = bodyStmts;
  108611. _this.catchStmts = catchStmts;
  108612. return _this;
  108613. }
  108614. /**
  108615. * @param {?} stmt
  108616. * @return {?}
  108617. */
  108618. TryCatchStmt.prototype.isEquivalent = /**
  108619. * @param {?} stmt
  108620. * @return {?}
  108621. */
  108622. function (stmt) {
  108623. return stmt instanceof TryCatchStmt && areAllEquivalent(this.bodyStmts, stmt.bodyStmts) &&
  108624. areAllEquivalent(this.catchStmts, stmt.catchStmts);
  108625. };
  108626. /**
  108627. * @param {?} visitor
  108628. * @param {?} context
  108629. * @return {?}
  108630. */
  108631. TryCatchStmt.prototype.visitStatement = /**
  108632. * @param {?} visitor
  108633. * @param {?} context
  108634. * @return {?}
  108635. */
  108636. function (visitor, context) {
  108637. return visitor.visitTryCatchStmt(this, context);
  108638. };
  108639. return TryCatchStmt;
  108640. }(Statement));
  108641. var ThrowStmt = /** @class */ (function (_super) {
  108642. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ThrowStmt, _super);
  108643. function ThrowStmt(error, sourceSpan) {
  108644. var _this = _super.call(this, null, sourceSpan) || this;
  108645. _this.error = error;
  108646. return _this;
  108647. }
  108648. /**
  108649. * @param {?} stmt
  108650. * @return {?}
  108651. */
  108652. ThrowStmt.prototype.isEquivalent = /**
  108653. * @param {?} stmt
  108654. * @return {?}
  108655. */
  108656. function (stmt) {
  108657. return stmt instanceof TryCatchStmt && this.error.isEquivalent(stmt.error);
  108658. };
  108659. /**
  108660. * @param {?} visitor
  108661. * @param {?} context
  108662. * @return {?}
  108663. */
  108664. ThrowStmt.prototype.visitStatement = /**
  108665. * @param {?} visitor
  108666. * @param {?} context
  108667. * @return {?}
  108668. */
  108669. function (visitor, context) {
  108670. return visitor.visitThrowStmt(this, context);
  108671. };
  108672. return ThrowStmt;
  108673. }(Statement));
  108674. /**
  108675. * @record
  108676. */
  108677. var AstTransformer$1 = /** @class */ (function () {
  108678. function AstTransformer() {
  108679. }
  108680. /**
  108681. * @param {?} expr
  108682. * @param {?} context
  108683. * @return {?}
  108684. */
  108685. AstTransformer.prototype.transformExpr = /**
  108686. * @param {?} expr
  108687. * @param {?} context
  108688. * @return {?}
  108689. */
  108690. function (expr, context) { return expr; };
  108691. /**
  108692. * @param {?} stmt
  108693. * @param {?} context
  108694. * @return {?}
  108695. */
  108696. AstTransformer.prototype.transformStmt = /**
  108697. * @param {?} stmt
  108698. * @param {?} context
  108699. * @return {?}
  108700. */
  108701. function (stmt, context) { return stmt; };
  108702. /**
  108703. * @param {?} ast
  108704. * @param {?} context
  108705. * @return {?}
  108706. */
  108707. AstTransformer.prototype.visitReadVarExpr = /**
  108708. * @param {?} ast
  108709. * @param {?} context
  108710. * @return {?}
  108711. */
  108712. function (ast, context) { return this.transformExpr(ast, context); };
  108713. /**
  108714. * @param {?} expr
  108715. * @param {?} context
  108716. * @return {?}
  108717. */
  108718. AstTransformer.prototype.visitWriteVarExpr = /**
  108719. * @param {?} expr
  108720. * @param {?} context
  108721. * @return {?}
  108722. */
  108723. function (expr, context) {
  108724. return this.transformExpr(new WriteVarExpr(expr.name, expr.value.visitExpression(this, context), expr.type, expr.sourceSpan), context);
  108725. };
  108726. /**
  108727. * @param {?} expr
  108728. * @param {?} context
  108729. * @return {?}
  108730. */
  108731. AstTransformer.prototype.visitWriteKeyExpr = /**
  108732. * @param {?} expr
  108733. * @param {?} context
  108734. * @return {?}
  108735. */
  108736. function (expr, context) {
  108737. return this.transformExpr(new WriteKeyExpr(expr.receiver.visitExpression(this, context), expr.index.visitExpression(this, context), expr.value.visitExpression(this, context), expr.type, expr.sourceSpan), context);
  108738. };
  108739. /**
  108740. * @param {?} expr
  108741. * @param {?} context
  108742. * @return {?}
  108743. */
  108744. AstTransformer.prototype.visitWritePropExpr = /**
  108745. * @param {?} expr
  108746. * @param {?} context
  108747. * @return {?}
  108748. */
  108749. function (expr, context) {
  108750. return this.transformExpr(new WritePropExpr(expr.receiver.visitExpression(this, context), expr.name, expr.value.visitExpression(this, context), expr.type, expr.sourceSpan), context);
  108751. };
  108752. /**
  108753. * @param {?} ast
  108754. * @param {?} context
  108755. * @return {?}
  108756. */
  108757. AstTransformer.prototype.visitInvokeMethodExpr = /**
  108758. * @param {?} ast
  108759. * @param {?} context
  108760. * @return {?}
  108761. */
  108762. function (ast, context) {
  108763. var /** @type {?} */ method = ast.builtin || ast.name;
  108764. return this.transformExpr(new InvokeMethodExpr(ast.receiver.visitExpression(this, context), /** @type {?} */ ((method)), this.visitAllExpressions(ast.args, context), ast.type, ast.sourceSpan), context);
  108765. };
  108766. /**
  108767. * @param {?} ast
  108768. * @param {?} context
  108769. * @return {?}
  108770. */
  108771. AstTransformer.prototype.visitInvokeFunctionExpr = /**
  108772. * @param {?} ast
  108773. * @param {?} context
  108774. * @return {?}
  108775. */
  108776. function (ast, context) {
  108777. return this.transformExpr(new InvokeFunctionExpr(ast.fn.visitExpression(this, context), this.visitAllExpressions(ast.args, context), ast.type, ast.sourceSpan), context);
  108778. };
  108779. /**
  108780. * @param {?} ast
  108781. * @param {?} context
  108782. * @return {?}
  108783. */
  108784. AstTransformer.prototype.visitInstantiateExpr = /**
  108785. * @param {?} ast
  108786. * @param {?} context
  108787. * @return {?}
  108788. */
  108789. function (ast, context) {
  108790. return this.transformExpr(new InstantiateExpr(ast.classExpr.visitExpression(this, context), this.visitAllExpressions(ast.args, context), ast.type, ast.sourceSpan), context);
  108791. };
  108792. /**
  108793. * @param {?} ast
  108794. * @param {?} context
  108795. * @return {?}
  108796. */
  108797. AstTransformer.prototype.visitLiteralExpr = /**
  108798. * @param {?} ast
  108799. * @param {?} context
  108800. * @return {?}
  108801. */
  108802. function (ast, context) { return this.transformExpr(ast, context); };
  108803. /**
  108804. * @param {?} ast
  108805. * @param {?} context
  108806. * @return {?}
  108807. */
  108808. AstTransformer.prototype.visitExternalExpr = /**
  108809. * @param {?} ast
  108810. * @param {?} context
  108811. * @return {?}
  108812. */
  108813. function (ast, context) {
  108814. return this.transformExpr(ast, context);
  108815. };
  108816. /**
  108817. * @param {?} ast
  108818. * @param {?} context
  108819. * @return {?}
  108820. */
  108821. AstTransformer.prototype.visitConditionalExpr = /**
  108822. * @param {?} ast
  108823. * @param {?} context
  108824. * @return {?}
  108825. */
  108826. function (ast, context) {
  108827. return this.transformExpr(new ConditionalExpr(ast.condition.visitExpression(this, context), ast.trueCase.visitExpression(this, context), /** @type {?} */ ((ast.falseCase)).visitExpression(this, context), ast.type, ast.sourceSpan), context);
  108828. };
  108829. /**
  108830. * @param {?} ast
  108831. * @param {?} context
  108832. * @return {?}
  108833. */
  108834. AstTransformer.prototype.visitNotExpr = /**
  108835. * @param {?} ast
  108836. * @param {?} context
  108837. * @return {?}
  108838. */
  108839. function (ast, context) {
  108840. return this.transformExpr(new NotExpr(ast.condition.visitExpression(this, context), ast.sourceSpan), context);
  108841. };
  108842. /**
  108843. * @param {?} ast
  108844. * @param {?} context
  108845. * @return {?}
  108846. */
  108847. AstTransformer.prototype.visitAssertNotNullExpr = /**
  108848. * @param {?} ast
  108849. * @param {?} context
  108850. * @return {?}
  108851. */
  108852. function (ast, context) {
  108853. return this.transformExpr(new AssertNotNull(ast.condition.visitExpression(this, context), ast.sourceSpan), context);
  108854. };
  108855. /**
  108856. * @param {?} ast
  108857. * @param {?} context
  108858. * @return {?}
  108859. */
  108860. AstTransformer.prototype.visitCastExpr = /**
  108861. * @param {?} ast
  108862. * @param {?} context
  108863. * @return {?}
  108864. */
  108865. function (ast, context) {
  108866. return this.transformExpr(new CastExpr(ast.value.visitExpression(this, context), ast.type, ast.sourceSpan), context);
  108867. };
  108868. /**
  108869. * @param {?} ast
  108870. * @param {?} context
  108871. * @return {?}
  108872. */
  108873. AstTransformer.prototype.visitFunctionExpr = /**
  108874. * @param {?} ast
  108875. * @param {?} context
  108876. * @return {?}
  108877. */
  108878. function (ast, context) {
  108879. return this.transformExpr(new FunctionExpr(ast.params, this.visitAllStatements(ast.statements, context), ast.type, ast.sourceSpan), context);
  108880. };
  108881. /**
  108882. * @param {?} ast
  108883. * @param {?} context
  108884. * @return {?}
  108885. */
  108886. AstTransformer.prototype.visitBinaryOperatorExpr = /**
  108887. * @param {?} ast
  108888. * @param {?} context
  108889. * @return {?}
  108890. */
  108891. function (ast, context) {
  108892. return this.transformExpr(new BinaryOperatorExpr(ast.operator, ast.lhs.visitExpression(this, context), ast.rhs.visitExpression(this, context), ast.type, ast.sourceSpan), context);
  108893. };
  108894. /**
  108895. * @param {?} ast
  108896. * @param {?} context
  108897. * @return {?}
  108898. */
  108899. AstTransformer.prototype.visitReadPropExpr = /**
  108900. * @param {?} ast
  108901. * @param {?} context
  108902. * @return {?}
  108903. */
  108904. function (ast, context) {
  108905. return this.transformExpr(new ReadPropExpr(ast.receiver.visitExpression(this, context), ast.name, ast.type, ast.sourceSpan), context);
  108906. };
  108907. /**
  108908. * @param {?} ast
  108909. * @param {?} context
  108910. * @return {?}
  108911. */
  108912. AstTransformer.prototype.visitReadKeyExpr = /**
  108913. * @param {?} ast
  108914. * @param {?} context
  108915. * @return {?}
  108916. */
  108917. function (ast, context) {
  108918. return this.transformExpr(new ReadKeyExpr(ast.receiver.visitExpression(this, context), ast.index.visitExpression(this, context), ast.type, ast.sourceSpan), context);
  108919. };
  108920. /**
  108921. * @param {?} ast
  108922. * @param {?} context
  108923. * @return {?}
  108924. */
  108925. AstTransformer.prototype.visitLiteralArrayExpr = /**
  108926. * @param {?} ast
  108927. * @param {?} context
  108928. * @return {?}
  108929. */
  108930. function (ast, context) {
  108931. return this.transformExpr(new LiteralArrayExpr(this.visitAllExpressions(ast.entries, context), ast.type, ast.sourceSpan), context);
  108932. };
  108933. /**
  108934. * @param {?} ast
  108935. * @param {?} context
  108936. * @return {?}
  108937. */
  108938. AstTransformer.prototype.visitLiteralMapExpr = /**
  108939. * @param {?} ast
  108940. * @param {?} context
  108941. * @return {?}
  108942. */
  108943. function (ast, context) {
  108944. var _this = this;
  108945. var /** @type {?} */ entries = ast.entries.map(function (entry) {
  108946. return new LiteralMapEntry(entry.key, entry.value.visitExpression(_this, context), entry.quoted);
  108947. });
  108948. var /** @type {?} */ mapType = new MapType(ast.valueType, null);
  108949. return this.transformExpr(new LiteralMapExpr(entries, mapType, ast.sourceSpan), context);
  108950. };
  108951. /**
  108952. * @param {?} ast
  108953. * @param {?} context
  108954. * @return {?}
  108955. */
  108956. AstTransformer.prototype.visitCommaExpr = /**
  108957. * @param {?} ast
  108958. * @param {?} context
  108959. * @return {?}
  108960. */
  108961. function (ast, context) {
  108962. return this.transformExpr(new CommaExpr(this.visitAllExpressions(ast.parts, context), ast.sourceSpan), context);
  108963. };
  108964. /**
  108965. * @param {?} exprs
  108966. * @param {?} context
  108967. * @return {?}
  108968. */
  108969. AstTransformer.prototype.visitAllExpressions = /**
  108970. * @param {?} exprs
  108971. * @param {?} context
  108972. * @return {?}
  108973. */
  108974. function (exprs, context) {
  108975. var _this = this;
  108976. return exprs.map(function (expr) { return expr.visitExpression(_this, context); });
  108977. };
  108978. /**
  108979. * @param {?} stmt
  108980. * @param {?} context
  108981. * @return {?}
  108982. */
  108983. AstTransformer.prototype.visitDeclareVarStmt = /**
  108984. * @param {?} stmt
  108985. * @param {?} context
  108986. * @return {?}
  108987. */
  108988. function (stmt, context) {
  108989. return this.transformStmt(new DeclareVarStmt(stmt.name, stmt.value.visitExpression(this, context), stmt.type, stmt.modifiers, stmt.sourceSpan), context);
  108990. };
  108991. /**
  108992. * @param {?} stmt
  108993. * @param {?} context
  108994. * @return {?}
  108995. */
  108996. AstTransformer.prototype.visitDeclareFunctionStmt = /**
  108997. * @param {?} stmt
  108998. * @param {?} context
  108999. * @return {?}
  109000. */
  109001. function (stmt, context) {
  109002. return this.transformStmt(new DeclareFunctionStmt(stmt.name, stmt.params, this.visitAllStatements(stmt.statements, context), stmt.type, stmt.modifiers, stmt.sourceSpan), context);
  109003. };
  109004. /**
  109005. * @param {?} stmt
  109006. * @param {?} context
  109007. * @return {?}
  109008. */
  109009. AstTransformer.prototype.visitExpressionStmt = /**
  109010. * @param {?} stmt
  109011. * @param {?} context
  109012. * @return {?}
  109013. */
  109014. function (stmt, context) {
  109015. return this.transformStmt(new ExpressionStatement(stmt.expr.visitExpression(this, context), stmt.sourceSpan), context);
  109016. };
  109017. /**
  109018. * @param {?} stmt
  109019. * @param {?} context
  109020. * @return {?}
  109021. */
  109022. AstTransformer.prototype.visitReturnStmt = /**
  109023. * @param {?} stmt
  109024. * @param {?} context
  109025. * @return {?}
  109026. */
  109027. function (stmt, context) {
  109028. return this.transformStmt(new ReturnStatement(stmt.value.visitExpression(this, context), stmt.sourceSpan), context);
  109029. };
  109030. /**
  109031. * @param {?} stmt
  109032. * @param {?} context
  109033. * @return {?}
  109034. */
  109035. AstTransformer.prototype.visitDeclareClassStmt = /**
  109036. * @param {?} stmt
  109037. * @param {?} context
  109038. * @return {?}
  109039. */
  109040. function (stmt, context) {
  109041. var _this = this;
  109042. var /** @type {?} */ parent = /** @type {?} */ ((stmt.parent)).visitExpression(this, context);
  109043. var /** @type {?} */ getters = stmt.getters.map(function (getter) {
  109044. return new ClassGetter(getter.name, _this.visitAllStatements(getter.body, context), getter.type, getter.modifiers);
  109045. });
  109046. var /** @type {?} */ ctorMethod = stmt.constructorMethod &&
  109047. new ClassMethod(stmt.constructorMethod.name, stmt.constructorMethod.params, this.visitAllStatements(stmt.constructorMethod.body, context), stmt.constructorMethod.type, stmt.constructorMethod.modifiers);
  109048. var /** @type {?} */ methods = stmt.methods.map(function (method) {
  109049. return new ClassMethod(method.name, method.params, _this.visitAllStatements(method.body, context), method.type, method.modifiers);
  109050. });
  109051. return this.transformStmt(new ClassStmt(stmt.name, parent, stmt.fields, getters, ctorMethod, methods, stmt.modifiers, stmt.sourceSpan), context);
  109052. };
  109053. /**
  109054. * @param {?} stmt
  109055. * @param {?} context
  109056. * @return {?}
  109057. */
  109058. AstTransformer.prototype.visitIfStmt = /**
  109059. * @param {?} stmt
  109060. * @param {?} context
  109061. * @return {?}
  109062. */
  109063. function (stmt, context) {
  109064. return this.transformStmt(new IfStmt(stmt.condition.visitExpression(this, context), this.visitAllStatements(stmt.trueCase, context), this.visitAllStatements(stmt.falseCase, context), stmt.sourceSpan), context);
  109065. };
  109066. /**
  109067. * @param {?} stmt
  109068. * @param {?} context
  109069. * @return {?}
  109070. */
  109071. AstTransformer.prototype.visitTryCatchStmt = /**
  109072. * @param {?} stmt
  109073. * @param {?} context
  109074. * @return {?}
  109075. */
  109076. function (stmt, context) {
  109077. return this.transformStmt(new TryCatchStmt(this.visitAllStatements(stmt.bodyStmts, context), this.visitAllStatements(stmt.catchStmts, context), stmt.sourceSpan), context);
  109078. };
  109079. /**
  109080. * @param {?} stmt
  109081. * @param {?} context
  109082. * @return {?}
  109083. */
  109084. AstTransformer.prototype.visitThrowStmt = /**
  109085. * @param {?} stmt
  109086. * @param {?} context
  109087. * @return {?}
  109088. */
  109089. function (stmt, context) {
  109090. return this.transformStmt(new ThrowStmt(stmt.error.visitExpression(this, context), stmt.sourceSpan), context);
  109091. };
  109092. /**
  109093. * @param {?} stmt
  109094. * @param {?} context
  109095. * @return {?}
  109096. */
  109097. AstTransformer.prototype.visitCommentStmt = /**
  109098. * @param {?} stmt
  109099. * @param {?} context
  109100. * @return {?}
  109101. */
  109102. function (stmt, context) {
  109103. return this.transformStmt(stmt, context);
  109104. };
  109105. /**
  109106. * @param {?} stmts
  109107. * @param {?} context
  109108. * @return {?}
  109109. */
  109110. AstTransformer.prototype.visitAllStatements = /**
  109111. * @param {?} stmts
  109112. * @param {?} context
  109113. * @return {?}
  109114. */
  109115. function (stmts, context) {
  109116. var _this = this;
  109117. return stmts.map(function (stmt) { return stmt.visitStatement(_this, context); });
  109118. };
  109119. return AstTransformer;
  109120. }());
  109121. var RecursiveAstVisitor$1 = /** @class */ (function () {
  109122. function RecursiveAstVisitor() {
  109123. }
  109124. /**
  109125. * @param {?} ast
  109126. * @param {?} context
  109127. * @return {?}
  109128. */
  109129. RecursiveAstVisitor.prototype.visitType = /**
  109130. * @param {?} ast
  109131. * @param {?} context
  109132. * @return {?}
  109133. */
  109134. function (ast, context) { return ast; };
  109135. /**
  109136. * @param {?} ast
  109137. * @param {?} context
  109138. * @return {?}
  109139. */
  109140. RecursiveAstVisitor.prototype.visitExpression = /**
  109141. * @param {?} ast
  109142. * @param {?} context
  109143. * @return {?}
  109144. */
  109145. function (ast, context) {
  109146. if (ast.type) {
  109147. ast.type.visitType(this, context);
  109148. }
  109149. return ast;
  109150. };
  109151. /**
  109152. * @param {?} type
  109153. * @param {?} context
  109154. * @return {?}
  109155. */
  109156. RecursiveAstVisitor.prototype.visitBuiltintType = /**
  109157. * @param {?} type
  109158. * @param {?} context
  109159. * @return {?}
  109160. */
  109161. function (type, context) { return this.visitType(type, context); };
  109162. /**
  109163. * @param {?} type
  109164. * @param {?} context
  109165. * @return {?}
  109166. */
  109167. RecursiveAstVisitor.prototype.visitExpressionType = /**
  109168. * @param {?} type
  109169. * @param {?} context
  109170. * @return {?}
  109171. */
  109172. function (type, context) {
  109173. type.value.visitExpression(this, context);
  109174. return this.visitType(type, context);
  109175. };
  109176. /**
  109177. * @param {?} type
  109178. * @param {?} context
  109179. * @return {?}
  109180. */
  109181. RecursiveAstVisitor.prototype.visitArrayType = /**
  109182. * @param {?} type
  109183. * @param {?} context
  109184. * @return {?}
  109185. */
  109186. function (type, context) { return this.visitType(type, context); };
  109187. /**
  109188. * @param {?} type
  109189. * @param {?} context
  109190. * @return {?}
  109191. */
  109192. RecursiveAstVisitor.prototype.visitMapType = /**
  109193. * @param {?} type
  109194. * @param {?} context
  109195. * @return {?}
  109196. */
  109197. function (type, context) { return this.visitType(type, context); };
  109198. /**
  109199. * @param {?} ast
  109200. * @param {?} context
  109201. * @return {?}
  109202. */
  109203. RecursiveAstVisitor.prototype.visitReadVarExpr = /**
  109204. * @param {?} ast
  109205. * @param {?} context
  109206. * @return {?}
  109207. */
  109208. function (ast, context) {
  109209. return this.visitExpression(ast, context);
  109210. };
  109211. /**
  109212. * @param {?} ast
  109213. * @param {?} context
  109214. * @return {?}
  109215. */
  109216. RecursiveAstVisitor.prototype.visitWriteVarExpr = /**
  109217. * @param {?} ast
  109218. * @param {?} context
  109219. * @return {?}
  109220. */
  109221. function (ast, context) {
  109222. ast.value.visitExpression(this, context);
  109223. return this.visitExpression(ast, context);
  109224. };
  109225. /**
  109226. * @param {?} ast
  109227. * @param {?} context
  109228. * @return {?}
  109229. */
  109230. RecursiveAstVisitor.prototype.visitWriteKeyExpr = /**
  109231. * @param {?} ast
  109232. * @param {?} context
  109233. * @return {?}
  109234. */
  109235. function (ast, context) {
  109236. ast.receiver.visitExpression(this, context);
  109237. ast.index.visitExpression(this, context);
  109238. ast.value.visitExpression(this, context);
  109239. return this.visitExpression(ast, context);
  109240. };
  109241. /**
  109242. * @param {?} ast
  109243. * @param {?} context
  109244. * @return {?}
  109245. */
  109246. RecursiveAstVisitor.prototype.visitWritePropExpr = /**
  109247. * @param {?} ast
  109248. * @param {?} context
  109249. * @return {?}
  109250. */
  109251. function (ast, context) {
  109252. ast.receiver.visitExpression(this, context);
  109253. ast.value.visitExpression(this, context);
  109254. return this.visitExpression(ast, context);
  109255. };
  109256. /**
  109257. * @param {?} ast
  109258. * @param {?} context
  109259. * @return {?}
  109260. */
  109261. RecursiveAstVisitor.prototype.visitInvokeMethodExpr = /**
  109262. * @param {?} ast
  109263. * @param {?} context
  109264. * @return {?}
  109265. */
  109266. function (ast, context) {
  109267. ast.receiver.visitExpression(this, context);
  109268. this.visitAllExpressions(ast.args, context);
  109269. return this.visitExpression(ast, context);
  109270. };
  109271. /**
  109272. * @param {?} ast
  109273. * @param {?} context
  109274. * @return {?}
  109275. */
  109276. RecursiveAstVisitor.prototype.visitInvokeFunctionExpr = /**
  109277. * @param {?} ast
  109278. * @param {?} context
  109279. * @return {?}
  109280. */
  109281. function (ast, context) {
  109282. ast.fn.visitExpression(this, context);
  109283. this.visitAllExpressions(ast.args, context);
  109284. return this.visitExpression(ast, context);
  109285. };
  109286. /**
  109287. * @param {?} ast
  109288. * @param {?} context
  109289. * @return {?}
  109290. */
  109291. RecursiveAstVisitor.prototype.visitInstantiateExpr = /**
  109292. * @param {?} ast
  109293. * @param {?} context
  109294. * @return {?}
  109295. */
  109296. function (ast, context) {
  109297. ast.classExpr.visitExpression(this, context);
  109298. this.visitAllExpressions(ast.args, context);
  109299. return this.visitExpression(ast, context);
  109300. };
  109301. /**
  109302. * @param {?} ast
  109303. * @param {?} context
  109304. * @return {?}
  109305. */
  109306. RecursiveAstVisitor.prototype.visitLiteralExpr = /**
  109307. * @param {?} ast
  109308. * @param {?} context
  109309. * @return {?}
  109310. */
  109311. function (ast, context) {
  109312. return this.visitExpression(ast, context);
  109313. };
  109314. /**
  109315. * @param {?} ast
  109316. * @param {?} context
  109317. * @return {?}
  109318. */
  109319. RecursiveAstVisitor.prototype.visitExternalExpr = /**
  109320. * @param {?} ast
  109321. * @param {?} context
  109322. * @return {?}
  109323. */
  109324. function (ast, context) {
  109325. var _this = this;
  109326. if (ast.typeParams) {
  109327. ast.typeParams.forEach(function (type) { return type.visitType(_this, context); });
  109328. }
  109329. return this.visitExpression(ast, context);
  109330. };
  109331. /**
  109332. * @param {?} ast
  109333. * @param {?} context
  109334. * @return {?}
  109335. */
  109336. RecursiveAstVisitor.prototype.visitConditionalExpr = /**
  109337. * @param {?} ast
  109338. * @param {?} context
  109339. * @return {?}
  109340. */
  109341. function (ast, context) {
  109342. ast.condition.visitExpression(this, context);
  109343. ast.trueCase.visitExpression(this, context); /** @type {?} */
  109344. ((ast.falseCase)).visitExpression(this, context);
  109345. return this.visitExpression(ast, context);
  109346. };
  109347. /**
  109348. * @param {?} ast
  109349. * @param {?} context
  109350. * @return {?}
  109351. */
  109352. RecursiveAstVisitor.prototype.visitNotExpr = /**
  109353. * @param {?} ast
  109354. * @param {?} context
  109355. * @return {?}
  109356. */
  109357. function (ast, context) {
  109358. ast.condition.visitExpression(this, context);
  109359. return this.visitExpression(ast, context);
  109360. };
  109361. /**
  109362. * @param {?} ast
  109363. * @param {?} context
  109364. * @return {?}
  109365. */
  109366. RecursiveAstVisitor.prototype.visitAssertNotNullExpr = /**
  109367. * @param {?} ast
  109368. * @param {?} context
  109369. * @return {?}
  109370. */
  109371. function (ast, context) {
  109372. ast.condition.visitExpression(this, context);
  109373. return this.visitExpression(ast, context);
  109374. };
  109375. /**
  109376. * @param {?} ast
  109377. * @param {?} context
  109378. * @return {?}
  109379. */
  109380. RecursiveAstVisitor.prototype.visitCastExpr = /**
  109381. * @param {?} ast
  109382. * @param {?} context
  109383. * @return {?}
  109384. */
  109385. function (ast, context) {
  109386. ast.value.visitExpression(this, context);
  109387. return this.visitExpression(ast, context);
  109388. };
  109389. /**
  109390. * @param {?} ast
  109391. * @param {?} context
  109392. * @return {?}
  109393. */
  109394. RecursiveAstVisitor.prototype.visitFunctionExpr = /**
  109395. * @param {?} ast
  109396. * @param {?} context
  109397. * @return {?}
  109398. */
  109399. function (ast, context) {
  109400. this.visitAllStatements(ast.statements, context);
  109401. return this.visitExpression(ast, context);
  109402. };
  109403. /**
  109404. * @param {?} ast
  109405. * @param {?} context
  109406. * @return {?}
  109407. */
  109408. RecursiveAstVisitor.prototype.visitBinaryOperatorExpr = /**
  109409. * @param {?} ast
  109410. * @param {?} context
  109411. * @return {?}
  109412. */
  109413. function (ast, context) {
  109414. ast.lhs.visitExpression(this, context);
  109415. ast.rhs.visitExpression(this, context);
  109416. return this.visitExpression(ast, context);
  109417. };
  109418. /**
  109419. * @param {?} ast
  109420. * @param {?} context
  109421. * @return {?}
  109422. */
  109423. RecursiveAstVisitor.prototype.visitReadPropExpr = /**
  109424. * @param {?} ast
  109425. * @param {?} context
  109426. * @return {?}
  109427. */
  109428. function (ast, context) {
  109429. ast.receiver.visitExpression(this, context);
  109430. return this.visitExpression(ast, context);
  109431. };
  109432. /**
  109433. * @param {?} ast
  109434. * @param {?} context
  109435. * @return {?}
  109436. */
  109437. RecursiveAstVisitor.prototype.visitReadKeyExpr = /**
  109438. * @param {?} ast
  109439. * @param {?} context
  109440. * @return {?}
  109441. */
  109442. function (ast, context) {
  109443. ast.receiver.visitExpression(this, context);
  109444. ast.index.visitExpression(this, context);
  109445. return this.visitExpression(ast, context);
  109446. };
  109447. /**
  109448. * @param {?} ast
  109449. * @param {?} context
  109450. * @return {?}
  109451. */
  109452. RecursiveAstVisitor.prototype.visitLiteralArrayExpr = /**
  109453. * @param {?} ast
  109454. * @param {?} context
  109455. * @return {?}
  109456. */
  109457. function (ast, context) {
  109458. this.visitAllExpressions(ast.entries, context);
  109459. return this.visitExpression(ast, context);
  109460. };
  109461. /**
  109462. * @param {?} ast
  109463. * @param {?} context
  109464. * @return {?}
  109465. */
  109466. RecursiveAstVisitor.prototype.visitLiteralMapExpr = /**
  109467. * @param {?} ast
  109468. * @param {?} context
  109469. * @return {?}
  109470. */
  109471. function (ast, context) {
  109472. var _this = this;
  109473. ast.entries.forEach(function (entry) { return entry.value.visitExpression(_this, context); });
  109474. return this.visitExpression(ast, context);
  109475. };
  109476. /**
  109477. * @param {?} ast
  109478. * @param {?} context
  109479. * @return {?}
  109480. */
  109481. RecursiveAstVisitor.prototype.visitCommaExpr = /**
  109482. * @param {?} ast
  109483. * @param {?} context
  109484. * @return {?}
  109485. */
  109486. function (ast, context) {
  109487. this.visitAllExpressions(ast.parts, context);
  109488. return this.visitExpression(ast, context);
  109489. };
  109490. /**
  109491. * @param {?} exprs
  109492. * @param {?} context
  109493. * @return {?}
  109494. */
  109495. RecursiveAstVisitor.prototype.visitAllExpressions = /**
  109496. * @param {?} exprs
  109497. * @param {?} context
  109498. * @return {?}
  109499. */
  109500. function (exprs, context) {
  109501. var _this = this;
  109502. exprs.forEach(function (expr) { return expr.visitExpression(_this, context); });
  109503. };
  109504. /**
  109505. * @param {?} stmt
  109506. * @param {?} context
  109507. * @return {?}
  109508. */
  109509. RecursiveAstVisitor.prototype.visitDeclareVarStmt = /**
  109510. * @param {?} stmt
  109511. * @param {?} context
  109512. * @return {?}
  109513. */
  109514. function (stmt, context) {
  109515. stmt.value.visitExpression(this, context);
  109516. if (stmt.type) {
  109517. stmt.type.visitType(this, context);
  109518. }
  109519. return stmt;
  109520. };
  109521. /**
  109522. * @param {?} stmt
  109523. * @param {?} context
  109524. * @return {?}
  109525. */
  109526. RecursiveAstVisitor.prototype.visitDeclareFunctionStmt = /**
  109527. * @param {?} stmt
  109528. * @param {?} context
  109529. * @return {?}
  109530. */
  109531. function (stmt, context) {
  109532. this.visitAllStatements(stmt.statements, context);
  109533. if (stmt.type) {
  109534. stmt.type.visitType(this, context);
  109535. }
  109536. return stmt;
  109537. };
  109538. /**
  109539. * @param {?} stmt
  109540. * @param {?} context
  109541. * @return {?}
  109542. */
  109543. RecursiveAstVisitor.prototype.visitExpressionStmt = /**
  109544. * @param {?} stmt
  109545. * @param {?} context
  109546. * @return {?}
  109547. */
  109548. function (stmt, context) {
  109549. stmt.expr.visitExpression(this, context);
  109550. return stmt;
  109551. };
  109552. /**
  109553. * @param {?} stmt
  109554. * @param {?} context
  109555. * @return {?}
  109556. */
  109557. RecursiveAstVisitor.prototype.visitReturnStmt = /**
  109558. * @param {?} stmt
  109559. * @param {?} context
  109560. * @return {?}
  109561. */
  109562. function (stmt, context) {
  109563. stmt.value.visitExpression(this, context);
  109564. return stmt;
  109565. };
  109566. /**
  109567. * @param {?} stmt
  109568. * @param {?} context
  109569. * @return {?}
  109570. */
  109571. RecursiveAstVisitor.prototype.visitDeclareClassStmt = /**
  109572. * @param {?} stmt
  109573. * @param {?} context
  109574. * @return {?}
  109575. */
  109576. function (stmt, context) {
  109577. var _this = this;
  109578. /** @type {?} */ ((stmt.parent)).visitExpression(this, context);
  109579. stmt.getters.forEach(function (getter) { return _this.visitAllStatements(getter.body, context); });
  109580. if (stmt.constructorMethod) {
  109581. this.visitAllStatements(stmt.constructorMethod.body, context);
  109582. }
  109583. stmt.methods.forEach(function (method) { return _this.visitAllStatements(method.body, context); });
  109584. return stmt;
  109585. };
  109586. /**
  109587. * @param {?} stmt
  109588. * @param {?} context
  109589. * @return {?}
  109590. */
  109591. RecursiveAstVisitor.prototype.visitIfStmt = /**
  109592. * @param {?} stmt
  109593. * @param {?} context
  109594. * @return {?}
  109595. */
  109596. function (stmt, context) {
  109597. stmt.condition.visitExpression(this, context);
  109598. this.visitAllStatements(stmt.trueCase, context);
  109599. this.visitAllStatements(stmt.falseCase, context);
  109600. return stmt;
  109601. };
  109602. /**
  109603. * @param {?} stmt
  109604. * @param {?} context
  109605. * @return {?}
  109606. */
  109607. RecursiveAstVisitor.prototype.visitTryCatchStmt = /**
  109608. * @param {?} stmt
  109609. * @param {?} context
  109610. * @return {?}
  109611. */
  109612. function (stmt, context) {
  109613. this.visitAllStatements(stmt.bodyStmts, context);
  109614. this.visitAllStatements(stmt.catchStmts, context);
  109615. return stmt;
  109616. };
  109617. /**
  109618. * @param {?} stmt
  109619. * @param {?} context
  109620. * @return {?}
  109621. */
  109622. RecursiveAstVisitor.prototype.visitThrowStmt = /**
  109623. * @param {?} stmt
  109624. * @param {?} context
  109625. * @return {?}
  109626. */
  109627. function (stmt, context) {
  109628. stmt.error.visitExpression(this, context);
  109629. return stmt;
  109630. };
  109631. /**
  109632. * @param {?} stmt
  109633. * @param {?} context
  109634. * @return {?}
  109635. */
  109636. RecursiveAstVisitor.prototype.visitCommentStmt = /**
  109637. * @param {?} stmt
  109638. * @param {?} context
  109639. * @return {?}
  109640. */
  109641. function (stmt, context) { return stmt; };
  109642. /**
  109643. * @param {?} stmts
  109644. * @param {?} context
  109645. * @return {?}
  109646. */
  109647. RecursiveAstVisitor.prototype.visitAllStatements = /**
  109648. * @param {?} stmts
  109649. * @param {?} context
  109650. * @return {?}
  109651. */
  109652. function (stmts, context) {
  109653. var _this = this;
  109654. stmts.forEach(function (stmt) { return stmt.visitStatement(_this, context); });
  109655. };
  109656. return RecursiveAstVisitor;
  109657. }());
  109658. /**
  109659. * @param {?} stmts
  109660. * @return {?}
  109661. */
  109662. function findReadVarNames(stmts) {
  109663. var /** @type {?} */ visitor = new _ReadVarVisitor();
  109664. visitor.visitAllStatements(stmts, null);
  109665. return visitor.varNames;
  109666. }
  109667. var _ReadVarVisitor = /** @class */ (function (_super) {
  109668. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_ReadVarVisitor, _super);
  109669. function _ReadVarVisitor() {
  109670. var _this = _super !== null && _super.apply(this, arguments) || this;
  109671. _this.varNames = new Set();
  109672. return _this;
  109673. }
  109674. /**
  109675. * @param {?} stmt
  109676. * @param {?} context
  109677. * @return {?}
  109678. */
  109679. _ReadVarVisitor.prototype.visitDeclareFunctionStmt = /**
  109680. * @param {?} stmt
  109681. * @param {?} context
  109682. * @return {?}
  109683. */
  109684. function (stmt, context) {
  109685. // Don't descend into nested functions
  109686. return stmt;
  109687. };
  109688. /**
  109689. * @param {?} stmt
  109690. * @param {?} context
  109691. * @return {?}
  109692. */
  109693. _ReadVarVisitor.prototype.visitDeclareClassStmt = /**
  109694. * @param {?} stmt
  109695. * @param {?} context
  109696. * @return {?}
  109697. */
  109698. function (stmt, context) {
  109699. // Don't descend into nested classes
  109700. return stmt;
  109701. };
  109702. /**
  109703. * @param {?} ast
  109704. * @param {?} context
  109705. * @return {?}
  109706. */
  109707. _ReadVarVisitor.prototype.visitReadVarExpr = /**
  109708. * @param {?} ast
  109709. * @param {?} context
  109710. * @return {?}
  109711. */
  109712. function (ast, context) {
  109713. if (ast.name) {
  109714. this.varNames.add(ast.name);
  109715. }
  109716. return null;
  109717. };
  109718. return _ReadVarVisitor;
  109719. }(RecursiveAstVisitor$1));
  109720. /**
  109721. * @param {?} stmts
  109722. * @return {?}
  109723. */
  109724. function collectExternalReferences(stmts) {
  109725. var /** @type {?} */ visitor = new _FindExternalReferencesVisitor();
  109726. visitor.visitAllStatements(stmts, null);
  109727. return visitor.externalReferences;
  109728. }
  109729. var _FindExternalReferencesVisitor = /** @class */ (function (_super) {
  109730. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_FindExternalReferencesVisitor, _super);
  109731. function _FindExternalReferencesVisitor() {
  109732. var _this = _super !== null && _super.apply(this, arguments) || this;
  109733. _this.externalReferences = [];
  109734. return _this;
  109735. }
  109736. /**
  109737. * @param {?} e
  109738. * @param {?} context
  109739. * @return {?}
  109740. */
  109741. _FindExternalReferencesVisitor.prototype.visitExternalExpr = /**
  109742. * @param {?} e
  109743. * @param {?} context
  109744. * @return {?}
  109745. */
  109746. function (e, context) {
  109747. this.externalReferences.push(e.value);
  109748. return _super.prototype.visitExternalExpr.call(this, e, context);
  109749. };
  109750. return _FindExternalReferencesVisitor;
  109751. }(RecursiveAstVisitor$1));
  109752. /**
  109753. * @param {?} stmt
  109754. * @param {?} sourceSpan
  109755. * @return {?}
  109756. */
  109757. function applySourceSpanToStatementIfNeeded(stmt, sourceSpan) {
  109758. if (!sourceSpan) {
  109759. return stmt;
  109760. }
  109761. var /** @type {?} */ transformer = new _ApplySourceSpanTransformer(sourceSpan);
  109762. return stmt.visitStatement(transformer, null);
  109763. }
  109764. /**
  109765. * @param {?} expr
  109766. * @param {?} sourceSpan
  109767. * @return {?}
  109768. */
  109769. function applySourceSpanToExpressionIfNeeded(expr, sourceSpan) {
  109770. if (!sourceSpan) {
  109771. return expr;
  109772. }
  109773. var /** @type {?} */ transformer = new _ApplySourceSpanTransformer(sourceSpan);
  109774. return expr.visitExpression(transformer, null);
  109775. }
  109776. var _ApplySourceSpanTransformer = /** @class */ (function (_super) {
  109777. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_ApplySourceSpanTransformer, _super);
  109778. function _ApplySourceSpanTransformer(sourceSpan) {
  109779. var _this = _super.call(this) || this;
  109780. _this.sourceSpan = sourceSpan;
  109781. return _this;
  109782. }
  109783. /**
  109784. * @param {?} obj
  109785. * @return {?}
  109786. */
  109787. _ApplySourceSpanTransformer.prototype._clone = /**
  109788. * @param {?} obj
  109789. * @return {?}
  109790. */
  109791. function (obj) {
  109792. var /** @type {?} */ clone = Object.create(obj.constructor.prototype);
  109793. for (var /** @type {?} */ prop in obj) {
  109794. clone[prop] = obj[prop];
  109795. }
  109796. return clone;
  109797. };
  109798. /**
  109799. * @param {?} expr
  109800. * @param {?} context
  109801. * @return {?}
  109802. */
  109803. _ApplySourceSpanTransformer.prototype.transformExpr = /**
  109804. * @param {?} expr
  109805. * @param {?} context
  109806. * @return {?}
  109807. */
  109808. function (expr, context) {
  109809. if (!expr.sourceSpan) {
  109810. expr = this._clone(expr);
  109811. expr.sourceSpan = this.sourceSpan;
  109812. }
  109813. return expr;
  109814. };
  109815. /**
  109816. * @param {?} stmt
  109817. * @param {?} context
  109818. * @return {?}
  109819. */
  109820. _ApplySourceSpanTransformer.prototype.transformStmt = /**
  109821. * @param {?} stmt
  109822. * @param {?} context
  109823. * @return {?}
  109824. */
  109825. function (stmt, context) {
  109826. if (!stmt.sourceSpan) {
  109827. stmt = this._clone(stmt);
  109828. stmt.sourceSpan = this.sourceSpan;
  109829. }
  109830. return stmt;
  109831. };
  109832. return _ApplySourceSpanTransformer;
  109833. }(AstTransformer$1));
  109834. /**
  109835. * @param {?} name
  109836. * @param {?=} type
  109837. * @param {?=} sourceSpan
  109838. * @return {?}
  109839. */
  109840. function variable(name, type, sourceSpan) {
  109841. return new ReadVarExpr(name, type, sourceSpan);
  109842. }
  109843. /**
  109844. * @param {?} id
  109845. * @param {?=} typeParams
  109846. * @param {?=} sourceSpan
  109847. * @return {?}
  109848. */
  109849. function importExpr(id, typeParams, sourceSpan) {
  109850. if (typeParams === void 0) { typeParams = null; }
  109851. return new ExternalExpr(id, null, typeParams, sourceSpan);
  109852. }
  109853. /**
  109854. * @param {?} id
  109855. * @param {?=} typeParams
  109856. * @param {?=} typeModifiers
  109857. * @return {?}
  109858. */
  109859. function importType(id, typeParams, typeModifiers) {
  109860. if (typeParams === void 0) { typeParams = null; }
  109861. if (typeModifiers === void 0) { typeModifiers = null; }
  109862. return id != null ? expressionType(importExpr(id, typeParams, null), typeModifiers) : null;
  109863. }
  109864. /**
  109865. * @param {?} expr
  109866. * @param {?=} typeModifiers
  109867. * @return {?}
  109868. */
  109869. function expressionType(expr, typeModifiers) {
  109870. if (typeModifiers === void 0) { typeModifiers = null; }
  109871. return new ExpressionType(expr, typeModifiers);
  109872. }
  109873. /**
  109874. * @param {?} values
  109875. * @param {?=} type
  109876. * @param {?=} sourceSpan
  109877. * @return {?}
  109878. */
  109879. function literalArr(values, type, sourceSpan) {
  109880. return new LiteralArrayExpr(values, type, sourceSpan);
  109881. }
  109882. /**
  109883. * @param {?} values
  109884. * @param {?=} type
  109885. * @return {?}
  109886. */
  109887. function literalMap(values, type) {
  109888. if (type === void 0) { type = null; }
  109889. return new LiteralMapExpr(values.map(function (e) { return new LiteralMapEntry(e.key, e.value, e.quoted); }), type, null);
  109890. }
  109891. /**
  109892. * @param {?} expr
  109893. * @param {?=} sourceSpan
  109894. * @return {?}
  109895. */
  109896. function not(expr, sourceSpan) {
  109897. return new NotExpr(expr, sourceSpan);
  109898. }
  109899. /**
  109900. * @param {?} expr
  109901. * @param {?=} sourceSpan
  109902. * @return {?}
  109903. */
  109904. function assertNotNull(expr, sourceSpan) {
  109905. return new AssertNotNull(expr, sourceSpan);
  109906. }
  109907. /**
  109908. * @param {?} params
  109909. * @param {?} body
  109910. * @param {?=} type
  109911. * @param {?=} sourceSpan
  109912. * @return {?}
  109913. */
  109914. function fn(params, body, type, sourceSpan) {
  109915. return new FunctionExpr(params, body, type, sourceSpan);
  109916. }
  109917. /**
  109918. * @param {?} value
  109919. * @param {?=} type
  109920. * @param {?=} sourceSpan
  109921. * @return {?}
  109922. */
  109923. function literal(value, type, sourceSpan) {
  109924. return new LiteralExpr(value, type, sourceSpan);
  109925. }
  109926. /**
  109927. * @fileoverview added by tsickle
  109928. * @suppress {checkTypes} checked by tsc
  109929. */
  109930. /**
  109931. * @license
  109932. * Copyright Google Inc. All Rights Reserved.
  109933. *
  109934. * Use of this source code is governed by an MIT-style license that can be
  109935. * found in the LICENSE file at https://angular.io/license
  109936. */
  109937. var ProviderError = /** @class */ (function (_super) {
  109938. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ProviderError, _super);
  109939. function ProviderError(message, span) {
  109940. return _super.call(this, span, message) || this;
  109941. }
  109942. return ProviderError;
  109943. }(ParseError));
  109944. /**
  109945. * @record
  109946. */
  109947. var ProviderViewContext = /** @class */ (function () {
  109948. function ProviderViewContext(reflector, component) {
  109949. var _this = this;
  109950. this.reflector = reflector;
  109951. this.component = component;
  109952. this.errors = [];
  109953. this.viewQueries = _getViewQueries(component);
  109954. this.viewProviders = new Map();
  109955. component.viewProviders.forEach(function (provider) {
  109956. if (_this.viewProviders.get(tokenReference(provider.token)) == null) {
  109957. _this.viewProviders.set(tokenReference(provider.token), true);
  109958. }
  109959. });
  109960. }
  109961. return ProviderViewContext;
  109962. }());
  109963. var ProviderElementContext = /** @class */ (function () {
  109964. function ProviderElementContext(viewContext, _parent, _isViewRoot, _directiveAsts, attrs, refs, isTemplate, contentQueryStartId, _sourceSpan) {
  109965. var _this = this;
  109966. this.viewContext = viewContext;
  109967. this._parent = _parent;
  109968. this._isViewRoot = _isViewRoot;
  109969. this._directiveAsts = _directiveAsts;
  109970. this._sourceSpan = _sourceSpan;
  109971. this._transformedProviders = new Map();
  109972. this._seenProviders = new Map();
  109973. this._queriedTokens = new Map();
  109974. this.transformedHasViewContainer = false;
  109975. this._attrs = {};
  109976. attrs.forEach(function (attrAst) { return _this._attrs[attrAst.name] = attrAst.value; });
  109977. var /** @type {?} */ directivesMeta = _directiveAsts.map(function (directiveAst) { return directiveAst.directive; });
  109978. this._allProviders =
  109979. _resolveProvidersFromDirectives(directivesMeta, _sourceSpan, viewContext.errors);
  109980. this._contentQueries = _getContentQueries(contentQueryStartId, directivesMeta);
  109981. Array.from(this._allProviders.values()).forEach(function (provider) {
  109982. _this._addQueryReadsTo(provider.token, provider.token, _this._queriedTokens);
  109983. });
  109984. if (isTemplate) {
  109985. var /** @type {?} */ templateRefId = createTokenForExternalReference(this.viewContext.reflector, Identifiers.TemplateRef);
  109986. this._addQueryReadsTo(templateRefId, templateRefId, this._queriedTokens);
  109987. }
  109988. refs.forEach(function (refAst) {
  109989. var /** @type {?} */ defaultQueryValue = refAst.value ||
  109990. createTokenForExternalReference(_this.viewContext.reflector, Identifiers.ElementRef);
  109991. _this._addQueryReadsTo({ value: refAst.name }, defaultQueryValue, _this._queriedTokens);
  109992. });
  109993. if (this._queriedTokens.get(this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef))) {
  109994. this.transformedHasViewContainer = true;
  109995. }
  109996. // create the providers that we know are eager first
  109997. Array.from(this._allProviders.values()).forEach(function (provider) {
  109998. var /** @type {?} */ eager = provider.eager || _this._queriedTokens.get(tokenReference(provider.token));
  109999. if (eager) {
  110000. _this._getOrCreateLocalProvider(provider.providerType, provider.token, true);
  110001. }
  110002. });
  110003. }
  110004. /**
  110005. * @return {?}
  110006. */
  110007. ProviderElementContext.prototype.afterElement = /**
  110008. * @return {?}
  110009. */
  110010. function () {
  110011. var _this = this;
  110012. // collect lazy providers
  110013. Array.from(this._allProviders.values()).forEach(function (provider) {
  110014. _this._getOrCreateLocalProvider(provider.providerType, provider.token, false);
  110015. });
  110016. };
  110017. Object.defineProperty(ProviderElementContext.prototype, "transformProviders", {
  110018. get: /**
  110019. * @return {?}
  110020. */
  110021. function () {
  110022. // Note: Maps keep their insertion order.
  110023. var /** @type {?} */ lazyProviders = [];
  110024. var /** @type {?} */ eagerProviders = [];
  110025. this._transformedProviders.forEach(function (provider) {
  110026. if (provider.eager) {
  110027. eagerProviders.push(provider);
  110028. }
  110029. else {
  110030. lazyProviders.push(provider);
  110031. }
  110032. });
  110033. return lazyProviders.concat(eagerProviders);
  110034. },
  110035. enumerable: true,
  110036. configurable: true
  110037. });
  110038. Object.defineProperty(ProviderElementContext.prototype, "transformedDirectiveAsts", {
  110039. get: /**
  110040. * @return {?}
  110041. */
  110042. function () {
  110043. var /** @type {?} */ sortedProviderTypes = this.transformProviders.map(function (provider) { return provider.token.identifier; });
  110044. var /** @type {?} */ sortedDirectives = this._directiveAsts.slice();
  110045. sortedDirectives.sort(function (dir1, dir2) {
  110046. return sortedProviderTypes.indexOf(dir1.directive.type) -
  110047. sortedProviderTypes.indexOf(dir2.directive.type);
  110048. });
  110049. return sortedDirectives;
  110050. },
  110051. enumerable: true,
  110052. configurable: true
  110053. });
  110054. Object.defineProperty(ProviderElementContext.prototype, "queryMatches", {
  110055. get: /**
  110056. * @return {?}
  110057. */
  110058. function () {
  110059. var /** @type {?} */ allMatches = [];
  110060. this._queriedTokens.forEach(function (matches) { allMatches.push.apply(allMatches, matches); });
  110061. return allMatches;
  110062. },
  110063. enumerable: true,
  110064. configurable: true
  110065. });
  110066. /**
  110067. * @param {?} token
  110068. * @param {?} defaultValue
  110069. * @param {?} queryReadTokens
  110070. * @return {?}
  110071. */
  110072. ProviderElementContext.prototype._addQueryReadsTo = /**
  110073. * @param {?} token
  110074. * @param {?} defaultValue
  110075. * @param {?} queryReadTokens
  110076. * @return {?}
  110077. */
  110078. function (token, defaultValue, queryReadTokens) {
  110079. this._getQueriesFor(token).forEach(function (query) {
  110080. var /** @type {?} */ queryValue = query.meta.read || defaultValue;
  110081. var /** @type {?} */ tokenRef = tokenReference(queryValue);
  110082. var /** @type {?} */ queryMatches = queryReadTokens.get(tokenRef);
  110083. if (!queryMatches) {
  110084. queryMatches = [];
  110085. queryReadTokens.set(tokenRef, queryMatches);
  110086. }
  110087. queryMatches.push({ queryId: query.queryId, value: queryValue });
  110088. });
  110089. };
  110090. /**
  110091. * @param {?} token
  110092. * @return {?}
  110093. */
  110094. ProviderElementContext.prototype._getQueriesFor = /**
  110095. * @param {?} token
  110096. * @return {?}
  110097. */
  110098. function (token) {
  110099. var /** @type {?} */ result = [];
  110100. var /** @type {?} */ currentEl = this;
  110101. var /** @type {?} */ distance = 0;
  110102. var /** @type {?} */ queries;
  110103. while (currentEl !== null) {
  110104. queries = currentEl._contentQueries.get(tokenReference(token));
  110105. if (queries) {
  110106. result.push.apply(result, queries.filter(function (query) { return query.meta.descendants || distance <= 1; }));
  110107. }
  110108. if (currentEl._directiveAsts.length > 0) {
  110109. distance++;
  110110. }
  110111. currentEl = currentEl._parent;
  110112. }
  110113. queries = this.viewContext.viewQueries.get(tokenReference(token));
  110114. if (queries) {
  110115. result.push.apply(result, queries);
  110116. }
  110117. return result;
  110118. };
  110119. /**
  110120. * @param {?} requestingProviderType
  110121. * @param {?} token
  110122. * @param {?} eager
  110123. * @return {?}
  110124. */
  110125. ProviderElementContext.prototype._getOrCreateLocalProvider = /**
  110126. * @param {?} requestingProviderType
  110127. * @param {?} token
  110128. * @param {?} eager
  110129. * @return {?}
  110130. */
  110131. function (requestingProviderType, token, eager) {
  110132. var _this = this;
  110133. var /** @type {?} */ resolvedProvider = this._allProviders.get(tokenReference(token));
  110134. if (!resolvedProvider || ((requestingProviderType === ProviderAstType.Directive ||
  110135. requestingProviderType === ProviderAstType.PublicService) &&
  110136. resolvedProvider.providerType === ProviderAstType.PrivateService) ||
  110137. ((requestingProviderType === ProviderAstType.PrivateService ||
  110138. requestingProviderType === ProviderAstType.PublicService) &&
  110139. resolvedProvider.providerType === ProviderAstType.Builtin)) {
  110140. return null;
  110141. }
  110142. var /** @type {?} */ transformedProviderAst = this._transformedProviders.get(tokenReference(token));
  110143. if (transformedProviderAst) {
  110144. return transformedProviderAst;
  110145. }
  110146. if (this._seenProviders.get(tokenReference(token)) != null) {
  110147. this.viewContext.errors.push(new ProviderError("Cannot instantiate cyclic dependency! " + tokenName(token), this._sourceSpan));
  110148. return null;
  110149. }
  110150. this._seenProviders.set(tokenReference(token), true);
  110151. var /** @type {?} */ transformedProviders = resolvedProvider.providers.map(function (provider) {
  110152. var /** @type {?} */ transformedUseValue = provider.useValue;
  110153. var /** @type {?} */ transformedUseExisting = /** @type {?} */ ((provider.useExisting));
  110154. var /** @type {?} */ transformedDeps = /** @type {?} */ ((undefined));
  110155. if (provider.useExisting != null) {
  110156. var /** @type {?} */ existingDiDep = /** @type {?} */ ((_this._getDependency(resolvedProvider.providerType, { token: provider.useExisting }, eager)));
  110157. if (existingDiDep.token != null) {
  110158. transformedUseExisting = existingDiDep.token;
  110159. }
  110160. else {
  110161. transformedUseExisting = /** @type {?} */ ((null));
  110162. transformedUseValue = existingDiDep.value;
  110163. }
  110164. }
  110165. else if (provider.useFactory) {
  110166. var /** @type {?} */ deps = provider.deps || provider.useFactory.diDeps;
  110167. transformedDeps =
  110168. deps.map(function (dep) { return ((_this._getDependency(resolvedProvider.providerType, dep, eager))); });
  110169. }
  110170. else if (provider.useClass) {
  110171. var /** @type {?} */ deps = provider.deps || provider.useClass.diDeps;
  110172. transformedDeps =
  110173. deps.map(function (dep) { return ((_this._getDependency(resolvedProvider.providerType, dep, eager))); });
  110174. }
  110175. return _transformProvider(provider, {
  110176. useExisting: transformedUseExisting,
  110177. useValue: transformedUseValue,
  110178. deps: transformedDeps
  110179. });
  110180. });
  110181. transformedProviderAst =
  110182. _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders });
  110183. this._transformedProviders.set(tokenReference(token), transformedProviderAst);
  110184. return transformedProviderAst;
  110185. };
  110186. /**
  110187. * @param {?} requestingProviderType
  110188. * @param {?} dep
  110189. * @param {?=} eager
  110190. * @return {?}
  110191. */
  110192. ProviderElementContext.prototype._getLocalDependency = /**
  110193. * @param {?} requestingProviderType
  110194. * @param {?} dep
  110195. * @param {?=} eager
  110196. * @return {?}
  110197. */
  110198. function (requestingProviderType, dep, eager) {
  110199. if (eager === void 0) { eager = false; }
  110200. if (dep.isAttribute) {
  110201. var /** @type {?} */ attrValue = this._attrs[/** @type {?} */ ((dep.token)).value];
  110202. return { isValue: true, value: attrValue == null ? null : attrValue };
  110203. }
  110204. if (dep.token != null) {
  110205. // access builtints
  110206. if ((requestingProviderType === ProviderAstType.Directive ||
  110207. requestingProviderType === ProviderAstType.Component)) {
  110208. if (tokenReference(dep.token) ===
  110209. this.viewContext.reflector.resolveExternalReference(Identifiers.Renderer) ||
  110210. tokenReference(dep.token) ===
  110211. this.viewContext.reflector.resolveExternalReference(Identifiers.ElementRef) ||
  110212. tokenReference(dep.token) ===
  110213. this.viewContext.reflector.resolveExternalReference(Identifiers.ChangeDetectorRef) ||
  110214. tokenReference(dep.token) ===
  110215. this.viewContext.reflector.resolveExternalReference(Identifiers.TemplateRef)) {
  110216. return dep;
  110217. }
  110218. if (tokenReference(dep.token) ===
  110219. this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) {
  110220. (/** @type {?} */ (this)).transformedHasViewContainer = true;
  110221. }
  110222. }
  110223. // access the injector
  110224. if (tokenReference(dep.token) ===
  110225. this.viewContext.reflector.resolveExternalReference(Identifiers.Injector)) {
  110226. return dep;
  110227. }
  110228. // access providers
  110229. if (this._getOrCreateLocalProvider(requestingProviderType, dep.token, eager) != null) {
  110230. return dep;
  110231. }
  110232. }
  110233. return null;
  110234. };
  110235. /**
  110236. * @param {?} requestingProviderType
  110237. * @param {?} dep
  110238. * @param {?=} eager
  110239. * @return {?}
  110240. */
  110241. ProviderElementContext.prototype._getDependency = /**
  110242. * @param {?} requestingProviderType
  110243. * @param {?} dep
  110244. * @param {?=} eager
  110245. * @return {?}
  110246. */
  110247. function (requestingProviderType, dep, eager) {
  110248. if (eager === void 0) { eager = false; }
  110249. var /** @type {?} */ currElement = this;
  110250. var /** @type {?} */ currEager = eager;
  110251. var /** @type {?} */ result = null;
  110252. if (!dep.isSkipSelf) {
  110253. result = this._getLocalDependency(requestingProviderType, dep, eager);
  110254. }
  110255. if (dep.isSelf) {
  110256. if (!result && dep.isOptional) {
  110257. result = { isValue: true, value: null };
  110258. }
  110259. }
  110260. else {
  110261. // check parent elements
  110262. while (!result && currElement._parent) {
  110263. var /** @type {?} */ prevElement = currElement;
  110264. currElement = currElement._parent;
  110265. if (prevElement._isViewRoot) {
  110266. currEager = false;
  110267. }
  110268. result = currElement._getLocalDependency(ProviderAstType.PublicService, dep, currEager);
  110269. }
  110270. // check @Host restriction
  110271. if (!result) {
  110272. if (!dep.isHost || this.viewContext.component.isHost ||
  110273. this.viewContext.component.type.reference === tokenReference(/** @type {?} */ ((dep.token))) ||
  110274. this.viewContext.viewProviders.get(tokenReference(/** @type {?} */ ((dep.token)))) != null) {
  110275. result = dep;
  110276. }
  110277. else {
  110278. result = dep.isOptional ? result = { isValue: true, value: null } : null;
  110279. }
  110280. }
  110281. }
  110282. if (!result) {
  110283. this.viewContext.errors.push(new ProviderError("No provider for " + tokenName((/** @type {?} */ ((dep.token)))), this._sourceSpan));
  110284. }
  110285. return result;
  110286. };
  110287. return ProviderElementContext;
  110288. }());
  110289. var NgModuleProviderAnalyzer = /** @class */ (function () {
  110290. function NgModuleProviderAnalyzer(reflector, ngModule, extraProviders, sourceSpan) {
  110291. var _this = this;
  110292. this.reflector = reflector;
  110293. this._transformedProviders = new Map();
  110294. this._seenProviders = new Map();
  110295. this._errors = [];
  110296. this._allProviders = new Map();
  110297. ngModule.transitiveModule.modules.forEach(function (ngModuleType) {
  110298. var /** @type {?} */ ngModuleProvider = { token: { identifier: ngModuleType }, useClass: ngModuleType };
  110299. _resolveProviders([ngModuleProvider], ProviderAstType.PublicService, true, sourceSpan, _this._errors, _this._allProviders);
  110300. });
  110301. _resolveProviders(ngModule.transitiveModule.providers.map(function (entry) { return entry.provider; }).concat(extraProviders), ProviderAstType.PublicService, false, sourceSpan, this._errors, this._allProviders);
  110302. }
  110303. /**
  110304. * @return {?}
  110305. */
  110306. NgModuleProviderAnalyzer.prototype.parse = /**
  110307. * @return {?}
  110308. */
  110309. function () {
  110310. var _this = this;
  110311. Array.from(this._allProviders.values()).forEach(function (provider) {
  110312. _this._getOrCreateLocalProvider(provider.token, provider.eager);
  110313. });
  110314. if (this._errors.length > 0) {
  110315. var /** @type {?} */ errorString = this._errors.join('\n');
  110316. throw new Error("Provider parse errors:\n" + errorString);
  110317. }
  110318. // Note: Maps keep their insertion order.
  110319. var /** @type {?} */ lazyProviders = [];
  110320. var /** @type {?} */ eagerProviders = [];
  110321. this._transformedProviders.forEach(function (provider) {
  110322. if (provider.eager) {
  110323. eagerProviders.push(provider);
  110324. }
  110325. else {
  110326. lazyProviders.push(provider);
  110327. }
  110328. });
  110329. return lazyProviders.concat(eagerProviders);
  110330. };
  110331. /**
  110332. * @param {?} token
  110333. * @param {?} eager
  110334. * @return {?}
  110335. */
  110336. NgModuleProviderAnalyzer.prototype._getOrCreateLocalProvider = /**
  110337. * @param {?} token
  110338. * @param {?} eager
  110339. * @return {?}
  110340. */
  110341. function (token, eager) {
  110342. var _this = this;
  110343. var /** @type {?} */ resolvedProvider = this._allProviders.get(tokenReference(token));
  110344. if (!resolvedProvider) {
  110345. return null;
  110346. }
  110347. var /** @type {?} */ transformedProviderAst = this._transformedProviders.get(tokenReference(token));
  110348. if (transformedProviderAst) {
  110349. return transformedProviderAst;
  110350. }
  110351. if (this._seenProviders.get(tokenReference(token)) != null) {
  110352. this._errors.push(new ProviderError("Cannot instantiate cyclic dependency! " + tokenName(token), resolvedProvider.sourceSpan));
  110353. return null;
  110354. }
  110355. this._seenProviders.set(tokenReference(token), true);
  110356. var /** @type {?} */ transformedProviders = resolvedProvider.providers.map(function (provider) {
  110357. var /** @type {?} */ transformedUseValue = provider.useValue;
  110358. var /** @type {?} */ transformedUseExisting = /** @type {?} */ ((provider.useExisting));
  110359. var /** @type {?} */ transformedDeps = /** @type {?} */ ((undefined));
  110360. if (provider.useExisting != null) {
  110361. var /** @type {?} */ existingDiDep = _this._getDependency({ token: provider.useExisting }, eager, resolvedProvider.sourceSpan);
  110362. if (existingDiDep.token != null) {
  110363. transformedUseExisting = existingDiDep.token;
  110364. }
  110365. else {
  110366. transformedUseExisting = /** @type {?} */ ((null));
  110367. transformedUseValue = existingDiDep.value;
  110368. }
  110369. }
  110370. else if (provider.useFactory) {
  110371. var /** @type {?} */ deps = provider.deps || provider.useFactory.diDeps;
  110372. transformedDeps =
  110373. deps.map(function (dep) { return _this._getDependency(dep, eager, resolvedProvider.sourceSpan); });
  110374. }
  110375. else if (provider.useClass) {
  110376. var /** @type {?} */ deps = provider.deps || provider.useClass.diDeps;
  110377. transformedDeps =
  110378. deps.map(function (dep) { return _this._getDependency(dep, eager, resolvedProvider.sourceSpan); });
  110379. }
  110380. return _transformProvider(provider, {
  110381. useExisting: transformedUseExisting,
  110382. useValue: transformedUseValue,
  110383. deps: transformedDeps
  110384. });
  110385. });
  110386. transformedProviderAst =
  110387. _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders });
  110388. this._transformedProviders.set(tokenReference(token), transformedProviderAst);
  110389. return transformedProviderAst;
  110390. };
  110391. /**
  110392. * @param {?} dep
  110393. * @param {?=} eager
  110394. * @param {?=} requestorSourceSpan
  110395. * @return {?}
  110396. */
  110397. NgModuleProviderAnalyzer.prototype._getDependency = /**
  110398. * @param {?} dep
  110399. * @param {?=} eager
  110400. * @param {?=} requestorSourceSpan
  110401. * @return {?}
  110402. */
  110403. function (dep, eager, requestorSourceSpan) {
  110404. if (eager === void 0) { eager = false; }
  110405. var /** @type {?} */ foundLocal = false;
  110406. if (!dep.isSkipSelf && dep.token != null) {
  110407. // access the injector
  110408. if (tokenReference(dep.token) ===
  110409. this.reflector.resolveExternalReference(Identifiers.Injector) ||
  110410. tokenReference(dep.token) ===
  110411. this.reflector.resolveExternalReference(Identifiers.ComponentFactoryResolver)) {
  110412. foundLocal = true;
  110413. // access providers
  110414. }
  110415. else if (this._getOrCreateLocalProvider(dep.token, eager) != null) {
  110416. foundLocal = true;
  110417. }
  110418. }
  110419. var /** @type {?} */ result = dep;
  110420. if (dep.isSelf && !foundLocal) {
  110421. if (dep.isOptional) {
  110422. result = { isValue: true, value: null };
  110423. }
  110424. else {
  110425. this._errors.push(new ProviderError("No provider for " + tokenName((/** @type {?} */ ((dep.token)))), requestorSourceSpan));
  110426. }
  110427. }
  110428. return result;
  110429. };
  110430. return NgModuleProviderAnalyzer;
  110431. }());
  110432. /**
  110433. * @param {?} provider
  110434. * @param {?} __1
  110435. * @return {?}
  110436. */
  110437. function _transformProvider(provider, _a) {
  110438. var useExisting = _a.useExisting, useValue = _a.useValue, deps = _a.deps;
  110439. return {
  110440. token: provider.token,
  110441. useClass: provider.useClass,
  110442. useExisting: useExisting,
  110443. useFactory: provider.useFactory,
  110444. useValue: useValue,
  110445. deps: deps,
  110446. multi: provider.multi
  110447. };
  110448. }
  110449. /**
  110450. * @param {?} provider
  110451. * @param {?} __1
  110452. * @return {?}
  110453. */
  110454. function _transformProviderAst(provider, _a) {
  110455. var eager = _a.eager, providers = _a.providers;
  110456. return new ProviderAst(provider.token, provider.multiProvider, provider.eager || eager, providers, provider.providerType, provider.lifecycleHooks, provider.sourceSpan);
  110457. }
  110458. /**
  110459. * @param {?} directives
  110460. * @param {?} sourceSpan
  110461. * @param {?} targetErrors
  110462. * @return {?}
  110463. */
  110464. function _resolveProvidersFromDirectives(directives, sourceSpan, targetErrors) {
  110465. var /** @type {?} */ providersByToken = new Map();
  110466. directives.forEach(function (directive) {
  110467. var /** @type {?} */ dirProvider = { token: { identifier: directive.type }, useClass: directive.type };
  110468. _resolveProviders([dirProvider], directive.isComponent ? ProviderAstType.Component : ProviderAstType.Directive, true, sourceSpan, targetErrors, providersByToken);
  110469. });
  110470. // Note: directives need to be able to overwrite providers of a component!
  110471. var /** @type {?} */ directivesWithComponentFirst = directives.filter(function (dir) { return dir.isComponent; }).concat(directives.filter(function (dir) { return !dir.isComponent; }));
  110472. directivesWithComponentFirst.forEach(function (directive) {
  110473. _resolveProviders(directive.providers, ProviderAstType.PublicService, false, sourceSpan, targetErrors, providersByToken);
  110474. _resolveProviders(directive.viewProviders, ProviderAstType.PrivateService, false, sourceSpan, targetErrors, providersByToken);
  110475. });
  110476. return providersByToken;
  110477. }
  110478. /**
  110479. * @param {?} providers
  110480. * @param {?} providerType
  110481. * @param {?} eager
  110482. * @param {?} sourceSpan
  110483. * @param {?} targetErrors
  110484. * @param {?} targetProvidersByToken
  110485. * @return {?}
  110486. */
  110487. function _resolveProviders(providers, providerType, eager, sourceSpan, targetErrors, targetProvidersByToken) {
  110488. providers.forEach(function (provider) {
  110489. var /** @type {?} */ resolvedProvider = targetProvidersByToken.get(tokenReference(provider.token));
  110490. if (resolvedProvider != null && !!resolvedProvider.multiProvider !== !!provider.multi) {
  110491. targetErrors.push(new ProviderError("Mixing multi and non multi provider is not possible for token " + tokenName(resolvedProvider.token), sourceSpan));
  110492. }
  110493. if (!resolvedProvider) {
  110494. var /** @type {?} */ lifecycleHooks = provider.token.identifier &&
  110495. (/** @type {?} */ (provider.token.identifier)).lifecycleHooks ?
  110496. (/** @type {?} */ (provider.token.identifier)).lifecycleHooks :
  110497. [];
  110498. var /** @type {?} */ isUseValue = !(provider.useClass || provider.useExisting || provider.useFactory);
  110499. resolvedProvider = new ProviderAst(provider.token, !!provider.multi, eager || isUseValue, [provider], providerType, lifecycleHooks, sourceSpan);
  110500. targetProvidersByToken.set(tokenReference(provider.token), resolvedProvider);
  110501. }
  110502. else {
  110503. if (!provider.multi) {
  110504. resolvedProvider.providers.length = 0;
  110505. }
  110506. resolvedProvider.providers.push(provider);
  110507. }
  110508. });
  110509. }
  110510. /**
  110511. * @param {?} component
  110512. * @return {?}
  110513. */
  110514. function _getViewQueries(component) {
  110515. // Note: queries start with id 1 so we can use the number in a Bloom filter!
  110516. var /** @type {?} */ viewQueryId = 1;
  110517. var /** @type {?} */ viewQueries = new Map();
  110518. if (component.viewQueries) {
  110519. component.viewQueries.forEach(function (query) { return _addQueryToTokenMap(viewQueries, { meta: query, queryId: viewQueryId++ }); });
  110520. }
  110521. return viewQueries;
  110522. }
  110523. /**
  110524. * @param {?} contentQueryStartId
  110525. * @param {?} directives
  110526. * @return {?}
  110527. */
  110528. function _getContentQueries(contentQueryStartId, directives) {
  110529. var /** @type {?} */ contentQueryId = contentQueryStartId;
  110530. var /** @type {?} */ contentQueries = new Map();
  110531. directives.forEach(function (directive, directiveIndex) {
  110532. if (directive.queries) {
  110533. directive.queries.forEach(function (query) { return _addQueryToTokenMap(contentQueries, { meta: query, queryId: contentQueryId++ }); });
  110534. }
  110535. });
  110536. return contentQueries;
  110537. }
  110538. /**
  110539. * @param {?} map
  110540. * @param {?} query
  110541. * @return {?}
  110542. */
  110543. function _addQueryToTokenMap(map, query) {
  110544. query.meta.selectors.forEach(function (token) {
  110545. var /** @type {?} */ entry = map.get(tokenReference(token));
  110546. if (!entry) {
  110547. entry = [];
  110548. map.set(tokenReference(token), entry);
  110549. }
  110550. entry.push(query);
  110551. });
  110552. }
  110553. /**
  110554. * @fileoverview added by tsickle
  110555. * @suppress {checkTypes} checked by tsc
  110556. */
  110557. /**
  110558. * @license
  110559. * Copyright Google Inc. All Rights Reserved.
  110560. *
  110561. * Use of this source code is governed by an MIT-style license that can be
  110562. * found in the LICENSE file at https://angular.io/license
  110563. */
  110564. var QUOTED_KEYS = '$quoted$';
  110565. /**
  110566. * @param {?} ctx
  110567. * @param {?} value
  110568. * @param {?=} type
  110569. * @return {?}
  110570. */
  110571. function convertValueToOutputAst(ctx, value, type) {
  110572. if (type === void 0) { type = null; }
  110573. return visitValue(value, new _ValueOutputAstTransformer(ctx), type);
  110574. }
  110575. var _ValueOutputAstTransformer = /** @class */ (function () {
  110576. function _ValueOutputAstTransformer(ctx) {
  110577. this.ctx = ctx;
  110578. }
  110579. /**
  110580. * @param {?} arr
  110581. * @param {?} type
  110582. * @return {?}
  110583. */
  110584. _ValueOutputAstTransformer.prototype.visitArray = /**
  110585. * @param {?} arr
  110586. * @param {?} type
  110587. * @return {?}
  110588. */
  110589. function (arr, type) {
  110590. var _this = this;
  110591. return literalArr(arr.map(function (value) { return visitValue(value, _this, null); }), type);
  110592. };
  110593. /**
  110594. * @param {?} map
  110595. * @param {?} type
  110596. * @return {?}
  110597. */
  110598. _ValueOutputAstTransformer.prototype.visitStringMap = /**
  110599. * @param {?} map
  110600. * @param {?} type
  110601. * @return {?}
  110602. */
  110603. function (map, type) {
  110604. var _this = this;
  110605. var /** @type {?} */ entries = [];
  110606. var /** @type {?} */ quotedSet = new Set(map && map[QUOTED_KEYS]);
  110607. Object.keys(map).forEach(function (key) {
  110608. entries.push(new LiteralMapEntry(key, visitValue(map[key], _this, null), quotedSet.has(key)));
  110609. });
  110610. return new LiteralMapExpr(entries, type);
  110611. };
  110612. /**
  110613. * @param {?} value
  110614. * @param {?} type
  110615. * @return {?}
  110616. */
  110617. _ValueOutputAstTransformer.prototype.visitPrimitive = /**
  110618. * @param {?} value
  110619. * @param {?} type
  110620. * @return {?}
  110621. */
  110622. function (value, type) { return literal(value, type); };
  110623. /**
  110624. * @param {?} value
  110625. * @param {?} type
  110626. * @return {?}
  110627. */
  110628. _ValueOutputAstTransformer.prototype.visitOther = /**
  110629. * @param {?} value
  110630. * @param {?} type
  110631. * @return {?}
  110632. */
  110633. function (value, type) {
  110634. if (value instanceof Expression) {
  110635. return value;
  110636. }
  110637. else {
  110638. return this.ctx.importExpr(value);
  110639. }
  110640. };
  110641. return _ValueOutputAstTransformer;
  110642. }());
  110643. /**
  110644. * @fileoverview added by tsickle
  110645. * @suppress {checkTypes} checked by tsc
  110646. */
  110647. /**
  110648. * @license
  110649. * Copyright Google Inc. All Rights Reserved.
  110650. *
  110651. * Use of this source code is governed by an MIT-style license that can be
  110652. * found in the LICENSE file at https://angular.io/license
  110653. */
  110654. /**
  110655. * @param {?} ctx
  110656. * @param {?} providerAst
  110657. * @return {?}
  110658. */
  110659. function providerDef(ctx, providerAst) {
  110660. var /** @type {?} */ flags = 0;
  110661. if (!providerAst.eager) {
  110662. flags |= 4096 /* LazyProvider */;
  110663. }
  110664. if (providerAst.providerType === ProviderAstType.PrivateService) {
  110665. flags |= 8192 /* PrivateProvider */;
  110666. }
  110667. providerAst.lifecycleHooks.forEach(function (lifecycleHook) {
  110668. // for regular providers, we only support ngOnDestroy
  110669. if (lifecycleHook === LifecycleHooks.OnDestroy ||
  110670. providerAst.providerType === ProviderAstType.Directive ||
  110671. providerAst.providerType === ProviderAstType.Component) {
  110672. flags |= lifecycleHookToNodeFlag(lifecycleHook);
  110673. }
  110674. });
  110675. var _a = providerAst.multiProvider ?
  110676. multiProviderDef(ctx, flags, providerAst.providers) :
  110677. singleProviderDef(ctx, flags, providerAst.providerType, providerAst.providers[0]), providerExpr = _a.providerExpr, providerFlags = _a.flags, depsExpr = _a.depsExpr;
  110678. return {
  110679. providerExpr: providerExpr,
  110680. flags: providerFlags, depsExpr: depsExpr,
  110681. tokenExpr: tokenExpr(ctx, providerAst.token),
  110682. };
  110683. }
  110684. /**
  110685. * @param {?} ctx
  110686. * @param {?} flags
  110687. * @param {?} providers
  110688. * @return {?}
  110689. */
  110690. function multiProviderDef(ctx, flags, providers) {
  110691. var /** @type {?} */ allDepDefs = [];
  110692. var /** @type {?} */ allParams = [];
  110693. var /** @type {?} */ exprs = providers.map(function (provider, providerIndex) {
  110694. var /** @type {?} */ expr;
  110695. if (provider.useClass) {
  110696. var /** @type {?} */ depExprs = convertDeps(providerIndex, provider.deps || provider.useClass.diDeps);
  110697. expr = ctx.importExpr(provider.useClass.reference).instantiate(depExprs);
  110698. }
  110699. else if (provider.useFactory) {
  110700. var /** @type {?} */ depExprs = convertDeps(providerIndex, provider.deps || provider.useFactory.diDeps);
  110701. expr = ctx.importExpr(provider.useFactory.reference).callFn(depExprs);
  110702. }
  110703. else if (provider.useExisting) {
  110704. var /** @type {?} */ depExprs = convertDeps(providerIndex, [{ token: provider.useExisting }]);
  110705. expr = depExprs[0];
  110706. }
  110707. else {
  110708. expr = convertValueToOutputAst(ctx, provider.useValue);
  110709. }
  110710. return expr;
  110711. });
  110712. var /** @type {?} */ providerExpr = fn(allParams, [new ReturnStatement(literalArr(exprs))], INFERRED_TYPE);
  110713. return {
  110714. providerExpr: providerExpr,
  110715. flags: flags | 1024 /* TypeFactoryProvider */,
  110716. depsExpr: literalArr(allDepDefs)
  110717. };
  110718. /**
  110719. * @param {?} providerIndex
  110720. * @param {?} deps
  110721. * @return {?}
  110722. */
  110723. function convertDeps(providerIndex, deps) {
  110724. return deps.map(function (dep, depIndex) {
  110725. var /** @type {?} */ paramName = "p" + providerIndex + "_" + depIndex;
  110726. allParams.push(new FnParam(paramName, DYNAMIC_TYPE));
  110727. allDepDefs.push(depDef(ctx, dep));
  110728. return variable(paramName);
  110729. });
  110730. }
  110731. }
  110732. /**
  110733. * @param {?} ctx
  110734. * @param {?} flags
  110735. * @param {?} providerType
  110736. * @param {?} providerMeta
  110737. * @return {?}
  110738. */
  110739. function singleProviderDef(ctx, flags, providerType, providerMeta) {
  110740. var /** @type {?} */ providerExpr;
  110741. var /** @type {?} */ deps;
  110742. if (providerType === ProviderAstType.Directive || providerType === ProviderAstType.Component) {
  110743. providerExpr = ctx.importExpr(/** @type {?} */ ((providerMeta.useClass)).reference);
  110744. flags |= 16384 /* TypeDirective */;
  110745. deps = providerMeta.deps || /** @type {?} */ ((providerMeta.useClass)).diDeps;
  110746. }
  110747. else {
  110748. if (providerMeta.useClass) {
  110749. providerExpr = ctx.importExpr(providerMeta.useClass.reference);
  110750. flags |= 512 /* TypeClassProvider */;
  110751. deps = providerMeta.deps || providerMeta.useClass.diDeps;
  110752. }
  110753. else if (providerMeta.useFactory) {
  110754. providerExpr = ctx.importExpr(providerMeta.useFactory.reference);
  110755. flags |= 1024 /* TypeFactoryProvider */;
  110756. deps = providerMeta.deps || providerMeta.useFactory.diDeps;
  110757. }
  110758. else if (providerMeta.useExisting) {
  110759. providerExpr = NULL_EXPR;
  110760. flags |= 2048 /* TypeUseExistingProvider */;
  110761. deps = [{ token: providerMeta.useExisting }];
  110762. }
  110763. else {
  110764. providerExpr = convertValueToOutputAst(ctx, providerMeta.useValue);
  110765. flags |= 256 /* TypeValueProvider */;
  110766. deps = [];
  110767. }
  110768. }
  110769. var /** @type {?} */ depsExpr = literalArr(deps.map(function (dep) { return depDef(ctx, dep); }));
  110770. return { providerExpr: providerExpr, flags: flags, depsExpr: depsExpr };
  110771. }
  110772. /**
  110773. * @param {?} ctx
  110774. * @param {?} tokenMeta
  110775. * @return {?}
  110776. */
  110777. function tokenExpr(ctx, tokenMeta) {
  110778. return tokenMeta.identifier ? ctx.importExpr(tokenMeta.identifier.reference) :
  110779. literal(tokenMeta.value);
  110780. }
  110781. /**
  110782. * @param {?} ctx
  110783. * @param {?} dep
  110784. * @return {?}
  110785. */
  110786. function depDef(ctx, dep) {
  110787. // Note: the following fields have already been normalized out by provider_analyzer:
  110788. // - isAttribute, isSelf, isHost
  110789. var /** @type {?} */ expr = dep.isValue ? convertValueToOutputAst(ctx, dep.value) : tokenExpr(ctx, /** @type {?} */ ((dep.token)));
  110790. var /** @type {?} */ flags = 0;
  110791. if (dep.isSkipSelf) {
  110792. flags |= 1 /* SkipSelf */;
  110793. }
  110794. if (dep.isOptional) {
  110795. flags |= 2 /* Optional */;
  110796. }
  110797. if (dep.isValue) {
  110798. flags |= 8 /* Value */;
  110799. }
  110800. return flags === 0 /* None */ ? expr : literalArr([literal(flags), expr]);
  110801. }
  110802. /**
  110803. * @param {?} lifecycleHook
  110804. * @return {?}
  110805. */
  110806. function lifecycleHookToNodeFlag(lifecycleHook) {
  110807. var /** @type {?} */ nodeFlag = 0;
  110808. switch (lifecycleHook) {
  110809. case LifecycleHooks.AfterContentChecked:
  110810. nodeFlag = 2097152 /* AfterContentChecked */;
  110811. break;
  110812. case LifecycleHooks.AfterContentInit:
  110813. nodeFlag = 1048576 /* AfterContentInit */;
  110814. break;
  110815. case LifecycleHooks.AfterViewChecked:
  110816. nodeFlag = 8388608 /* AfterViewChecked */;
  110817. break;
  110818. case LifecycleHooks.AfterViewInit:
  110819. nodeFlag = 4194304 /* AfterViewInit */;
  110820. break;
  110821. case LifecycleHooks.DoCheck:
  110822. nodeFlag = 262144 /* DoCheck */;
  110823. break;
  110824. case LifecycleHooks.OnChanges:
  110825. nodeFlag = 524288 /* OnChanges */;
  110826. break;
  110827. case LifecycleHooks.OnDestroy:
  110828. nodeFlag = 131072 /* OnDestroy */;
  110829. break;
  110830. case LifecycleHooks.OnInit:
  110831. nodeFlag = 65536 /* OnInit */;
  110832. break;
  110833. }
  110834. return nodeFlag;
  110835. }
  110836. /**
  110837. * @param {?} reflector
  110838. * @param {?} ctx
  110839. * @param {?} flags
  110840. * @param {?} entryComponents
  110841. * @return {?}
  110842. */
  110843. function componentFactoryResolverProviderDef(reflector, ctx, flags, entryComponents) {
  110844. var /** @type {?} */ entryComponentFactories = entryComponents.map(function (entryComponent) { return ctx.importExpr(entryComponent.componentFactory); });
  110845. var /** @type {?} */ token = createTokenForExternalReference(reflector, Identifiers.ComponentFactoryResolver);
  110846. var /** @type {?} */ classMeta = {
  110847. diDeps: [
  110848. { isValue: true, value: literalArr(entryComponentFactories) },
  110849. { token: token, isSkipSelf: true, isOptional: true },
  110850. { token: createTokenForExternalReference(reflector, Identifiers.NgModuleRef) },
  110851. ],
  110852. lifecycleHooks: [],
  110853. reference: reflector.resolveExternalReference(Identifiers.CodegenComponentFactoryResolver)
  110854. };
  110855. var _a = singleProviderDef(ctx, flags, ProviderAstType.PrivateService, {
  110856. token: token,
  110857. multi: false,
  110858. useClass: classMeta,
  110859. }), providerExpr = _a.providerExpr, providerFlags = _a.flags, depsExpr = _a.depsExpr;
  110860. return { providerExpr: providerExpr, flags: providerFlags, depsExpr: depsExpr, tokenExpr: tokenExpr(ctx, token) };
  110861. }
  110862. /**
  110863. * @fileoverview added by tsickle
  110864. * @suppress {checkTypes} checked by tsc
  110865. */
  110866. /**
  110867. * @license
  110868. * Copyright Google Inc. All Rights Reserved.
  110869. *
  110870. * Use of this source code is governed by an MIT-style license that can be
  110871. * found in the LICENSE file at https://angular.io/license
  110872. */
  110873. var NgModuleCompileResult = /** @class */ (function () {
  110874. function NgModuleCompileResult(ngModuleFactoryVar) {
  110875. this.ngModuleFactoryVar = ngModuleFactoryVar;
  110876. }
  110877. return NgModuleCompileResult;
  110878. }());
  110879. var LOG_VAR = variable('_l');
  110880. var NgModuleCompiler = /** @class */ (function () {
  110881. function NgModuleCompiler(reflector) {
  110882. this.reflector = reflector;
  110883. }
  110884. /**
  110885. * @param {?} ctx
  110886. * @param {?} ngModuleMeta
  110887. * @param {?} extraProviders
  110888. * @return {?}
  110889. */
  110890. NgModuleCompiler.prototype.compile = /**
  110891. * @param {?} ctx
  110892. * @param {?} ngModuleMeta
  110893. * @param {?} extraProviders
  110894. * @return {?}
  110895. */
  110896. function (ctx, ngModuleMeta, extraProviders) {
  110897. var /** @type {?} */ sourceSpan = typeSourceSpan('NgModule', ngModuleMeta.type);
  110898. var /** @type {?} */ entryComponentFactories = ngModuleMeta.transitiveModule.entryComponents;
  110899. var /** @type {?} */ bootstrapComponents = ngModuleMeta.bootstrapComponents;
  110900. var /** @type {?} */ providerParser = new NgModuleProviderAnalyzer(this.reflector, ngModuleMeta, extraProviders, sourceSpan);
  110901. var /** @type {?} */ providerDefs = [componentFactoryResolverProviderDef(this.reflector, ctx, 0 /* None */, entryComponentFactories)]
  110902. .concat(providerParser.parse().map(function (provider) { return providerDef(ctx, provider); }))
  110903. .map(function (_a) {
  110904. var providerExpr = _a.providerExpr, depsExpr = _a.depsExpr, flags = _a.flags, tokenExpr = _a.tokenExpr;
  110905. return importExpr(Identifiers.moduleProviderDef).callFn([
  110906. literal(flags), tokenExpr, providerExpr, depsExpr
  110907. ]);
  110908. });
  110909. var /** @type {?} */ ngModuleDef = importExpr(Identifiers.moduleDef).callFn([literalArr(providerDefs)]);
  110910. var /** @type {?} */ ngModuleDefFactory = fn([new FnParam(/** @type {?} */ ((LOG_VAR.name)))], [new ReturnStatement(ngModuleDef)], INFERRED_TYPE);
  110911. var /** @type {?} */ ngModuleFactoryVar = identifierName(ngModuleMeta.type) + "NgFactory";
  110912. this._createNgModuleFactory(ctx, ngModuleMeta.type.reference, importExpr(Identifiers.createModuleFactory).callFn([
  110913. ctx.importExpr(ngModuleMeta.type.reference),
  110914. literalArr(bootstrapComponents.map(function (id) { return ctx.importExpr(id.reference); })),
  110915. ngModuleDefFactory
  110916. ]));
  110917. if (ngModuleMeta.id) {
  110918. var /** @type {?} */ registerFactoryStmt = importExpr(Identifiers.RegisterModuleFactoryFn)
  110919. .callFn([literal(ngModuleMeta.id), variable(ngModuleFactoryVar)])
  110920. .toStmt();
  110921. ctx.statements.push(registerFactoryStmt);
  110922. }
  110923. return new NgModuleCompileResult(ngModuleFactoryVar);
  110924. };
  110925. /**
  110926. * @param {?} ctx
  110927. * @param {?} ngModuleReference
  110928. * @return {?}
  110929. */
  110930. NgModuleCompiler.prototype.createStub = /**
  110931. * @param {?} ctx
  110932. * @param {?} ngModuleReference
  110933. * @return {?}
  110934. */
  110935. function (ctx, ngModuleReference) {
  110936. this._createNgModuleFactory(ctx, ngModuleReference, NULL_EXPR);
  110937. };
  110938. /**
  110939. * @param {?} ctx
  110940. * @param {?} reference
  110941. * @param {?} value
  110942. * @return {?}
  110943. */
  110944. NgModuleCompiler.prototype._createNgModuleFactory = /**
  110945. * @param {?} ctx
  110946. * @param {?} reference
  110947. * @param {?} value
  110948. * @return {?}
  110949. */
  110950. function (ctx, reference, value) {
  110951. var /** @type {?} */ ngModuleFactoryVar = identifierName({ reference: reference }) + "NgFactory";
  110952. var /** @type {?} */ ngModuleFactoryStmt = variable(ngModuleFactoryVar)
  110953. .set(value)
  110954. .toDeclStmt(importType(Identifiers.NgModuleFactory, [/** @type {?} */ ((expressionType(ctx.importExpr(reference))))], [TypeModifier.Const]), [StmtModifier.Final, StmtModifier.Exported]);
  110955. ctx.statements.push(ngModuleFactoryStmt);
  110956. };
  110957. return NgModuleCompiler;
  110958. }());
  110959. /**
  110960. * @fileoverview added by tsickle
  110961. * @suppress {checkTypes} checked by tsc
  110962. */
  110963. /**
  110964. * @license
  110965. * Copyright Google Inc. All Rights Reserved.
  110966. *
  110967. * Use of this source code is governed by an MIT-style license that can be
  110968. * found in the LICENSE file at https://angular.io/license
  110969. */
  110970. /**
  110971. * Resolves types to {\@link NgModule}.
  110972. */
  110973. var NgModuleResolver = /** @class */ (function () {
  110974. function NgModuleResolver(_reflector) {
  110975. this._reflector = _reflector;
  110976. }
  110977. /**
  110978. * @param {?} type
  110979. * @return {?}
  110980. */
  110981. NgModuleResolver.prototype.isNgModule = /**
  110982. * @param {?} type
  110983. * @return {?}
  110984. */
  110985. function (type) { return this._reflector.annotations(type).some(createNgModule.isTypeOf); };
  110986. /**
  110987. * @param {?} type
  110988. * @param {?=} throwIfNotFound
  110989. * @return {?}
  110990. */
  110991. NgModuleResolver.prototype.resolve = /**
  110992. * @param {?} type
  110993. * @param {?=} throwIfNotFound
  110994. * @return {?}
  110995. */
  110996. function (type, throwIfNotFound) {
  110997. if (throwIfNotFound === void 0) { throwIfNotFound = true; }
  110998. var /** @type {?} */ ngModuleMeta = findLast(this._reflector.annotations(type), createNgModule.isTypeOf);
  110999. if (ngModuleMeta) {
  111000. return ngModuleMeta;
  111001. }
  111002. else {
  111003. if (throwIfNotFound) {
  111004. throw new Error("No NgModule metadata found for '" + stringify(type) + "'.");
  111005. }
  111006. return null;
  111007. }
  111008. };
  111009. return NgModuleResolver;
  111010. }());
  111011. /**
  111012. * @fileoverview added by tsickle
  111013. * @suppress {checkTypes} checked by tsc
  111014. */
  111015. /**
  111016. * @license
  111017. * Copyright Google Inc. All Rights Reserved.
  111018. *
  111019. * Use of this source code is governed by an MIT-style license that can be
  111020. * found in the LICENSE file at https://angular.io/license
  111021. */
  111022. // https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
  111023. var VERSION$1 = 3;
  111024. var JS_B64_PREFIX = '# sourceMappingURL=data:application/json;base64,';
  111025. var SourceMapGenerator = /** @class */ (function () {
  111026. function SourceMapGenerator(file) {
  111027. if (file === void 0) { file = null; }
  111028. this.file = file;
  111029. this.sourcesContent = new Map();
  111030. this.lines = [];
  111031. this.lastCol0 = 0;
  111032. this.hasMappings = false;
  111033. }
  111034. // The content is `null` when the content is expected to be loaded using the URL
  111035. /**
  111036. * @param {?} url
  111037. * @param {?=} content
  111038. * @return {?}
  111039. */
  111040. SourceMapGenerator.prototype.addSource = /**
  111041. * @param {?} url
  111042. * @param {?=} content
  111043. * @return {?}
  111044. */
  111045. function (url, content) {
  111046. if (content === void 0) { content = null; }
  111047. if (!this.sourcesContent.has(url)) {
  111048. this.sourcesContent.set(url, content);
  111049. }
  111050. return this;
  111051. };
  111052. /**
  111053. * @return {?}
  111054. */
  111055. SourceMapGenerator.prototype.addLine = /**
  111056. * @return {?}
  111057. */
  111058. function () {
  111059. this.lines.push([]);
  111060. this.lastCol0 = 0;
  111061. return this;
  111062. };
  111063. /**
  111064. * @param {?} col0
  111065. * @param {?=} sourceUrl
  111066. * @param {?=} sourceLine0
  111067. * @param {?=} sourceCol0
  111068. * @return {?}
  111069. */
  111070. SourceMapGenerator.prototype.addMapping = /**
  111071. * @param {?} col0
  111072. * @param {?=} sourceUrl
  111073. * @param {?=} sourceLine0
  111074. * @param {?=} sourceCol0
  111075. * @return {?}
  111076. */
  111077. function (col0, sourceUrl, sourceLine0, sourceCol0) {
  111078. if (!this.currentLine) {
  111079. throw new Error("A line must be added before mappings can be added");
  111080. }
  111081. if (sourceUrl != null && !this.sourcesContent.has(sourceUrl)) {
  111082. throw new Error("Unknown source file \"" + sourceUrl + "\"");
  111083. }
  111084. if (col0 == null) {
  111085. throw new Error("The column in the generated code must be provided");
  111086. }
  111087. if (col0 < this.lastCol0) {
  111088. throw new Error("Mapping should be added in output order");
  111089. }
  111090. if (sourceUrl && (sourceLine0 == null || sourceCol0 == null)) {
  111091. throw new Error("The source location must be provided when a source url is provided");
  111092. }
  111093. this.hasMappings = true;
  111094. this.lastCol0 = col0;
  111095. this.currentLine.push({ col0: col0, sourceUrl: sourceUrl, sourceLine0: sourceLine0, sourceCol0: sourceCol0 });
  111096. return this;
  111097. };
  111098. Object.defineProperty(SourceMapGenerator.prototype, "currentLine", {
  111099. get: /**
  111100. * @return {?}
  111101. */
  111102. function () { return this.lines.slice(-1)[0]; },
  111103. enumerable: true,
  111104. configurable: true
  111105. });
  111106. /**
  111107. * @return {?}
  111108. */
  111109. SourceMapGenerator.prototype.toJSON = /**
  111110. * @return {?}
  111111. */
  111112. function () {
  111113. var _this = this;
  111114. if (!this.hasMappings) {
  111115. return null;
  111116. }
  111117. var /** @type {?} */ sourcesIndex = new Map();
  111118. var /** @type {?} */ sources = [];
  111119. var /** @type {?} */ sourcesContent = [];
  111120. Array.from(this.sourcesContent.keys()).forEach(function (url, i) {
  111121. sourcesIndex.set(url, i);
  111122. sources.push(url);
  111123. sourcesContent.push(_this.sourcesContent.get(url) || null);
  111124. });
  111125. var /** @type {?} */ mappings = '';
  111126. var /** @type {?} */ lastCol0 = 0;
  111127. var /** @type {?} */ lastSourceIndex = 0;
  111128. var /** @type {?} */ lastSourceLine0 = 0;
  111129. var /** @type {?} */ lastSourceCol0 = 0;
  111130. this.lines.forEach(function (segments) {
  111131. lastCol0 = 0;
  111132. mappings += segments
  111133. .map(function (segment) {
  111134. // zero-based starting column of the line in the generated code
  111135. var /** @type {?} */ segAsStr = toBase64VLQ(segment.col0 - lastCol0);
  111136. lastCol0 = segment.col0;
  111137. if (segment.sourceUrl != null) {
  111138. // zero-based index into the “sources” list
  111139. segAsStr +=
  111140. toBase64VLQ(/** @type {?} */ ((sourcesIndex.get(segment.sourceUrl))) - lastSourceIndex);
  111141. lastSourceIndex = /** @type {?} */ ((sourcesIndex.get(segment.sourceUrl)));
  111142. // the zero-based starting line in the original source
  111143. segAsStr += toBase64VLQ(/** @type {?} */ ((segment.sourceLine0)) - lastSourceLine0);
  111144. lastSourceLine0 = /** @type {?} */ ((segment.sourceLine0));
  111145. // the zero-based starting column in the original source
  111146. segAsStr += toBase64VLQ(/** @type {?} */ ((segment.sourceCol0)) - lastSourceCol0);
  111147. lastSourceCol0 = /** @type {?} */ ((segment.sourceCol0));
  111148. }
  111149. return segAsStr;
  111150. })
  111151. .join(',');
  111152. mappings += ';';
  111153. });
  111154. mappings = mappings.slice(0, -1);
  111155. return {
  111156. 'file': this.file || '',
  111157. 'version': VERSION$1,
  111158. 'sourceRoot': '',
  111159. 'sources': sources,
  111160. 'sourcesContent': sourcesContent,
  111161. 'mappings': mappings,
  111162. };
  111163. };
  111164. /**
  111165. * @return {?}
  111166. */
  111167. SourceMapGenerator.prototype.toJsComment = /**
  111168. * @return {?}
  111169. */
  111170. function () {
  111171. return this.hasMappings ? '//' + JS_B64_PREFIX + toBase64String(JSON.stringify(this, null, 0)) :
  111172. '';
  111173. };
  111174. return SourceMapGenerator;
  111175. }());
  111176. /**
  111177. * @param {?} value
  111178. * @return {?}
  111179. */
  111180. function toBase64String(value) {
  111181. var /** @type {?} */ b64 = '';
  111182. value = utf8Encode(value);
  111183. for (var /** @type {?} */ i = 0; i < value.length;) {
  111184. var /** @type {?} */ i1 = value.charCodeAt(i++);
  111185. var /** @type {?} */ i2 = value.charCodeAt(i++);
  111186. var /** @type {?} */ i3 = value.charCodeAt(i++);
  111187. b64 += toBase64Digit(i1 >> 2);
  111188. b64 += toBase64Digit(((i1 & 3) << 4) | (isNaN(i2) ? 0 : i2 >> 4));
  111189. b64 += isNaN(i2) ? '=' : toBase64Digit(((i2 & 15) << 2) | (i3 >> 6));
  111190. b64 += isNaN(i2) || isNaN(i3) ? '=' : toBase64Digit(i3 & 63);
  111191. }
  111192. return b64;
  111193. }
  111194. /**
  111195. * @param {?} value
  111196. * @return {?}
  111197. */
  111198. function toBase64VLQ(value) {
  111199. value = value < 0 ? ((-value) << 1) + 1 : value << 1;
  111200. var /** @type {?} */ out = '';
  111201. do {
  111202. var /** @type {?} */ digit = value & 31;
  111203. value = value >> 5;
  111204. if (value > 0) {
  111205. digit = digit | 32;
  111206. }
  111207. out += toBase64Digit(digit);
  111208. } while (value > 0);
  111209. return out;
  111210. }
  111211. var B64_DIGITS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  111212. /**
  111213. * @param {?} value
  111214. * @return {?}
  111215. */
  111216. function toBase64Digit(value) {
  111217. if (value < 0 || value >= 64) {
  111218. throw new Error("Can only encode value in the range [0, 63]");
  111219. }
  111220. return B64_DIGITS[value];
  111221. }
  111222. /**
  111223. * @fileoverview added by tsickle
  111224. * @suppress {checkTypes} checked by tsc
  111225. */
  111226. /**
  111227. * @license
  111228. * Copyright Google Inc. All Rights Reserved.
  111229. *
  111230. * Use of this source code is governed by an MIT-style license that can be
  111231. * found in the LICENSE file at https://angular.io/license
  111232. */
  111233. var _SINGLE_QUOTE_ESCAPE_STRING_RE = /'|\\|\n|\r|\$/g;
  111234. var _LEGAL_IDENTIFIER_RE = /^[$A-Z_][0-9A-Z_$]*$/i;
  111235. var _INDENT_WITH = ' ';
  111236. var CATCH_ERROR_VAR$1 = variable('error', null, null);
  111237. var CATCH_STACK_VAR$1 = variable('stack', null, null);
  111238. /**
  111239. * @record
  111240. */
  111241. var _EmittedLine = /** @class */ (function () {
  111242. function _EmittedLine(indent) {
  111243. this.indent = indent;
  111244. this.partsLength = 0;
  111245. this.parts = [];
  111246. this.srcSpans = [];
  111247. }
  111248. return _EmittedLine;
  111249. }());
  111250. var EmitterVisitorContext = /** @class */ (function () {
  111251. function EmitterVisitorContext(_indent) {
  111252. this._indent = _indent;
  111253. this._classes = [];
  111254. this._preambleLineCount = 0;
  111255. this._lines = [new _EmittedLine(_indent)];
  111256. }
  111257. /**
  111258. * @return {?}
  111259. */
  111260. EmitterVisitorContext.createRoot = /**
  111261. * @return {?}
  111262. */
  111263. function () { return new EmitterVisitorContext(0); };
  111264. Object.defineProperty(EmitterVisitorContext.prototype, "_currentLine", {
  111265. get: /**
  111266. * @return {?}
  111267. */
  111268. function () { return this._lines[this._lines.length - 1]; },
  111269. enumerable: true,
  111270. configurable: true
  111271. });
  111272. /**
  111273. * @param {?=} from
  111274. * @param {?=} lastPart
  111275. * @return {?}
  111276. */
  111277. EmitterVisitorContext.prototype.println = /**
  111278. * @param {?=} from
  111279. * @param {?=} lastPart
  111280. * @return {?}
  111281. */
  111282. function (from, lastPart) {
  111283. if (lastPart === void 0) { lastPart = ''; }
  111284. this.print(from || null, lastPart, true);
  111285. };
  111286. /**
  111287. * @return {?}
  111288. */
  111289. EmitterVisitorContext.prototype.lineIsEmpty = /**
  111290. * @return {?}
  111291. */
  111292. function () { return this._currentLine.parts.length === 0; };
  111293. /**
  111294. * @return {?}
  111295. */
  111296. EmitterVisitorContext.prototype.lineLength = /**
  111297. * @return {?}
  111298. */
  111299. function () {
  111300. return this._currentLine.indent * _INDENT_WITH.length + this._currentLine.partsLength;
  111301. };
  111302. /**
  111303. * @param {?} from
  111304. * @param {?} part
  111305. * @param {?=} newLine
  111306. * @return {?}
  111307. */
  111308. EmitterVisitorContext.prototype.print = /**
  111309. * @param {?} from
  111310. * @param {?} part
  111311. * @param {?=} newLine
  111312. * @return {?}
  111313. */
  111314. function (from, part, newLine) {
  111315. if (newLine === void 0) { newLine = false; }
  111316. if (part.length > 0) {
  111317. this._currentLine.parts.push(part);
  111318. this._currentLine.partsLength += part.length;
  111319. this._currentLine.srcSpans.push(from && from.sourceSpan || null);
  111320. }
  111321. if (newLine) {
  111322. this._lines.push(new _EmittedLine(this._indent));
  111323. }
  111324. };
  111325. /**
  111326. * @return {?}
  111327. */
  111328. EmitterVisitorContext.prototype.removeEmptyLastLine = /**
  111329. * @return {?}
  111330. */
  111331. function () {
  111332. if (this.lineIsEmpty()) {
  111333. this._lines.pop();
  111334. }
  111335. };
  111336. /**
  111337. * @return {?}
  111338. */
  111339. EmitterVisitorContext.prototype.incIndent = /**
  111340. * @return {?}
  111341. */
  111342. function () {
  111343. this._indent++;
  111344. if (this.lineIsEmpty()) {
  111345. this._currentLine.indent = this._indent;
  111346. }
  111347. };
  111348. /**
  111349. * @return {?}
  111350. */
  111351. EmitterVisitorContext.prototype.decIndent = /**
  111352. * @return {?}
  111353. */
  111354. function () {
  111355. this._indent--;
  111356. if (this.lineIsEmpty()) {
  111357. this._currentLine.indent = this._indent;
  111358. }
  111359. };
  111360. /**
  111361. * @param {?} clazz
  111362. * @return {?}
  111363. */
  111364. EmitterVisitorContext.prototype.pushClass = /**
  111365. * @param {?} clazz
  111366. * @return {?}
  111367. */
  111368. function (clazz) { this._classes.push(clazz); };
  111369. /**
  111370. * @return {?}
  111371. */
  111372. EmitterVisitorContext.prototype.popClass = /**
  111373. * @return {?}
  111374. */
  111375. function () { return /** @type {?} */ ((this._classes.pop())); };
  111376. Object.defineProperty(EmitterVisitorContext.prototype, "currentClass", {
  111377. get: /**
  111378. * @return {?}
  111379. */
  111380. function () {
  111381. return this._classes.length > 0 ? this._classes[this._classes.length - 1] : null;
  111382. },
  111383. enumerable: true,
  111384. configurable: true
  111385. });
  111386. /**
  111387. * @return {?}
  111388. */
  111389. EmitterVisitorContext.prototype.toSource = /**
  111390. * @return {?}
  111391. */
  111392. function () {
  111393. return this.sourceLines
  111394. .map(function (l) { return l.parts.length > 0 ? _createIndent(l.indent) + l.parts.join('') : ''; })
  111395. .join('\n');
  111396. };
  111397. /**
  111398. * @param {?} genFilePath
  111399. * @param {?=} startsAtLine
  111400. * @return {?}
  111401. */
  111402. EmitterVisitorContext.prototype.toSourceMapGenerator = /**
  111403. * @param {?} genFilePath
  111404. * @param {?=} startsAtLine
  111405. * @return {?}
  111406. */
  111407. function (genFilePath, startsAtLine) {
  111408. if (startsAtLine === void 0) { startsAtLine = 0; }
  111409. var /** @type {?} */ map = new SourceMapGenerator(genFilePath);
  111410. var /** @type {?} */ firstOffsetMapped = false;
  111411. var /** @type {?} */ mapFirstOffsetIfNeeded = function () {
  111412. if (!firstOffsetMapped) {
  111413. // Add a single space so that tools won't try to load the file from disk.
  111414. // Note: We are using virtual urls like `ng:///`, so we have to
  111415. // provide a content here.
  111416. map.addSource(genFilePath, ' ').addMapping(0, genFilePath, 0, 0);
  111417. firstOffsetMapped = true;
  111418. }
  111419. };
  111420. for (var /** @type {?} */ i = 0; i < startsAtLine; i++) {
  111421. map.addLine();
  111422. mapFirstOffsetIfNeeded();
  111423. }
  111424. this.sourceLines.forEach(function (line, lineIdx) {
  111425. map.addLine();
  111426. var /** @type {?} */ spans = line.srcSpans;
  111427. var /** @type {?} */ parts = line.parts;
  111428. var /** @type {?} */ col0 = line.indent * _INDENT_WITH.length;
  111429. var /** @type {?} */ spanIdx = 0;
  111430. // skip leading parts without source spans
  111431. while (spanIdx < spans.length && !spans[spanIdx]) {
  111432. col0 += parts[spanIdx].length;
  111433. spanIdx++;
  111434. }
  111435. if (spanIdx < spans.length && lineIdx === 0 && col0 === 0) {
  111436. firstOffsetMapped = true;
  111437. }
  111438. else {
  111439. mapFirstOffsetIfNeeded();
  111440. }
  111441. while (spanIdx < spans.length) {
  111442. var /** @type {?} */ span = /** @type {?} */ ((spans[spanIdx]));
  111443. var /** @type {?} */ source = span.start.file;
  111444. var /** @type {?} */ sourceLine = span.start.line;
  111445. var /** @type {?} */ sourceCol = span.start.col;
  111446. map.addSource(source.url, source.content)
  111447. .addMapping(col0, source.url, sourceLine, sourceCol);
  111448. col0 += parts[spanIdx].length;
  111449. spanIdx++;
  111450. // assign parts without span or the same span to the previous segment
  111451. while (spanIdx < spans.length && (span === spans[spanIdx] || !spans[spanIdx])) {
  111452. col0 += parts[spanIdx].length;
  111453. spanIdx++;
  111454. }
  111455. }
  111456. });
  111457. return map;
  111458. };
  111459. /**
  111460. * @param {?} count
  111461. * @return {?}
  111462. */
  111463. EmitterVisitorContext.prototype.setPreambleLineCount = /**
  111464. * @param {?} count
  111465. * @return {?}
  111466. */
  111467. function (count) { return this._preambleLineCount = count; };
  111468. /**
  111469. * @param {?} line
  111470. * @param {?} column
  111471. * @return {?}
  111472. */
  111473. EmitterVisitorContext.prototype.spanOf = /**
  111474. * @param {?} line
  111475. * @param {?} column
  111476. * @return {?}
  111477. */
  111478. function (line, column) {
  111479. var /** @type {?} */ emittedLine = this._lines[line - this._preambleLineCount];
  111480. if (emittedLine) {
  111481. var /** @type {?} */ columnsLeft = column - _createIndent(emittedLine.indent).length;
  111482. for (var /** @type {?} */ partIndex = 0; partIndex < emittedLine.parts.length; partIndex++) {
  111483. var /** @type {?} */ part = emittedLine.parts[partIndex];
  111484. if (part.length > columnsLeft) {
  111485. return emittedLine.srcSpans[partIndex];
  111486. }
  111487. columnsLeft -= part.length;
  111488. }
  111489. }
  111490. return null;
  111491. };
  111492. Object.defineProperty(EmitterVisitorContext.prototype, "sourceLines", {
  111493. get: /**
  111494. * @return {?}
  111495. */
  111496. function () {
  111497. if (this._lines.length && this._lines[this._lines.length - 1].parts.length === 0) {
  111498. return this._lines.slice(0, -1);
  111499. }
  111500. return this._lines;
  111501. },
  111502. enumerable: true,
  111503. configurable: true
  111504. });
  111505. return EmitterVisitorContext;
  111506. }());
  111507. /**
  111508. * @abstract
  111509. */
  111510. var AbstractEmitterVisitor = /** @class */ (function () {
  111511. function AbstractEmitterVisitor(_escapeDollarInStrings) {
  111512. this._escapeDollarInStrings = _escapeDollarInStrings;
  111513. }
  111514. /**
  111515. * @param {?} stmt
  111516. * @param {?} ctx
  111517. * @return {?}
  111518. */
  111519. AbstractEmitterVisitor.prototype.visitExpressionStmt = /**
  111520. * @param {?} stmt
  111521. * @param {?} ctx
  111522. * @return {?}
  111523. */
  111524. function (stmt, ctx) {
  111525. stmt.expr.visitExpression(this, ctx);
  111526. ctx.println(stmt, ';');
  111527. return null;
  111528. };
  111529. /**
  111530. * @param {?} stmt
  111531. * @param {?} ctx
  111532. * @return {?}
  111533. */
  111534. AbstractEmitterVisitor.prototype.visitReturnStmt = /**
  111535. * @param {?} stmt
  111536. * @param {?} ctx
  111537. * @return {?}
  111538. */
  111539. function (stmt, ctx) {
  111540. ctx.print(stmt, "return ");
  111541. stmt.value.visitExpression(this, ctx);
  111542. ctx.println(stmt, ';');
  111543. return null;
  111544. };
  111545. /**
  111546. * @param {?} stmt
  111547. * @param {?} ctx
  111548. * @return {?}
  111549. */
  111550. AbstractEmitterVisitor.prototype.visitIfStmt = /**
  111551. * @param {?} stmt
  111552. * @param {?} ctx
  111553. * @return {?}
  111554. */
  111555. function (stmt, ctx) {
  111556. ctx.print(stmt, "if (");
  111557. stmt.condition.visitExpression(this, ctx);
  111558. ctx.print(stmt, ") {");
  111559. var /** @type {?} */ hasElseCase = stmt.falseCase != null && stmt.falseCase.length > 0;
  111560. if (stmt.trueCase.length <= 1 && !hasElseCase) {
  111561. ctx.print(stmt, " ");
  111562. this.visitAllStatements(stmt.trueCase, ctx);
  111563. ctx.removeEmptyLastLine();
  111564. ctx.print(stmt, " ");
  111565. }
  111566. else {
  111567. ctx.println();
  111568. ctx.incIndent();
  111569. this.visitAllStatements(stmt.trueCase, ctx);
  111570. ctx.decIndent();
  111571. if (hasElseCase) {
  111572. ctx.println(stmt, "} else {");
  111573. ctx.incIndent();
  111574. this.visitAllStatements(stmt.falseCase, ctx);
  111575. ctx.decIndent();
  111576. }
  111577. }
  111578. ctx.println(stmt, "}");
  111579. return null;
  111580. };
  111581. /**
  111582. * @param {?} stmt
  111583. * @param {?} ctx
  111584. * @return {?}
  111585. */
  111586. AbstractEmitterVisitor.prototype.visitThrowStmt = /**
  111587. * @param {?} stmt
  111588. * @param {?} ctx
  111589. * @return {?}
  111590. */
  111591. function (stmt, ctx) {
  111592. ctx.print(stmt, "throw ");
  111593. stmt.error.visitExpression(this, ctx);
  111594. ctx.println(stmt, ";");
  111595. return null;
  111596. };
  111597. /**
  111598. * @param {?} stmt
  111599. * @param {?} ctx
  111600. * @return {?}
  111601. */
  111602. AbstractEmitterVisitor.prototype.visitCommentStmt = /**
  111603. * @param {?} stmt
  111604. * @param {?} ctx
  111605. * @return {?}
  111606. */
  111607. function (stmt, ctx) {
  111608. var /** @type {?} */ lines = stmt.comment.split('\n');
  111609. lines.forEach(function (line) { ctx.println(stmt, "// " + line); });
  111610. return null;
  111611. };
  111612. /**
  111613. * @param {?} expr
  111614. * @param {?} ctx
  111615. * @return {?}
  111616. */
  111617. AbstractEmitterVisitor.prototype.visitWriteVarExpr = /**
  111618. * @param {?} expr
  111619. * @param {?} ctx
  111620. * @return {?}
  111621. */
  111622. function (expr, ctx) {
  111623. var /** @type {?} */ lineWasEmpty = ctx.lineIsEmpty();
  111624. if (!lineWasEmpty) {
  111625. ctx.print(expr, '(');
  111626. }
  111627. ctx.print(expr, expr.name + " = ");
  111628. expr.value.visitExpression(this, ctx);
  111629. if (!lineWasEmpty) {
  111630. ctx.print(expr, ')');
  111631. }
  111632. return null;
  111633. };
  111634. /**
  111635. * @param {?} expr
  111636. * @param {?} ctx
  111637. * @return {?}
  111638. */
  111639. AbstractEmitterVisitor.prototype.visitWriteKeyExpr = /**
  111640. * @param {?} expr
  111641. * @param {?} ctx
  111642. * @return {?}
  111643. */
  111644. function (expr, ctx) {
  111645. var /** @type {?} */ lineWasEmpty = ctx.lineIsEmpty();
  111646. if (!lineWasEmpty) {
  111647. ctx.print(expr, '(');
  111648. }
  111649. expr.receiver.visitExpression(this, ctx);
  111650. ctx.print(expr, "[");
  111651. expr.index.visitExpression(this, ctx);
  111652. ctx.print(expr, "] = ");
  111653. expr.value.visitExpression(this, ctx);
  111654. if (!lineWasEmpty) {
  111655. ctx.print(expr, ')');
  111656. }
  111657. return null;
  111658. };
  111659. /**
  111660. * @param {?} expr
  111661. * @param {?} ctx
  111662. * @return {?}
  111663. */
  111664. AbstractEmitterVisitor.prototype.visitWritePropExpr = /**
  111665. * @param {?} expr
  111666. * @param {?} ctx
  111667. * @return {?}
  111668. */
  111669. function (expr, ctx) {
  111670. var /** @type {?} */ lineWasEmpty = ctx.lineIsEmpty();
  111671. if (!lineWasEmpty) {
  111672. ctx.print(expr, '(');
  111673. }
  111674. expr.receiver.visitExpression(this, ctx);
  111675. ctx.print(expr, "." + expr.name + " = ");
  111676. expr.value.visitExpression(this, ctx);
  111677. if (!lineWasEmpty) {
  111678. ctx.print(expr, ')');
  111679. }
  111680. return null;
  111681. };
  111682. /**
  111683. * @param {?} expr
  111684. * @param {?} ctx
  111685. * @return {?}
  111686. */
  111687. AbstractEmitterVisitor.prototype.visitInvokeMethodExpr = /**
  111688. * @param {?} expr
  111689. * @param {?} ctx
  111690. * @return {?}
  111691. */
  111692. function (expr, ctx) {
  111693. expr.receiver.visitExpression(this, ctx);
  111694. var /** @type {?} */ name = expr.name;
  111695. if (expr.builtin != null) {
  111696. name = this.getBuiltinMethodName(expr.builtin);
  111697. if (name == null) {
  111698. // some builtins just mean to skip the call.
  111699. return null;
  111700. }
  111701. }
  111702. ctx.print(expr, "." + name + "(");
  111703. this.visitAllExpressions(expr.args, ctx, ",");
  111704. ctx.print(expr, ")");
  111705. return null;
  111706. };
  111707. /**
  111708. * @param {?} expr
  111709. * @param {?} ctx
  111710. * @return {?}
  111711. */
  111712. AbstractEmitterVisitor.prototype.visitInvokeFunctionExpr = /**
  111713. * @param {?} expr
  111714. * @param {?} ctx
  111715. * @return {?}
  111716. */
  111717. function (expr, ctx) {
  111718. expr.fn.visitExpression(this, ctx);
  111719. ctx.print(expr, "(");
  111720. this.visitAllExpressions(expr.args, ctx, ',');
  111721. ctx.print(expr, ")");
  111722. return null;
  111723. };
  111724. /**
  111725. * @param {?} ast
  111726. * @param {?} ctx
  111727. * @return {?}
  111728. */
  111729. AbstractEmitterVisitor.prototype.visitReadVarExpr = /**
  111730. * @param {?} ast
  111731. * @param {?} ctx
  111732. * @return {?}
  111733. */
  111734. function (ast, ctx) {
  111735. var /** @type {?} */ varName = /** @type {?} */ ((ast.name));
  111736. if (ast.builtin != null) {
  111737. switch (ast.builtin) {
  111738. case BuiltinVar.Super:
  111739. varName = 'super';
  111740. break;
  111741. case BuiltinVar.This:
  111742. varName = 'this';
  111743. break;
  111744. case BuiltinVar.CatchError:
  111745. varName = /** @type {?} */ ((CATCH_ERROR_VAR$1.name));
  111746. break;
  111747. case BuiltinVar.CatchStack:
  111748. varName = /** @type {?} */ ((CATCH_STACK_VAR$1.name));
  111749. break;
  111750. default:
  111751. throw new Error("Unknown builtin variable " + ast.builtin);
  111752. }
  111753. }
  111754. ctx.print(ast, varName);
  111755. return null;
  111756. };
  111757. /**
  111758. * @param {?} ast
  111759. * @param {?} ctx
  111760. * @return {?}
  111761. */
  111762. AbstractEmitterVisitor.prototype.visitInstantiateExpr = /**
  111763. * @param {?} ast
  111764. * @param {?} ctx
  111765. * @return {?}
  111766. */
  111767. function (ast, ctx) {
  111768. ctx.print(ast, "new ");
  111769. ast.classExpr.visitExpression(this, ctx);
  111770. ctx.print(ast, "(");
  111771. this.visitAllExpressions(ast.args, ctx, ',');
  111772. ctx.print(ast, ")");
  111773. return null;
  111774. };
  111775. /**
  111776. * @param {?} ast
  111777. * @param {?} ctx
  111778. * @return {?}
  111779. */
  111780. AbstractEmitterVisitor.prototype.visitLiteralExpr = /**
  111781. * @param {?} ast
  111782. * @param {?} ctx
  111783. * @return {?}
  111784. */
  111785. function (ast, ctx) {
  111786. var /** @type {?} */ value = ast.value;
  111787. if (typeof value === 'string') {
  111788. ctx.print(ast, escapeIdentifier(value, this._escapeDollarInStrings));
  111789. }
  111790. else {
  111791. ctx.print(ast, "" + value);
  111792. }
  111793. return null;
  111794. };
  111795. /**
  111796. * @param {?} ast
  111797. * @param {?} ctx
  111798. * @return {?}
  111799. */
  111800. AbstractEmitterVisitor.prototype.visitConditionalExpr = /**
  111801. * @param {?} ast
  111802. * @param {?} ctx
  111803. * @return {?}
  111804. */
  111805. function (ast, ctx) {
  111806. ctx.print(ast, "(");
  111807. ast.condition.visitExpression(this, ctx);
  111808. ctx.print(ast, '? ');
  111809. ast.trueCase.visitExpression(this, ctx);
  111810. ctx.print(ast, ': '); /** @type {?} */
  111811. ((ast.falseCase)).visitExpression(this, ctx);
  111812. ctx.print(ast, ")");
  111813. return null;
  111814. };
  111815. /**
  111816. * @param {?} ast
  111817. * @param {?} ctx
  111818. * @return {?}
  111819. */
  111820. AbstractEmitterVisitor.prototype.visitNotExpr = /**
  111821. * @param {?} ast
  111822. * @param {?} ctx
  111823. * @return {?}
  111824. */
  111825. function (ast, ctx) {
  111826. ctx.print(ast, '!');
  111827. ast.condition.visitExpression(this, ctx);
  111828. return null;
  111829. };
  111830. /**
  111831. * @param {?} ast
  111832. * @param {?} ctx
  111833. * @return {?}
  111834. */
  111835. AbstractEmitterVisitor.prototype.visitAssertNotNullExpr = /**
  111836. * @param {?} ast
  111837. * @param {?} ctx
  111838. * @return {?}
  111839. */
  111840. function (ast, ctx) {
  111841. ast.condition.visitExpression(this, ctx);
  111842. return null;
  111843. };
  111844. /**
  111845. * @param {?} ast
  111846. * @param {?} ctx
  111847. * @return {?}
  111848. */
  111849. AbstractEmitterVisitor.prototype.visitBinaryOperatorExpr = /**
  111850. * @param {?} ast
  111851. * @param {?} ctx
  111852. * @return {?}
  111853. */
  111854. function (ast, ctx) {
  111855. var /** @type {?} */ opStr;
  111856. switch (ast.operator) {
  111857. case BinaryOperator.Equals:
  111858. opStr = '==';
  111859. break;
  111860. case BinaryOperator.Identical:
  111861. opStr = '===';
  111862. break;
  111863. case BinaryOperator.NotEquals:
  111864. opStr = '!=';
  111865. break;
  111866. case BinaryOperator.NotIdentical:
  111867. opStr = '!==';
  111868. break;
  111869. case BinaryOperator.And:
  111870. opStr = '&&';
  111871. break;
  111872. case BinaryOperator.Or:
  111873. opStr = '||';
  111874. break;
  111875. case BinaryOperator.Plus:
  111876. opStr = '+';
  111877. break;
  111878. case BinaryOperator.Minus:
  111879. opStr = '-';
  111880. break;
  111881. case BinaryOperator.Divide:
  111882. opStr = '/';
  111883. break;
  111884. case BinaryOperator.Multiply:
  111885. opStr = '*';
  111886. break;
  111887. case BinaryOperator.Modulo:
  111888. opStr = '%';
  111889. break;
  111890. case BinaryOperator.Lower:
  111891. opStr = '<';
  111892. break;
  111893. case BinaryOperator.LowerEquals:
  111894. opStr = '<=';
  111895. break;
  111896. case BinaryOperator.Bigger:
  111897. opStr = '>';
  111898. break;
  111899. case BinaryOperator.BiggerEquals:
  111900. opStr = '>=';
  111901. break;
  111902. default:
  111903. throw new Error("Unknown operator " + ast.operator);
  111904. }
  111905. ctx.print(ast, "(");
  111906. ast.lhs.visitExpression(this, ctx);
  111907. ctx.print(ast, " " + opStr + " ");
  111908. ast.rhs.visitExpression(this, ctx);
  111909. ctx.print(ast, ")");
  111910. return null;
  111911. };
  111912. /**
  111913. * @param {?} ast
  111914. * @param {?} ctx
  111915. * @return {?}
  111916. */
  111917. AbstractEmitterVisitor.prototype.visitReadPropExpr = /**
  111918. * @param {?} ast
  111919. * @param {?} ctx
  111920. * @return {?}
  111921. */
  111922. function (ast, ctx) {
  111923. ast.receiver.visitExpression(this, ctx);
  111924. ctx.print(ast, ".");
  111925. ctx.print(ast, ast.name);
  111926. return null;
  111927. };
  111928. /**
  111929. * @param {?} ast
  111930. * @param {?} ctx
  111931. * @return {?}
  111932. */
  111933. AbstractEmitterVisitor.prototype.visitReadKeyExpr = /**
  111934. * @param {?} ast
  111935. * @param {?} ctx
  111936. * @return {?}
  111937. */
  111938. function (ast, ctx) {
  111939. ast.receiver.visitExpression(this, ctx);
  111940. ctx.print(ast, "[");
  111941. ast.index.visitExpression(this, ctx);
  111942. ctx.print(ast, "]");
  111943. return null;
  111944. };
  111945. /**
  111946. * @param {?} ast
  111947. * @param {?} ctx
  111948. * @return {?}
  111949. */
  111950. AbstractEmitterVisitor.prototype.visitLiteralArrayExpr = /**
  111951. * @param {?} ast
  111952. * @param {?} ctx
  111953. * @return {?}
  111954. */
  111955. function (ast, ctx) {
  111956. ctx.print(ast, "[");
  111957. this.visitAllExpressions(ast.entries, ctx, ',');
  111958. ctx.print(ast, "]");
  111959. return null;
  111960. };
  111961. /**
  111962. * @param {?} ast
  111963. * @param {?} ctx
  111964. * @return {?}
  111965. */
  111966. AbstractEmitterVisitor.prototype.visitLiteralMapExpr = /**
  111967. * @param {?} ast
  111968. * @param {?} ctx
  111969. * @return {?}
  111970. */
  111971. function (ast, ctx) {
  111972. var _this = this;
  111973. ctx.print(ast, "{");
  111974. this.visitAllObjects(function (entry) {
  111975. ctx.print(ast, escapeIdentifier(entry.key, _this._escapeDollarInStrings, entry.quoted) + ":");
  111976. entry.value.visitExpression(_this, ctx);
  111977. }, ast.entries, ctx, ',');
  111978. ctx.print(ast, "}");
  111979. return null;
  111980. };
  111981. /**
  111982. * @param {?} ast
  111983. * @param {?} ctx
  111984. * @return {?}
  111985. */
  111986. AbstractEmitterVisitor.prototype.visitCommaExpr = /**
  111987. * @param {?} ast
  111988. * @param {?} ctx
  111989. * @return {?}
  111990. */
  111991. function (ast, ctx) {
  111992. ctx.print(ast, '(');
  111993. this.visitAllExpressions(ast.parts, ctx, ',');
  111994. ctx.print(ast, ')');
  111995. return null;
  111996. };
  111997. /**
  111998. * @param {?} expressions
  111999. * @param {?} ctx
  112000. * @param {?} separator
  112001. * @return {?}
  112002. */
  112003. AbstractEmitterVisitor.prototype.visitAllExpressions = /**
  112004. * @param {?} expressions
  112005. * @param {?} ctx
  112006. * @param {?} separator
  112007. * @return {?}
  112008. */
  112009. function (expressions, ctx, separator) {
  112010. var _this = this;
  112011. this.visitAllObjects(function (expr) { return expr.visitExpression(_this, ctx); }, expressions, ctx, separator);
  112012. };
  112013. /**
  112014. * @template T
  112015. * @param {?} handler
  112016. * @param {?} expressions
  112017. * @param {?} ctx
  112018. * @param {?} separator
  112019. * @return {?}
  112020. */
  112021. AbstractEmitterVisitor.prototype.visitAllObjects = /**
  112022. * @template T
  112023. * @param {?} handler
  112024. * @param {?} expressions
  112025. * @param {?} ctx
  112026. * @param {?} separator
  112027. * @return {?}
  112028. */
  112029. function (handler, expressions, ctx, separator) {
  112030. var /** @type {?} */ incrementedIndent = false;
  112031. for (var /** @type {?} */ i = 0; i < expressions.length; i++) {
  112032. if (i > 0) {
  112033. if (ctx.lineLength() > 80) {
  112034. ctx.print(null, separator, true);
  112035. if (!incrementedIndent) {
  112036. // continuation are marked with double indent.
  112037. ctx.incIndent();
  112038. ctx.incIndent();
  112039. incrementedIndent = true;
  112040. }
  112041. }
  112042. else {
  112043. ctx.print(null, separator, false);
  112044. }
  112045. }
  112046. handler(expressions[i]);
  112047. }
  112048. if (incrementedIndent) {
  112049. // continuation are marked with double indent.
  112050. ctx.decIndent();
  112051. ctx.decIndent();
  112052. }
  112053. };
  112054. /**
  112055. * @param {?} statements
  112056. * @param {?} ctx
  112057. * @return {?}
  112058. */
  112059. AbstractEmitterVisitor.prototype.visitAllStatements = /**
  112060. * @param {?} statements
  112061. * @param {?} ctx
  112062. * @return {?}
  112063. */
  112064. function (statements, ctx) {
  112065. var _this = this;
  112066. statements.forEach(function (stmt) { return stmt.visitStatement(_this, ctx); });
  112067. };
  112068. return AbstractEmitterVisitor;
  112069. }());
  112070. /**
  112071. * @param {?} input
  112072. * @param {?} escapeDollar
  112073. * @param {?=} alwaysQuote
  112074. * @return {?}
  112075. */
  112076. function escapeIdentifier(input, escapeDollar, alwaysQuote) {
  112077. if (alwaysQuote === void 0) { alwaysQuote = true; }
  112078. if (input == null) {
  112079. return null;
  112080. }
  112081. var /** @type {?} */ body = input.replace(_SINGLE_QUOTE_ESCAPE_STRING_RE, function () {
  112082. var match = [];
  112083. for (var _i = 0; _i < arguments.length; _i++) {
  112084. match[_i] = arguments[_i];
  112085. }
  112086. if (match[0] == '$') {
  112087. return escapeDollar ? '\\$' : '$';
  112088. }
  112089. else if (match[0] == '\n') {
  112090. return '\\n';
  112091. }
  112092. else if (match[0] == '\r') {
  112093. return '\\r';
  112094. }
  112095. else {
  112096. return "\\" + match[0];
  112097. }
  112098. });
  112099. var /** @type {?} */ requiresQuotes = alwaysQuote || !_LEGAL_IDENTIFIER_RE.test(body);
  112100. return requiresQuotes ? "'" + body + "'" : body;
  112101. }
  112102. /**
  112103. * @param {?} count
  112104. * @return {?}
  112105. */
  112106. function _createIndent(count) {
  112107. var /** @type {?} */ res = '';
  112108. for (var /** @type {?} */ i = 0; i < count; i++) {
  112109. res += _INDENT_WITH;
  112110. }
  112111. return res;
  112112. }
  112113. /**
  112114. * @fileoverview added by tsickle
  112115. * @suppress {checkTypes} checked by tsc
  112116. */
  112117. /**
  112118. * @license
  112119. * Copyright Google Inc. All Rights Reserved.
  112120. *
  112121. * Use of this source code is governed by an MIT-style license that can be
  112122. * found in the LICENSE file at https://angular.io/license
  112123. */
  112124. /**
  112125. * @param {?} ast
  112126. * @return {?}
  112127. */
  112128. function debugOutputAstAsTypeScript(ast) {
  112129. var /** @type {?} */ converter = new _TsEmitterVisitor();
  112130. var /** @type {?} */ ctx = EmitterVisitorContext.createRoot();
  112131. var /** @type {?} */ asts = Array.isArray(ast) ? ast : [ast];
  112132. asts.forEach(function (ast) {
  112133. if (ast instanceof Statement) {
  112134. ast.visitStatement(converter, ctx);
  112135. }
  112136. else if (ast instanceof Expression) {
  112137. ast.visitExpression(converter, ctx);
  112138. }
  112139. else if (ast instanceof Type$1) {
  112140. ast.visitType(converter, ctx);
  112141. }
  112142. else {
  112143. throw new Error("Don't know how to print debug info for " + ast);
  112144. }
  112145. });
  112146. return ctx.toSource();
  112147. }
  112148. var TypeScriptEmitter = /** @class */ (function () {
  112149. function TypeScriptEmitter() {
  112150. }
  112151. /**
  112152. * @param {?} genFilePath
  112153. * @param {?} stmts
  112154. * @param {?=} preamble
  112155. * @param {?=} emitSourceMaps
  112156. * @param {?=} referenceFilter
  112157. * @return {?}
  112158. */
  112159. TypeScriptEmitter.prototype.emitStatementsAndContext = /**
  112160. * @param {?} genFilePath
  112161. * @param {?} stmts
  112162. * @param {?=} preamble
  112163. * @param {?=} emitSourceMaps
  112164. * @param {?=} referenceFilter
  112165. * @return {?}
  112166. */
  112167. function (genFilePath, stmts, preamble, emitSourceMaps, referenceFilter) {
  112168. if (preamble === void 0) { preamble = ''; }
  112169. if (emitSourceMaps === void 0) { emitSourceMaps = true; }
  112170. var /** @type {?} */ converter = new _TsEmitterVisitor(referenceFilter);
  112171. var /** @type {?} */ ctx = EmitterVisitorContext.createRoot();
  112172. converter.visitAllStatements(stmts, ctx);
  112173. var /** @type {?} */ preambleLines = preamble ? preamble.split('\n') : [];
  112174. converter.reexports.forEach(function (reexports, exportedModuleName) {
  112175. var /** @type {?} */ reexportsCode = reexports.map(function (reexport) { return reexport.name + " as " + reexport.as; }).join(',');
  112176. preambleLines.push("export {" + reexportsCode + "} from '" + exportedModuleName + "';");
  112177. });
  112178. converter.importsWithPrefixes.forEach(function (prefix, importedModuleName) {
  112179. // Note: can't write the real word for import as it screws up system.js auto detection...
  112180. preambleLines.push("imp" +
  112181. ("ort * as " + prefix + " from '" + importedModuleName + "';"));
  112182. });
  112183. var /** @type {?} */ sm = emitSourceMaps ?
  112184. ctx.toSourceMapGenerator(genFilePath, preambleLines.length).toJsComment() :
  112185. '';
  112186. var /** @type {?} */ lines = preambleLines.concat([ctx.toSource(), sm]);
  112187. if (sm) {
  112188. // always add a newline at the end, as some tools have bugs without it.
  112189. lines.push('');
  112190. }
  112191. ctx.setPreambleLineCount(preambleLines.length);
  112192. return { sourceText: lines.join('\n'), context: ctx };
  112193. };
  112194. /**
  112195. * @param {?} genFilePath
  112196. * @param {?} stmts
  112197. * @param {?=} preamble
  112198. * @return {?}
  112199. */
  112200. TypeScriptEmitter.prototype.emitStatements = /**
  112201. * @param {?} genFilePath
  112202. * @param {?} stmts
  112203. * @param {?=} preamble
  112204. * @return {?}
  112205. */
  112206. function (genFilePath, stmts, preamble) {
  112207. if (preamble === void 0) { preamble = ''; }
  112208. return this.emitStatementsAndContext(genFilePath, stmts, preamble).sourceText;
  112209. };
  112210. return TypeScriptEmitter;
  112211. }());
  112212. var _TsEmitterVisitor = /** @class */ (function (_super) {
  112213. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_TsEmitterVisitor, _super);
  112214. function _TsEmitterVisitor(referenceFilter) {
  112215. var _this = _super.call(this, false) || this;
  112216. _this.referenceFilter = referenceFilter;
  112217. _this.typeExpression = 0;
  112218. _this.importsWithPrefixes = new Map();
  112219. _this.reexports = new Map();
  112220. return _this;
  112221. }
  112222. /**
  112223. * @param {?} t
  112224. * @param {?} ctx
  112225. * @param {?=} defaultType
  112226. * @return {?}
  112227. */
  112228. _TsEmitterVisitor.prototype.visitType = /**
  112229. * @param {?} t
  112230. * @param {?} ctx
  112231. * @param {?=} defaultType
  112232. * @return {?}
  112233. */
  112234. function (t, ctx, defaultType) {
  112235. if (defaultType === void 0) { defaultType = 'any'; }
  112236. if (t) {
  112237. this.typeExpression++;
  112238. t.visitType(this, ctx);
  112239. this.typeExpression--;
  112240. }
  112241. else {
  112242. ctx.print(null, defaultType);
  112243. }
  112244. };
  112245. /**
  112246. * @param {?} ast
  112247. * @param {?} ctx
  112248. * @return {?}
  112249. */
  112250. _TsEmitterVisitor.prototype.visitLiteralExpr = /**
  112251. * @param {?} ast
  112252. * @param {?} ctx
  112253. * @return {?}
  112254. */
  112255. function (ast, ctx) {
  112256. var /** @type {?} */ value = ast.value;
  112257. if (value == null && ast.type != INFERRED_TYPE) {
  112258. ctx.print(ast, "(" + value + " as any)");
  112259. return null;
  112260. }
  112261. return _super.prototype.visitLiteralExpr.call(this, ast, ctx);
  112262. };
  112263. // Temporary workaround to support strictNullCheck enabled consumers of ngc emit.
  112264. // In SNC mode, [] have the type never[], so we cast here to any[].
  112265. // TODO: narrow the cast to a more explicit type, or use a pattern that does not
  112266. // start with [].concat. see https://github.com/angular/angular/pull/11846
  112267. /**
  112268. * @param {?} ast
  112269. * @param {?} ctx
  112270. * @return {?}
  112271. */
  112272. _TsEmitterVisitor.prototype.visitLiteralArrayExpr = /**
  112273. * @param {?} ast
  112274. * @param {?} ctx
  112275. * @return {?}
  112276. */
  112277. function (ast, ctx) {
  112278. if (ast.entries.length === 0) {
  112279. ctx.print(ast, '(');
  112280. }
  112281. var /** @type {?} */ result = _super.prototype.visitLiteralArrayExpr.call(this, ast, ctx);
  112282. if (ast.entries.length === 0) {
  112283. ctx.print(ast, ' as any[])');
  112284. }
  112285. return result;
  112286. };
  112287. /**
  112288. * @param {?} ast
  112289. * @param {?} ctx
  112290. * @return {?}
  112291. */
  112292. _TsEmitterVisitor.prototype.visitExternalExpr = /**
  112293. * @param {?} ast
  112294. * @param {?} ctx
  112295. * @return {?}
  112296. */
  112297. function (ast, ctx) {
  112298. this._visitIdentifier(ast.value, ast.typeParams, ctx);
  112299. return null;
  112300. };
  112301. /**
  112302. * @param {?} ast
  112303. * @param {?} ctx
  112304. * @return {?}
  112305. */
  112306. _TsEmitterVisitor.prototype.visitAssertNotNullExpr = /**
  112307. * @param {?} ast
  112308. * @param {?} ctx
  112309. * @return {?}
  112310. */
  112311. function (ast, ctx) {
  112312. var /** @type {?} */ result = _super.prototype.visitAssertNotNullExpr.call(this, ast, ctx);
  112313. ctx.print(ast, '!');
  112314. return result;
  112315. };
  112316. /**
  112317. * @param {?} stmt
  112318. * @param {?} ctx
  112319. * @return {?}
  112320. */
  112321. _TsEmitterVisitor.prototype.visitDeclareVarStmt = /**
  112322. * @param {?} stmt
  112323. * @param {?} ctx
  112324. * @return {?}
  112325. */
  112326. function (stmt, ctx) {
  112327. if (stmt.hasModifier(StmtModifier.Exported) && stmt.value instanceof ExternalExpr &&
  112328. !stmt.type) {
  112329. // check for a reexport
  112330. var _a = stmt.value.value, name_1 = _a.name, moduleName = _a.moduleName;
  112331. if (moduleName) {
  112332. var /** @type {?} */ reexports = this.reexports.get(moduleName);
  112333. if (!reexports) {
  112334. reexports = [];
  112335. this.reexports.set(moduleName, reexports);
  112336. }
  112337. reexports.push({ name: /** @type {?} */ ((name_1)), as: stmt.name });
  112338. return null;
  112339. }
  112340. }
  112341. if (stmt.hasModifier(StmtModifier.Exported)) {
  112342. ctx.print(stmt, "export ");
  112343. }
  112344. if (stmt.hasModifier(StmtModifier.Final)) {
  112345. ctx.print(stmt, "const");
  112346. }
  112347. else {
  112348. ctx.print(stmt, "var");
  112349. }
  112350. ctx.print(stmt, " " + stmt.name);
  112351. this._printColonType(stmt.type, ctx);
  112352. ctx.print(stmt, " = ");
  112353. stmt.value.visitExpression(this, ctx);
  112354. ctx.println(stmt, ";");
  112355. return null;
  112356. };
  112357. /**
  112358. * @param {?} ast
  112359. * @param {?} ctx
  112360. * @return {?}
  112361. */
  112362. _TsEmitterVisitor.prototype.visitCastExpr = /**
  112363. * @param {?} ast
  112364. * @param {?} ctx
  112365. * @return {?}
  112366. */
  112367. function (ast, ctx) {
  112368. ctx.print(ast, "(<"); /** @type {?} */
  112369. ((ast.type)).visitType(this, ctx);
  112370. ctx.print(ast, ">");
  112371. ast.value.visitExpression(this, ctx);
  112372. ctx.print(ast, ")");
  112373. return null;
  112374. };
  112375. /**
  112376. * @param {?} ast
  112377. * @param {?} ctx
  112378. * @return {?}
  112379. */
  112380. _TsEmitterVisitor.prototype.visitInstantiateExpr = /**
  112381. * @param {?} ast
  112382. * @param {?} ctx
  112383. * @return {?}
  112384. */
  112385. function (ast, ctx) {
  112386. ctx.print(ast, "new ");
  112387. this.typeExpression++;
  112388. ast.classExpr.visitExpression(this, ctx);
  112389. this.typeExpression--;
  112390. ctx.print(ast, "(");
  112391. this.visitAllExpressions(ast.args, ctx, ',');
  112392. ctx.print(ast, ")");
  112393. return null;
  112394. };
  112395. /**
  112396. * @param {?} stmt
  112397. * @param {?} ctx
  112398. * @return {?}
  112399. */
  112400. _TsEmitterVisitor.prototype.visitDeclareClassStmt = /**
  112401. * @param {?} stmt
  112402. * @param {?} ctx
  112403. * @return {?}
  112404. */
  112405. function (stmt, ctx) {
  112406. var _this = this;
  112407. ctx.pushClass(stmt);
  112408. if (stmt.hasModifier(StmtModifier.Exported)) {
  112409. ctx.print(stmt, "export ");
  112410. }
  112411. ctx.print(stmt, "class " + stmt.name);
  112412. if (stmt.parent != null) {
  112413. ctx.print(stmt, " extends ");
  112414. this.typeExpression++;
  112415. stmt.parent.visitExpression(this, ctx);
  112416. this.typeExpression--;
  112417. }
  112418. ctx.println(stmt, " {");
  112419. ctx.incIndent();
  112420. stmt.fields.forEach(function (field) { return _this._visitClassField(field, ctx); });
  112421. if (stmt.constructorMethod != null) {
  112422. this._visitClassConstructor(stmt, ctx);
  112423. }
  112424. stmt.getters.forEach(function (getter) { return _this._visitClassGetter(getter, ctx); });
  112425. stmt.methods.forEach(function (method) { return _this._visitClassMethod(method, ctx); });
  112426. ctx.decIndent();
  112427. ctx.println(stmt, "}");
  112428. ctx.popClass();
  112429. return null;
  112430. };
  112431. /**
  112432. * @param {?} field
  112433. * @param {?} ctx
  112434. * @return {?}
  112435. */
  112436. _TsEmitterVisitor.prototype._visitClassField = /**
  112437. * @param {?} field
  112438. * @param {?} ctx
  112439. * @return {?}
  112440. */
  112441. function (field, ctx) {
  112442. if (field.hasModifier(StmtModifier.Private)) {
  112443. // comment out as a workaround for #10967
  112444. ctx.print(null, "/*private*/ ");
  112445. }
  112446. ctx.print(null, field.name);
  112447. this._printColonType(field.type, ctx);
  112448. ctx.println(null, ";");
  112449. };
  112450. /**
  112451. * @param {?} getter
  112452. * @param {?} ctx
  112453. * @return {?}
  112454. */
  112455. _TsEmitterVisitor.prototype._visitClassGetter = /**
  112456. * @param {?} getter
  112457. * @param {?} ctx
  112458. * @return {?}
  112459. */
  112460. function (getter, ctx) {
  112461. if (getter.hasModifier(StmtModifier.Private)) {
  112462. ctx.print(null, "private ");
  112463. }
  112464. ctx.print(null, "get " + getter.name + "()");
  112465. this._printColonType(getter.type, ctx);
  112466. ctx.println(null, " {");
  112467. ctx.incIndent();
  112468. this.visitAllStatements(getter.body, ctx);
  112469. ctx.decIndent();
  112470. ctx.println(null, "}");
  112471. };
  112472. /**
  112473. * @param {?} stmt
  112474. * @param {?} ctx
  112475. * @return {?}
  112476. */
  112477. _TsEmitterVisitor.prototype._visitClassConstructor = /**
  112478. * @param {?} stmt
  112479. * @param {?} ctx
  112480. * @return {?}
  112481. */
  112482. function (stmt, ctx) {
  112483. ctx.print(stmt, "constructor(");
  112484. this._visitParams(stmt.constructorMethod.params, ctx);
  112485. ctx.println(stmt, ") {");
  112486. ctx.incIndent();
  112487. this.visitAllStatements(stmt.constructorMethod.body, ctx);
  112488. ctx.decIndent();
  112489. ctx.println(stmt, "}");
  112490. };
  112491. /**
  112492. * @param {?} method
  112493. * @param {?} ctx
  112494. * @return {?}
  112495. */
  112496. _TsEmitterVisitor.prototype._visitClassMethod = /**
  112497. * @param {?} method
  112498. * @param {?} ctx
  112499. * @return {?}
  112500. */
  112501. function (method, ctx) {
  112502. if (method.hasModifier(StmtModifier.Private)) {
  112503. ctx.print(null, "private ");
  112504. }
  112505. ctx.print(null, method.name + "(");
  112506. this._visitParams(method.params, ctx);
  112507. ctx.print(null, ")");
  112508. this._printColonType(method.type, ctx, 'void');
  112509. ctx.println(null, " {");
  112510. ctx.incIndent();
  112511. this.visitAllStatements(method.body, ctx);
  112512. ctx.decIndent();
  112513. ctx.println(null, "}");
  112514. };
  112515. /**
  112516. * @param {?} ast
  112517. * @param {?} ctx
  112518. * @return {?}
  112519. */
  112520. _TsEmitterVisitor.prototype.visitFunctionExpr = /**
  112521. * @param {?} ast
  112522. * @param {?} ctx
  112523. * @return {?}
  112524. */
  112525. function (ast, ctx) {
  112526. ctx.print(ast, "(");
  112527. this._visitParams(ast.params, ctx);
  112528. ctx.print(ast, ")");
  112529. this._printColonType(ast.type, ctx, 'void');
  112530. ctx.println(ast, " => {");
  112531. ctx.incIndent();
  112532. this.visitAllStatements(ast.statements, ctx);
  112533. ctx.decIndent();
  112534. ctx.print(ast, "}");
  112535. return null;
  112536. };
  112537. /**
  112538. * @param {?} stmt
  112539. * @param {?} ctx
  112540. * @return {?}
  112541. */
  112542. _TsEmitterVisitor.prototype.visitDeclareFunctionStmt = /**
  112543. * @param {?} stmt
  112544. * @param {?} ctx
  112545. * @return {?}
  112546. */
  112547. function (stmt, ctx) {
  112548. if (stmt.hasModifier(StmtModifier.Exported)) {
  112549. ctx.print(stmt, "export ");
  112550. }
  112551. ctx.print(stmt, "function " + stmt.name + "(");
  112552. this._visitParams(stmt.params, ctx);
  112553. ctx.print(stmt, ")");
  112554. this._printColonType(stmt.type, ctx, 'void');
  112555. ctx.println(stmt, " {");
  112556. ctx.incIndent();
  112557. this.visitAllStatements(stmt.statements, ctx);
  112558. ctx.decIndent();
  112559. ctx.println(stmt, "}");
  112560. return null;
  112561. };
  112562. /**
  112563. * @param {?} stmt
  112564. * @param {?} ctx
  112565. * @return {?}
  112566. */
  112567. _TsEmitterVisitor.prototype.visitTryCatchStmt = /**
  112568. * @param {?} stmt
  112569. * @param {?} ctx
  112570. * @return {?}
  112571. */
  112572. function (stmt, ctx) {
  112573. ctx.println(stmt, "try {");
  112574. ctx.incIndent();
  112575. this.visitAllStatements(stmt.bodyStmts, ctx);
  112576. ctx.decIndent();
  112577. ctx.println(stmt, "} catch (" + CATCH_ERROR_VAR$1.name + ") {");
  112578. ctx.incIndent();
  112579. var /** @type {?} */ catchStmts = [/** @type {?} */ (CATCH_STACK_VAR$1.set(CATCH_ERROR_VAR$1.prop('stack', null)).toDeclStmt(null, [
  112580. StmtModifier.Final
  112581. ]))].concat(stmt.catchStmts);
  112582. this.visitAllStatements(catchStmts, ctx);
  112583. ctx.decIndent();
  112584. ctx.println(stmt, "}");
  112585. return null;
  112586. };
  112587. /**
  112588. * @param {?} type
  112589. * @param {?} ctx
  112590. * @return {?}
  112591. */
  112592. _TsEmitterVisitor.prototype.visitBuiltintType = /**
  112593. * @param {?} type
  112594. * @param {?} ctx
  112595. * @return {?}
  112596. */
  112597. function (type, ctx) {
  112598. var /** @type {?} */ typeStr;
  112599. switch (type.name) {
  112600. case BuiltinTypeName.Bool:
  112601. typeStr = 'boolean';
  112602. break;
  112603. case BuiltinTypeName.Dynamic:
  112604. typeStr = 'any';
  112605. break;
  112606. case BuiltinTypeName.Function:
  112607. typeStr = 'Function';
  112608. break;
  112609. case BuiltinTypeName.Number:
  112610. typeStr = 'number';
  112611. break;
  112612. case BuiltinTypeName.Int:
  112613. typeStr = 'number';
  112614. break;
  112615. case BuiltinTypeName.String:
  112616. typeStr = 'string';
  112617. break;
  112618. default:
  112619. throw new Error("Unsupported builtin type " + type.name);
  112620. }
  112621. ctx.print(null, typeStr);
  112622. return null;
  112623. };
  112624. /**
  112625. * @param {?} ast
  112626. * @param {?} ctx
  112627. * @return {?}
  112628. */
  112629. _TsEmitterVisitor.prototype.visitExpressionType = /**
  112630. * @param {?} ast
  112631. * @param {?} ctx
  112632. * @return {?}
  112633. */
  112634. function (ast, ctx) {
  112635. ast.value.visitExpression(this, ctx);
  112636. return null;
  112637. };
  112638. /**
  112639. * @param {?} type
  112640. * @param {?} ctx
  112641. * @return {?}
  112642. */
  112643. _TsEmitterVisitor.prototype.visitArrayType = /**
  112644. * @param {?} type
  112645. * @param {?} ctx
  112646. * @return {?}
  112647. */
  112648. function (type, ctx) {
  112649. this.visitType(type.of, ctx);
  112650. ctx.print(null, "[]");
  112651. return null;
  112652. };
  112653. /**
  112654. * @param {?} type
  112655. * @param {?} ctx
  112656. * @return {?}
  112657. */
  112658. _TsEmitterVisitor.prototype.visitMapType = /**
  112659. * @param {?} type
  112660. * @param {?} ctx
  112661. * @return {?}
  112662. */
  112663. function (type, ctx) {
  112664. ctx.print(null, "{[key: string]:");
  112665. this.visitType(type.valueType, ctx);
  112666. ctx.print(null, "}");
  112667. return null;
  112668. };
  112669. /**
  112670. * @param {?} method
  112671. * @return {?}
  112672. */
  112673. _TsEmitterVisitor.prototype.getBuiltinMethodName = /**
  112674. * @param {?} method
  112675. * @return {?}
  112676. */
  112677. function (method) {
  112678. var /** @type {?} */ name;
  112679. switch (method) {
  112680. case BuiltinMethod.ConcatArray:
  112681. name = 'concat';
  112682. break;
  112683. case BuiltinMethod.SubscribeObservable:
  112684. name = 'subscribe';
  112685. break;
  112686. case BuiltinMethod.Bind:
  112687. name = 'bind';
  112688. break;
  112689. default:
  112690. throw new Error("Unknown builtin method: " + method);
  112691. }
  112692. return name;
  112693. };
  112694. /**
  112695. * @param {?} params
  112696. * @param {?} ctx
  112697. * @return {?}
  112698. */
  112699. _TsEmitterVisitor.prototype._visitParams = /**
  112700. * @param {?} params
  112701. * @param {?} ctx
  112702. * @return {?}
  112703. */
  112704. function (params, ctx) {
  112705. var _this = this;
  112706. this.visitAllObjects(function (param) {
  112707. ctx.print(null, param.name);
  112708. _this._printColonType(param.type, ctx);
  112709. }, params, ctx, ',');
  112710. };
  112711. /**
  112712. * @param {?} value
  112713. * @param {?} typeParams
  112714. * @param {?} ctx
  112715. * @return {?}
  112716. */
  112717. _TsEmitterVisitor.prototype._visitIdentifier = /**
  112718. * @param {?} value
  112719. * @param {?} typeParams
  112720. * @param {?} ctx
  112721. * @return {?}
  112722. */
  112723. function (value, typeParams, ctx) {
  112724. var _this = this;
  112725. var name = value.name, moduleName = value.moduleName;
  112726. if (this.referenceFilter && this.referenceFilter(value)) {
  112727. ctx.print(null, '(null as any)');
  112728. return;
  112729. }
  112730. if (moduleName) {
  112731. var /** @type {?} */ prefix = this.importsWithPrefixes.get(moduleName);
  112732. if (prefix == null) {
  112733. prefix = "i" + this.importsWithPrefixes.size;
  112734. this.importsWithPrefixes.set(moduleName, prefix);
  112735. }
  112736. ctx.print(null, prefix + ".");
  112737. }
  112738. ctx.print(null, /** @type {?} */ ((name)));
  112739. if (this.typeExpression > 0) {
  112740. // If we are in a type expression that refers to a generic type then supply
  112741. // the required type parameters. If there were not enough type parameters
  112742. // supplied, supply any as the type. Outside a type expression the reference
  112743. // should not supply type parameters and be treated as a simple value reference
  112744. // to the constructor function itself.
  112745. var /** @type {?} */ suppliedParameters = typeParams || [];
  112746. if (suppliedParameters.length > 0) {
  112747. ctx.print(null, "<");
  112748. this.visitAllObjects(function (type) { return type.visitType(_this, ctx); }, /** @type {?} */ ((typeParams)), ctx, ',');
  112749. ctx.print(null, ">");
  112750. }
  112751. }
  112752. };
  112753. /**
  112754. * @param {?} type
  112755. * @param {?} ctx
  112756. * @param {?=} defaultType
  112757. * @return {?}
  112758. */
  112759. _TsEmitterVisitor.prototype._printColonType = /**
  112760. * @param {?} type
  112761. * @param {?} ctx
  112762. * @param {?=} defaultType
  112763. * @return {?}
  112764. */
  112765. function (type, ctx, defaultType) {
  112766. if (type !== INFERRED_TYPE) {
  112767. ctx.print(null, ':');
  112768. this.visitType(type, ctx, defaultType);
  112769. }
  112770. };
  112771. return _TsEmitterVisitor;
  112772. }(AbstractEmitterVisitor));
  112773. /**
  112774. * @fileoverview added by tsickle
  112775. * @suppress {checkTypes} checked by tsc
  112776. */
  112777. /**
  112778. * @license
  112779. * Copyright Google Inc. All Rights Reserved.
  112780. *
  112781. * Use of this source code is governed by an MIT-style license that can be
  112782. * found in the LICENSE file at https://angular.io/license
  112783. */
  112784. /**
  112785. * Resolve a `Type` for {\@link Pipe}.
  112786. *
  112787. * This interface can be overridden by the application developer to create custom behavior.
  112788. *
  112789. * See {\@link Compiler}
  112790. */
  112791. var PipeResolver = /** @class */ (function () {
  112792. function PipeResolver(_reflector) {
  112793. this._reflector = _reflector;
  112794. }
  112795. /**
  112796. * @param {?} type
  112797. * @return {?}
  112798. */
  112799. PipeResolver.prototype.isPipe = /**
  112800. * @param {?} type
  112801. * @return {?}
  112802. */
  112803. function (type) {
  112804. var /** @type {?} */ typeMetadata = this._reflector.annotations(resolveForwardRef(type));
  112805. return typeMetadata && typeMetadata.some(createPipe.isTypeOf);
  112806. };
  112807. /**
  112808. * Return {@link Pipe} for a given `Type`.
  112809. */
  112810. /**
  112811. * Return {\@link Pipe} for a given `Type`.
  112812. * @param {?} type
  112813. * @param {?=} throwIfNotFound
  112814. * @return {?}
  112815. */
  112816. PipeResolver.prototype.resolve = /**
  112817. * Return {\@link Pipe} for a given `Type`.
  112818. * @param {?} type
  112819. * @param {?=} throwIfNotFound
  112820. * @return {?}
  112821. */
  112822. function (type, throwIfNotFound) {
  112823. if (throwIfNotFound === void 0) { throwIfNotFound = true; }
  112824. var /** @type {?} */ metas = this._reflector.annotations(resolveForwardRef(type));
  112825. if (metas) {
  112826. var /** @type {?} */ annotation = findLast(metas, createPipe.isTypeOf);
  112827. if (annotation) {
  112828. return annotation;
  112829. }
  112830. }
  112831. if (throwIfNotFound) {
  112832. throw new Error("No Pipe decorator found on " + stringify(type));
  112833. }
  112834. return null;
  112835. };
  112836. return PipeResolver;
  112837. }());
  112838. /**
  112839. * @fileoverview added by tsickle
  112840. * @suppress {checkTypes} checked by tsc
  112841. */
  112842. /**
  112843. * @license
  112844. * Copyright Google Inc. All Rights Reserved.
  112845. *
  112846. * Use of this source code is governed by an MIT-style license that can be
  112847. * found in the LICENSE file at https://angular.io/license
  112848. */
  112849. /**
  112850. * Map from tagName|propertyName SecurityContext. Properties applying to all tags use '*'.
  112851. */
  112852. var SECURITY_SCHEMA = {};
  112853. /**
  112854. * @param {?} ctx
  112855. * @param {?} specs
  112856. * @return {?}
  112857. */
  112858. function registerContext(ctx, specs) {
  112859. for (var _i = 0, specs_1 = specs; _i < specs_1.length; _i++) {
  112860. var spec = specs_1[_i];
  112861. SECURITY_SCHEMA[spec.toLowerCase()] = ctx;
  112862. }
  112863. }
  112864. // Case is insignificant below, all element and attribute names are lower-cased for lookup.
  112865. registerContext(SecurityContext.HTML, [
  112866. 'iframe|srcdoc',
  112867. '*|innerHTML',
  112868. '*|outerHTML',
  112869. ]);
  112870. registerContext(SecurityContext.STYLE, ['*|style']);
  112871. // NB: no SCRIPT contexts here, they are never allowed due to the parser stripping them.
  112872. registerContext(SecurityContext.URL, [
  112873. '*|formAction', 'area|href', 'area|ping', 'audio|src', 'a|href',
  112874. 'a|ping', 'blockquote|cite', 'body|background', 'del|cite', 'form|action',
  112875. 'img|src', 'img|srcset', 'input|src', 'ins|cite', 'q|cite',
  112876. 'source|src', 'source|srcset', 'track|src', 'video|poster', 'video|src',
  112877. ]);
  112878. registerContext(SecurityContext.RESOURCE_URL, [
  112879. 'applet|code',
  112880. 'applet|codebase',
  112881. 'base|href',
  112882. 'embed|src',
  112883. 'frame|src',
  112884. 'head|profile',
  112885. 'html|manifest',
  112886. 'iframe|src',
  112887. 'link|href',
  112888. 'media|src',
  112889. 'object|codebase',
  112890. 'object|data',
  112891. 'script|src',
  112892. ]);
  112893. /**
  112894. * @fileoverview added by tsickle
  112895. * @suppress {checkTypes} checked by tsc
  112896. */
  112897. /**
  112898. * @license
  112899. * Copyright Google Inc. All Rights Reserved.
  112900. *
  112901. * Use of this source code is governed by an MIT-style license that can be
  112902. * found in the LICENSE file at https://angular.io/license
  112903. */
  112904. /**
  112905. * @abstract
  112906. */
  112907. var ElementSchemaRegistry = /** @class */ (function () {
  112908. function ElementSchemaRegistry() {
  112909. }
  112910. return ElementSchemaRegistry;
  112911. }());
  112912. /**
  112913. * @fileoverview added by tsickle
  112914. * @suppress {checkTypes} checked by tsc
  112915. */
  112916. /**
  112917. * @license
  112918. * Copyright Google Inc. All Rights Reserved.
  112919. *
  112920. * Use of this source code is governed by an MIT-style license that can be
  112921. * found in the LICENSE file at https://angular.io/license
  112922. */
  112923. var BOOLEAN = 'boolean';
  112924. var NUMBER = 'number';
  112925. var STRING = 'string';
  112926. var OBJECT = 'object';
  112927. /**
  112928. * This array represents the DOM schema. It encodes inheritance, properties, and events.
  112929. *
  112930. * ## Overview
  112931. *
  112932. * Each line represents one kind of element. The `element_inheritance` and properties are joined
  112933. * using `element_inheritance|properties` syntax.
  112934. *
  112935. * ## Element Inheritance
  112936. *
  112937. * The `element_inheritance` can be further subdivided as `element1,element2,...^parentElement`.
  112938. * Here the individual elements are separated by `,` (commas). Every element in the list
  112939. * has identical properties.
  112940. *
  112941. * An `element` may inherit additional properties from `parentElement` If no `^parentElement` is
  112942. * specified then `""` (blank) element is assumed.
  112943. *
  112944. * NOTE: The blank element inherits from root `[Element]` element, the super element of all
  112945. * elements.
  112946. *
  112947. * NOTE an element prefix such as `:svg:` has no special meaning to the schema.
  112948. *
  112949. * ## Properties
  112950. *
  112951. * Each element has a set of properties separated by `,` (commas). Each property can be prefixed
  112952. * by a special character designating its type:
  112953. *
  112954. * - (no prefix): property is a string.
  112955. * - `*`: property represents an event.
  112956. * - `!`: property is a boolean.
  112957. * - `#`: property is a number.
  112958. * - `%`: property is an object.
  112959. *
  112960. * ## Query
  112961. *
  112962. * The class creates an internal squas representation which allows to easily answer the query of
  112963. * if a given property exist on a given element.
  112964. *
  112965. * NOTE: We don't yet support querying for types or events.
  112966. * NOTE: This schema is auto extracted from `schema_extractor.ts` located in the test folder,
  112967. * see dom_element_schema_registry_spec.ts
  112968. */
  112969. var SCHEMA = [
  112970. '[Element]|textContent,%classList,className,id,innerHTML,*beforecopy,*beforecut,*beforepaste,*copy,*cut,*paste,*search,*selectstart,*webkitfullscreenchange,*webkitfullscreenerror,*wheel,outerHTML,#scrollLeft,#scrollTop,slot' +
  112971. ',*message,*mozfullscreenchange,*mozfullscreenerror,*mozpointerlockchange,*mozpointerlockerror,*webglcontextcreationerror,*webglcontextlost,*webglcontextrestored',
  112972. '[HTMLElement]^[Element]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate',
  112973. 'abbr,address,article,aside,b,bdi,bdo,cite,code,dd,dfn,dt,em,figcaption,figure,footer,header,i,kbd,main,mark,nav,noscript,rb,rp,rt,rtc,ruby,s,samp,section,small,strong,sub,sup,u,var,wbr^[HTMLElement]|accessKey,contentEditable,dir,!draggable,!hidden,innerText,lang,*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,outerText,!spellcheck,%style,#tabIndex,title,!translate',
  112974. 'media^[HTMLElement]|!autoplay,!controls,%controlsList,%crossOrigin,#currentTime,!defaultMuted,#defaultPlaybackRate,!disableRemotePlayback,!loop,!muted,*encrypted,*waitingforkey,#playbackRate,preload,src,%srcObject,#volume',
  112975. ':svg:^[HTMLElement]|*abort,*auxclick,*blur,*cancel,*canplay,*canplaythrough,*change,*click,*close,*contextmenu,*cuechange,*dblclick,*drag,*dragend,*dragenter,*dragleave,*dragover,*dragstart,*drop,*durationchange,*emptied,*ended,*error,*focus,*gotpointercapture,*input,*invalid,*keydown,*keypress,*keyup,*load,*loadeddata,*loadedmetadata,*loadstart,*lostpointercapture,*mousedown,*mouseenter,*mouseleave,*mousemove,*mouseout,*mouseover,*mouseup,*mousewheel,*pause,*play,*playing,*pointercancel,*pointerdown,*pointerenter,*pointerleave,*pointermove,*pointerout,*pointerover,*pointerup,*progress,*ratechange,*reset,*resize,*scroll,*seeked,*seeking,*select,*show,*stalled,*submit,*suspend,*timeupdate,*toggle,*volumechange,*waiting,%style,#tabIndex',
  112976. ':svg:graphics^:svg:|',
  112977. ':svg:animation^:svg:|*begin,*end,*repeat',
  112978. ':svg:geometry^:svg:|',
  112979. ':svg:componentTransferFunction^:svg:|',
  112980. ':svg:gradient^:svg:|',
  112981. ':svg:textContent^:svg:graphics|',
  112982. ':svg:textPositioning^:svg:textContent|',
  112983. 'a^[HTMLElement]|charset,coords,download,hash,host,hostname,href,hreflang,name,password,pathname,ping,port,protocol,referrerPolicy,rel,rev,search,shape,target,text,type,username',
  112984. 'area^[HTMLElement]|alt,coords,download,hash,host,hostname,href,!noHref,password,pathname,ping,port,protocol,referrerPolicy,rel,search,shape,target,username',
  112985. 'audio^media|',
  112986. 'br^[HTMLElement]|clear',
  112987. 'base^[HTMLElement]|href,target',
  112988. 'body^[HTMLElement]|aLink,background,bgColor,link,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,text,vLink',
  112989. 'button^[HTMLElement]|!autofocus,!disabled,formAction,formEnctype,formMethod,!formNoValidate,formTarget,name,type,value',
  112990. 'canvas^[HTMLElement]|#height,#width',
  112991. 'content^[HTMLElement]|select',
  112992. 'dl^[HTMLElement]|!compact',
  112993. 'datalist^[HTMLElement]|',
  112994. 'details^[HTMLElement]|!open',
  112995. 'dialog^[HTMLElement]|!open,returnValue',
  112996. 'dir^[HTMLElement]|!compact',
  112997. 'div^[HTMLElement]|align',
  112998. 'embed^[HTMLElement]|align,height,name,src,type,width',
  112999. 'fieldset^[HTMLElement]|!disabled,name',
  113000. 'font^[HTMLElement]|color,face,size',
  113001. 'form^[HTMLElement]|acceptCharset,action,autocomplete,encoding,enctype,method,name,!noValidate,target',
  113002. 'frame^[HTMLElement]|frameBorder,longDesc,marginHeight,marginWidth,name,!noResize,scrolling,src',
  113003. 'frameset^[HTMLElement]|cols,*beforeunload,*blur,*error,*focus,*hashchange,*languagechange,*load,*message,*offline,*online,*pagehide,*pageshow,*popstate,*rejectionhandled,*resize,*scroll,*storage,*unhandledrejection,*unload,rows',
  113004. 'hr^[HTMLElement]|align,color,!noShade,size,width',
  113005. 'head^[HTMLElement]|',
  113006. 'h1,h2,h3,h4,h5,h6^[HTMLElement]|align',
  113007. 'html^[HTMLElement]|version',
  113008. 'iframe^[HTMLElement]|align,!allowFullscreen,frameBorder,height,longDesc,marginHeight,marginWidth,name,referrerPolicy,%sandbox,scrolling,src,srcdoc,width',
  113009. 'img^[HTMLElement]|align,alt,border,%crossOrigin,#height,#hspace,!isMap,longDesc,lowsrc,name,referrerPolicy,sizes,src,srcset,useMap,#vspace,#width',
  113010. 'input^[HTMLElement]|accept,align,alt,autocapitalize,autocomplete,!autofocus,!checked,!defaultChecked,defaultValue,dirName,!disabled,%files,formAction,formEnctype,formMethod,!formNoValidate,formTarget,#height,!incremental,!indeterminate,max,#maxLength,min,#minLength,!multiple,name,pattern,placeholder,!readOnly,!required,selectionDirection,#selectionEnd,#selectionStart,#size,src,step,type,useMap,value,%valueAsDate,#valueAsNumber,#width',
  113011. 'li^[HTMLElement]|type,#value',
  113012. 'label^[HTMLElement]|htmlFor',
  113013. 'legend^[HTMLElement]|align',
  113014. 'link^[HTMLElement]|as,charset,%crossOrigin,!disabled,href,hreflang,integrity,media,referrerPolicy,rel,%relList,rev,%sizes,target,type',
  113015. 'map^[HTMLElement]|name',
  113016. 'marquee^[HTMLElement]|behavior,bgColor,direction,height,#hspace,#loop,#scrollAmount,#scrollDelay,!trueSpeed,#vspace,width',
  113017. 'menu^[HTMLElement]|!compact',
  113018. 'meta^[HTMLElement]|content,httpEquiv,name,scheme',
  113019. 'meter^[HTMLElement]|#high,#low,#max,#min,#optimum,#value',
  113020. 'ins,del^[HTMLElement]|cite,dateTime',
  113021. 'ol^[HTMLElement]|!compact,!reversed,#start,type',
  113022. 'object^[HTMLElement]|align,archive,border,code,codeBase,codeType,data,!declare,height,#hspace,name,standby,type,useMap,#vspace,width',
  113023. 'optgroup^[HTMLElement]|!disabled,label',
  113024. 'option^[HTMLElement]|!defaultSelected,!disabled,label,!selected,text,value',
  113025. 'output^[HTMLElement]|defaultValue,%htmlFor,name,value',
  113026. 'p^[HTMLElement]|align',
  113027. 'param^[HTMLElement]|name,type,value,valueType',
  113028. 'picture^[HTMLElement]|',
  113029. 'pre^[HTMLElement]|#width',
  113030. 'progress^[HTMLElement]|#max,#value',
  113031. 'q,blockquote,cite^[HTMLElement]|',
  113032. 'script^[HTMLElement]|!async,charset,%crossOrigin,!defer,event,htmlFor,integrity,src,text,type',
  113033. 'select^[HTMLElement]|!autofocus,!disabled,#length,!multiple,name,!required,#selectedIndex,#size,value',
  113034. 'shadow^[HTMLElement]|',
  113035. 'slot^[HTMLElement]|name',
  113036. 'source^[HTMLElement]|media,sizes,src,srcset,type',
  113037. 'span^[HTMLElement]|',
  113038. 'style^[HTMLElement]|!disabled,media,type',
  113039. 'caption^[HTMLElement]|align',
  113040. 'th,td^[HTMLElement]|abbr,align,axis,bgColor,ch,chOff,#colSpan,headers,height,!noWrap,#rowSpan,scope,vAlign,width',
  113041. 'col,colgroup^[HTMLElement]|align,ch,chOff,#span,vAlign,width',
  113042. 'table^[HTMLElement]|align,bgColor,border,%caption,cellPadding,cellSpacing,frame,rules,summary,%tFoot,%tHead,width',
  113043. 'tr^[HTMLElement]|align,bgColor,ch,chOff,vAlign',
  113044. 'tfoot,thead,tbody^[HTMLElement]|align,ch,chOff,vAlign',
  113045. 'template^[HTMLElement]|',
  113046. 'textarea^[HTMLElement]|autocapitalize,!autofocus,#cols,defaultValue,dirName,!disabled,#maxLength,#minLength,name,placeholder,!readOnly,!required,#rows,selectionDirection,#selectionEnd,#selectionStart,value,wrap',
  113047. 'title^[HTMLElement]|text',
  113048. 'track^[HTMLElement]|!default,kind,label,src,srclang',
  113049. 'ul^[HTMLElement]|!compact,type',
  113050. 'unknown^[HTMLElement]|',
  113051. 'video^media|#height,poster,#width',
  113052. ':svg:a^:svg:graphics|',
  113053. ':svg:animate^:svg:animation|',
  113054. ':svg:animateMotion^:svg:animation|',
  113055. ':svg:animateTransform^:svg:animation|',
  113056. ':svg:circle^:svg:geometry|',
  113057. ':svg:clipPath^:svg:graphics|',
  113058. ':svg:defs^:svg:graphics|',
  113059. ':svg:desc^:svg:|',
  113060. ':svg:discard^:svg:|',
  113061. ':svg:ellipse^:svg:geometry|',
  113062. ':svg:feBlend^:svg:|',
  113063. ':svg:feColorMatrix^:svg:|',
  113064. ':svg:feComponentTransfer^:svg:|',
  113065. ':svg:feComposite^:svg:|',
  113066. ':svg:feConvolveMatrix^:svg:|',
  113067. ':svg:feDiffuseLighting^:svg:|',
  113068. ':svg:feDisplacementMap^:svg:|',
  113069. ':svg:feDistantLight^:svg:|',
  113070. ':svg:feDropShadow^:svg:|',
  113071. ':svg:feFlood^:svg:|',
  113072. ':svg:feFuncA^:svg:componentTransferFunction|',
  113073. ':svg:feFuncB^:svg:componentTransferFunction|',
  113074. ':svg:feFuncG^:svg:componentTransferFunction|',
  113075. ':svg:feFuncR^:svg:componentTransferFunction|',
  113076. ':svg:feGaussianBlur^:svg:|',
  113077. ':svg:feImage^:svg:|',
  113078. ':svg:feMerge^:svg:|',
  113079. ':svg:feMergeNode^:svg:|',
  113080. ':svg:feMorphology^:svg:|',
  113081. ':svg:feOffset^:svg:|',
  113082. ':svg:fePointLight^:svg:|',
  113083. ':svg:feSpecularLighting^:svg:|',
  113084. ':svg:feSpotLight^:svg:|',
  113085. ':svg:feTile^:svg:|',
  113086. ':svg:feTurbulence^:svg:|',
  113087. ':svg:filter^:svg:|',
  113088. ':svg:foreignObject^:svg:graphics|',
  113089. ':svg:g^:svg:graphics|',
  113090. ':svg:image^:svg:graphics|',
  113091. ':svg:line^:svg:geometry|',
  113092. ':svg:linearGradient^:svg:gradient|',
  113093. ':svg:mpath^:svg:|',
  113094. ':svg:marker^:svg:|',
  113095. ':svg:mask^:svg:|',
  113096. ':svg:metadata^:svg:|',
  113097. ':svg:path^:svg:geometry|',
  113098. ':svg:pattern^:svg:|',
  113099. ':svg:polygon^:svg:geometry|',
  113100. ':svg:polyline^:svg:geometry|',
  113101. ':svg:radialGradient^:svg:gradient|',
  113102. ':svg:rect^:svg:geometry|',
  113103. ':svg:svg^:svg:graphics|#currentScale,#zoomAndPan',
  113104. ':svg:script^:svg:|type',
  113105. ':svg:set^:svg:animation|',
  113106. ':svg:stop^:svg:|',
  113107. ':svg:style^:svg:|!disabled,media,title,type',
  113108. ':svg:switch^:svg:graphics|',
  113109. ':svg:symbol^:svg:|',
  113110. ':svg:tspan^:svg:textPositioning|',
  113111. ':svg:text^:svg:textPositioning|',
  113112. ':svg:textPath^:svg:textContent|',
  113113. ':svg:title^:svg:|',
  113114. ':svg:use^:svg:graphics|',
  113115. ':svg:view^:svg:|#zoomAndPan',
  113116. 'data^[HTMLElement]|value',
  113117. 'keygen^[HTMLElement]|!autofocus,challenge,!disabled,form,keytype,name',
  113118. 'menuitem^[HTMLElement]|type,label,icon,!disabled,!checked,radiogroup,!default',
  113119. 'summary^[HTMLElement]|',
  113120. 'time^[HTMLElement]|dateTime',
  113121. ':svg:cursor^:svg:|',
  113122. ];
  113123. var _ATTR_TO_PROP = {
  113124. 'class': 'className',
  113125. 'for': 'htmlFor',
  113126. 'formaction': 'formAction',
  113127. 'innerHtml': 'innerHTML',
  113128. 'readonly': 'readOnly',
  113129. 'tabindex': 'tabIndex',
  113130. };
  113131. var DomElementSchemaRegistry = /** @class */ (function (_super) {
  113132. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(DomElementSchemaRegistry, _super);
  113133. function DomElementSchemaRegistry() {
  113134. var _this = _super.call(this) || this;
  113135. _this._schema = {};
  113136. SCHEMA.forEach(function (encodedType) {
  113137. var /** @type {?} */ type = {};
  113138. var _a = encodedType.split('|'), strType = _a[0], strProperties = _a[1];
  113139. var /** @type {?} */ properties = strProperties.split(',');
  113140. var _b = strType.split('^'), typeNames = _b[0], superName = _b[1];
  113141. typeNames.split(',').forEach(function (tag) { return _this._schema[tag.toLowerCase()] = type; });
  113142. var /** @type {?} */ superType = superName && _this._schema[superName.toLowerCase()];
  113143. if (superType) {
  113144. Object.keys(superType).forEach(function (prop) { type[prop] = superType[prop]; });
  113145. }
  113146. properties.forEach(function (property) {
  113147. if (property.length > 0) {
  113148. switch (property[0]) {
  113149. case '*':
  113150. // We don't yet support events.
  113151. // If ever allowing to bind to events, GO THROUGH A SECURITY REVIEW, allowing events
  113152. // will
  113153. // almost certainly introduce bad XSS vulnerabilities.
  113154. // type[property.substring(1)] = EVENT;
  113155. break;
  113156. case '!':
  113157. type[property.substring(1)] = BOOLEAN;
  113158. break;
  113159. case '#':
  113160. type[property.substring(1)] = NUMBER;
  113161. break;
  113162. case '%':
  113163. type[property.substring(1)] = OBJECT;
  113164. break;
  113165. default:
  113166. type[property] = STRING;
  113167. }
  113168. }
  113169. });
  113170. });
  113171. return _this;
  113172. }
  113173. /**
  113174. * @param {?} tagName
  113175. * @param {?} propName
  113176. * @param {?} schemaMetas
  113177. * @return {?}
  113178. */
  113179. DomElementSchemaRegistry.prototype.hasProperty = /**
  113180. * @param {?} tagName
  113181. * @param {?} propName
  113182. * @param {?} schemaMetas
  113183. * @return {?}
  113184. */
  113185. function (tagName, propName, schemaMetas) {
  113186. if (schemaMetas.some(function (schema) { return schema.name === NO_ERRORS_SCHEMA.name; })) {
  113187. return true;
  113188. }
  113189. if (tagName.indexOf('-') > -1) {
  113190. if (isNgContainer(tagName) || isNgContent(tagName)) {
  113191. return false;
  113192. }
  113193. if (schemaMetas.some(function (schema) { return schema.name === CUSTOM_ELEMENTS_SCHEMA.name; })) {
  113194. // Can't tell now as we don't know which properties a custom element will get
  113195. // once it is instantiated
  113196. return true;
  113197. }
  113198. }
  113199. var /** @type {?} */ elementProperties = this._schema[tagName.toLowerCase()] || this._schema['unknown'];
  113200. return !!elementProperties[propName];
  113201. };
  113202. /**
  113203. * @param {?} tagName
  113204. * @param {?} schemaMetas
  113205. * @return {?}
  113206. */
  113207. DomElementSchemaRegistry.prototype.hasElement = /**
  113208. * @param {?} tagName
  113209. * @param {?} schemaMetas
  113210. * @return {?}
  113211. */
  113212. function (tagName, schemaMetas) {
  113213. if (schemaMetas.some(function (schema) { return schema.name === NO_ERRORS_SCHEMA.name; })) {
  113214. return true;
  113215. }
  113216. if (tagName.indexOf('-') > -1) {
  113217. if (isNgContainer(tagName) || isNgContent(tagName)) {
  113218. return true;
  113219. }
  113220. if (schemaMetas.some(function (schema) { return schema.name === CUSTOM_ELEMENTS_SCHEMA.name; })) {
  113221. // Allow any custom elements
  113222. return true;
  113223. }
  113224. }
  113225. return !!this._schema[tagName.toLowerCase()];
  113226. };
  113227. /**
  113228. * securityContext returns the security context for the given property on the given DOM tag.
  113229. *
  113230. * Tag and property name are statically known and cannot change at runtime, i.e. it is not
  113231. * possible to bind a value into a changing attribute or tag name.
  113232. *
  113233. * The filtering is white list based. All attributes in the schema above are assumed to have the
  113234. * 'NONE' security context, i.e. that they are safe inert string values. Only specific well known
  113235. * attack vectors are assigned their appropriate context.
  113236. */
  113237. /**
  113238. * securityContext returns the security context for the given property on the given DOM tag.
  113239. *
  113240. * Tag and property name are statically known and cannot change at runtime, i.e. it is not
  113241. * possible to bind a value into a changing attribute or tag name.
  113242. *
  113243. * The filtering is white list based. All attributes in the schema above are assumed to have the
  113244. * 'NONE' security context, i.e. that they are safe inert string values. Only specific well known
  113245. * attack vectors are assigned their appropriate context.
  113246. * @param {?} tagName
  113247. * @param {?} propName
  113248. * @param {?} isAttribute
  113249. * @return {?}
  113250. */
  113251. DomElementSchemaRegistry.prototype.securityContext = /**
  113252. * securityContext returns the security context for the given property on the given DOM tag.
  113253. *
  113254. * Tag and property name are statically known and cannot change at runtime, i.e. it is not
  113255. * possible to bind a value into a changing attribute or tag name.
  113256. *
  113257. * The filtering is white list based. All attributes in the schema above are assumed to have the
  113258. * 'NONE' security context, i.e. that they are safe inert string values. Only specific well known
  113259. * attack vectors are assigned their appropriate context.
  113260. * @param {?} tagName
  113261. * @param {?} propName
  113262. * @param {?} isAttribute
  113263. * @return {?}
  113264. */
  113265. function (tagName, propName, isAttribute) {
  113266. if (isAttribute) {
  113267. // NB: For security purposes, use the mapped property name, not the attribute name.
  113268. propName = this.getMappedPropName(propName);
  113269. }
  113270. // Make sure comparisons are case insensitive, so that case differences between attribute and
  113271. // property names do not have a security impact.
  113272. tagName = tagName.toLowerCase();
  113273. propName = propName.toLowerCase();
  113274. var /** @type {?} */ ctx = SECURITY_SCHEMA[tagName + '|' + propName];
  113275. if (ctx) {
  113276. return ctx;
  113277. }
  113278. ctx = SECURITY_SCHEMA['*|' + propName];
  113279. return ctx ? ctx : SecurityContext.NONE;
  113280. };
  113281. /**
  113282. * @param {?} propName
  113283. * @return {?}
  113284. */
  113285. DomElementSchemaRegistry.prototype.getMappedPropName = /**
  113286. * @param {?} propName
  113287. * @return {?}
  113288. */
  113289. function (propName) { return _ATTR_TO_PROP[propName] || propName; };
  113290. /**
  113291. * @return {?}
  113292. */
  113293. DomElementSchemaRegistry.prototype.getDefaultComponentElementName = /**
  113294. * @return {?}
  113295. */
  113296. function () { return 'ng-component'; };
  113297. /**
  113298. * @param {?} name
  113299. * @return {?}
  113300. */
  113301. DomElementSchemaRegistry.prototype.validateProperty = /**
  113302. * @param {?} name
  113303. * @return {?}
  113304. */
  113305. function (name) {
  113306. if (name.toLowerCase().startsWith('on')) {
  113307. var /** @type {?} */ msg = "Binding to event property '" + name + "' is disallowed for security reasons, " +
  113308. ("please use (" + name.slice(2) + ")=...") +
  113309. ("\nIf '" + name + "' is a directive input, make sure the directive is imported by the") +
  113310. " current module.";
  113311. return { error: true, msg: msg };
  113312. }
  113313. else {
  113314. return { error: false };
  113315. }
  113316. };
  113317. /**
  113318. * @param {?} name
  113319. * @return {?}
  113320. */
  113321. DomElementSchemaRegistry.prototype.validateAttribute = /**
  113322. * @param {?} name
  113323. * @return {?}
  113324. */
  113325. function (name) {
  113326. if (name.toLowerCase().startsWith('on')) {
  113327. var /** @type {?} */ msg = "Binding to event attribute '" + name + "' is disallowed for security reasons, " +
  113328. ("please use (" + name.slice(2) + ")=...");
  113329. return { error: true, msg: msg };
  113330. }
  113331. else {
  113332. return { error: false };
  113333. }
  113334. };
  113335. /**
  113336. * @return {?}
  113337. */
  113338. DomElementSchemaRegistry.prototype.allKnownElementNames = /**
  113339. * @return {?}
  113340. */
  113341. function () { return Object.keys(this._schema); };
  113342. /**
  113343. * @param {?} propName
  113344. * @return {?}
  113345. */
  113346. DomElementSchemaRegistry.prototype.normalizeAnimationStyleProperty = /**
  113347. * @param {?} propName
  113348. * @return {?}
  113349. */
  113350. function (propName) {
  113351. return dashCaseToCamelCase(propName);
  113352. };
  113353. /**
  113354. * @param {?} camelCaseProp
  113355. * @param {?} userProvidedProp
  113356. * @param {?} val
  113357. * @return {?}
  113358. */
  113359. DomElementSchemaRegistry.prototype.normalizeAnimationStyleValue = /**
  113360. * @param {?} camelCaseProp
  113361. * @param {?} userProvidedProp
  113362. * @param {?} val
  113363. * @return {?}
  113364. */
  113365. function (camelCaseProp, userProvidedProp, val) {
  113366. var /** @type {?} */ unit = '';
  113367. var /** @type {?} */ strVal = val.toString().trim();
  113368. var /** @type {?} */ errorMsg = /** @type {?} */ ((null));
  113369. if (_isPixelDimensionStyle(camelCaseProp) && val !== 0 && val !== '0') {
  113370. if (typeof val === 'number') {
  113371. unit = 'px';
  113372. }
  113373. else {
  113374. var /** @type {?} */ valAndSuffixMatch = val.match(/^[+-]?[\d\.]+([a-z]*)$/);
  113375. if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {
  113376. errorMsg = "Please provide a CSS unit value for " + userProvidedProp + ":" + val;
  113377. }
  113378. }
  113379. }
  113380. return { error: errorMsg, value: strVal + unit };
  113381. };
  113382. return DomElementSchemaRegistry;
  113383. }(ElementSchemaRegistry));
  113384. /**
  113385. * @param {?} prop
  113386. * @return {?}
  113387. */
  113388. function _isPixelDimensionStyle(prop) {
  113389. switch (prop) {
  113390. case 'width':
  113391. case 'height':
  113392. case 'minWidth':
  113393. case 'minHeight':
  113394. case 'maxWidth':
  113395. case 'maxHeight':
  113396. case 'left':
  113397. case 'top':
  113398. case 'bottom':
  113399. case 'right':
  113400. case 'fontSize':
  113401. case 'outlineWidth':
  113402. case 'outlineOffset':
  113403. case 'paddingTop':
  113404. case 'paddingLeft':
  113405. case 'paddingBottom':
  113406. case 'paddingRight':
  113407. case 'marginTop':
  113408. case 'marginLeft':
  113409. case 'marginBottom':
  113410. case 'marginRight':
  113411. case 'borderRadius':
  113412. case 'borderWidth':
  113413. case 'borderTopWidth':
  113414. case 'borderLeftWidth':
  113415. case 'borderRightWidth':
  113416. case 'borderBottomWidth':
  113417. case 'textIndent':
  113418. return true;
  113419. default:
  113420. return false;
  113421. }
  113422. }
  113423. /**
  113424. * @fileoverview added by tsickle
  113425. * @suppress {checkTypes} checked by tsc
  113426. */
  113427. /**
  113428. * @license
  113429. * Copyright Google Inc. All Rights Reserved.
  113430. *
  113431. * Use of this source code is governed by an MIT-style license that can be
  113432. * found in the LICENSE file at https://angular.io/license
  113433. */
  113434. /**
  113435. * This file is a port of shadowCSS from webcomponents.js to TypeScript.
  113436. *
  113437. * Please make sure to keep to edits in sync with the source file.
  113438. *
  113439. * Source:
  113440. * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js
  113441. *
  113442. * The original file level comment is reproduced below
  113443. */
  113444. /*
  113445. This is a limited shim for ShadowDOM css styling.
  113446. https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
  113447. The intention here is to support only the styling features which can be
  113448. relatively simply implemented. The goal is to allow users to avoid the
  113449. most obvious pitfalls and do so without compromising performance significantly.
  113450. For ShadowDOM styling that's not covered here, a set of best practices
  113451. can be provided that should allow users to accomplish more complex styling.
  113452. The following is a list of specific ShadowDOM styling features and a brief
  113453. discussion of the approach used to shim.
  113454. Shimmed features:
  113455. * :host, :host-context: ShadowDOM allows styling of the shadowRoot's host
  113456. element using the :host rule. To shim this feature, the :host styles are
  113457. reformatted and prefixed with a given scope name and promoted to a
  113458. document level stylesheet.
  113459. For example, given a scope name of .foo, a rule like this:
  113460. :host {
  113461. background: red;
  113462. }
  113463. }
  113464. becomes:
  113465. .foo {
  113466. background: red;
  113467. }
  113468. * encapsulation: Styles defined within ShadowDOM, apply only to
  113469. dom inside the ShadowDOM. Polymer uses one of two techniques to implement
  113470. this feature.
  113471. By default, rules are prefixed with the host element tag name
  113472. as a descendant selector. This ensures styling does not leak out of the 'top'
  113473. of the element's ShadowDOM. For example,
  113474. div {
  113475. font-weight: bold;
  113476. }
  113477. becomes:
  113478. x-foo div {
  113479. font-weight: bold;
  113480. }
  113481. becomes:
  113482. Alternatively, if WebComponents.ShadowCSS.strictStyling is set to true then
  113483. selectors are scoped by adding an attribute selector suffix to each
  113484. simple selector that contains the host element tag name. Each element
  113485. in the element's ShadowDOM template is also given the scope attribute.
  113486. Thus, these rules match only elements that have the scope attribute.
  113487. For example, given a scope name of x-foo, a rule like this:
  113488. div {
  113489. font-weight: bold;
  113490. }
  113491. becomes:
  113492. div[x-foo] {
  113493. font-weight: bold;
  113494. }
  113495. Note that elements that are dynamically added to a scope must have the scope
  113496. selector added to them manually.
  113497. * upper/lower bound encapsulation: Styles which are defined outside a
  113498. shadowRoot should not cross the ShadowDOM boundary and should not apply
  113499. inside a shadowRoot.
  113500. This styling behavior is not emulated. Some possible ways to do this that
  113501. were rejected due to complexity and/or performance concerns include: (1) reset
  113502. every possible property for every possible selector for a given scope name;
  113503. (2) re-implement css in javascript.
  113504. As an alternative, users should make sure to use selectors
  113505. specific to the scope in which they are working.
  113506. * ::distributed: This behavior is not emulated. It's often not necessary
  113507. to style the contents of a specific insertion point and instead, descendants
  113508. of the host element can be styled selectively. Users can also create an
  113509. extra node around an insertion point and style that node's contents
  113510. via descendent selectors. For example, with a shadowRoot like this:
  113511. <style>
  113512. ::content(div) {
  113513. background: red;
  113514. }
  113515. </style>
  113516. <content></content>
  113517. could become:
  113518. <style>
  113519. / *@polyfill .content-container div * /
  113520. ::content(div) {
  113521. background: red;
  113522. }
  113523. </style>
  113524. <div class="content-container">
  113525. <content></content>
  113526. </div>
  113527. Note the use of @polyfill in the comment above a ShadowDOM specific style
  113528. declaration. This is a directive to the styling shim to use the selector
  113529. in comments in lieu of the next selector when running under polyfill.
  113530. */
  113531. var ShadowCss = /** @class */ (function () {
  113532. function ShadowCss() {
  113533. this.strictStyling = true;
  113534. }
  113535. /*
  113536. * Shim some cssText with the given selector. Returns cssText that can
  113537. * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css).
  113538. *
  113539. * When strictStyling is true:
  113540. * - selector is the attribute added to all elements inside the host,
  113541. * - hostSelector is the attribute added to the host itself.
  113542. */
  113543. /**
  113544. * @param {?} cssText
  113545. * @param {?} selector
  113546. * @param {?=} hostSelector
  113547. * @return {?}
  113548. */
  113549. ShadowCss.prototype.shimCssText = /**
  113550. * @param {?} cssText
  113551. * @param {?} selector
  113552. * @param {?=} hostSelector
  113553. * @return {?}
  113554. */
  113555. function (cssText, selector, hostSelector) {
  113556. if (hostSelector === void 0) { hostSelector = ''; }
  113557. var /** @type {?} */ commentsWithHash = extractCommentsWithHash(cssText);
  113558. cssText = stripComments(cssText);
  113559. cssText = this._insertDirectives(cssText);
  113560. var /** @type {?} */ scopedCssText = this._scopeCssText(cssText, selector, hostSelector);
  113561. return [scopedCssText].concat(commentsWithHash).join('\n');
  113562. };
  113563. /**
  113564. * @param {?} cssText
  113565. * @return {?}
  113566. */
  113567. ShadowCss.prototype._insertDirectives = /**
  113568. * @param {?} cssText
  113569. * @return {?}
  113570. */
  113571. function (cssText) {
  113572. cssText = this._insertPolyfillDirectivesInCssText(cssText);
  113573. return this._insertPolyfillRulesInCssText(cssText);
  113574. };
  113575. /**
  113576. * @param {?} cssText
  113577. * @return {?}
  113578. */
  113579. ShadowCss.prototype._insertPolyfillDirectivesInCssText = /**
  113580. * @param {?} cssText
  113581. * @return {?}
  113582. */
  113583. function (cssText) {
  113584. // Difference with webcomponents.js: does not handle comments
  113585. return cssText.replace(_cssContentNextSelectorRe, function () {
  113586. var m = [];
  113587. for (var _i = 0; _i < arguments.length; _i++) {
  113588. m[_i] = arguments[_i];
  113589. }
  113590. return m[2] + '{';
  113591. });
  113592. };
  113593. /**
  113594. * @param {?} cssText
  113595. * @return {?}
  113596. */
  113597. ShadowCss.prototype._insertPolyfillRulesInCssText = /**
  113598. * @param {?} cssText
  113599. * @return {?}
  113600. */
  113601. function (cssText) {
  113602. // Difference with webcomponents.js: does not handle comments
  113603. return cssText.replace(_cssContentRuleRe, function () {
  113604. var m = [];
  113605. for (var _i = 0; _i < arguments.length; _i++) {
  113606. m[_i] = arguments[_i];
  113607. }
  113608. var /** @type {?} */ rule = m[0].replace(m[1], '').replace(m[2], '');
  113609. return m[4] + rule;
  113610. });
  113611. };
  113612. /**
  113613. * @param {?} cssText
  113614. * @param {?} scopeSelector
  113615. * @param {?} hostSelector
  113616. * @return {?}
  113617. */
  113618. ShadowCss.prototype._scopeCssText = /**
  113619. * @param {?} cssText
  113620. * @param {?} scopeSelector
  113621. * @param {?} hostSelector
  113622. * @return {?}
  113623. */
  113624. function (cssText, scopeSelector, hostSelector) {
  113625. var /** @type {?} */ unscopedRules = this._extractUnscopedRulesFromCssText(cssText);
  113626. // replace :host and :host-context -shadowcsshost and -shadowcsshost respectively
  113627. cssText = this._insertPolyfillHostInCssText(cssText);
  113628. cssText = this._convertColonHost(cssText);
  113629. cssText = this._convertColonHostContext(cssText);
  113630. cssText = this._convertShadowDOMSelectors(cssText);
  113631. if (scopeSelector) {
  113632. cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);
  113633. }
  113634. cssText = cssText + '\n' + unscopedRules;
  113635. return cssText.trim();
  113636. };
  113637. /**
  113638. * @param {?} cssText
  113639. * @return {?}
  113640. */
  113641. ShadowCss.prototype._extractUnscopedRulesFromCssText = /**
  113642. * @param {?} cssText
  113643. * @return {?}
  113644. */
  113645. function (cssText) {
  113646. // Difference with webcomponents.js: does not handle comments
  113647. var /** @type {?} */ r = '';
  113648. var /** @type {?} */ m;
  113649. _cssContentUnscopedRuleRe.lastIndex = 0;
  113650. while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) {
  113651. var /** @type {?} */ rule = m[0].replace(m[2], '').replace(m[1], m[4]);
  113652. r += rule + '\n\n';
  113653. }
  113654. return r;
  113655. };
  113656. /**
  113657. * @param {?} cssText
  113658. * @return {?}
  113659. */
  113660. ShadowCss.prototype._convertColonHost = /**
  113661. * @param {?} cssText
  113662. * @return {?}
  113663. */
  113664. function (cssText) {
  113665. return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer);
  113666. };
  113667. /**
  113668. * @param {?} cssText
  113669. * @return {?}
  113670. */
  113671. ShadowCss.prototype._convertColonHostContext = /**
  113672. * @param {?} cssText
  113673. * @return {?}
  113674. */
  113675. function (cssText) {
  113676. return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer);
  113677. };
  113678. /**
  113679. * @param {?} cssText
  113680. * @param {?} regExp
  113681. * @param {?} partReplacer
  113682. * @return {?}
  113683. */
  113684. ShadowCss.prototype._convertColonRule = /**
  113685. * @param {?} cssText
  113686. * @param {?} regExp
  113687. * @param {?} partReplacer
  113688. * @return {?}
  113689. */
  113690. function (cssText, regExp, partReplacer) {
  113691. // m[1] = :host(-context), m[2] = contents of (), m[3] rest of rule
  113692. return cssText.replace(regExp, function () {
  113693. var m = [];
  113694. for (var _i = 0; _i < arguments.length; _i++) {
  113695. m[_i] = arguments[_i];
  113696. }
  113697. if (m[2]) {
  113698. var /** @type {?} */ parts = m[2].split(',');
  113699. var /** @type {?} */ r = [];
  113700. for (var /** @type {?} */ i = 0; i < parts.length; i++) {
  113701. var /** @type {?} */ p = parts[i].trim();
  113702. if (!p)
  113703. break;
  113704. r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));
  113705. }
  113706. return r.join(',');
  113707. }
  113708. else {
  113709. return _polyfillHostNoCombinator + m[3];
  113710. }
  113711. });
  113712. };
  113713. /**
  113714. * @param {?} host
  113715. * @param {?} part
  113716. * @param {?} suffix
  113717. * @return {?}
  113718. */
  113719. ShadowCss.prototype._colonHostContextPartReplacer = /**
  113720. * @param {?} host
  113721. * @param {?} part
  113722. * @param {?} suffix
  113723. * @return {?}
  113724. */
  113725. function (host, part, suffix) {
  113726. if (part.indexOf(_polyfillHost) > -1) {
  113727. return this._colonHostPartReplacer(host, part, suffix);
  113728. }
  113729. else {
  113730. return host + part + suffix + ', ' + part + ' ' + host + suffix;
  113731. }
  113732. };
  113733. /**
  113734. * @param {?} host
  113735. * @param {?} part
  113736. * @param {?} suffix
  113737. * @return {?}
  113738. */
  113739. ShadowCss.prototype._colonHostPartReplacer = /**
  113740. * @param {?} host
  113741. * @param {?} part
  113742. * @param {?} suffix
  113743. * @return {?}
  113744. */
  113745. function (host, part, suffix) {
  113746. return host + part.replace(_polyfillHost, '') + suffix;
  113747. };
  113748. /**
  113749. * @param {?} cssText
  113750. * @return {?}
  113751. */
  113752. ShadowCss.prototype._convertShadowDOMSelectors = /**
  113753. * @param {?} cssText
  113754. * @return {?}
  113755. */
  113756. function (cssText) {
  113757. return _shadowDOMSelectorsRe.reduce(function (result, pattern) { return result.replace(pattern, ' '); }, cssText);
  113758. };
  113759. /**
  113760. * @param {?} cssText
  113761. * @param {?} scopeSelector
  113762. * @param {?} hostSelector
  113763. * @return {?}
  113764. */
  113765. ShadowCss.prototype._scopeSelectors = /**
  113766. * @param {?} cssText
  113767. * @param {?} scopeSelector
  113768. * @param {?} hostSelector
  113769. * @return {?}
  113770. */
  113771. function (cssText, scopeSelector, hostSelector) {
  113772. var _this = this;
  113773. return processRules(cssText, function (rule) {
  113774. var /** @type {?} */ selector = rule.selector;
  113775. var /** @type {?} */ content = rule.content;
  113776. if (rule.selector[0] != '@') {
  113777. selector =
  113778. _this._scopeSelector(rule.selector, scopeSelector, hostSelector, _this.strictStyling);
  113779. }
  113780. else if (rule.selector.startsWith('@media') || rule.selector.startsWith('@supports') ||
  113781. rule.selector.startsWith('@page') || rule.selector.startsWith('@document')) {
  113782. content = _this._scopeSelectors(rule.content, scopeSelector, hostSelector);
  113783. }
  113784. return new CssRule(selector, content);
  113785. });
  113786. };
  113787. /**
  113788. * @param {?} selector
  113789. * @param {?} scopeSelector
  113790. * @param {?} hostSelector
  113791. * @param {?} strict
  113792. * @return {?}
  113793. */
  113794. ShadowCss.prototype._scopeSelector = /**
  113795. * @param {?} selector
  113796. * @param {?} scopeSelector
  113797. * @param {?} hostSelector
  113798. * @param {?} strict
  113799. * @return {?}
  113800. */
  113801. function (selector, scopeSelector, hostSelector, strict) {
  113802. var _this = this;
  113803. return selector.split(',')
  113804. .map(function (part) { return part.trim().split(_shadowDeepSelectors); })
  113805. .map(function (deepParts) {
  113806. var shallowPart = deepParts[0], otherParts = deepParts.slice(1);
  113807. var /** @type {?} */ applyScope = function (shallowPart) {
  113808. if (_this._selectorNeedsScoping(shallowPart, scopeSelector)) {
  113809. return strict ?
  113810. _this._applyStrictSelectorScope(shallowPart, scopeSelector, hostSelector) :
  113811. _this._applySelectorScope(shallowPart, scopeSelector, hostSelector);
  113812. }
  113813. else {
  113814. return shallowPart;
  113815. }
  113816. };
  113817. return [applyScope(shallowPart)].concat(otherParts).join(' ');
  113818. })
  113819. .join(', ');
  113820. };
  113821. /**
  113822. * @param {?} selector
  113823. * @param {?} scopeSelector
  113824. * @return {?}
  113825. */
  113826. ShadowCss.prototype._selectorNeedsScoping = /**
  113827. * @param {?} selector
  113828. * @param {?} scopeSelector
  113829. * @return {?}
  113830. */
  113831. function (selector, scopeSelector) {
  113832. var /** @type {?} */ re = this._makeScopeMatcher(scopeSelector);
  113833. return !re.test(selector);
  113834. };
  113835. /**
  113836. * @param {?} scopeSelector
  113837. * @return {?}
  113838. */
  113839. ShadowCss.prototype._makeScopeMatcher = /**
  113840. * @param {?} scopeSelector
  113841. * @return {?}
  113842. */
  113843. function (scopeSelector) {
  113844. var /** @type {?} */ lre = /\[/g;
  113845. var /** @type {?} */ rre = /\]/g;
  113846. scopeSelector = scopeSelector.replace(lre, '\\[').replace(rre, '\\]');
  113847. return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
  113848. };
  113849. /**
  113850. * @param {?} selector
  113851. * @param {?} scopeSelector
  113852. * @param {?} hostSelector
  113853. * @return {?}
  113854. */
  113855. ShadowCss.prototype._applySelectorScope = /**
  113856. * @param {?} selector
  113857. * @param {?} scopeSelector
  113858. * @param {?} hostSelector
  113859. * @return {?}
  113860. */
  113861. function (selector, scopeSelector, hostSelector) {
  113862. // Difference from webcomponents.js: scopeSelector could not be an array
  113863. return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);
  113864. };
  113865. /**
  113866. * @param {?} selector
  113867. * @param {?} scopeSelector
  113868. * @param {?} hostSelector
  113869. * @return {?}
  113870. */
  113871. ShadowCss.prototype._applySimpleSelectorScope = /**
  113872. * @param {?} selector
  113873. * @param {?} scopeSelector
  113874. * @param {?} hostSelector
  113875. * @return {?}
  113876. */
  113877. function (selector, scopeSelector, hostSelector) {
  113878. // In Android browser, the lastIndex is not reset when the regex is used in String.replace()
  113879. _polyfillHostRe.lastIndex = 0;
  113880. if (_polyfillHostRe.test(selector)) {
  113881. var /** @type {?} */ replaceBy_1 = this.strictStyling ? "[" + hostSelector + "]" : scopeSelector;
  113882. return selector
  113883. .replace(_polyfillHostNoCombinatorRe, function (hnc, selector) {
  113884. return selector.replace(/([^:]*)(:*)(.*)/, function (_, before, colon, after) {
  113885. return before + replaceBy_1 + colon + after;
  113886. });
  113887. })
  113888. .replace(_polyfillHostRe, replaceBy_1 + ' ');
  113889. }
  113890. return scopeSelector + ' ' + selector;
  113891. };
  113892. /**
  113893. * @param {?} selector
  113894. * @param {?} scopeSelector
  113895. * @param {?} hostSelector
  113896. * @return {?}
  113897. */
  113898. ShadowCss.prototype._applyStrictSelectorScope = /**
  113899. * @param {?} selector
  113900. * @param {?} scopeSelector
  113901. * @param {?} hostSelector
  113902. * @return {?}
  113903. */
  113904. function (selector, scopeSelector, hostSelector) {
  113905. var _this = this;
  113906. var /** @type {?} */ isRe = /\[is=([^\]]*)\]/g;
  113907. scopeSelector = scopeSelector.replace(isRe, function (_) {
  113908. var parts = [];
  113909. for (var _i = 1; _i < arguments.length; _i++) {
  113910. parts[_i - 1] = arguments[_i];
  113911. }
  113912. return parts[0];
  113913. });
  113914. var /** @type {?} */ attrName = '[' + scopeSelector + ']';
  113915. var /** @type {?} */ _scopeSelectorPart = function (p) {
  113916. var /** @type {?} */ scopedP = p.trim();
  113917. if (!scopedP) {
  113918. return '';
  113919. }
  113920. if (p.indexOf(_polyfillHostNoCombinator) > -1) {
  113921. scopedP = _this._applySimpleSelectorScope(p, scopeSelector, hostSelector);
  113922. }
  113923. else {
  113924. // remove :host since it should be unnecessary
  113925. var /** @type {?} */ t = p.replace(_polyfillHostRe, '');
  113926. if (t.length > 0) {
  113927. var /** @type {?} */ matches = t.match(/([^:]*)(:*)(.*)/);
  113928. if (matches) {
  113929. scopedP = matches[1] + attrName + matches[2] + matches[3];
  113930. }
  113931. }
  113932. }
  113933. return scopedP;
  113934. };
  113935. var /** @type {?} */ safeContent = new SafeSelector(selector);
  113936. selector = safeContent.content();
  113937. var /** @type {?} */ scopedSelector = '';
  113938. var /** @type {?} */ startIndex = 0;
  113939. var /** @type {?} */ res;
  113940. var /** @type {?} */ sep = /( |>|\+|~(?!=))\s*/g;
  113941. // If a selector appears before :host it should not be shimmed as it
  113942. // matches on ancestor elements and not on elements in the host's shadow
  113943. // `:host-context(div)` is transformed to
  113944. // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator`
  113945. // the `div` is not part of the component in the 2nd selectors and should not be scoped.
  113946. // Historically `component-tag:host` was matching the component so we also want to preserve
  113947. // this behavior to avoid breaking legacy apps (it should not match).
  113948. // The behavior should be:
  113949. // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything)
  113950. // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a
  113951. // `:host-context(tag)`)
  113952. var /** @type {?} */ hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1;
  113953. // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present
  113954. var /** @type {?} */ shouldScope = !hasHost;
  113955. while ((res = sep.exec(selector)) !== null) {
  113956. var /** @type {?} */ separator = res[1];
  113957. var /** @type {?} */ part_1 = selector.slice(startIndex, res.index).trim();
  113958. shouldScope = shouldScope || part_1.indexOf(_polyfillHostNoCombinator) > -1;
  113959. var /** @type {?} */ scopedPart = shouldScope ? _scopeSelectorPart(part_1) : part_1;
  113960. scopedSelector += scopedPart + " " + separator + " ";
  113961. startIndex = sep.lastIndex;
  113962. }
  113963. var /** @type {?} */ part = selector.substring(startIndex);
  113964. shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;
  113965. scopedSelector += shouldScope ? _scopeSelectorPart(part) : part;
  113966. // replace the placeholders with their original values
  113967. return safeContent.restore(scopedSelector);
  113968. };
  113969. /**
  113970. * @param {?} selector
  113971. * @return {?}
  113972. */
  113973. ShadowCss.prototype._insertPolyfillHostInCssText = /**
  113974. * @param {?} selector
  113975. * @return {?}
  113976. */
  113977. function (selector) {
  113978. return selector.replace(_colonHostContextRe, _polyfillHostContext)
  113979. .replace(_colonHostRe, _polyfillHost);
  113980. };
  113981. return ShadowCss;
  113982. }());
  113983. var SafeSelector = /** @class */ (function () {
  113984. function SafeSelector(selector) {
  113985. var _this = this;
  113986. this.placeholders = [];
  113987. this.index = 0;
  113988. // Replaces attribute selectors with placeholders.
  113989. // The WS in [attr="va lue"] would otherwise be interpreted as a selector separator.
  113990. selector = selector.replace(/(\[[^\]]*\])/g, function (_, keep) {
  113991. var /** @type {?} */ replaceBy = "__ph-" + _this.index + "__";
  113992. _this.placeholders.push(keep);
  113993. _this.index++;
  113994. return replaceBy;
  113995. });
  113996. // Replaces the expression in `:nth-child(2n + 1)` with a placeholder.
  113997. // WS and "+" would otherwise be interpreted as selector separators.
  113998. this._content = selector.replace(/(:nth-[-\w]+)(\([^)]+\))/g, function (_, pseudo, exp) {
  113999. var /** @type {?} */ replaceBy = "__ph-" + _this.index + "__";
  114000. _this.placeholders.push(exp);
  114001. _this.index++;
  114002. return pseudo + replaceBy;
  114003. });
  114004. }
  114005. /**
  114006. * @param {?} content
  114007. * @return {?}
  114008. */
  114009. SafeSelector.prototype.restore = /**
  114010. * @param {?} content
  114011. * @return {?}
  114012. */
  114013. function (content) {
  114014. var _this = this;
  114015. return content.replace(/__ph-(\d+)__/g, function (ph, index) { return _this.placeholders[+index]; });
  114016. };
  114017. /**
  114018. * @return {?}
  114019. */
  114020. SafeSelector.prototype.content = /**
  114021. * @return {?}
  114022. */
  114023. function () { return this._content; };
  114024. return SafeSelector;
  114025. }());
  114026. var _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim;
  114027. var _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
  114028. var _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim;
  114029. var _polyfillHost = '-shadowcsshost';
  114030. // note: :host-context pre-processed to -shadowcsshostcontext.
  114031. var _polyfillHostContext = '-shadowcsscontext';
  114032. var _parenSuffix = ')(?:\\((' +
  114033. '(?:\\([^)(]*\\)|[^)(]*)+?' +
  114034. ')\\))?([^,{]*)';
  114035. var _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim');
  114036. var _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim');
  114037. var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';
  114038. var _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/;
  114039. var _shadowDOMSelectorsRe = [
  114040. /::shadow/g,
  114041. /::content/g,
  114042. /\/shadow-deep\//g,
  114043. /\/shadow\//g,
  114044. ];
  114045. // The deep combinator is deprecated in the CSS spec
  114046. // Support for `>>>`, `deep`, `::ng-deep` is then also deprecated and will be removed in the future.
  114047. // see https://github.com/angular/angular/pull/17677
  114048. var _shadowDeepSelectors = /(?:>>>)|(?:\/deep\/)|(?:::ng-deep)/g;
  114049. var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
  114050. var _polyfillHostRe = /-shadowcsshost/gim;
  114051. var _colonHostRe = /:host/gim;
  114052. var _colonHostContextRe = /:host-context/gim;
  114053. var _commentRe = /\/\*\s*[\s\S]*?\*\//g;
  114054. /**
  114055. * @param {?} input
  114056. * @return {?}
  114057. */
  114058. function stripComments(input) {
  114059. return input.replace(_commentRe, '');
  114060. }
  114061. var _commentWithHashRe = /\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g;
  114062. /**
  114063. * @param {?} input
  114064. * @return {?}
  114065. */
  114066. function extractCommentsWithHash(input) {
  114067. return input.match(_commentWithHashRe) || [];
  114068. }
  114069. var _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g;
  114070. var _curlyRe = /([{}])/g;
  114071. var OPEN_CURLY = '{';
  114072. var CLOSE_CURLY = '}';
  114073. var BLOCK_PLACEHOLDER = '%BLOCK%';
  114074. var CssRule = /** @class */ (function () {
  114075. function CssRule(selector, content) {
  114076. this.selector = selector;
  114077. this.content = content;
  114078. }
  114079. return CssRule;
  114080. }());
  114081. /**
  114082. * @param {?} input
  114083. * @param {?} ruleCallback
  114084. * @return {?}
  114085. */
  114086. function processRules(input, ruleCallback) {
  114087. var /** @type {?} */ inputWithEscapedBlocks = escapeBlocks(input);
  114088. var /** @type {?} */ nextBlockIndex = 0;
  114089. return inputWithEscapedBlocks.escapedString.replace(_ruleRe, function () {
  114090. var m = [];
  114091. for (var _i = 0; _i < arguments.length; _i++) {
  114092. m[_i] = arguments[_i];
  114093. }
  114094. var /** @type {?} */ selector = m[2];
  114095. var /** @type {?} */ content = '';
  114096. var /** @type {?} */ suffix = m[4];
  114097. var /** @type {?} */ contentPrefix = '';
  114098. if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) {
  114099. content = inputWithEscapedBlocks.blocks[nextBlockIndex++];
  114100. suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1);
  114101. contentPrefix = '{';
  114102. }
  114103. var /** @type {?} */ rule = ruleCallback(new CssRule(selector, content));
  114104. return "" + m[1] + rule.selector + m[3] + contentPrefix + rule.content + suffix;
  114105. });
  114106. }
  114107. var StringWithEscapedBlocks = /** @class */ (function () {
  114108. function StringWithEscapedBlocks(escapedString, blocks) {
  114109. this.escapedString = escapedString;
  114110. this.blocks = blocks;
  114111. }
  114112. return StringWithEscapedBlocks;
  114113. }());
  114114. /**
  114115. * @param {?} input
  114116. * @return {?}
  114117. */
  114118. function escapeBlocks(input) {
  114119. var /** @type {?} */ inputParts = input.split(_curlyRe);
  114120. var /** @type {?} */ resultParts = [];
  114121. var /** @type {?} */ escapedBlocks = [];
  114122. var /** @type {?} */ bracketCount = 0;
  114123. var /** @type {?} */ currentBlockParts = [];
  114124. for (var /** @type {?} */ partIndex = 0; partIndex < inputParts.length; partIndex++) {
  114125. var /** @type {?} */ part = inputParts[partIndex];
  114126. if (part == CLOSE_CURLY) {
  114127. bracketCount--;
  114128. }
  114129. if (bracketCount > 0) {
  114130. currentBlockParts.push(part);
  114131. }
  114132. else {
  114133. if (currentBlockParts.length > 0) {
  114134. escapedBlocks.push(currentBlockParts.join(''));
  114135. resultParts.push(BLOCK_PLACEHOLDER);
  114136. currentBlockParts = [];
  114137. }
  114138. resultParts.push(part);
  114139. }
  114140. if (part == OPEN_CURLY) {
  114141. bracketCount++;
  114142. }
  114143. }
  114144. if (currentBlockParts.length > 0) {
  114145. escapedBlocks.push(currentBlockParts.join(''));
  114146. resultParts.push(BLOCK_PLACEHOLDER);
  114147. }
  114148. return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);
  114149. }
  114150. /**
  114151. * @fileoverview added by tsickle
  114152. * @suppress {checkTypes} checked by tsc
  114153. */
  114154. /**
  114155. * @license
  114156. * Copyright Google Inc. All Rights Reserved.
  114157. *
  114158. * Use of this source code is governed by an MIT-style license that can be
  114159. * found in the LICENSE file at https://angular.io/license
  114160. */
  114161. var COMPONENT_VARIABLE = '%COMP%';
  114162. var HOST_ATTR = "_nghost-" + COMPONENT_VARIABLE;
  114163. var CONTENT_ATTR = "_ngcontent-" + COMPONENT_VARIABLE;
  114164. var StylesCompileDependency = /** @class */ (function () {
  114165. function StylesCompileDependency(name, moduleUrl, setValue) {
  114166. this.name = name;
  114167. this.moduleUrl = moduleUrl;
  114168. this.setValue = setValue;
  114169. }
  114170. return StylesCompileDependency;
  114171. }());
  114172. var CompiledStylesheet = /** @class */ (function () {
  114173. function CompiledStylesheet(outputCtx, stylesVar, dependencies, isShimmed, meta) {
  114174. this.outputCtx = outputCtx;
  114175. this.stylesVar = stylesVar;
  114176. this.dependencies = dependencies;
  114177. this.isShimmed = isShimmed;
  114178. this.meta = meta;
  114179. }
  114180. return CompiledStylesheet;
  114181. }());
  114182. var StyleCompiler = /** @class */ (function () {
  114183. function StyleCompiler(_urlResolver) {
  114184. this._urlResolver = _urlResolver;
  114185. this._shadowCss = new ShadowCss();
  114186. }
  114187. /**
  114188. * @param {?} outputCtx
  114189. * @param {?} comp
  114190. * @return {?}
  114191. */
  114192. StyleCompiler.prototype.compileComponent = /**
  114193. * @param {?} outputCtx
  114194. * @param {?} comp
  114195. * @return {?}
  114196. */
  114197. function (outputCtx, comp) {
  114198. var /** @type {?} */ template = /** @type {?} */ ((comp.template));
  114199. return this._compileStyles(outputCtx, comp, new CompileStylesheetMetadata({
  114200. styles: template.styles,
  114201. styleUrls: template.styleUrls,
  114202. moduleUrl: identifierModuleUrl(comp.type)
  114203. }), this.needsStyleShim(comp), true);
  114204. };
  114205. /**
  114206. * @param {?} outputCtx
  114207. * @param {?} comp
  114208. * @param {?} stylesheet
  114209. * @param {?=} shim
  114210. * @return {?}
  114211. */
  114212. StyleCompiler.prototype.compileStyles = /**
  114213. * @param {?} outputCtx
  114214. * @param {?} comp
  114215. * @param {?} stylesheet
  114216. * @param {?=} shim
  114217. * @return {?}
  114218. */
  114219. function (outputCtx, comp, stylesheet, shim) {
  114220. if (shim === void 0) { shim = this.needsStyleShim(comp); }
  114221. return this._compileStyles(outputCtx, comp, stylesheet, shim, false);
  114222. };
  114223. /**
  114224. * @param {?} comp
  114225. * @return {?}
  114226. */
  114227. StyleCompiler.prototype.needsStyleShim = /**
  114228. * @param {?} comp
  114229. * @return {?}
  114230. */
  114231. function (comp) {
  114232. return /** @type {?} */ ((comp.template)).encapsulation === ViewEncapsulation.Emulated;
  114233. };
  114234. /**
  114235. * @param {?} outputCtx
  114236. * @param {?} comp
  114237. * @param {?} stylesheet
  114238. * @param {?} shim
  114239. * @param {?} isComponentStylesheet
  114240. * @return {?}
  114241. */
  114242. StyleCompiler.prototype._compileStyles = /**
  114243. * @param {?} outputCtx
  114244. * @param {?} comp
  114245. * @param {?} stylesheet
  114246. * @param {?} shim
  114247. * @param {?} isComponentStylesheet
  114248. * @return {?}
  114249. */
  114250. function (outputCtx, comp, stylesheet, shim, isComponentStylesheet) {
  114251. var _this = this;
  114252. var /** @type {?} */ styleExpressions = stylesheet.styles.map(function (plainStyle) { return literal(_this._shimIfNeeded(plainStyle, shim)); });
  114253. var /** @type {?} */ dependencies = [];
  114254. stylesheet.styleUrls.forEach(function (styleUrl) {
  114255. var /** @type {?} */ exprIndex = styleExpressions.length;
  114256. // Note: This placeholder will be filled later.
  114257. styleExpressions.push(/** @type {?} */ ((null)));
  114258. dependencies.push(new StylesCompileDependency(getStylesVarName(null), styleUrl, function (value) { return styleExpressions[exprIndex] = outputCtx.importExpr(value); }));
  114259. });
  114260. // styles variable contains plain strings and arrays of other styles arrays (recursive),
  114261. // so we set its type to dynamic.
  114262. var /** @type {?} */ stylesVar = getStylesVarName(isComponentStylesheet ? comp : null);
  114263. var /** @type {?} */ stmt = variable(stylesVar)
  114264. .set(literalArr(styleExpressions, new ArrayType(DYNAMIC_TYPE, [TypeModifier.Const])))
  114265. .toDeclStmt(null, isComponentStylesheet ? [StmtModifier.Final] : [
  114266. StmtModifier.Final, StmtModifier.Exported
  114267. ]);
  114268. outputCtx.statements.push(stmt);
  114269. return new CompiledStylesheet(outputCtx, stylesVar, dependencies, shim, stylesheet);
  114270. };
  114271. /**
  114272. * @param {?} style
  114273. * @param {?} shim
  114274. * @return {?}
  114275. */
  114276. StyleCompiler.prototype._shimIfNeeded = /**
  114277. * @param {?} style
  114278. * @param {?} shim
  114279. * @return {?}
  114280. */
  114281. function (style, shim) {
  114282. return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style;
  114283. };
  114284. return StyleCompiler;
  114285. }());
  114286. /**
  114287. * @param {?} component
  114288. * @return {?}
  114289. */
  114290. function getStylesVarName(component) {
  114291. var /** @type {?} */ result = "styles";
  114292. if (component) {
  114293. result += "_" + identifierName(component.type);
  114294. }
  114295. return result;
  114296. }
  114297. /**
  114298. * @fileoverview added by tsickle
  114299. * @suppress {checkTypes} checked by tsc
  114300. */
  114301. /**
  114302. * @license
  114303. * Copyright Google Inc. All Rights Reserved.
  114304. *
  114305. * Use of this source code is governed by an MIT-style license that can be
  114306. * found in the LICENSE file at https://angular.io/license
  114307. */
  114308. var PRESERVE_WS_ATTR_NAME = 'ngPreserveWhitespaces';
  114309. var SKIP_WS_TRIM_TAGS = new Set(['pre', 'template', 'textarea', 'script', 'style']);
  114310. // Equivalent to \s with \u00a0 (non-breaking space) excluded.
  114311. // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
  114312. var WS_CHARS = ' \f\n\r\t\v\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff';
  114313. var NO_WS_REGEXP = new RegExp("[^" + WS_CHARS + "]");
  114314. var WS_REPLACE_REGEXP = new RegExp("[" + WS_CHARS + "]{2,}", 'g');
  114315. /**
  114316. * @param {?} attrs
  114317. * @return {?}
  114318. */
  114319. function hasPreserveWhitespacesAttr(attrs) {
  114320. return attrs.some(function (attr) { return attr.name === PRESERVE_WS_ATTR_NAME; });
  114321. }
  114322. /**
  114323. * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see:
  114324. * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32
  114325. * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character
  114326. * and later on replaced by a space. We are re-implementing the same idea here.
  114327. * @param {?} value
  114328. * @return {?}
  114329. */
  114330. function replaceNgsp(value) {
  114331. // lexer is replacing the &ngsp; pseudo-entity with NGSP_UNICODE
  114332. return value.replace(new RegExp(NGSP_UNICODE, 'g'), ' ');
  114333. }
  114334. /**
  114335. * This visitor can walk HTML parse tree and remove / trim text nodes using the following rules:
  114336. * - consider spaces, tabs and new lines as whitespace characters;
  114337. * - drop text nodes consisting of whitespace characters only;
  114338. * - for all other text nodes replace consecutive whitespace characters with one space;
  114339. * - convert &ngsp; pseudo-entity to a single space;
  114340. *
  114341. * Removal and trimming of whitespaces have positive performance impact (less code to generate
  114342. * while compiling templates, faster view creation). At the same time it can be "destructive"
  114343. * in some cases (whitespaces can influence layout). Because of the potential of breaking layout
  114344. * this visitor is not activated by default in Angular 5 and people need to explicitly opt-in for
  114345. * whitespace removal. The default option for whitespace removal will be revisited in Angular 6
  114346. * and might be changed to "on" by default.
  114347. */
  114348. var WhitespaceVisitor = /** @class */ (function () {
  114349. function WhitespaceVisitor() {
  114350. }
  114351. /**
  114352. * @param {?} element
  114353. * @param {?} context
  114354. * @return {?}
  114355. */
  114356. WhitespaceVisitor.prototype.visitElement = /**
  114357. * @param {?} element
  114358. * @param {?} context
  114359. * @return {?}
  114360. */
  114361. function (element, context) {
  114362. if (SKIP_WS_TRIM_TAGS.has(element.name) || hasPreserveWhitespacesAttr(element.attrs)) {
  114363. // don't descent into elements where we need to preserve whitespaces
  114364. // but still visit all attributes to eliminate one used as a market to preserve WS
  114365. return new Element(element.name, visitAll(this, element.attrs), element.children, element.sourceSpan, element.startSourceSpan, element.endSourceSpan);
  114366. }
  114367. return new Element(element.name, element.attrs, visitAll(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan);
  114368. };
  114369. /**
  114370. * @param {?} attribute
  114371. * @param {?} context
  114372. * @return {?}
  114373. */
  114374. WhitespaceVisitor.prototype.visitAttribute = /**
  114375. * @param {?} attribute
  114376. * @param {?} context
  114377. * @return {?}
  114378. */
  114379. function (attribute, context) {
  114380. return attribute.name !== PRESERVE_WS_ATTR_NAME ? attribute : null;
  114381. };
  114382. /**
  114383. * @param {?} text
  114384. * @param {?} context
  114385. * @return {?}
  114386. */
  114387. WhitespaceVisitor.prototype.visitText = /**
  114388. * @param {?} text
  114389. * @param {?} context
  114390. * @return {?}
  114391. */
  114392. function (text, context) {
  114393. var /** @type {?} */ isNotBlank = text.value.match(NO_WS_REGEXP);
  114394. if (isNotBlank) {
  114395. return new Text(replaceNgsp(text.value).replace(WS_REPLACE_REGEXP, ' '), text.sourceSpan);
  114396. }
  114397. return null;
  114398. };
  114399. /**
  114400. * @param {?} comment
  114401. * @param {?} context
  114402. * @return {?}
  114403. */
  114404. WhitespaceVisitor.prototype.visitComment = /**
  114405. * @param {?} comment
  114406. * @param {?} context
  114407. * @return {?}
  114408. */
  114409. function (comment, context) { return comment; };
  114410. /**
  114411. * @param {?} expansion
  114412. * @param {?} context
  114413. * @return {?}
  114414. */
  114415. WhitespaceVisitor.prototype.visitExpansion = /**
  114416. * @param {?} expansion
  114417. * @param {?} context
  114418. * @return {?}
  114419. */
  114420. function (expansion, context) { return expansion; };
  114421. /**
  114422. * @param {?} expansionCase
  114423. * @param {?} context
  114424. * @return {?}
  114425. */
  114426. WhitespaceVisitor.prototype.visitExpansionCase = /**
  114427. * @param {?} expansionCase
  114428. * @param {?} context
  114429. * @return {?}
  114430. */
  114431. function (expansionCase, context) { return expansionCase; };
  114432. return WhitespaceVisitor;
  114433. }());
  114434. /**
  114435. * @param {?} htmlAstWithErrors
  114436. * @return {?}
  114437. */
  114438. function removeWhitespaces(htmlAstWithErrors) {
  114439. return new ParseTreeResult(visitAll(new WhitespaceVisitor(), htmlAstWithErrors.rootNodes), htmlAstWithErrors.errors);
  114440. }
  114441. /**
  114442. * @fileoverview added by tsickle
  114443. * @suppress {checkTypes} checked by tsc
  114444. */
  114445. /**
  114446. * @license
  114447. * Copyright Google Inc. All Rights Reserved.
  114448. *
  114449. * Use of this source code is governed by an MIT-style license that can be
  114450. * found in the LICENSE file at https://angular.io/license
  114451. */
  114452. // http://cldr.unicode.org/index/cldr-spec/plural-rules
  114453. var PLURAL_CASES = ['zero', 'one', 'two', 'few', 'many', 'other'];
  114454. /**
  114455. * Expands special forms into elements.
  114456. *
  114457. * For example,
  114458. *
  114459. * ```
  114460. * { messages.length, plural,
  114461. * =0 {zero}
  114462. * =1 {one}
  114463. * other {more than one}
  114464. * }
  114465. * ```
  114466. *
  114467. * will be expanded into
  114468. *
  114469. * ```
  114470. * <ng-container [ngPlural]="messages.length">
  114471. * <ng-template ngPluralCase="=0">zero</ng-template>
  114472. * <ng-template ngPluralCase="=1">one</ng-template>
  114473. * <ng-template ngPluralCase="other">more than one</ng-template>
  114474. * </ng-container>
  114475. * ```
  114476. * @param {?} nodes
  114477. * @return {?}
  114478. */
  114479. function expandNodes(nodes) {
  114480. var /** @type {?} */ expander = new _Expander();
  114481. return new ExpansionResult(visitAll(expander, nodes), expander.isExpanded, expander.errors);
  114482. }
  114483. var ExpansionResult = /** @class */ (function () {
  114484. function ExpansionResult(nodes, expanded, errors) {
  114485. this.nodes = nodes;
  114486. this.expanded = expanded;
  114487. this.errors = errors;
  114488. }
  114489. return ExpansionResult;
  114490. }());
  114491. var ExpansionError = /** @class */ (function (_super) {
  114492. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ExpansionError, _super);
  114493. function ExpansionError(span, errorMsg) {
  114494. return _super.call(this, span, errorMsg) || this;
  114495. }
  114496. return ExpansionError;
  114497. }(ParseError));
  114498. /**
  114499. * Expand expansion forms (plural, select) to directives
  114500. *
  114501. * \@internal
  114502. */
  114503. var _Expander = /** @class */ (function () {
  114504. function _Expander() {
  114505. this.isExpanded = false;
  114506. this.errors = [];
  114507. }
  114508. /**
  114509. * @param {?} element
  114510. * @param {?} context
  114511. * @return {?}
  114512. */
  114513. _Expander.prototype.visitElement = /**
  114514. * @param {?} element
  114515. * @param {?} context
  114516. * @return {?}
  114517. */
  114518. function (element, context) {
  114519. return new Element(element.name, element.attrs, visitAll(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan);
  114520. };
  114521. /**
  114522. * @param {?} attribute
  114523. * @param {?} context
  114524. * @return {?}
  114525. */
  114526. _Expander.prototype.visitAttribute = /**
  114527. * @param {?} attribute
  114528. * @param {?} context
  114529. * @return {?}
  114530. */
  114531. function (attribute, context) { return attribute; };
  114532. /**
  114533. * @param {?} text
  114534. * @param {?} context
  114535. * @return {?}
  114536. */
  114537. _Expander.prototype.visitText = /**
  114538. * @param {?} text
  114539. * @param {?} context
  114540. * @return {?}
  114541. */
  114542. function (text, context) { return text; };
  114543. /**
  114544. * @param {?} comment
  114545. * @param {?} context
  114546. * @return {?}
  114547. */
  114548. _Expander.prototype.visitComment = /**
  114549. * @param {?} comment
  114550. * @param {?} context
  114551. * @return {?}
  114552. */
  114553. function (comment, context) { return comment; };
  114554. /**
  114555. * @param {?} icu
  114556. * @param {?} context
  114557. * @return {?}
  114558. */
  114559. _Expander.prototype.visitExpansion = /**
  114560. * @param {?} icu
  114561. * @param {?} context
  114562. * @return {?}
  114563. */
  114564. function (icu, context) {
  114565. this.isExpanded = true;
  114566. return icu.type == 'plural' ? _expandPluralForm(icu, this.errors) :
  114567. _expandDefaultForm(icu, this.errors);
  114568. };
  114569. /**
  114570. * @param {?} icuCase
  114571. * @param {?} context
  114572. * @return {?}
  114573. */
  114574. _Expander.prototype.visitExpansionCase = /**
  114575. * @param {?} icuCase
  114576. * @param {?} context
  114577. * @return {?}
  114578. */
  114579. function (icuCase, context) {
  114580. throw new Error('Should not be reached');
  114581. };
  114582. return _Expander;
  114583. }());
  114584. /**
  114585. * @param {?} ast
  114586. * @param {?} errors
  114587. * @return {?}
  114588. */
  114589. function _expandPluralForm(ast, errors) {
  114590. var /** @type {?} */ children = ast.cases.map(function (c) {
  114591. if (PLURAL_CASES.indexOf(c.value) == -1 && !c.value.match(/^=\d+$/)) {
  114592. errors.push(new ExpansionError(c.valueSourceSpan, "Plural cases should be \"=<number>\" or one of " + PLURAL_CASES.join(", ")));
  114593. }
  114594. var /** @type {?} */ expansionResult = expandNodes(c.expression);
  114595. errors.push.apply(errors, expansionResult.errors);
  114596. return new Element("ng-template", [new Attribute$1('ngPluralCase', "" + c.value, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
  114597. });
  114598. var /** @type {?} */ switchAttr = new Attribute$1('[ngPlural]', ast.switchValue, ast.switchValueSourceSpan);
  114599. return new Element('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);
  114600. }
  114601. /**
  114602. * @param {?} ast
  114603. * @param {?} errors
  114604. * @return {?}
  114605. */
  114606. function _expandDefaultForm(ast, errors) {
  114607. var /** @type {?} */ children = ast.cases.map(function (c) {
  114608. var /** @type {?} */ expansionResult = expandNodes(c.expression);
  114609. errors.push.apply(errors, expansionResult.errors);
  114610. if (c.value === 'other') {
  114611. // other is the default case when no values match
  114612. return new Element("ng-template", [new Attribute$1('ngSwitchDefault', '', c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
  114613. }
  114614. return new Element("ng-template", [new Attribute$1('ngSwitchCase', "" + c.value, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan);
  114615. });
  114616. var /** @type {?} */ switchAttr = new Attribute$1('[ngSwitch]', ast.switchValue, ast.switchValueSourceSpan);
  114617. return new Element('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan);
  114618. }
  114619. /**
  114620. * @fileoverview added by tsickle
  114621. * @suppress {checkTypes} checked by tsc
  114622. */
  114623. /**
  114624. * @license
  114625. * Copyright Google Inc. All Rights Reserved.
  114626. *
  114627. * Use of this source code is governed by an MIT-style license that can be
  114628. * found in the LICENSE file at https://angular.io/license
  114629. */
  114630. var PROPERTY_PARTS_SEPARATOR = '.';
  114631. var ATTRIBUTE_PREFIX = 'attr';
  114632. var CLASS_PREFIX = 'class';
  114633. var STYLE_PREFIX = 'style';
  114634. var ANIMATE_PROP_PREFIX = 'animate-';
  114635. /** @enum {number} */
  114636. var BoundPropertyType = {
  114637. DEFAULT: 0,
  114638. LITERAL_ATTR: 1,
  114639. ANIMATION: 2,
  114640. };
  114641. BoundPropertyType[BoundPropertyType.DEFAULT] = "DEFAULT";
  114642. BoundPropertyType[BoundPropertyType.LITERAL_ATTR] = "LITERAL_ATTR";
  114643. BoundPropertyType[BoundPropertyType.ANIMATION] = "ANIMATION";
  114644. /**
  114645. * Represents a parsed property.
  114646. */
  114647. var BoundProperty = /** @class */ (function () {
  114648. function BoundProperty(name, expression, type, sourceSpan) {
  114649. this.name = name;
  114650. this.expression = expression;
  114651. this.type = type;
  114652. this.sourceSpan = sourceSpan;
  114653. this.isLiteral = this.type === BoundPropertyType.LITERAL_ATTR;
  114654. this.isAnimation = this.type === BoundPropertyType.ANIMATION;
  114655. }
  114656. return BoundProperty;
  114657. }());
  114658. /**
  114659. * Parses bindings in templates and in the directive host area.
  114660. */
  114661. var BindingParser = /** @class */ (function () {
  114662. function BindingParser(_exprParser, _interpolationConfig, _schemaRegistry, pipes, _targetErrors) {
  114663. var _this = this;
  114664. this._exprParser = _exprParser;
  114665. this._interpolationConfig = _interpolationConfig;
  114666. this._schemaRegistry = _schemaRegistry;
  114667. this._targetErrors = _targetErrors;
  114668. this.pipesByName = new Map();
  114669. this._usedPipes = new Map();
  114670. pipes.forEach(function (pipe) { return _this.pipesByName.set(pipe.name, pipe); });
  114671. }
  114672. /**
  114673. * @return {?}
  114674. */
  114675. BindingParser.prototype.getUsedPipes = /**
  114676. * @return {?}
  114677. */
  114678. function () { return Array.from(this._usedPipes.values()); };
  114679. /**
  114680. * @param {?} dirMeta
  114681. * @param {?} elementSelector
  114682. * @param {?} sourceSpan
  114683. * @return {?}
  114684. */
  114685. BindingParser.prototype.createDirectiveHostPropertyAsts = /**
  114686. * @param {?} dirMeta
  114687. * @param {?} elementSelector
  114688. * @param {?} sourceSpan
  114689. * @return {?}
  114690. */
  114691. function (dirMeta, elementSelector, sourceSpan) {
  114692. var _this = this;
  114693. if (dirMeta.hostProperties) {
  114694. var /** @type {?} */ boundProps_1 = [];
  114695. Object.keys(dirMeta.hostProperties).forEach(function (propName) {
  114696. var /** @type {?} */ expression = dirMeta.hostProperties[propName];
  114697. if (typeof expression === 'string') {
  114698. _this.parsePropertyBinding(propName, expression, true, sourceSpan, [], boundProps_1);
  114699. }
  114700. else {
  114701. _this._reportError("Value of the host property binding \"" + propName + "\" needs to be a string representing an expression but got \"" + expression + "\" (" + typeof expression + ")", sourceSpan);
  114702. }
  114703. });
  114704. return boundProps_1.map(function (prop) { return _this.createElementPropertyAst(elementSelector, prop); });
  114705. }
  114706. return null;
  114707. };
  114708. /**
  114709. * @param {?} dirMeta
  114710. * @param {?} sourceSpan
  114711. * @return {?}
  114712. */
  114713. BindingParser.prototype.createDirectiveHostEventAsts = /**
  114714. * @param {?} dirMeta
  114715. * @param {?} sourceSpan
  114716. * @return {?}
  114717. */
  114718. function (dirMeta, sourceSpan) {
  114719. var _this = this;
  114720. if (dirMeta.hostListeners) {
  114721. var /** @type {?} */ targetEventAsts_1 = [];
  114722. Object.keys(dirMeta.hostListeners).forEach(function (propName) {
  114723. var /** @type {?} */ expression = dirMeta.hostListeners[propName];
  114724. if (typeof expression === 'string') {
  114725. _this.parseEvent(propName, expression, sourceSpan, [], targetEventAsts_1);
  114726. }
  114727. else {
  114728. _this._reportError("Value of the host listener \"" + propName + "\" needs to be a string representing an expression but got \"" + expression + "\" (" + typeof expression + ")", sourceSpan);
  114729. }
  114730. });
  114731. return targetEventAsts_1;
  114732. }
  114733. return null;
  114734. };
  114735. /**
  114736. * @param {?} value
  114737. * @param {?} sourceSpan
  114738. * @return {?}
  114739. */
  114740. BindingParser.prototype.parseInterpolation = /**
  114741. * @param {?} value
  114742. * @param {?} sourceSpan
  114743. * @return {?}
  114744. */
  114745. function (value, sourceSpan) {
  114746. var /** @type {?} */ sourceInfo = sourceSpan.start.toString();
  114747. try {
  114748. var /** @type {?} */ ast = /** @type {?} */ ((this._exprParser.parseInterpolation(value, sourceInfo, this._interpolationConfig)));
  114749. if (ast)
  114750. this._reportExpressionParserErrors(ast.errors, sourceSpan);
  114751. this._checkPipes(ast, sourceSpan);
  114752. return ast;
  114753. }
  114754. catch (/** @type {?} */ e) {
  114755. this._reportError("" + e, sourceSpan);
  114756. return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);
  114757. }
  114758. };
  114759. /**
  114760. * @param {?} prefixToken
  114761. * @param {?} value
  114762. * @param {?} sourceSpan
  114763. * @param {?} targetMatchableAttrs
  114764. * @param {?} targetProps
  114765. * @param {?} targetVars
  114766. * @return {?}
  114767. */
  114768. BindingParser.prototype.parseInlineTemplateBinding = /**
  114769. * @param {?} prefixToken
  114770. * @param {?} value
  114771. * @param {?} sourceSpan
  114772. * @param {?} targetMatchableAttrs
  114773. * @param {?} targetProps
  114774. * @param {?} targetVars
  114775. * @return {?}
  114776. */
  114777. function (prefixToken, value, sourceSpan, targetMatchableAttrs, targetProps, targetVars) {
  114778. var /** @type {?} */ bindings = this._parseTemplateBindings(prefixToken, value, sourceSpan);
  114779. for (var /** @type {?} */ i = 0; i < bindings.length; i++) {
  114780. var /** @type {?} */ binding = bindings[i];
  114781. if (binding.keyIsVar) {
  114782. targetVars.push(new VariableAst(binding.key, binding.name, sourceSpan));
  114783. }
  114784. else if (binding.expression) {
  114785. this._parsePropertyAst(binding.key, binding.expression, sourceSpan, targetMatchableAttrs, targetProps);
  114786. }
  114787. else {
  114788. targetMatchableAttrs.push([binding.key, '']);
  114789. this.parseLiteralAttr(binding.key, null, sourceSpan, targetMatchableAttrs, targetProps);
  114790. }
  114791. }
  114792. };
  114793. /**
  114794. * @param {?} prefixToken
  114795. * @param {?} value
  114796. * @param {?} sourceSpan
  114797. * @return {?}
  114798. */
  114799. BindingParser.prototype._parseTemplateBindings = /**
  114800. * @param {?} prefixToken
  114801. * @param {?} value
  114802. * @param {?} sourceSpan
  114803. * @return {?}
  114804. */
  114805. function (prefixToken, value, sourceSpan) {
  114806. var _this = this;
  114807. var /** @type {?} */ sourceInfo = sourceSpan.start.toString();
  114808. try {
  114809. var /** @type {?} */ bindingsResult = this._exprParser.parseTemplateBindings(prefixToken, value, sourceInfo);
  114810. this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan);
  114811. bindingsResult.templateBindings.forEach(function (binding) {
  114812. if (binding.expression) {
  114813. _this._checkPipes(binding.expression, sourceSpan);
  114814. }
  114815. });
  114816. bindingsResult.warnings.forEach(function (warning) { _this._reportError(warning, sourceSpan, ParseErrorLevel.WARNING); });
  114817. return bindingsResult.templateBindings;
  114818. }
  114819. catch (/** @type {?} */ e) {
  114820. this._reportError("" + e, sourceSpan);
  114821. return [];
  114822. }
  114823. };
  114824. /**
  114825. * @param {?} name
  114826. * @param {?} value
  114827. * @param {?} sourceSpan
  114828. * @param {?} targetMatchableAttrs
  114829. * @param {?} targetProps
  114830. * @return {?}
  114831. */
  114832. BindingParser.prototype.parseLiteralAttr = /**
  114833. * @param {?} name
  114834. * @param {?} value
  114835. * @param {?} sourceSpan
  114836. * @param {?} targetMatchableAttrs
  114837. * @param {?} targetProps
  114838. * @return {?}
  114839. */
  114840. function (name, value, sourceSpan, targetMatchableAttrs, targetProps) {
  114841. if (_isAnimationLabel(name)) {
  114842. name = name.substring(1);
  114843. if (value) {
  114844. this._reportError("Assigning animation triggers via @prop=\"exp\" attributes with an expression is invalid." +
  114845. " Use property bindings (e.g. [@prop]=\"exp\") or use an attribute without a value (e.g. @prop) instead.", sourceSpan, ParseErrorLevel.ERROR);
  114846. }
  114847. this._parseAnimation(name, value, sourceSpan, targetMatchableAttrs, targetProps);
  114848. }
  114849. else {
  114850. targetProps.push(new BoundProperty(name, this._exprParser.wrapLiteralPrimitive(value, ''), BoundPropertyType.LITERAL_ATTR, sourceSpan));
  114851. }
  114852. };
  114853. /**
  114854. * @param {?} name
  114855. * @param {?} expression
  114856. * @param {?} isHost
  114857. * @param {?} sourceSpan
  114858. * @param {?} targetMatchableAttrs
  114859. * @param {?} targetProps
  114860. * @return {?}
  114861. */
  114862. BindingParser.prototype.parsePropertyBinding = /**
  114863. * @param {?} name
  114864. * @param {?} expression
  114865. * @param {?} isHost
  114866. * @param {?} sourceSpan
  114867. * @param {?} targetMatchableAttrs
  114868. * @param {?} targetProps
  114869. * @return {?}
  114870. */
  114871. function (name, expression, isHost, sourceSpan, targetMatchableAttrs, targetProps) {
  114872. var /** @type {?} */ isAnimationProp = false;
  114873. if (name.startsWith(ANIMATE_PROP_PREFIX)) {
  114874. isAnimationProp = true;
  114875. name = name.substring(ANIMATE_PROP_PREFIX.length);
  114876. }
  114877. else if (_isAnimationLabel(name)) {
  114878. isAnimationProp = true;
  114879. name = name.substring(1);
  114880. }
  114881. if (isAnimationProp) {
  114882. this._parseAnimation(name, expression, sourceSpan, targetMatchableAttrs, targetProps);
  114883. }
  114884. else {
  114885. this._parsePropertyAst(name, this._parseBinding(expression, isHost, sourceSpan), sourceSpan, targetMatchableAttrs, targetProps);
  114886. }
  114887. };
  114888. /**
  114889. * @param {?} name
  114890. * @param {?} value
  114891. * @param {?} sourceSpan
  114892. * @param {?} targetMatchableAttrs
  114893. * @param {?} targetProps
  114894. * @return {?}
  114895. */
  114896. BindingParser.prototype.parsePropertyInterpolation = /**
  114897. * @param {?} name
  114898. * @param {?} value
  114899. * @param {?} sourceSpan
  114900. * @param {?} targetMatchableAttrs
  114901. * @param {?} targetProps
  114902. * @return {?}
  114903. */
  114904. function (name, value, sourceSpan, targetMatchableAttrs, targetProps) {
  114905. var /** @type {?} */ expr = this.parseInterpolation(value, sourceSpan);
  114906. if (expr) {
  114907. this._parsePropertyAst(name, expr, sourceSpan, targetMatchableAttrs, targetProps);
  114908. return true;
  114909. }
  114910. return false;
  114911. };
  114912. /**
  114913. * @param {?} name
  114914. * @param {?} ast
  114915. * @param {?} sourceSpan
  114916. * @param {?} targetMatchableAttrs
  114917. * @param {?} targetProps
  114918. * @return {?}
  114919. */
  114920. BindingParser.prototype._parsePropertyAst = /**
  114921. * @param {?} name
  114922. * @param {?} ast
  114923. * @param {?} sourceSpan
  114924. * @param {?} targetMatchableAttrs
  114925. * @param {?} targetProps
  114926. * @return {?}
  114927. */
  114928. function (name, ast, sourceSpan, targetMatchableAttrs, targetProps) {
  114929. targetMatchableAttrs.push([name, /** @type {?} */ ((ast.source))]);
  114930. targetProps.push(new BoundProperty(name, ast, BoundPropertyType.DEFAULT, sourceSpan));
  114931. };
  114932. /**
  114933. * @param {?} name
  114934. * @param {?} expression
  114935. * @param {?} sourceSpan
  114936. * @param {?} targetMatchableAttrs
  114937. * @param {?} targetProps
  114938. * @return {?}
  114939. */
  114940. BindingParser.prototype._parseAnimation = /**
  114941. * @param {?} name
  114942. * @param {?} expression
  114943. * @param {?} sourceSpan
  114944. * @param {?} targetMatchableAttrs
  114945. * @param {?} targetProps
  114946. * @return {?}
  114947. */
  114948. function (name, expression, sourceSpan, targetMatchableAttrs, targetProps) {
  114949. // This will occur when a @trigger is not paired with an expression.
  114950. // For animations it is valid to not have an expression since */void
  114951. // states will be applied by angular when the element is attached/detached
  114952. var /** @type {?} */ ast = this._parseBinding(expression || 'undefined', false, sourceSpan);
  114953. targetMatchableAttrs.push([name, /** @type {?} */ ((ast.source))]);
  114954. targetProps.push(new BoundProperty(name, ast, BoundPropertyType.ANIMATION, sourceSpan));
  114955. };
  114956. /**
  114957. * @param {?} value
  114958. * @param {?} isHostBinding
  114959. * @param {?} sourceSpan
  114960. * @return {?}
  114961. */
  114962. BindingParser.prototype._parseBinding = /**
  114963. * @param {?} value
  114964. * @param {?} isHostBinding
  114965. * @param {?} sourceSpan
  114966. * @return {?}
  114967. */
  114968. function (value, isHostBinding, sourceSpan) {
  114969. var /** @type {?} */ sourceInfo = sourceSpan.start.toString();
  114970. try {
  114971. var /** @type {?} */ ast = isHostBinding ?
  114972. this._exprParser.parseSimpleBinding(value, sourceInfo, this._interpolationConfig) :
  114973. this._exprParser.parseBinding(value, sourceInfo, this._interpolationConfig);
  114974. if (ast)
  114975. this._reportExpressionParserErrors(ast.errors, sourceSpan);
  114976. this._checkPipes(ast, sourceSpan);
  114977. return ast;
  114978. }
  114979. catch (/** @type {?} */ e) {
  114980. this._reportError("" + e, sourceSpan);
  114981. return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);
  114982. }
  114983. };
  114984. /**
  114985. * @param {?} elementSelector
  114986. * @param {?} boundProp
  114987. * @return {?}
  114988. */
  114989. BindingParser.prototype.createElementPropertyAst = /**
  114990. * @param {?} elementSelector
  114991. * @param {?} boundProp
  114992. * @return {?}
  114993. */
  114994. function (elementSelector, boundProp) {
  114995. if (boundProp.isAnimation) {
  114996. return new BoundElementPropertyAst(boundProp.name, PropertyBindingType.Animation, SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan);
  114997. }
  114998. var /** @type {?} */ unit = null;
  114999. var /** @type {?} */ bindingType = /** @type {?} */ ((undefined));
  115000. var /** @type {?} */ boundPropertyName = null;
  115001. var /** @type {?} */ parts = boundProp.name.split(PROPERTY_PARTS_SEPARATOR);
  115002. var /** @type {?} */ securityContexts = /** @type {?} */ ((undefined));
  115003. // Check check for special cases (prefix style, attr, class)
  115004. if (parts.length > 1) {
  115005. if (parts[0] == ATTRIBUTE_PREFIX) {
  115006. boundPropertyName = parts[1];
  115007. this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, true);
  115008. securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, true);
  115009. var /** @type {?} */ nsSeparatorIdx = boundPropertyName.indexOf(':');
  115010. if (nsSeparatorIdx > -1) {
  115011. var /** @type {?} */ ns = boundPropertyName.substring(0, nsSeparatorIdx);
  115012. var /** @type {?} */ name_1 = boundPropertyName.substring(nsSeparatorIdx + 1);
  115013. boundPropertyName = mergeNsAndName(ns, name_1);
  115014. }
  115015. bindingType = PropertyBindingType.Attribute;
  115016. }
  115017. else if (parts[0] == CLASS_PREFIX) {
  115018. boundPropertyName = parts[1];
  115019. bindingType = PropertyBindingType.Class;
  115020. securityContexts = [SecurityContext.NONE];
  115021. }
  115022. else if (parts[0] == STYLE_PREFIX) {
  115023. unit = parts.length > 2 ? parts[2] : null;
  115024. boundPropertyName = parts[1];
  115025. bindingType = PropertyBindingType.Style;
  115026. securityContexts = [SecurityContext.STYLE];
  115027. }
  115028. }
  115029. // If not a special case, use the full property name
  115030. if (boundPropertyName === null) {
  115031. boundPropertyName = this._schemaRegistry.getMappedPropName(boundProp.name);
  115032. securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, false);
  115033. bindingType = PropertyBindingType.Property;
  115034. this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, false);
  115035. }
  115036. return new BoundElementPropertyAst(boundPropertyName, bindingType, securityContexts[0], boundProp.expression, unit, boundProp.sourceSpan);
  115037. };
  115038. /**
  115039. * @param {?} name
  115040. * @param {?} expression
  115041. * @param {?} sourceSpan
  115042. * @param {?} targetMatchableAttrs
  115043. * @param {?} targetEvents
  115044. * @return {?}
  115045. */
  115046. BindingParser.prototype.parseEvent = /**
  115047. * @param {?} name
  115048. * @param {?} expression
  115049. * @param {?} sourceSpan
  115050. * @param {?} targetMatchableAttrs
  115051. * @param {?} targetEvents
  115052. * @return {?}
  115053. */
  115054. function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {
  115055. if (_isAnimationLabel(name)) {
  115056. name = name.substr(1);
  115057. this._parseAnimationEvent(name, expression, sourceSpan, targetEvents);
  115058. }
  115059. else {
  115060. this._parseEvent(name, expression, sourceSpan, targetMatchableAttrs, targetEvents);
  115061. }
  115062. };
  115063. /**
  115064. * @param {?} name
  115065. * @param {?} expression
  115066. * @param {?} sourceSpan
  115067. * @param {?} targetEvents
  115068. * @return {?}
  115069. */
  115070. BindingParser.prototype._parseAnimationEvent = /**
  115071. * @param {?} name
  115072. * @param {?} expression
  115073. * @param {?} sourceSpan
  115074. * @param {?} targetEvents
  115075. * @return {?}
  115076. */
  115077. function (name, expression, sourceSpan, targetEvents) {
  115078. var /** @type {?} */ matches = splitAtPeriod(name, [name, '']);
  115079. var /** @type {?} */ eventName = matches[0];
  115080. var /** @type {?} */ phase = matches[1].toLowerCase();
  115081. if (phase) {
  115082. switch (phase) {
  115083. case 'start':
  115084. case 'done':
  115085. var /** @type {?} */ ast = this._parseAction(expression, sourceSpan);
  115086. targetEvents.push(new BoundEventAst(eventName, null, phase, ast, sourceSpan));
  115087. break;
  115088. default:
  115089. this._reportError("The provided animation output phase value \"" + phase + "\" for \"@" + eventName + "\" is not supported (use start or done)", sourceSpan);
  115090. break;
  115091. }
  115092. }
  115093. else {
  115094. this._reportError("The animation trigger output event (@" + eventName + ") is missing its phase value name (start or done are currently supported)", sourceSpan);
  115095. }
  115096. };
  115097. /**
  115098. * @param {?} name
  115099. * @param {?} expression
  115100. * @param {?} sourceSpan
  115101. * @param {?} targetMatchableAttrs
  115102. * @param {?} targetEvents
  115103. * @return {?}
  115104. */
  115105. BindingParser.prototype._parseEvent = /**
  115106. * @param {?} name
  115107. * @param {?} expression
  115108. * @param {?} sourceSpan
  115109. * @param {?} targetMatchableAttrs
  115110. * @param {?} targetEvents
  115111. * @return {?}
  115112. */
  115113. function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {
  115114. // long format: 'target: eventName'
  115115. var _a = splitAtColon(name, [/** @type {?} */ ((null)), name]), target = _a[0], eventName = _a[1];
  115116. var /** @type {?} */ ast = this._parseAction(expression, sourceSpan);
  115117. targetMatchableAttrs.push([/** @type {?} */ ((name)), /** @type {?} */ ((ast.source))]);
  115118. targetEvents.push(new BoundEventAst(eventName, target, null, ast, sourceSpan));
  115119. // Don't detect directives for event names for now,
  115120. // so don't add the event name to the matchableAttrs
  115121. };
  115122. /**
  115123. * @param {?} value
  115124. * @param {?} sourceSpan
  115125. * @return {?}
  115126. */
  115127. BindingParser.prototype._parseAction = /**
  115128. * @param {?} value
  115129. * @param {?} sourceSpan
  115130. * @return {?}
  115131. */
  115132. function (value, sourceSpan) {
  115133. var /** @type {?} */ sourceInfo = sourceSpan.start.toString();
  115134. try {
  115135. var /** @type {?} */ ast = this._exprParser.parseAction(value, sourceInfo, this._interpolationConfig);
  115136. if (ast) {
  115137. this._reportExpressionParserErrors(ast.errors, sourceSpan);
  115138. }
  115139. if (!ast || ast.ast instanceof EmptyExpr) {
  115140. this._reportError("Empty expressions are not allowed", sourceSpan);
  115141. return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);
  115142. }
  115143. this._checkPipes(ast, sourceSpan);
  115144. return ast;
  115145. }
  115146. catch (/** @type {?} */ e) {
  115147. this._reportError("" + e, sourceSpan);
  115148. return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);
  115149. }
  115150. };
  115151. /**
  115152. * @param {?} message
  115153. * @param {?} sourceSpan
  115154. * @param {?=} level
  115155. * @return {?}
  115156. */
  115157. BindingParser.prototype._reportError = /**
  115158. * @param {?} message
  115159. * @param {?} sourceSpan
  115160. * @param {?=} level
  115161. * @return {?}
  115162. */
  115163. function (message, sourceSpan, level) {
  115164. if (level === void 0) { level = ParseErrorLevel.ERROR; }
  115165. this._targetErrors.push(new ParseError(sourceSpan, message, level));
  115166. };
  115167. /**
  115168. * @param {?} errors
  115169. * @param {?} sourceSpan
  115170. * @return {?}
  115171. */
  115172. BindingParser.prototype._reportExpressionParserErrors = /**
  115173. * @param {?} errors
  115174. * @param {?} sourceSpan
  115175. * @return {?}
  115176. */
  115177. function (errors, sourceSpan) {
  115178. for (var _i = 0, errors_1 = errors; _i < errors_1.length; _i++) {
  115179. var error = errors_1[_i];
  115180. this._reportError(error.message, sourceSpan);
  115181. }
  115182. };
  115183. /**
  115184. * @param {?} ast
  115185. * @param {?} sourceSpan
  115186. * @return {?}
  115187. */
  115188. BindingParser.prototype._checkPipes = /**
  115189. * @param {?} ast
  115190. * @param {?} sourceSpan
  115191. * @return {?}
  115192. */
  115193. function (ast, sourceSpan) {
  115194. var _this = this;
  115195. if (ast) {
  115196. var /** @type {?} */ collector = new PipeCollector();
  115197. ast.visit(collector);
  115198. collector.pipes.forEach(function (ast, pipeName) {
  115199. var /** @type {?} */ pipeMeta = _this.pipesByName.get(pipeName);
  115200. if (!pipeMeta) {
  115201. _this._reportError("The pipe '" + pipeName + "' could not be found", new ParseSourceSpan(sourceSpan.start.moveBy(ast.span.start), sourceSpan.start.moveBy(ast.span.end)));
  115202. }
  115203. else {
  115204. _this._usedPipes.set(pipeName, pipeMeta);
  115205. }
  115206. });
  115207. }
  115208. };
  115209. /**
  115210. * @param {?} propName the name of the property / attribute
  115211. * @param {?} sourceSpan
  115212. * @param {?} isAttr true when binding to an attribute
  115213. * @return {?}
  115214. */
  115215. BindingParser.prototype._validatePropertyOrAttributeName = /**
  115216. * @param {?} propName the name of the property / attribute
  115217. * @param {?} sourceSpan
  115218. * @param {?} isAttr true when binding to an attribute
  115219. * @return {?}
  115220. */
  115221. function (propName, sourceSpan, isAttr) {
  115222. var /** @type {?} */ report = isAttr ? this._schemaRegistry.validateAttribute(propName) :
  115223. this._schemaRegistry.validateProperty(propName);
  115224. if (report.error) {
  115225. this._reportError(/** @type {?} */ ((report.msg)), sourceSpan, ParseErrorLevel.ERROR);
  115226. }
  115227. };
  115228. return BindingParser;
  115229. }());
  115230. var PipeCollector = /** @class */ (function (_super) {
  115231. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(PipeCollector, _super);
  115232. function PipeCollector() {
  115233. var _this = _super !== null && _super.apply(this, arguments) || this;
  115234. _this.pipes = new Map();
  115235. return _this;
  115236. }
  115237. /**
  115238. * @param {?} ast
  115239. * @param {?} context
  115240. * @return {?}
  115241. */
  115242. PipeCollector.prototype.visitPipe = /**
  115243. * @param {?} ast
  115244. * @param {?} context
  115245. * @return {?}
  115246. */
  115247. function (ast, context) {
  115248. this.pipes.set(ast.name, ast);
  115249. ast.exp.visit(this);
  115250. this.visitAll(ast.args, context);
  115251. return null;
  115252. };
  115253. return PipeCollector;
  115254. }(RecursiveAstVisitor));
  115255. /**
  115256. * @param {?} name
  115257. * @return {?}
  115258. */
  115259. function _isAnimationLabel(name) {
  115260. return name[0] == '@';
  115261. }
  115262. /**
  115263. * @param {?} registry
  115264. * @param {?} selector
  115265. * @param {?} propName
  115266. * @param {?} isAttribute
  115267. * @return {?}
  115268. */
  115269. function calcPossibleSecurityContexts(registry, selector, propName, isAttribute) {
  115270. var /** @type {?} */ ctxs = [];
  115271. CssSelector.parse(selector).forEach(function (selector) {
  115272. var /** @type {?} */ elementNames = selector.element ? [selector.element] : registry.allKnownElementNames();
  115273. var /** @type {?} */ notElementNames = new Set(selector.notSelectors.filter(function (selector) { return selector.isElementSelector(); })
  115274. .map(function (selector) { return selector.element; }));
  115275. var /** @type {?} */ possibleElementNames = elementNames.filter(function (elementName) { return !notElementNames.has(elementName); });
  115276. ctxs.push.apply(ctxs, possibleElementNames.map(function (elementName) { return registry.securityContext(elementName, propName, isAttribute); }));
  115277. });
  115278. return ctxs.length === 0 ? [SecurityContext.NONE] : Array.from(new Set(ctxs)).sort();
  115279. }
  115280. /**
  115281. * @fileoverview added by tsickle
  115282. * @suppress {checkTypes} checked by tsc
  115283. */
  115284. /**
  115285. * @license
  115286. * Copyright Google Inc. All Rights Reserved.
  115287. *
  115288. * Use of this source code is governed by an MIT-style license that can be
  115289. * found in the LICENSE file at https://angular.io/license
  115290. */
  115291. var BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.+))|\[\(([^\)]+)\)\]|\[([^\]]+)\]|\(([^\)]+)\))$/;
  115292. // Group 1 = "bind-"
  115293. var KW_BIND_IDX = 1;
  115294. // Group 2 = "let-"
  115295. var KW_LET_IDX = 2;
  115296. // Group 3 = "ref-/#"
  115297. var KW_REF_IDX = 3;
  115298. // Group 4 = "on-"
  115299. var KW_ON_IDX = 4;
  115300. // Group 5 = "bindon-"
  115301. var KW_BINDON_IDX = 5;
  115302. // Group 6 = "@"
  115303. var KW_AT_IDX = 6;
  115304. // Group 7 = the identifier after "bind-", "let-", "ref-/#", "on-", "bindon-" or "@"
  115305. var IDENT_KW_IDX = 7;
  115306. // Group 8 = identifier inside [()]
  115307. var IDENT_BANANA_BOX_IDX = 8;
  115308. // Group 9 = identifier inside []
  115309. var IDENT_PROPERTY_IDX = 9;
  115310. // Group 10 = identifier inside ()
  115311. var IDENT_EVENT_IDX = 10;
  115312. // deprecated in 4.x
  115313. var TEMPLATE_ELEMENT = 'template';
  115314. // deprecated in 4.x
  115315. var TEMPLATE_ATTR = 'template';
  115316. var TEMPLATE_ATTR_PREFIX = '*';
  115317. var CLASS_ATTR = 'class';
  115318. var TEXT_CSS_SELECTOR = CssSelector.parse('*')[0];
  115319. var TEMPLATE_ELEMENT_DEPRECATION_WARNING = 'The <template> element is deprecated. Use <ng-template> instead';
  115320. var TEMPLATE_ATTR_DEPRECATION_WARNING = 'The template attribute is deprecated. Use an ng-template element instead.';
  115321. var warningCounts = {};
  115322. /**
  115323. * @param {?} warnings
  115324. * @return {?}
  115325. */
  115326. function warnOnlyOnce(warnings) {
  115327. return function (error) {
  115328. if (warnings.indexOf(error.msg) !== -1) {
  115329. warningCounts[error.msg] = (warningCounts[error.msg] || 0) + 1;
  115330. return warningCounts[error.msg] <= 1;
  115331. }
  115332. return true;
  115333. };
  115334. }
  115335. var TemplateParseError = /** @class */ (function (_super) {
  115336. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(TemplateParseError, _super);
  115337. function TemplateParseError(message, span, level) {
  115338. return _super.call(this, span, message, level) || this;
  115339. }
  115340. return TemplateParseError;
  115341. }(ParseError));
  115342. var TemplateParseResult = /** @class */ (function () {
  115343. function TemplateParseResult(templateAst, usedPipes, errors) {
  115344. this.templateAst = templateAst;
  115345. this.usedPipes = usedPipes;
  115346. this.errors = errors;
  115347. }
  115348. return TemplateParseResult;
  115349. }());
  115350. var TemplateParser = /** @class */ (function () {
  115351. function TemplateParser(_config, _reflector, _exprParser, _schemaRegistry, _htmlParser, _console, transforms) {
  115352. this._config = _config;
  115353. this._reflector = _reflector;
  115354. this._exprParser = _exprParser;
  115355. this._schemaRegistry = _schemaRegistry;
  115356. this._htmlParser = _htmlParser;
  115357. this._console = _console;
  115358. this.transforms = transforms;
  115359. }
  115360. /**
  115361. * @param {?} component
  115362. * @param {?} template
  115363. * @param {?} directives
  115364. * @param {?} pipes
  115365. * @param {?} schemas
  115366. * @param {?} templateUrl
  115367. * @param {?} preserveWhitespaces
  115368. * @return {?}
  115369. */
  115370. TemplateParser.prototype.parse = /**
  115371. * @param {?} component
  115372. * @param {?} template
  115373. * @param {?} directives
  115374. * @param {?} pipes
  115375. * @param {?} schemas
  115376. * @param {?} templateUrl
  115377. * @param {?} preserveWhitespaces
  115378. * @return {?}
  115379. */
  115380. function (component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) {
  115381. var /** @type {?} */ result = this.tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces);
  115382. var /** @type {?} */ warnings = /** @type {?} */ ((result.errors)).filter(function (error) { return error.level === ParseErrorLevel.WARNING; }).filter(warnOnlyOnce([TEMPLATE_ATTR_DEPRECATION_WARNING, TEMPLATE_ELEMENT_DEPRECATION_WARNING]));
  115383. var /** @type {?} */ errors = /** @type {?} */ ((result.errors)).filter(function (error) { return error.level === ParseErrorLevel.ERROR; });
  115384. if (warnings.length > 0) {
  115385. this._console.warn("Template parse warnings:\n" + warnings.join('\n'));
  115386. }
  115387. if (errors.length > 0) {
  115388. var /** @type {?} */ errorString = errors.join('\n');
  115389. throw syntaxError("Template parse errors:\n" + errorString, errors);
  115390. }
  115391. return { template: /** @type {?} */ ((result.templateAst)), pipes: /** @type {?} */ ((result.usedPipes)) };
  115392. };
  115393. /**
  115394. * @param {?} component
  115395. * @param {?} template
  115396. * @param {?} directives
  115397. * @param {?} pipes
  115398. * @param {?} schemas
  115399. * @param {?} templateUrl
  115400. * @param {?} preserveWhitespaces
  115401. * @return {?}
  115402. */
  115403. TemplateParser.prototype.tryParse = /**
  115404. * @param {?} component
  115405. * @param {?} template
  115406. * @param {?} directives
  115407. * @param {?} pipes
  115408. * @param {?} schemas
  115409. * @param {?} templateUrl
  115410. * @param {?} preserveWhitespaces
  115411. * @return {?}
  115412. */
  115413. function (component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) {
  115414. var /** @type {?} */ htmlParseResult = typeof template === 'string' ? /** @type {?} */ ((this._htmlParser)).parse(template, templateUrl, true, this.getInterpolationConfig(component)) :
  115415. template;
  115416. if (!preserveWhitespaces) {
  115417. htmlParseResult = removeWhitespaces(htmlParseResult);
  115418. }
  115419. return this.tryParseHtml(this.expandHtml(htmlParseResult), component, directives, pipes, schemas);
  115420. };
  115421. /**
  115422. * @param {?} htmlAstWithErrors
  115423. * @param {?} component
  115424. * @param {?} directives
  115425. * @param {?} pipes
  115426. * @param {?} schemas
  115427. * @return {?}
  115428. */
  115429. TemplateParser.prototype.tryParseHtml = /**
  115430. * @param {?} htmlAstWithErrors
  115431. * @param {?} component
  115432. * @param {?} directives
  115433. * @param {?} pipes
  115434. * @param {?} schemas
  115435. * @return {?}
  115436. */
  115437. function (htmlAstWithErrors, component, directives, pipes, schemas) {
  115438. var /** @type {?} */ result;
  115439. var /** @type {?} */ errors = htmlAstWithErrors.errors;
  115440. var /** @type {?} */ usedPipes = [];
  115441. if (htmlAstWithErrors.rootNodes.length > 0) {
  115442. var /** @type {?} */ uniqDirectives = removeSummaryDuplicates(directives);
  115443. var /** @type {?} */ uniqPipes = removeSummaryDuplicates(pipes);
  115444. var /** @type {?} */ providerViewContext = new ProviderViewContext(this._reflector, component);
  115445. var /** @type {?} */ interpolationConfig = /** @type {?} */ ((undefined));
  115446. if (component.template && component.template.interpolation) {
  115447. interpolationConfig = {
  115448. start: component.template.interpolation[0],
  115449. end: component.template.interpolation[1]
  115450. };
  115451. }
  115452. var /** @type {?} */ bindingParser = new BindingParser(this._exprParser, /** @type {?} */ ((interpolationConfig)), this._schemaRegistry, uniqPipes, errors);
  115453. var /** @type {?} */ parseVisitor = new TemplateParseVisitor(this._reflector, this._config, providerViewContext, uniqDirectives, bindingParser, this._schemaRegistry, schemas, errors);
  115454. result = visitAll(parseVisitor, htmlAstWithErrors.rootNodes, EMPTY_ELEMENT_CONTEXT);
  115455. errors.push.apply(errors, providerViewContext.errors);
  115456. usedPipes.push.apply(usedPipes, bindingParser.getUsedPipes());
  115457. }
  115458. else {
  115459. result = [];
  115460. }
  115461. this._assertNoReferenceDuplicationOnTemplate(result, errors);
  115462. if (errors.length > 0) {
  115463. return new TemplateParseResult(result, usedPipes, errors);
  115464. }
  115465. if (this.transforms) {
  115466. this.transforms.forEach(function (transform) { result = templateVisitAll(transform, result); });
  115467. }
  115468. return new TemplateParseResult(result, usedPipes, errors);
  115469. };
  115470. /**
  115471. * @param {?} htmlAstWithErrors
  115472. * @param {?=} forced
  115473. * @return {?}
  115474. */
  115475. TemplateParser.prototype.expandHtml = /**
  115476. * @param {?} htmlAstWithErrors
  115477. * @param {?=} forced
  115478. * @return {?}
  115479. */
  115480. function (htmlAstWithErrors, forced) {
  115481. if (forced === void 0) { forced = false; }
  115482. var /** @type {?} */ errors = htmlAstWithErrors.errors;
  115483. if (errors.length == 0 || forced) {
  115484. // Transform ICU messages to angular directives
  115485. var /** @type {?} */ expandedHtmlAst = expandNodes(htmlAstWithErrors.rootNodes);
  115486. errors.push.apply(errors, expandedHtmlAst.errors);
  115487. htmlAstWithErrors = new ParseTreeResult(expandedHtmlAst.nodes, errors);
  115488. }
  115489. return htmlAstWithErrors;
  115490. };
  115491. /**
  115492. * @param {?} component
  115493. * @return {?}
  115494. */
  115495. TemplateParser.prototype.getInterpolationConfig = /**
  115496. * @param {?} component
  115497. * @return {?}
  115498. */
  115499. function (component) {
  115500. if (component.template) {
  115501. return InterpolationConfig.fromArray(component.template.interpolation);
  115502. }
  115503. return undefined;
  115504. };
  115505. /** @internal */
  115506. /**
  115507. * \@internal
  115508. * @param {?} result
  115509. * @param {?} errors
  115510. * @return {?}
  115511. */
  115512. TemplateParser.prototype._assertNoReferenceDuplicationOnTemplate = /**
  115513. * \@internal
  115514. * @param {?} result
  115515. * @param {?} errors
  115516. * @return {?}
  115517. */
  115518. function (result, errors) {
  115519. var /** @type {?} */ existingReferences = [];
  115520. result.filter(function (element) { return !!(/** @type {?} */ (element)).references; })
  115521. .forEach(function (element) {
  115522. return (/** @type {?} */ (element)).references.forEach(function (reference) {
  115523. var /** @type {?} */ name = reference.name;
  115524. if (existingReferences.indexOf(name) < 0) {
  115525. existingReferences.push(name);
  115526. }
  115527. else {
  115528. var /** @type {?} */ error = new TemplateParseError("Reference \"#" + name + "\" is defined several times", reference.sourceSpan, ParseErrorLevel.ERROR);
  115529. errors.push(error);
  115530. }
  115531. });
  115532. });
  115533. };
  115534. return TemplateParser;
  115535. }());
  115536. var TemplateParseVisitor = /** @class */ (function () {
  115537. function TemplateParseVisitor(reflector, config, providerViewContext, directives, _bindingParser, _schemaRegistry, _schemas, _targetErrors) {
  115538. var _this = this;
  115539. this.reflector = reflector;
  115540. this.config = config;
  115541. this.providerViewContext = providerViewContext;
  115542. this._bindingParser = _bindingParser;
  115543. this._schemaRegistry = _schemaRegistry;
  115544. this._schemas = _schemas;
  115545. this._targetErrors = _targetErrors;
  115546. this.selectorMatcher = new SelectorMatcher();
  115547. this.directivesIndex = new Map();
  115548. this.ngContentCount = 0;
  115549. // Note: queries start with id 1 so we can use the number in a Bloom filter!
  115550. this.contentQueryStartId = providerViewContext.component.viewQueries.length + 1;
  115551. directives.forEach(function (directive, index) {
  115552. var /** @type {?} */ selector = CssSelector.parse(/** @type {?} */ ((directive.selector)));
  115553. _this.selectorMatcher.addSelectables(selector, directive);
  115554. _this.directivesIndex.set(directive, index);
  115555. });
  115556. }
  115557. /**
  115558. * @param {?} expansion
  115559. * @param {?} context
  115560. * @return {?}
  115561. */
  115562. TemplateParseVisitor.prototype.visitExpansion = /**
  115563. * @param {?} expansion
  115564. * @param {?} context
  115565. * @return {?}
  115566. */
  115567. function (expansion, context) { return null; };
  115568. /**
  115569. * @param {?} expansionCase
  115570. * @param {?} context
  115571. * @return {?}
  115572. */
  115573. TemplateParseVisitor.prototype.visitExpansionCase = /**
  115574. * @param {?} expansionCase
  115575. * @param {?} context
  115576. * @return {?}
  115577. */
  115578. function (expansionCase, context) { return null; };
  115579. /**
  115580. * @param {?} text
  115581. * @param {?} parent
  115582. * @return {?}
  115583. */
  115584. TemplateParseVisitor.prototype.visitText = /**
  115585. * @param {?} text
  115586. * @param {?} parent
  115587. * @return {?}
  115588. */
  115589. function (text, parent) {
  115590. var /** @type {?} */ ngContentIndex = /** @type {?} */ ((parent.findNgContentIndex(TEXT_CSS_SELECTOR)));
  115591. var /** @type {?} */ valueNoNgsp = replaceNgsp(text.value);
  115592. var /** @type {?} */ expr = this._bindingParser.parseInterpolation(valueNoNgsp, /** @type {?} */ ((text.sourceSpan)));
  115593. return expr ? new BoundTextAst(expr, ngContentIndex, /** @type {?} */ ((text.sourceSpan))) :
  115594. new TextAst(valueNoNgsp, ngContentIndex, /** @type {?} */ ((text.sourceSpan)));
  115595. };
  115596. /**
  115597. * @param {?} attribute
  115598. * @param {?} context
  115599. * @return {?}
  115600. */
  115601. TemplateParseVisitor.prototype.visitAttribute = /**
  115602. * @param {?} attribute
  115603. * @param {?} context
  115604. * @return {?}
  115605. */
  115606. function (attribute, context) {
  115607. return new AttrAst(attribute.name, attribute.value, attribute.sourceSpan);
  115608. };
  115609. /**
  115610. * @param {?} comment
  115611. * @param {?} context
  115612. * @return {?}
  115613. */
  115614. TemplateParseVisitor.prototype.visitComment = /**
  115615. * @param {?} comment
  115616. * @param {?} context
  115617. * @return {?}
  115618. */
  115619. function (comment, context) { return null; };
  115620. /**
  115621. * @param {?} element
  115622. * @param {?} parent
  115623. * @return {?}
  115624. */
  115625. TemplateParseVisitor.prototype.visitElement = /**
  115626. * @param {?} element
  115627. * @param {?} parent
  115628. * @return {?}
  115629. */
  115630. function (element, parent) {
  115631. var _this = this;
  115632. var /** @type {?} */ queryStartIndex = this.contentQueryStartId;
  115633. var /** @type {?} */ nodeName = element.name;
  115634. var /** @type {?} */ preparsedElement = preparseElement(element);
  115635. if (preparsedElement.type === PreparsedElementType.SCRIPT ||
  115636. preparsedElement.type === PreparsedElementType.STYLE) {
  115637. // Skipping <script> for security reasons
  115638. // Skipping <style> as we already processed them
  115639. // in the StyleCompiler
  115640. return null;
  115641. }
  115642. if (preparsedElement.type === PreparsedElementType.STYLESHEET &&
  115643. isStyleUrlResolvable(preparsedElement.hrefAttr)) {
  115644. // Skipping stylesheets with either relative urls or package scheme as we already processed
  115645. // them in the StyleCompiler
  115646. return null;
  115647. }
  115648. var /** @type {?} */ matchableAttrs = [];
  115649. var /** @type {?} */ elementOrDirectiveProps = [];
  115650. var /** @type {?} */ elementOrDirectiveRefs = [];
  115651. var /** @type {?} */ elementVars = [];
  115652. var /** @type {?} */ events = [];
  115653. var /** @type {?} */ templateElementOrDirectiveProps = [];
  115654. var /** @type {?} */ templateMatchableAttrs = [];
  115655. var /** @type {?} */ templateElementVars = [];
  115656. var /** @type {?} */ hasInlineTemplates = false;
  115657. var /** @type {?} */ attrs = [];
  115658. var /** @type {?} */ isTemplateElement = isTemplate(element, this.config.enableLegacyTemplate, function (m, span) { return _this._reportError(m, span, ParseErrorLevel.WARNING); });
  115659. element.attrs.forEach(function (attr) {
  115660. var /** @type {?} */ hasBinding = _this._parseAttr(isTemplateElement, attr, matchableAttrs, elementOrDirectiveProps, events, elementOrDirectiveRefs, elementVars);
  115661. var /** @type {?} */ templateBindingsSource;
  115662. var /** @type {?} */ prefixToken;
  115663. var /** @type {?} */ normalizedName = _this._normalizeAttributeName(attr.name);
  115664. if (_this.config.enableLegacyTemplate && normalizedName == TEMPLATE_ATTR) {
  115665. _this._reportError(TEMPLATE_ATTR_DEPRECATION_WARNING, attr.sourceSpan, ParseErrorLevel.WARNING);
  115666. templateBindingsSource = attr.value;
  115667. }
  115668. else if (normalizedName.startsWith(TEMPLATE_ATTR_PREFIX)) {
  115669. templateBindingsSource = attr.value;
  115670. prefixToken = normalizedName.substring(TEMPLATE_ATTR_PREFIX.length) + ':';
  115671. }
  115672. var /** @type {?} */ hasTemplateBinding = templateBindingsSource != null;
  115673. if (hasTemplateBinding) {
  115674. if (hasInlineTemplates) {
  115675. _this._reportError("Can't have multiple template bindings on one element. Use only one attribute named 'template' or prefixed with *", attr.sourceSpan);
  115676. }
  115677. hasInlineTemplates = true;
  115678. _this._bindingParser.parseInlineTemplateBinding(/** @type {?} */ ((prefixToken)), /** @type {?} */ ((templateBindingsSource)), attr.sourceSpan, templateMatchableAttrs, templateElementOrDirectiveProps, templateElementVars);
  115679. }
  115680. if (!hasBinding && !hasTemplateBinding) {
  115681. // don't include the bindings as attributes as well in the AST
  115682. attrs.push(_this.visitAttribute(attr, null));
  115683. matchableAttrs.push([attr.name, attr.value]);
  115684. }
  115685. });
  115686. var /** @type {?} */ elementCssSelector = createElementCssSelector(nodeName, matchableAttrs);
  115687. var _a = this._parseDirectives(this.selectorMatcher, elementCssSelector), directiveMetas = _a.directives, matchElement = _a.matchElement;
  115688. var /** @type {?} */ references = [];
  115689. var /** @type {?} */ boundDirectivePropNames = new Set();
  115690. var /** @type {?} */ directiveAsts = this._createDirectiveAsts(isTemplateElement, element.name, directiveMetas, elementOrDirectiveProps, elementOrDirectiveRefs, /** @type {?} */ ((element.sourceSpan)), references, boundDirectivePropNames);
  115691. var /** @type {?} */ elementProps = this._createElementPropertyAsts(element.name, elementOrDirectiveProps, boundDirectivePropNames);
  115692. var /** @type {?} */ isViewRoot = parent.isTemplateElement || hasInlineTemplates;
  115693. var /** @type {?} */ providerContext = new ProviderElementContext(this.providerViewContext, /** @type {?} */ ((parent.providerContext)), isViewRoot, directiveAsts, attrs, references, isTemplateElement, queryStartIndex, /** @type {?} */ ((element.sourceSpan)));
  115694. var /** @type {?} */ children = visitAll(preparsedElement.nonBindable ? NON_BINDABLE_VISITOR : this, element.children, ElementContext.create(isTemplateElement, directiveAsts, isTemplateElement ? /** @type {?} */ ((parent.providerContext)) : providerContext));
  115695. providerContext.afterElement();
  115696. // Override the actual selector when the `ngProjectAs` attribute is provided
  115697. var /** @type {?} */ projectionSelector = preparsedElement.projectAs != null ?
  115698. CssSelector.parse(preparsedElement.projectAs)[0] :
  115699. elementCssSelector;
  115700. var /** @type {?} */ ngContentIndex = /** @type {?} */ ((parent.findNgContentIndex(projectionSelector)));
  115701. var /** @type {?} */ parsedElement;
  115702. if (preparsedElement.type === PreparsedElementType.NG_CONTENT) {
  115703. if (element.children && !element.children.every(_isEmptyTextNode)) {
  115704. this._reportError("<ng-content> element cannot have content.", /** @type {?} */ ((element.sourceSpan)));
  115705. }
  115706. parsedElement = new NgContentAst(this.ngContentCount++, hasInlineTemplates ? /** @type {?} */ ((null)) : ngContentIndex, /** @type {?} */ ((element.sourceSpan)));
  115707. }
  115708. else if (isTemplateElement) {
  115709. this._assertAllEventsPublishedByDirectives(directiveAsts, events);
  115710. this._assertNoComponentsNorElementBindingsOnTemplate(directiveAsts, elementProps, /** @type {?} */ ((element.sourceSpan)));
  115711. parsedElement = new EmbeddedTemplateAst(attrs, events, references, elementVars, providerContext.transformedDirectiveAsts, providerContext.transformProviders, providerContext.transformedHasViewContainer, providerContext.queryMatches, children, hasInlineTemplates ? /** @type {?} */ ((null)) : ngContentIndex, /** @type {?} */ ((element.sourceSpan)));
  115712. }
  115713. else {
  115714. this._assertElementExists(matchElement, element);
  115715. this._assertOnlyOneComponent(directiveAsts, /** @type {?} */ ((element.sourceSpan)));
  115716. var /** @type {?} */ ngContentIndex_1 = hasInlineTemplates ? null : parent.findNgContentIndex(projectionSelector);
  115717. parsedElement = new ElementAst(nodeName, attrs, elementProps, events, references, providerContext.transformedDirectiveAsts, providerContext.transformProviders, providerContext.transformedHasViewContainer, providerContext.queryMatches, children, hasInlineTemplates ? null : ngContentIndex_1, element.sourceSpan, element.endSourceSpan || null);
  115718. }
  115719. if (hasInlineTemplates) {
  115720. var /** @type {?} */ templateQueryStartIndex = this.contentQueryStartId;
  115721. var /** @type {?} */ templateSelector = createElementCssSelector(TEMPLATE_ELEMENT, templateMatchableAttrs);
  115722. var templateDirectiveMetas = this._parseDirectives(this.selectorMatcher, templateSelector).directives;
  115723. var /** @type {?} */ templateBoundDirectivePropNames = new Set();
  115724. var /** @type {?} */ templateDirectiveAsts = this._createDirectiveAsts(true, element.name, templateDirectiveMetas, templateElementOrDirectiveProps, [], /** @type {?} */ ((element.sourceSpan)), [], templateBoundDirectivePropNames);
  115725. var /** @type {?} */ templateElementProps = this._createElementPropertyAsts(element.name, templateElementOrDirectiveProps, templateBoundDirectivePropNames);
  115726. this._assertNoComponentsNorElementBindingsOnTemplate(templateDirectiveAsts, templateElementProps, /** @type {?} */ ((element.sourceSpan)));
  115727. var /** @type {?} */ templateProviderContext = new ProviderElementContext(this.providerViewContext, /** @type {?} */ ((parent.providerContext)), parent.isTemplateElement, templateDirectiveAsts, [], [], true, templateQueryStartIndex, /** @type {?} */ ((element.sourceSpan)));
  115728. templateProviderContext.afterElement();
  115729. parsedElement = new EmbeddedTemplateAst([], [], [], templateElementVars, templateProviderContext.transformedDirectiveAsts, templateProviderContext.transformProviders, templateProviderContext.transformedHasViewContainer, templateProviderContext.queryMatches, [parsedElement], ngContentIndex, /** @type {?} */ ((element.sourceSpan)));
  115730. }
  115731. return parsedElement;
  115732. };
  115733. /**
  115734. * @param {?} isTemplateElement
  115735. * @param {?} attr
  115736. * @param {?} targetMatchableAttrs
  115737. * @param {?} targetProps
  115738. * @param {?} targetEvents
  115739. * @param {?} targetRefs
  115740. * @param {?} targetVars
  115741. * @return {?}
  115742. */
  115743. TemplateParseVisitor.prototype._parseAttr = /**
  115744. * @param {?} isTemplateElement
  115745. * @param {?} attr
  115746. * @param {?} targetMatchableAttrs
  115747. * @param {?} targetProps
  115748. * @param {?} targetEvents
  115749. * @param {?} targetRefs
  115750. * @param {?} targetVars
  115751. * @return {?}
  115752. */
  115753. function (isTemplateElement, attr, targetMatchableAttrs, targetProps, targetEvents, targetRefs, targetVars) {
  115754. var /** @type {?} */ name = this._normalizeAttributeName(attr.name);
  115755. var /** @type {?} */ value = attr.value;
  115756. var /** @type {?} */ srcSpan = attr.sourceSpan;
  115757. var /** @type {?} */ bindParts = name.match(BIND_NAME_REGEXP);
  115758. var /** @type {?} */ hasBinding = false;
  115759. if (bindParts !== null) {
  115760. hasBinding = true;
  115761. if (bindParts[KW_BIND_IDX] != null) {
  115762. this._bindingParser.parsePropertyBinding(bindParts[IDENT_KW_IDX], value, false, srcSpan, targetMatchableAttrs, targetProps);
  115763. }
  115764. else if (bindParts[KW_LET_IDX]) {
  115765. if (isTemplateElement) {
  115766. var /** @type {?} */ identifier = bindParts[IDENT_KW_IDX];
  115767. this._parseVariable(identifier, value, srcSpan, targetVars);
  115768. }
  115769. else {
  115770. this._reportError("\"let-\" is only supported on ng-template elements.", srcSpan);
  115771. }
  115772. }
  115773. else if (bindParts[KW_REF_IDX]) {
  115774. var /** @type {?} */ identifier = bindParts[IDENT_KW_IDX];
  115775. this._parseReference(identifier, value, srcSpan, targetRefs);
  115776. }
  115777. else if (bindParts[KW_ON_IDX]) {
  115778. this._bindingParser.parseEvent(bindParts[IDENT_KW_IDX], value, srcSpan, targetMatchableAttrs, targetEvents);
  115779. }
  115780. else if (bindParts[KW_BINDON_IDX]) {
  115781. this._bindingParser.parsePropertyBinding(bindParts[IDENT_KW_IDX], value, false, srcSpan, targetMatchableAttrs, targetProps);
  115782. this._parseAssignmentEvent(bindParts[IDENT_KW_IDX], value, srcSpan, targetMatchableAttrs, targetEvents);
  115783. }
  115784. else if (bindParts[KW_AT_IDX]) {
  115785. this._bindingParser.parseLiteralAttr(name, value, srcSpan, targetMatchableAttrs, targetProps);
  115786. }
  115787. else if (bindParts[IDENT_BANANA_BOX_IDX]) {
  115788. this._bindingParser.parsePropertyBinding(bindParts[IDENT_BANANA_BOX_IDX], value, false, srcSpan, targetMatchableAttrs, targetProps);
  115789. this._parseAssignmentEvent(bindParts[IDENT_BANANA_BOX_IDX], value, srcSpan, targetMatchableAttrs, targetEvents);
  115790. }
  115791. else if (bindParts[IDENT_PROPERTY_IDX]) {
  115792. this._bindingParser.parsePropertyBinding(bindParts[IDENT_PROPERTY_IDX], value, false, srcSpan, targetMatchableAttrs, targetProps);
  115793. }
  115794. else if (bindParts[IDENT_EVENT_IDX]) {
  115795. this._bindingParser.parseEvent(bindParts[IDENT_EVENT_IDX], value, srcSpan, targetMatchableAttrs, targetEvents);
  115796. }
  115797. }
  115798. else {
  115799. hasBinding = this._bindingParser.parsePropertyInterpolation(name, value, srcSpan, targetMatchableAttrs, targetProps);
  115800. }
  115801. if (!hasBinding) {
  115802. this._bindingParser.parseLiteralAttr(name, value, srcSpan, targetMatchableAttrs, targetProps);
  115803. }
  115804. return hasBinding;
  115805. };
  115806. /**
  115807. * @param {?} attrName
  115808. * @return {?}
  115809. */
  115810. TemplateParseVisitor.prototype._normalizeAttributeName = /**
  115811. * @param {?} attrName
  115812. * @return {?}
  115813. */
  115814. function (attrName) {
  115815. return /^data-/i.test(attrName) ? attrName.substring(5) : attrName;
  115816. };
  115817. /**
  115818. * @param {?} identifier
  115819. * @param {?} value
  115820. * @param {?} sourceSpan
  115821. * @param {?} targetVars
  115822. * @return {?}
  115823. */
  115824. TemplateParseVisitor.prototype._parseVariable = /**
  115825. * @param {?} identifier
  115826. * @param {?} value
  115827. * @param {?} sourceSpan
  115828. * @param {?} targetVars
  115829. * @return {?}
  115830. */
  115831. function (identifier, value, sourceSpan, targetVars) {
  115832. if (identifier.indexOf('-') > -1) {
  115833. this._reportError("\"-\" is not allowed in variable names", sourceSpan);
  115834. }
  115835. targetVars.push(new VariableAst(identifier, value, sourceSpan));
  115836. };
  115837. /**
  115838. * @param {?} identifier
  115839. * @param {?} value
  115840. * @param {?} sourceSpan
  115841. * @param {?} targetRefs
  115842. * @return {?}
  115843. */
  115844. TemplateParseVisitor.prototype._parseReference = /**
  115845. * @param {?} identifier
  115846. * @param {?} value
  115847. * @param {?} sourceSpan
  115848. * @param {?} targetRefs
  115849. * @return {?}
  115850. */
  115851. function (identifier, value, sourceSpan, targetRefs) {
  115852. if (identifier.indexOf('-') > -1) {
  115853. this._reportError("\"-\" is not allowed in reference names", sourceSpan);
  115854. }
  115855. targetRefs.push(new ElementOrDirectiveRef(identifier, value, sourceSpan));
  115856. };
  115857. /**
  115858. * @param {?} name
  115859. * @param {?} expression
  115860. * @param {?} sourceSpan
  115861. * @param {?} targetMatchableAttrs
  115862. * @param {?} targetEvents
  115863. * @return {?}
  115864. */
  115865. TemplateParseVisitor.prototype._parseAssignmentEvent = /**
  115866. * @param {?} name
  115867. * @param {?} expression
  115868. * @param {?} sourceSpan
  115869. * @param {?} targetMatchableAttrs
  115870. * @param {?} targetEvents
  115871. * @return {?}
  115872. */
  115873. function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {
  115874. this._bindingParser.parseEvent(name + "Change", expression + "=$event", sourceSpan, targetMatchableAttrs, targetEvents);
  115875. };
  115876. /**
  115877. * @param {?} selectorMatcher
  115878. * @param {?} elementCssSelector
  115879. * @return {?}
  115880. */
  115881. TemplateParseVisitor.prototype._parseDirectives = /**
  115882. * @param {?} selectorMatcher
  115883. * @param {?} elementCssSelector
  115884. * @return {?}
  115885. */
  115886. function (selectorMatcher, elementCssSelector) {
  115887. var _this = this;
  115888. // Need to sort the directives so that we get consistent results throughout,
  115889. // as selectorMatcher uses Maps inside.
  115890. // Also deduplicate directives as they might match more than one time!
  115891. var /** @type {?} */ directives = new Array(this.directivesIndex.size);
  115892. // Whether any directive selector matches on the element name
  115893. var /** @type {?} */ matchElement = false;
  115894. selectorMatcher.match(elementCssSelector, function (selector, directive) {
  115895. directives[/** @type {?} */ ((_this.directivesIndex.get(directive)))] = directive;
  115896. matchElement = matchElement || selector.hasElementSelector();
  115897. });
  115898. return {
  115899. directives: directives.filter(function (dir) { return !!dir; }),
  115900. matchElement: matchElement,
  115901. };
  115902. };
  115903. /**
  115904. * @param {?} isTemplateElement
  115905. * @param {?} elementName
  115906. * @param {?} directives
  115907. * @param {?} props
  115908. * @param {?} elementOrDirectiveRefs
  115909. * @param {?} elementSourceSpan
  115910. * @param {?} targetReferences
  115911. * @param {?} targetBoundDirectivePropNames
  115912. * @return {?}
  115913. */
  115914. TemplateParseVisitor.prototype._createDirectiveAsts = /**
  115915. * @param {?} isTemplateElement
  115916. * @param {?} elementName
  115917. * @param {?} directives
  115918. * @param {?} props
  115919. * @param {?} elementOrDirectiveRefs
  115920. * @param {?} elementSourceSpan
  115921. * @param {?} targetReferences
  115922. * @param {?} targetBoundDirectivePropNames
  115923. * @return {?}
  115924. */
  115925. function (isTemplateElement, elementName, directives, props, elementOrDirectiveRefs, elementSourceSpan, targetReferences, targetBoundDirectivePropNames) {
  115926. var _this = this;
  115927. var /** @type {?} */ matchedReferences = new Set();
  115928. var /** @type {?} */ component = /** @type {?} */ ((null));
  115929. var /** @type {?} */ directiveAsts = directives.map(function (directive) {
  115930. var /** @type {?} */ sourceSpan = new ParseSourceSpan(elementSourceSpan.start, elementSourceSpan.end, "Directive " + identifierName(directive.type));
  115931. if (directive.isComponent) {
  115932. component = directive;
  115933. }
  115934. var /** @type {?} */ directiveProperties = [];
  115935. var /** @type {?} */ hostProperties = /** @type {?} */ ((_this._bindingParser.createDirectiveHostPropertyAsts(directive, elementName, sourceSpan)));
  115936. // Note: We need to check the host properties here as well,
  115937. // as we don't know the element name in the DirectiveWrapperCompiler yet.
  115938. hostProperties = _this._checkPropertiesInSchema(elementName, hostProperties);
  115939. var /** @type {?} */ hostEvents = /** @type {?} */ ((_this._bindingParser.createDirectiveHostEventAsts(directive, sourceSpan)));
  115940. _this._createDirectivePropertyAsts(directive.inputs, props, directiveProperties, targetBoundDirectivePropNames);
  115941. elementOrDirectiveRefs.forEach(function (elOrDirRef) {
  115942. if ((elOrDirRef.value.length === 0 && directive.isComponent) ||
  115943. (elOrDirRef.isReferenceToDirective(directive))) {
  115944. targetReferences.push(new ReferenceAst(elOrDirRef.name, createTokenForReference(directive.type.reference), elOrDirRef.sourceSpan));
  115945. matchedReferences.add(elOrDirRef.name);
  115946. }
  115947. });
  115948. var /** @type {?} */ contentQueryStartId = _this.contentQueryStartId;
  115949. _this.contentQueryStartId += directive.queries.length;
  115950. return new DirectiveAst(directive, directiveProperties, hostProperties, hostEvents, contentQueryStartId, sourceSpan);
  115951. });
  115952. elementOrDirectiveRefs.forEach(function (elOrDirRef) {
  115953. if (elOrDirRef.value.length > 0) {
  115954. if (!matchedReferences.has(elOrDirRef.name)) {
  115955. _this._reportError("There is no directive with \"exportAs\" set to \"" + elOrDirRef.value + "\"", elOrDirRef.sourceSpan);
  115956. }
  115957. }
  115958. else if (!component) {
  115959. var /** @type {?} */ refToken = /** @type {?} */ ((null));
  115960. if (isTemplateElement) {
  115961. refToken = createTokenForExternalReference(_this.reflector, Identifiers.TemplateRef);
  115962. }
  115963. targetReferences.push(new ReferenceAst(elOrDirRef.name, refToken, elOrDirRef.sourceSpan));
  115964. }
  115965. });
  115966. return directiveAsts;
  115967. };
  115968. /**
  115969. * @param {?} directiveProperties
  115970. * @param {?} boundProps
  115971. * @param {?} targetBoundDirectiveProps
  115972. * @param {?} targetBoundDirectivePropNames
  115973. * @return {?}
  115974. */
  115975. TemplateParseVisitor.prototype._createDirectivePropertyAsts = /**
  115976. * @param {?} directiveProperties
  115977. * @param {?} boundProps
  115978. * @param {?} targetBoundDirectiveProps
  115979. * @param {?} targetBoundDirectivePropNames
  115980. * @return {?}
  115981. */
  115982. function (directiveProperties, boundProps, targetBoundDirectiveProps, targetBoundDirectivePropNames) {
  115983. if (directiveProperties) {
  115984. var /** @type {?} */ boundPropsByName_1 = new Map();
  115985. boundProps.forEach(function (boundProp) {
  115986. var /** @type {?} */ prevValue = boundPropsByName_1.get(boundProp.name);
  115987. if (!prevValue || prevValue.isLiteral) {
  115988. // give [a]="b" a higher precedence than a="b" on the same element
  115989. // give [a]="b" a higher precedence than a="b" on the same element
  115990. boundPropsByName_1.set(boundProp.name, boundProp);
  115991. }
  115992. });
  115993. Object.keys(directiveProperties).forEach(function (dirProp) {
  115994. var /** @type {?} */ elProp = directiveProperties[dirProp];
  115995. var /** @type {?} */ boundProp = boundPropsByName_1.get(elProp);
  115996. // Bindings are optional, so this binding only needs to be set up if an expression is given.
  115997. if (boundProp) {
  115998. targetBoundDirectivePropNames.add(boundProp.name);
  115999. if (!isEmptyExpression(boundProp.expression)) {
  116000. targetBoundDirectiveProps.push(new BoundDirectivePropertyAst(dirProp, boundProp.name, boundProp.expression, boundProp.sourceSpan));
  116001. }
  116002. }
  116003. });
  116004. }
  116005. };
  116006. /**
  116007. * @param {?} elementName
  116008. * @param {?} props
  116009. * @param {?} boundDirectivePropNames
  116010. * @return {?}
  116011. */
  116012. TemplateParseVisitor.prototype._createElementPropertyAsts = /**
  116013. * @param {?} elementName
  116014. * @param {?} props
  116015. * @param {?} boundDirectivePropNames
  116016. * @return {?}
  116017. */
  116018. function (elementName, props, boundDirectivePropNames) {
  116019. var _this = this;
  116020. var /** @type {?} */ boundElementProps = [];
  116021. props.forEach(function (prop) {
  116022. if (!prop.isLiteral && !boundDirectivePropNames.has(prop.name)) {
  116023. boundElementProps.push(_this._bindingParser.createElementPropertyAst(elementName, prop));
  116024. }
  116025. });
  116026. return this._checkPropertiesInSchema(elementName, boundElementProps);
  116027. };
  116028. /**
  116029. * @param {?} directives
  116030. * @return {?}
  116031. */
  116032. TemplateParseVisitor.prototype._findComponentDirectives = /**
  116033. * @param {?} directives
  116034. * @return {?}
  116035. */
  116036. function (directives) {
  116037. return directives.filter(function (directive) { return directive.directive.isComponent; });
  116038. };
  116039. /**
  116040. * @param {?} directives
  116041. * @return {?}
  116042. */
  116043. TemplateParseVisitor.prototype._findComponentDirectiveNames = /**
  116044. * @param {?} directives
  116045. * @return {?}
  116046. */
  116047. function (directives) {
  116048. return this._findComponentDirectives(directives)
  116049. .map(function (directive) { return ((identifierName(directive.directive.type))); });
  116050. };
  116051. /**
  116052. * @param {?} directives
  116053. * @param {?} sourceSpan
  116054. * @return {?}
  116055. */
  116056. TemplateParseVisitor.prototype._assertOnlyOneComponent = /**
  116057. * @param {?} directives
  116058. * @param {?} sourceSpan
  116059. * @return {?}
  116060. */
  116061. function (directives, sourceSpan) {
  116062. var /** @type {?} */ componentTypeNames = this._findComponentDirectiveNames(directives);
  116063. if (componentTypeNames.length > 1) {
  116064. this._reportError("More than one component matched on this element.\n" +
  116065. "Make sure that only one component's selector can match a given element.\n" +
  116066. ("Conflicting components: " + componentTypeNames.join(',')), sourceSpan);
  116067. }
  116068. };
  116069. /**
  116070. * Make sure that non-angular tags conform to the schemas.
  116071. *
  116072. * Note: An element is considered an angular tag when at least one directive selector matches the
  116073. * tag name.
  116074. *
  116075. * @param {?} matchElement Whether any directive has matched on the tag name
  116076. * @param {?} element the html element
  116077. * @return {?}
  116078. */
  116079. TemplateParseVisitor.prototype._assertElementExists = /**
  116080. * Make sure that non-angular tags conform to the schemas.
  116081. *
  116082. * Note: An element is considered an angular tag when at least one directive selector matches the
  116083. * tag name.
  116084. *
  116085. * @param {?} matchElement Whether any directive has matched on the tag name
  116086. * @param {?} element the html element
  116087. * @return {?}
  116088. */
  116089. function (matchElement, element) {
  116090. var /** @type {?} */ elName = element.name.replace(/^:xhtml:/, '');
  116091. if (!matchElement && !this._schemaRegistry.hasElement(elName, this._schemas)) {
  116092. var /** @type {?} */ errorMsg = "'" + elName + "' is not a known element:\n";
  116093. errorMsg +=
  116094. "1. If '" + elName + "' is an Angular component, then verify that it is part of this module.\n";
  116095. if (elName.indexOf('-') > -1) {
  116096. errorMsg +=
  116097. "2. If '" + elName + "' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.";
  116098. }
  116099. else {
  116100. errorMsg +=
  116101. "2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
  116102. }
  116103. this._reportError(errorMsg, /** @type {?} */ ((element.sourceSpan)));
  116104. }
  116105. };
  116106. /**
  116107. * @param {?} directives
  116108. * @param {?} elementProps
  116109. * @param {?} sourceSpan
  116110. * @return {?}
  116111. */
  116112. TemplateParseVisitor.prototype._assertNoComponentsNorElementBindingsOnTemplate = /**
  116113. * @param {?} directives
  116114. * @param {?} elementProps
  116115. * @param {?} sourceSpan
  116116. * @return {?}
  116117. */
  116118. function (directives, elementProps, sourceSpan) {
  116119. var _this = this;
  116120. var /** @type {?} */ componentTypeNames = this._findComponentDirectiveNames(directives);
  116121. if (componentTypeNames.length > 0) {
  116122. this._reportError("Components on an embedded template: " + componentTypeNames.join(','), sourceSpan);
  116123. }
  116124. elementProps.forEach(function (prop) {
  116125. _this._reportError("Property binding " + prop.name + " not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the \"@NgModule.declarations\".", sourceSpan);
  116126. });
  116127. };
  116128. /**
  116129. * @param {?} directives
  116130. * @param {?} events
  116131. * @return {?}
  116132. */
  116133. TemplateParseVisitor.prototype._assertAllEventsPublishedByDirectives = /**
  116134. * @param {?} directives
  116135. * @param {?} events
  116136. * @return {?}
  116137. */
  116138. function (directives, events) {
  116139. var _this = this;
  116140. var /** @type {?} */ allDirectiveEvents = new Set();
  116141. directives.forEach(function (directive) {
  116142. Object.keys(directive.directive.outputs).forEach(function (k) {
  116143. var /** @type {?} */ eventName = directive.directive.outputs[k];
  116144. allDirectiveEvents.add(eventName);
  116145. });
  116146. });
  116147. events.forEach(function (event) {
  116148. if (event.target != null || !allDirectiveEvents.has(event.name)) {
  116149. _this._reportError("Event binding " + event.fullName + " not emitted by any directive on an embedded template. Make sure that the event name is spelled correctly and all directives are listed in the \"@NgModule.declarations\".", event.sourceSpan);
  116150. }
  116151. });
  116152. };
  116153. /**
  116154. * @param {?} elementName
  116155. * @param {?} boundProps
  116156. * @return {?}
  116157. */
  116158. TemplateParseVisitor.prototype._checkPropertiesInSchema = /**
  116159. * @param {?} elementName
  116160. * @param {?} boundProps
  116161. * @return {?}
  116162. */
  116163. function (elementName, boundProps) {
  116164. var _this = this;
  116165. // Note: We can't filter out empty expressions before this method,
  116166. // as we still want to validate them!
  116167. return boundProps.filter(function (boundProp) {
  116168. if (boundProp.type === PropertyBindingType.Property &&
  116169. !_this._schemaRegistry.hasProperty(elementName, boundProp.name, _this._schemas)) {
  116170. var /** @type {?} */ errorMsg = "Can't bind to '" + boundProp.name + "' since it isn't a known property of '" + elementName + "'.";
  116171. if (elementName.startsWith('ng-')) {
  116172. errorMsg +=
  116173. "\n1. If '" + boundProp.name + "' is an Angular directive, then add 'CommonModule' to the '@NgModule.imports' of this component." +
  116174. "\n2. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
  116175. }
  116176. else if (elementName.indexOf('-') > -1) {
  116177. errorMsg +=
  116178. "\n1. If '" + elementName + "' is an Angular component and it has '" + boundProp.name + "' input, then verify that it is part of this module." +
  116179. ("\n2. If '" + elementName + "' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.") +
  116180. "\n3. To allow any property add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component.";
  116181. }
  116182. _this._reportError(errorMsg, boundProp.sourceSpan);
  116183. }
  116184. return !isEmptyExpression(boundProp.value);
  116185. });
  116186. };
  116187. /**
  116188. * @param {?} message
  116189. * @param {?} sourceSpan
  116190. * @param {?=} level
  116191. * @return {?}
  116192. */
  116193. TemplateParseVisitor.prototype._reportError = /**
  116194. * @param {?} message
  116195. * @param {?} sourceSpan
  116196. * @param {?=} level
  116197. * @return {?}
  116198. */
  116199. function (message, sourceSpan, level) {
  116200. if (level === void 0) { level = ParseErrorLevel.ERROR; }
  116201. this._targetErrors.push(new ParseError(sourceSpan, message, level));
  116202. };
  116203. return TemplateParseVisitor;
  116204. }());
  116205. var NonBindableVisitor = /** @class */ (function () {
  116206. function NonBindableVisitor() {
  116207. }
  116208. /**
  116209. * @param {?} ast
  116210. * @param {?} parent
  116211. * @return {?}
  116212. */
  116213. NonBindableVisitor.prototype.visitElement = /**
  116214. * @param {?} ast
  116215. * @param {?} parent
  116216. * @return {?}
  116217. */
  116218. function (ast, parent) {
  116219. var /** @type {?} */ preparsedElement = preparseElement(ast);
  116220. if (preparsedElement.type === PreparsedElementType.SCRIPT ||
  116221. preparsedElement.type === PreparsedElementType.STYLE ||
  116222. preparsedElement.type === PreparsedElementType.STYLESHEET) {
  116223. // Skipping <script> for security reasons
  116224. // Skipping <style> and stylesheets as we already processed them
  116225. // in the StyleCompiler
  116226. return null;
  116227. }
  116228. var /** @type {?} */ attrNameAndValues = ast.attrs.map(function (attr) { return [attr.name, attr.value]; });
  116229. var /** @type {?} */ selector = createElementCssSelector(ast.name, attrNameAndValues);
  116230. var /** @type {?} */ ngContentIndex = parent.findNgContentIndex(selector);
  116231. var /** @type {?} */ children = visitAll(this, ast.children, EMPTY_ELEMENT_CONTEXT);
  116232. return new ElementAst(ast.name, visitAll(this, ast.attrs), [], [], [], [], [], false, [], children, ngContentIndex, ast.sourceSpan, ast.endSourceSpan);
  116233. };
  116234. /**
  116235. * @param {?} comment
  116236. * @param {?} context
  116237. * @return {?}
  116238. */
  116239. NonBindableVisitor.prototype.visitComment = /**
  116240. * @param {?} comment
  116241. * @param {?} context
  116242. * @return {?}
  116243. */
  116244. function (comment, context) { return null; };
  116245. /**
  116246. * @param {?} attribute
  116247. * @param {?} context
  116248. * @return {?}
  116249. */
  116250. NonBindableVisitor.prototype.visitAttribute = /**
  116251. * @param {?} attribute
  116252. * @param {?} context
  116253. * @return {?}
  116254. */
  116255. function (attribute, context) {
  116256. return new AttrAst(attribute.name, attribute.value, attribute.sourceSpan);
  116257. };
  116258. /**
  116259. * @param {?} text
  116260. * @param {?} parent
  116261. * @return {?}
  116262. */
  116263. NonBindableVisitor.prototype.visitText = /**
  116264. * @param {?} text
  116265. * @param {?} parent
  116266. * @return {?}
  116267. */
  116268. function (text, parent) {
  116269. var /** @type {?} */ ngContentIndex = /** @type {?} */ ((parent.findNgContentIndex(TEXT_CSS_SELECTOR)));
  116270. return new TextAst(text.value, ngContentIndex, /** @type {?} */ ((text.sourceSpan)));
  116271. };
  116272. /**
  116273. * @param {?} expansion
  116274. * @param {?} context
  116275. * @return {?}
  116276. */
  116277. NonBindableVisitor.prototype.visitExpansion = /**
  116278. * @param {?} expansion
  116279. * @param {?} context
  116280. * @return {?}
  116281. */
  116282. function (expansion, context) { return expansion; };
  116283. /**
  116284. * @param {?} expansionCase
  116285. * @param {?} context
  116286. * @return {?}
  116287. */
  116288. NonBindableVisitor.prototype.visitExpansionCase = /**
  116289. * @param {?} expansionCase
  116290. * @param {?} context
  116291. * @return {?}
  116292. */
  116293. function (expansionCase, context) { return expansionCase; };
  116294. return NonBindableVisitor;
  116295. }());
  116296. /**
  116297. * A reference to an element or directive in a template. E.g., the reference in this template:
  116298. *
  116299. * <div #myMenu="coolMenu">
  116300. *
  116301. * would be {name: 'myMenu', value: 'coolMenu', sourceSpan: ...}
  116302. */
  116303. var ElementOrDirectiveRef = /** @class */ (function () {
  116304. function ElementOrDirectiveRef(name, value, sourceSpan) {
  116305. this.name = name;
  116306. this.value = value;
  116307. this.sourceSpan = sourceSpan;
  116308. }
  116309. /** Gets whether this is a reference to the given directive. */
  116310. /**
  116311. * Gets whether this is a reference to the given directive.
  116312. * @param {?} directive
  116313. * @return {?}
  116314. */
  116315. ElementOrDirectiveRef.prototype.isReferenceToDirective = /**
  116316. * Gets whether this is a reference to the given directive.
  116317. * @param {?} directive
  116318. * @return {?}
  116319. */
  116320. function (directive) {
  116321. return splitExportAs(directive.exportAs).indexOf(this.value) !== -1;
  116322. };
  116323. return ElementOrDirectiveRef;
  116324. }());
  116325. /**
  116326. * Splits a raw, potentially comma-delimted `exportAs` value into an array of names.
  116327. * @param {?} exportAs
  116328. * @return {?}
  116329. */
  116330. function splitExportAs(exportAs) {
  116331. return exportAs ? exportAs.split(',').map(function (e) { return e.trim(); }) : [];
  116332. }
  116333. /**
  116334. * @param {?} classAttrValue
  116335. * @return {?}
  116336. */
  116337. function splitClasses(classAttrValue) {
  116338. return classAttrValue.trim().split(/\s+/g);
  116339. }
  116340. var ElementContext = /** @class */ (function () {
  116341. function ElementContext(isTemplateElement, _ngContentIndexMatcher, _wildcardNgContentIndex, providerContext) {
  116342. this.isTemplateElement = isTemplateElement;
  116343. this._ngContentIndexMatcher = _ngContentIndexMatcher;
  116344. this._wildcardNgContentIndex = _wildcardNgContentIndex;
  116345. this.providerContext = providerContext;
  116346. }
  116347. /**
  116348. * @param {?} isTemplateElement
  116349. * @param {?} directives
  116350. * @param {?} providerContext
  116351. * @return {?}
  116352. */
  116353. ElementContext.create = /**
  116354. * @param {?} isTemplateElement
  116355. * @param {?} directives
  116356. * @param {?} providerContext
  116357. * @return {?}
  116358. */
  116359. function (isTemplateElement, directives, providerContext) {
  116360. var /** @type {?} */ matcher = new SelectorMatcher();
  116361. var /** @type {?} */ wildcardNgContentIndex = /** @type {?} */ ((null));
  116362. var /** @type {?} */ component = directives.find(function (directive) { return directive.directive.isComponent; });
  116363. if (component) {
  116364. var /** @type {?} */ ngContentSelectors = /** @type {?} */ ((component.directive.template)).ngContentSelectors;
  116365. for (var /** @type {?} */ i = 0; i < ngContentSelectors.length; i++) {
  116366. var /** @type {?} */ selector = ngContentSelectors[i];
  116367. if (selector === '*') {
  116368. wildcardNgContentIndex = i;
  116369. }
  116370. else {
  116371. matcher.addSelectables(CssSelector.parse(ngContentSelectors[i]), i);
  116372. }
  116373. }
  116374. }
  116375. return new ElementContext(isTemplateElement, matcher, wildcardNgContentIndex, providerContext);
  116376. };
  116377. /**
  116378. * @param {?} selector
  116379. * @return {?}
  116380. */
  116381. ElementContext.prototype.findNgContentIndex = /**
  116382. * @param {?} selector
  116383. * @return {?}
  116384. */
  116385. function (selector) {
  116386. var /** @type {?} */ ngContentIndices = [];
  116387. this._ngContentIndexMatcher.match(selector, function (selector, ngContentIndex) { ngContentIndices.push(ngContentIndex); });
  116388. ngContentIndices.sort();
  116389. if (this._wildcardNgContentIndex != null) {
  116390. ngContentIndices.push(this._wildcardNgContentIndex);
  116391. }
  116392. return ngContentIndices.length > 0 ? ngContentIndices[0] : null;
  116393. };
  116394. return ElementContext;
  116395. }());
  116396. /**
  116397. * @param {?} elementName
  116398. * @param {?} attributes
  116399. * @return {?}
  116400. */
  116401. function createElementCssSelector(elementName, attributes) {
  116402. var /** @type {?} */ cssSelector = new CssSelector();
  116403. var /** @type {?} */ elNameNoNs = splitNsName(elementName)[1];
  116404. cssSelector.setElement(elNameNoNs);
  116405. for (var /** @type {?} */ i = 0; i < attributes.length; i++) {
  116406. var /** @type {?} */ attrName = attributes[i][0];
  116407. var /** @type {?} */ attrNameNoNs = splitNsName(attrName)[1];
  116408. var /** @type {?} */ attrValue = attributes[i][1];
  116409. cssSelector.addAttribute(attrNameNoNs, attrValue);
  116410. if (attrName.toLowerCase() == CLASS_ATTR) {
  116411. var /** @type {?} */ classes = splitClasses(attrValue);
  116412. classes.forEach(function (className) { return cssSelector.addClassName(className); });
  116413. }
  116414. }
  116415. return cssSelector;
  116416. }
  116417. var EMPTY_ELEMENT_CONTEXT = new ElementContext(true, new SelectorMatcher(), null, null);
  116418. var NON_BINDABLE_VISITOR = new NonBindableVisitor();
  116419. /**
  116420. * @param {?} node
  116421. * @return {?}
  116422. */
  116423. function _isEmptyTextNode(node) {
  116424. return node instanceof Text && node.value.trim().length == 0;
  116425. }
  116426. /**
  116427. * @template T
  116428. * @param {?} items
  116429. * @return {?}
  116430. */
  116431. function removeSummaryDuplicates(items) {
  116432. var /** @type {?} */ map = new Map();
  116433. items.forEach(function (item) {
  116434. if (!map.get(item.type.reference)) {
  116435. map.set(item.type.reference, item);
  116436. }
  116437. });
  116438. return Array.from(map.values());
  116439. }
  116440. /**
  116441. * @param {?} ast
  116442. * @return {?}
  116443. */
  116444. function isEmptyExpression(ast) {
  116445. if (ast instanceof ASTWithSource) {
  116446. ast = ast.ast;
  116447. }
  116448. return ast instanceof EmptyExpr;
  116449. }
  116450. /**
  116451. * @param {?} el
  116452. * @param {?} enableLegacyTemplate
  116453. * @param {?} reportDeprecation
  116454. * @return {?}
  116455. */
  116456. function isTemplate(el, enableLegacyTemplate, reportDeprecation) {
  116457. if (isNgTemplate(el.name))
  116458. return true;
  116459. var /** @type {?} */ tagNoNs = splitNsName(el.name)[1];
  116460. // `<template>` is HTML and case insensitive
  116461. if (tagNoNs.toLowerCase() === TEMPLATE_ELEMENT) {
  116462. if (enableLegacyTemplate && tagNoNs.toLowerCase() === TEMPLATE_ELEMENT) {
  116463. reportDeprecation(TEMPLATE_ELEMENT_DEPRECATION_WARNING, /** @type {?} */ ((el.sourceSpan)));
  116464. return true;
  116465. }
  116466. }
  116467. return false;
  116468. }
  116469. /**
  116470. * @fileoverview added by tsickle
  116471. * @suppress {checkTypes} checked by tsc
  116472. */
  116473. /**
  116474. * @license
  116475. * Copyright Google Inc. All Rights Reserved.
  116476. *
  116477. * Use of this source code is governed by an MIT-style license that can be
  116478. * found in the LICENSE file at https://angular.io/license
  116479. */
  116480. var EventHandlerVars = /** @class */ (function () {
  116481. function EventHandlerVars() {
  116482. }
  116483. EventHandlerVars.event = variable('$event');
  116484. return EventHandlerVars;
  116485. }());
  116486. /**
  116487. * @record
  116488. */
  116489. var ConvertActionBindingResult = /** @class */ (function () {
  116490. function ConvertActionBindingResult(stmts, allowDefault) {
  116491. this.stmts = stmts;
  116492. this.allowDefault = allowDefault;
  116493. }
  116494. return ConvertActionBindingResult;
  116495. }());
  116496. /**
  116497. * Converts the given expression AST into an executable output AST, assuming the expression is
  116498. * used in an action binding (e.g. an event handler).
  116499. * @param {?} localResolver
  116500. * @param {?} implicitReceiver
  116501. * @param {?} action
  116502. * @param {?} bindingId
  116503. * @return {?}
  116504. */
  116505. function convertActionBinding(localResolver, implicitReceiver, action, bindingId) {
  116506. if (!localResolver) {
  116507. localResolver = new DefaultLocalResolver();
  116508. }
  116509. var /** @type {?} */ actionWithoutBuiltins = convertPropertyBindingBuiltins({
  116510. createLiteralArrayConverter: function (argCount) {
  116511. // Note: no caching for literal arrays in actions.
  116512. return function (args) { return literalArr(args); };
  116513. },
  116514. createLiteralMapConverter: function (keys) {
  116515. // Note: no caching for literal maps in actions.
  116516. return function (values) {
  116517. var /** @type {?} */ entries = keys.map(function (k, i) {
  116518. return ({
  116519. key: k.key,
  116520. value: values[i],
  116521. quoted: k.quoted,
  116522. });
  116523. });
  116524. return literalMap(entries);
  116525. };
  116526. },
  116527. createPipeConverter: function (name) {
  116528. throw new Error("Illegal State: Actions are not allowed to contain pipes. Pipe: " + name);
  116529. }
  116530. }, action);
  116531. var /** @type {?} */ visitor = new _AstToIrVisitor(localResolver, implicitReceiver, bindingId);
  116532. var /** @type {?} */ actionStmts = [];
  116533. flattenStatements(actionWithoutBuiltins.visit(visitor, _Mode.Statement), actionStmts);
  116534. prependTemporaryDecls(visitor.temporaryCount, bindingId, actionStmts);
  116535. var /** @type {?} */ lastIndex = actionStmts.length - 1;
  116536. var /** @type {?} */ preventDefaultVar = /** @type {?} */ ((null));
  116537. if (lastIndex >= 0) {
  116538. var /** @type {?} */ lastStatement = actionStmts[lastIndex];
  116539. var /** @type {?} */ returnExpr = convertStmtIntoExpression(lastStatement);
  116540. if (returnExpr) {
  116541. // Note: We need to cast the result of the method call to dynamic,
  116542. // as it might be a void method!
  116543. preventDefaultVar = createPreventDefaultVar(bindingId);
  116544. actionStmts[lastIndex] =
  116545. preventDefaultVar.set(returnExpr.cast(DYNAMIC_TYPE).notIdentical(literal(false)))
  116546. .toDeclStmt(null, [StmtModifier.Final]);
  116547. }
  116548. }
  116549. return new ConvertActionBindingResult(actionStmts, preventDefaultVar);
  116550. }
  116551. /**
  116552. * @record
  116553. */
  116554. /**
  116555. * @record
  116556. */
  116557. /**
  116558. * @param {?} converterFactory
  116559. * @param {?} ast
  116560. * @return {?}
  116561. */
  116562. function convertPropertyBindingBuiltins(converterFactory, ast) {
  116563. return convertBuiltins(converterFactory, ast);
  116564. }
  116565. var ConvertPropertyBindingResult = /** @class */ (function () {
  116566. function ConvertPropertyBindingResult(stmts, currValExpr) {
  116567. this.stmts = stmts;
  116568. this.currValExpr = currValExpr;
  116569. }
  116570. return ConvertPropertyBindingResult;
  116571. }());
  116572. /** @enum {number} */
  116573. var BindingForm = {
  116574. // The general form of binding expression, supports all expressions.
  116575. General: 0,
  116576. // Try to generate a simple binding (no temporaries or statements)
  116577. // otherise generate a general binding
  116578. TrySimple: 1,
  116579. };
  116580. BindingForm[BindingForm.General] = "General";
  116581. BindingForm[BindingForm.TrySimple] = "TrySimple";
  116582. /**
  116583. * Converts the given expression AST into an executable output AST, assuming the expression
  116584. * is used in property binding. The expression has to be preprocessed via
  116585. * `convertPropertyBindingBuiltins`.
  116586. * @param {?} localResolver
  116587. * @param {?} implicitReceiver
  116588. * @param {?} expressionWithoutBuiltins
  116589. * @param {?} bindingId
  116590. * @param {?} form
  116591. * @return {?}
  116592. */
  116593. function convertPropertyBinding(localResolver, implicitReceiver, expressionWithoutBuiltins, bindingId, form) {
  116594. if (!localResolver) {
  116595. localResolver = new DefaultLocalResolver();
  116596. }
  116597. var /** @type {?} */ currValExpr = createCurrValueExpr(bindingId);
  116598. var /** @type {?} */ stmts = [];
  116599. var /** @type {?} */ visitor = new _AstToIrVisitor(localResolver, implicitReceiver, bindingId);
  116600. var /** @type {?} */ outputExpr = expressionWithoutBuiltins.visit(visitor, _Mode.Expression);
  116601. if (visitor.temporaryCount) {
  116602. for (var /** @type {?} */ i = 0; i < visitor.temporaryCount; i++) {
  116603. stmts.push(temporaryDeclaration(bindingId, i));
  116604. }
  116605. }
  116606. else if (form == BindingForm.TrySimple) {
  116607. return new ConvertPropertyBindingResult([], outputExpr);
  116608. }
  116609. stmts.push(currValExpr.set(outputExpr).toDeclStmt(DYNAMIC_TYPE, [StmtModifier.Final]));
  116610. return new ConvertPropertyBindingResult(stmts, currValExpr);
  116611. }
  116612. /**
  116613. * @param {?} converterFactory
  116614. * @param {?} ast
  116615. * @return {?}
  116616. */
  116617. function convertBuiltins(converterFactory, ast) {
  116618. var /** @type {?} */ visitor = new _BuiltinAstConverter(converterFactory);
  116619. return ast.visit(visitor);
  116620. }
  116621. /**
  116622. * @param {?} bindingId
  116623. * @param {?} temporaryNumber
  116624. * @return {?}
  116625. */
  116626. function temporaryName(bindingId, temporaryNumber) {
  116627. return "tmp_" + bindingId + "_" + temporaryNumber;
  116628. }
  116629. /**
  116630. * @param {?} bindingId
  116631. * @param {?} temporaryNumber
  116632. * @return {?}
  116633. */
  116634. function temporaryDeclaration(bindingId, temporaryNumber) {
  116635. return new DeclareVarStmt(temporaryName(bindingId, temporaryNumber), NULL_EXPR);
  116636. }
  116637. /**
  116638. * @param {?} temporaryCount
  116639. * @param {?} bindingId
  116640. * @param {?} statements
  116641. * @return {?}
  116642. */
  116643. function prependTemporaryDecls(temporaryCount, bindingId, statements) {
  116644. for (var /** @type {?} */ i = temporaryCount - 1; i >= 0; i--) {
  116645. statements.unshift(temporaryDeclaration(bindingId, i));
  116646. }
  116647. }
  116648. /** @enum {number} */
  116649. var _Mode = {
  116650. Statement: 0,
  116651. Expression: 1,
  116652. };
  116653. _Mode[_Mode.Statement] = "Statement";
  116654. _Mode[_Mode.Expression] = "Expression";
  116655. /**
  116656. * @param {?} mode
  116657. * @param {?} ast
  116658. * @return {?}
  116659. */
  116660. function ensureStatementMode(mode, ast) {
  116661. if (mode !== _Mode.Statement) {
  116662. throw new Error("Expected a statement, but saw " + ast);
  116663. }
  116664. }
  116665. /**
  116666. * @param {?} mode
  116667. * @param {?} ast
  116668. * @return {?}
  116669. */
  116670. function ensureExpressionMode(mode, ast) {
  116671. if (mode !== _Mode.Expression) {
  116672. throw new Error("Expected an expression, but saw " + ast);
  116673. }
  116674. }
  116675. /**
  116676. * @param {?} mode
  116677. * @param {?} expr
  116678. * @return {?}
  116679. */
  116680. function convertToStatementIfNeeded(mode, expr) {
  116681. if (mode === _Mode.Statement) {
  116682. return expr.toStmt();
  116683. }
  116684. else {
  116685. return expr;
  116686. }
  116687. }
  116688. var _BuiltinAstConverter = /** @class */ (function (_super) {
  116689. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(_BuiltinAstConverter, _super);
  116690. function _BuiltinAstConverter(_converterFactory) {
  116691. var _this = _super.call(this) || this;
  116692. _this._converterFactory = _converterFactory;
  116693. return _this;
  116694. }
  116695. /**
  116696. * @param {?} ast
  116697. * @param {?} context
  116698. * @return {?}
  116699. */
  116700. _BuiltinAstConverter.prototype.visitPipe = /**
  116701. * @param {?} ast
  116702. * @param {?} context
  116703. * @return {?}
  116704. */
  116705. function (ast, context) {
  116706. var _this = this;
  116707. var /** @type {?} */ args = [ast.exp].concat(ast.args).map(function (ast) { return ast.visit(_this, context); });
  116708. return new BuiltinFunctionCall(ast.span, args, this._converterFactory.createPipeConverter(ast.name, args.length));
  116709. };
  116710. /**
  116711. * @param {?} ast
  116712. * @param {?} context
  116713. * @return {?}
  116714. */
  116715. _BuiltinAstConverter.prototype.visitLiteralArray = /**
  116716. * @param {?} ast
  116717. * @param {?} context
  116718. * @return {?}
  116719. */
  116720. function (ast, context) {
  116721. var _this = this;
  116722. var /** @type {?} */ args = ast.expressions.map(function (ast) { return ast.visit(_this, context); });
  116723. return new BuiltinFunctionCall(ast.span, args, this._converterFactory.createLiteralArrayConverter(ast.expressions.length));
  116724. };
  116725. /**
  116726. * @param {?} ast
  116727. * @param {?} context
  116728. * @return {?}
  116729. */
  116730. _BuiltinAstConverter.prototype.visitLiteralMap = /**
  116731. * @param {?} ast
  116732. * @param {?} context
  116733. * @return {?}
  116734. */
  116735. function (ast, context) {
  116736. var _this = this;
  116737. var /** @type {?} */ args = ast.values.map(function (ast) { return ast.visit(_this, context); });
  116738. return new BuiltinFunctionCall(ast.span, args, this._converterFactory.createLiteralMapConverter(ast.keys));
  116739. };
  116740. return _BuiltinAstConverter;
  116741. }(AstTransformer));
  116742. var _AstToIrVisitor = /** @class */ (function () {
  116743. function _AstToIrVisitor(_localResolver, _implicitReceiver, bindingId) {
  116744. this._localResolver = _localResolver;
  116745. this._implicitReceiver = _implicitReceiver;
  116746. this.bindingId = bindingId;
  116747. this._nodeMap = new Map();
  116748. this._resultMap = new Map();
  116749. this._currentTemporary = 0;
  116750. this.temporaryCount = 0;
  116751. }
  116752. /**
  116753. * @param {?} ast
  116754. * @param {?} mode
  116755. * @return {?}
  116756. */
  116757. _AstToIrVisitor.prototype.visitBinary = /**
  116758. * @param {?} ast
  116759. * @param {?} mode
  116760. * @return {?}
  116761. */
  116762. function (ast, mode) {
  116763. var /** @type {?} */ op;
  116764. switch (ast.operation) {
  116765. case '+':
  116766. op = BinaryOperator.Plus;
  116767. break;
  116768. case '-':
  116769. op = BinaryOperator.Minus;
  116770. break;
  116771. case '*':
  116772. op = BinaryOperator.Multiply;
  116773. break;
  116774. case '/':
  116775. op = BinaryOperator.Divide;
  116776. break;
  116777. case '%':
  116778. op = BinaryOperator.Modulo;
  116779. break;
  116780. case '&&':
  116781. op = BinaryOperator.And;
  116782. break;
  116783. case '||':
  116784. op = BinaryOperator.Or;
  116785. break;
  116786. case '==':
  116787. op = BinaryOperator.Equals;
  116788. break;
  116789. case '!=':
  116790. op = BinaryOperator.NotEquals;
  116791. break;
  116792. case '===':
  116793. op = BinaryOperator.Identical;
  116794. break;
  116795. case '!==':
  116796. op = BinaryOperator.NotIdentical;
  116797. break;
  116798. case '<':
  116799. op = BinaryOperator.Lower;
  116800. break;
  116801. case '>':
  116802. op = BinaryOperator.Bigger;
  116803. break;
  116804. case '<=':
  116805. op = BinaryOperator.LowerEquals;
  116806. break;
  116807. case '>=':
  116808. op = BinaryOperator.BiggerEquals;
  116809. break;
  116810. default:
  116811. throw new Error("Unsupported operation " + ast.operation);
  116812. }
  116813. return convertToStatementIfNeeded(mode, new BinaryOperatorExpr(op, this._visit(ast.left, _Mode.Expression), this._visit(ast.right, _Mode.Expression)));
  116814. };
  116815. /**
  116816. * @param {?} ast
  116817. * @param {?} mode
  116818. * @return {?}
  116819. */
  116820. _AstToIrVisitor.prototype.visitChain = /**
  116821. * @param {?} ast
  116822. * @param {?} mode
  116823. * @return {?}
  116824. */
  116825. function (ast, mode) {
  116826. ensureStatementMode(mode, ast);
  116827. return this.visitAll(ast.expressions, mode);
  116828. };
  116829. /**
  116830. * @param {?} ast
  116831. * @param {?} mode
  116832. * @return {?}
  116833. */
  116834. _AstToIrVisitor.prototype.visitConditional = /**
  116835. * @param {?} ast
  116836. * @param {?} mode
  116837. * @return {?}
  116838. */
  116839. function (ast, mode) {
  116840. var /** @type {?} */ value = this._visit(ast.condition, _Mode.Expression);
  116841. return convertToStatementIfNeeded(mode, value.conditional(this._visit(ast.trueExp, _Mode.Expression), this._visit(ast.falseExp, _Mode.Expression)));
  116842. };
  116843. /**
  116844. * @param {?} ast
  116845. * @param {?} mode
  116846. * @return {?}
  116847. */
  116848. _AstToIrVisitor.prototype.visitPipe = /**
  116849. * @param {?} ast
  116850. * @param {?} mode
  116851. * @return {?}
  116852. */
  116853. function (ast, mode) {
  116854. throw new Error("Illegal state: Pipes should have been converted into functions. Pipe: " + ast.name);
  116855. };
  116856. /**
  116857. * @param {?} ast
  116858. * @param {?} mode
  116859. * @return {?}
  116860. */
  116861. _AstToIrVisitor.prototype.visitFunctionCall = /**
  116862. * @param {?} ast
  116863. * @param {?} mode
  116864. * @return {?}
  116865. */
  116866. function (ast, mode) {
  116867. var /** @type {?} */ convertedArgs = this.visitAll(ast.args, _Mode.Expression);
  116868. var /** @type {?} */ fnResult;
  116869. if (ast instanceof BuiltinFunctionCall) {
  116870. fnResult = ast.converter(convertedArgs);
  116871. }
  116872. else {
  116873. fnResult = this._visit(/** @type {?} */ ((ast.target)), _Mode.Expression).callFn(convertedArgs);
  116874. }
  116875. return convertToStatementIfNeeded(mode, fnResult);
  116876. };
  116877. /**
  116878. * @param {?} ast
  116879. * @param {?} mode
  116880. * @return {?}
  116881. */
  116882. _AstToIrVisitor.prototype.visitImplicitReceiver = /**
  116883. * @param {?} ast
  116884. * @param {?} mode
  116885. * @return {?}
  116886. */
  116887. function (ast, mode) {
  116888. ensureExpressionMode(mode, ast);
  116889. return this._implicitReceiver;
  116890. };
  116891. /**
  116892. * @param {?} ast
  116893. * @param {?} mode
  116894. * @return {?}
  116895. */
  116896. _AstToIrVisitor.prototype.visitInterpolation = /**
  116897. * @param {?} ast
  116898. * @param {?} mode
  116899. * @return {?}
  116900. */
  116901. function (ast, mode) {
  116902. ensureExpressionMode(mode, ast);
  116903. var /** @type {?} */ args = [literal(ast.expressions.length)];
  116904. for (var /** @type {?} */ i = 0; i < ast.strings.length - 1; i++) {
  116905. args.push(literal(ast.strings[i]));
  116906. args.push(this._visit(ast.expressions[i], _Mode.Expression));
  116907. }
  116908. args.push(literal(ast.strings[ast.strings.length - 1]));
  116909. return ast.expressions.length <= 9 ?
  116910. importExpr(Identifiers.inlineInterpolate).callFn(args) :
  116911. importExpr(Identifiers.interpolate).callFn([args[0], literalArr(args.slice(1))]);
  116912. };
  116913. /**
  116914. * @param {?} ast
  116915. * @param {?} mode
  116916. * @return {?}
  116917. */
  116918. _AstToIrVisitor.prototype.visitKeyedRead = /**
  116919. * @param {?} ast
  116920. * @param {?} mode
  116921. * @return {?}
  116922. */
  116923. function (ast, mode) {
  116924. var /** @type {?} */ leftMostSafe = this.leftMostSafeNode(ast);
  116925. if (leftMostSafe) {
  116926. return this.convertSafeAccess(ast, leftMostSafe, mode);
  116927. }
  116928. else {
  116929. return convertToStatementIfNeeded(mode, this._visit(ast.obj, _Mode.Expression).key(this._visit(ast.key, _Mode.Expression)));
  116930. }
  116931. };
  116932. /**
  116933. * @param {?} ast
  116934. * @param {?} mode
  116935. * @return {?}
  116936. */
  116937. _AstToIrVisitor.prototype.visitKeyedWrite = /**
  116938. * @param {?} ast
  116939. * @param {?} mode
  116940. * @return {?}
  116941. */
  116942. function (ast, mode) {
  116943. var /** @type {?} */ obj = this._visit(ast.obj, _Mode.Expression);
  116944. var /** @type {?} */ key = this._visit(ast.key, _Mode.Expression);
  116945. var /** @type {?} */ value = this._visit(ast.value, _Mode.Expression);
  116946. return convertToStatementIfNeeded(mode, obj.key(key).set(value));
  116947. };
  116948. /**
  116949. * @param {?} ast
  116950. * @param {?} mode
  116951. * @return {?}
  116952. */
  116953. _AstToIrVisitor.prototype.visitLiteralArray = /**
  116954. * @param {?} ast
  116955. * @param {?} mode
  116956. * @return {?}
  116957. */
  116958. function (ast, mode) {
  116959. throw new Error("Illegal State: literal arrays should have been converted into functions");
  116960. };
  116961. /**
  116962. * @param {?} ast
  116963. * @param {?} mode
  116964. * @return {?}
  116965. */
  116966. _AstToIrVisitor.prototype.visitLiteralMap = /**
  116967. * @param {?} ast
  116968. * @param {?} mode
  116969. * @return {?}
  116970. */
  116971. function (ast, mode) {
  116972. throw new Error("Illegal State: literal maps should have been converted into functions");
  116973. };
  116974. /**
  116975. * @param {?} ast
  116976. * @param {?} mode
  116977. * @return {?}
  116978. */
  116979. _AstToIrVisitor.prototype.visitLiteralPrimitive = /**
  116980. * @param {?} ast
  116981. * @param {?} mode
  116982. * @return {?}
  116983. */
  116984. function (ast, mode) {
  116985. // For literal values of null, undefined, true, or false allow type inteference
  116986. // to infer the type.
  116987. var /** @type {?} */ type = ast.value === null || ast.value === undefined || ast.value === true || ast.value === true ?
  116988. INFERRED_TYPE :
  116989. undefined;
  116990. return convertToStatementIfNeeded(mode, literal(ast.value, type));
  116991. };
  116992. /**
  116993. * @param {?} name
  116994. * @return {?}
  116995. */
  116996. _AstToIrVisitor.prototype._getLocal = /**
  116997. * @param {?} name
  116998. * @return {?}
  116999. */
  117000. function (name) { return this._localResolver.getLocal(name); };
  117001. /**
  117002. * @param {?} ast
  117003. * @param {?} mode
  117004. * @return {?}
  117005. */
  117006. _AstToIrVisitor.prototype.visitMethodCall = /**
  117007. * @param {?} ast
  117008. * @param {?} mode
  117009. * @return {?}
  117010. */
  117011. function (ast, mode) {
  117012. if (ast.receiver instanceof ImplicitReceiver && ast.name == '$any') {
  117013. var /** @type {?} */ args = /** @type {?} */ (this.visitAll(ast.args, _Mode.Expression));
  117014. if (args.length != 1) {
  117015. throw new Error("Invalid call to $any, expected 1 argument but received " + (args.length || 'none'));
  117016. }
  117017. return (/** @type {?} */ (args[0])).cast(DYNAMIC_TYPE);
  117018. }
  117019. var /** @type {?} */ leftMostSafe = this.leftMostSafeNode(ast);
  117020. if (leftMostSafe) {
  117021. return this.convertSafeAccess(ast, leftMostSafe, mode);
  117022. }
  117023. else {
  117024. var /** @type {?} */ args = this.visitAll(ast.args, _Mode.Expression);
  117025. var /** @type {?} */ result = null;
  117026. var /** @type {?} */ receiver = this._visit(ast.receiver, _Mode.Expression);
  117027. if (receiver === this._implicitReceiver) {
  117028. var /** @type {?} */ varExpr = this._getLocal(ast.name);
  117029. if (varExpr) {
  117030. result = varExpr.callFn(args);
  117031. }
  117032. }
  117033. if (result == null) {
  117034. result = receiver.callMethod(ast.name, args);
  117035. }
  117036. return convertToStatementIfNeeded(mode, result);
  117037. }
  117038. };
  117039. /**
  117040. * @param {?} ast
  117041. * @param {?} mode
  117042. * @return {?}
  117043. */
  117044. _AstToIrVisitor.prototype.visitPrefixNot = /**
  117045. * @param {?} ast
  117046. * @param {?} mode
  117047. * @return {?}
  117048. */
  117049. function (ast, mode) {
  117050. return convertToStatementIfNeeded(mode, not(this._visit(ast.expression, _Mode.Expression)));
  117051. };
  117052. /**
  117053. * @param {?} ast
  117054. * @param {?} mode
  117055. * @return {?}
  117056. */
  117057. _AstToIrVisitor.prototype.visitNonNullAssert = /**
  117058. * @param {?} ast
  117059. * @param {?} mode
  117060. * @return {?}
  117061. */
  117062. function (ast, mode) {
  117063. return convertToStatementIfNeeded(mode, assertNotNull(this._visit(ast.expression, _Mode.Expression)));
  117064. };
  117065. /**
  117066. * @param {?} ast
  117067. * @param {?} mode
  117068. * @return {?}
  117069. */
  117070. _AstToIrVisitor.prototype.visitPropertyRead = /**
  117071. * @param {?} ast
  117072. * @param {?} mode
  117073. * @return {?}
  117074. */
  117075. function (ast, mode) {
  117076. var /** @type {?} */ leftMostSafe = this.leftMostSafeNode(ast);
  117077. if (leftMostSafe) {
  117078. return this.convertSafeAccess(ast, leftMostSafe, mode);
  117079. }
  117080. else {
  117081. var /** @type {?} */ result = null;
  117082. var /** @type {?} */ receiver = this._visit(ast.receiver, _Mode.Expression);
  117083. if (receiver === this._implicitReceiver) {
  117084. result = this._getLocal(ast.name);
  117085. }
  117086. if (result == null) {
  117087. result = receiver.prop(ast.name);
  117088. }
  117089. return convertToStatementIfNeeded(mode, result);
  117090. }
  117091. };
  117092. /**
  117093. * @param {?} ast
  117094. * @param {?} mode
  117095. * @return {?}
  117096. */
  117097. _AstToIrVisitor.prototype.visitPropertyWrite = /**
  117098. * @param {?} ast
  117099. * @param {?} mode
  117100. * @return {?}
  117101. */
  117102. function (ast, mode) {
  117103. var /** @type {?} */ receiver = this._visit(ast.receiver, _Mode.Expression);
  117104. if (receiver === this._implicitReceiver) {
  117105. var /** @type {?} */ varExpr = this._getLocal(ast.name);
  117106. if (varExpr) {
  117107. throw new Error('Cannot assign to a reference or variable!');
  117108. }
  117109. }
  117110. return convertToStatementIfNeeded(mode, receiver.prop(ast.name).set(this._visit(ast.value, _Mode.Expression)));
  117111. };
  117112. /**
  117113. * @param {?} ast
  117114. * @param {?} mode
  117115. * @return {?}
  117116. */
  117117. _AstToIrVisitor.prototype.visitSafePropertyRead = /**
  117118. * @param {?} ast
  117119. * @param {?} mode
  117120. * @return {?}
  117121. */
  117122. function (ast, mode) {
  117123. return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
  117124. };
  117125. /**
  117126. * @param {?} ast
  117127. * @param {?} mode
  117128. * @return {?}
  117129. */
  117130. _AstToIrVisitor.prototype.visitSafeMethodCall = /**
  117131. * @param {?} ast
  117132. * @param {?} mode
  117133. * @return {?}
  117134. */
  117135. function (ast, mode) {
  117136. return this.convertSafeAccess(ast, this.leftMostSafeNode(ast), mode);
  117137. };
  117138. /**
  117139. * @param {?} asts
  117140. * @param {?} mode
  117141. * @return {?}
  117142. */
  117143. _AstToIrVisitor.prototype.visitAll = /**
  117144. * @param {?} asts
  117145. * @param {?} mode
  117146. * @return {?}
  117147. */
  117148. function (asts, mode) {
  117149. var _this = this;
  117150. return asts.map(function (ast) { return _this._visit(ast, mode); });
  117151. };
  117152. /**
  117153. * @param {?} ast
  117154. * @param {?} mode
  117155. * @return {?}
  117156. */
  117157. _AstToIrVisitor.prototype.visitQuote = /**
  117158. * @param {?} ast
  117159. * @param {?} mode
  117160. * @return {?}
  117161. */
  117162. function (ast, mode) {
  117163. throw new Error("Quotes are not supported for evaluation!\n Statement: " + ast.uninterpretedExpression + " located at " + ast.location);
  117164. };
  117165. /**
  117166. * @param {?} ast
  117167. * @param {?} mode
  117168. * @return {?}
  117169. */
  117170. _AstToIrVisitor.prototype._visit = /**
  117171. * @param {?} ast
  117172. * @param {?} mode
  117173. * @return {?}
  117174. */
  117175. function (ast, mode) {
  117176. var /** @type {?} */ result = this._resultMap.get(ast);
  117177. if (result)
  117178. return result;
  117179. return (this._nodeMap.get(ast) || ast).visit(this, mode);
  117180. };
  117181. /**
  117182. * @param {?} ast
  117183. * @param {?} leftMostSafe
  117184. * @param {?} mode
  117185. * @return {?}
  117186. */
  117187. _AstToIrVisitor.prototype.convertSafeAccess = /**
  117188. * @param {?} ast
  117189. * @param {?} leftMostSafe
  117190. * @param {?} mode
  117191. * @return {?}
  117192. */
  117193. function (ast, leftMostSafe, mode) {
  117194. // If the expression contains a safe access node on the left it needs to be converted to
  117195. // an expression that guards the access to the member by checking the receiver for blank. As
  117196. // execution proceeds from left to right, the left most part of the expression must be guarded
  117197. // first but, because member access is left associative, the right side of the expression is at
  117198. // the top of the AST. The desired result requires lifting a copy of the the left part of the
  117199. // expression up to test it for blank before generating the unguarded version.
  117200. // Consider, for example the following expression: a?.b.c?.d.e
  117201. // This results in the ast:
  117202. // .
  117203. // / \
  117204. // ?. e
  117205. // / \
  117206. // . d
  117207. // / \
  117208. // ?. c
  117209. // / \
  117210. // a b
  117211. // The following tree should be generated:
  117212. //
  117213. // /---- ? ----\
  117214. // / | \
  117215. // a /--- ? ---\ null
  117216. // / | \
  117217. // . . null
  117218. // / \ / \
  117219. // . c . e
  117220. // / \ / \
  117221. // a b , d
  117222. // / \
  117223. // . c
  117224. // / \
  117225. // a b
  117226. //
  117227. // Notice that the first guard condition is the left hand of the left most safe access node
  117228. // which comes in as leftMostSafe to this routine.
  117229. var /** @type {?} */ guardedExpression = this._visit(leftMostSafe.receiver, _Mode.Expression);
  117230. var /** @type {?} */ temporary = /** @type {?} */ ((undefined));
  117231. if (this.needsTemporary(leftMostSafe.receiver)) {
  117232. // If the expression has method calls or pipes then we need to save the result into a
  117233. // temporary variable to avoid calling stateful or impure code more than once.
  117234. temporary = this.allocateTemporary();
  117235. // Preserve the result in the temporary variable
  117236. guardedExpression = temporary.set(guardedExpression);
  117237. // Ensure all further references to the guarded expression refer to the temporary instead.
  117238. this._resultMap.set(leftMostSafe.receiver, temporary);
  117239. }
  117240. var /** @type {?} */ condition = guardedExpression.isBlank();
  117241. // Convert the ast to an unguarded access to the receiver's member. The map will substitute
  117242. // leftMostNode with its unguarded version in the call to `this.visit()`.
  117243. if (leftMostSafe instanceof SafeMethodCall) {
  117244. this._nodeMap.set(leftMostSafe, new MethodCall(leftMostSafe.span, leftMostSafe.receiver, leftMostSafe.name, leftMostSafe.args));
  117245. }
  117246. else {
  117247. this._nodeMap.set(leftMostSafe, new PropertyRead(leftMostSafe.span, leftMostSafe.receiver, leftMostSafe.name));
  117248. }
  117249. // Recursively convert the node now without the guarded member access.
  117250. var /** @type {?} */ access = this._visit(ast, _Mode.Expression);
  117251. // Remove the mapping. This is not strictly required as the converter only traverses each node
  117252. // once but is safer if the conversion is changed to traverse the nodes more than once.
  117253. this._nodeMap.delete(leftMostSafe);
  117254. // If we allocated a temporary, release it.
  117255. if (temporary) {
  117256. this.releaseTemporary(temporary);
  117257. }
  117258. // Produce the conditional
  117259. return convertToStatementIfNeeded(mode, condition.conditional(literal(null), access));
  117260. };
  117261. /**
  117262. * @param {?} ast
  117263. * @return {?}
  117264. */
  117265. _AstToIrVisitor.prototype.leftMostSafeNode = /**
  117266. * @param {?} ast
  117267. * @return {?}
  117268. */
  117269. function (ast) {
  117270. var _this = this;
  117271. var /** @type {?} */ visit = function (visitor, ast) {
  117272. return (_this._nodeMap.get(ast) || ast).visit(visitor);
  117273. };
  117274. return ast.visit({
  117275. visitBinary: /**
  117276. * @param {?} ast
  117277. * @return {?}
  117278. */
  117279. function (ast) { return null; },
  117280. visitChain: /**
  117281. * @param {?} ast
  117282. * @return {?}
  117283. */
  117284. function (ast) { return null; },
  117285. visitConditional: /**
  117286. * @param {?} ast
  117287. * @return {?}
  117288. */
  117289. function (ast) { return null; },
  117290. visitFunctionCall: /**
  117291. * @param {?} ast
  117292. * @return {?}
  117293. */
  117294. function (ast) { return null; },
  117295. visitImplicitReceiver: /**
  117296. * @param {?} ast
  117297. * @return {?}
  117298. */
  117299. function (ast) { return null; },
  117300. visitInterpolation: /**
  117301. * @param {?} ast
  117302. * @return {?}
  117303. */
  117304. function (ast) { return null; },
  117305. visitKeyedRead: /**
  117306. * @param {?} ast
  117307. * @return {?}
  117308. */
  117309. function (ast) { return visit(this, ast.obj); },
  117310. visitKeyedWrite: /**
  117311. * @param {?} ast
  117312. * @return {?}
  117313. */
  117314. function (ast) { return null; },
  117315. visitLiteralArray: /**
  117316. * @param {?} ast
  117317. * @return {?}
  117318. */
  117319. function (ast) { return null; },
  117320. visitLiteralMap: /**
  117321. * @param {?} ast
  117322. * @return {?}
  117323. */
  117324. function (ast) { return null; },
  117325. visitLiteralPrimitive: /**
  117326. * @param {?} ast
  117327. * @return {?}
  117328. */
  117329. function (ast) { return null; },
  117330. visitMethodCall: /**
  117331. * @param {?} ast
  117332. * @return {?}
  117333. */
  117334. function (ast) { return visit(this, ast.receiver); },
  117335. visitPipe: /**
  117336. * @param {?} ast
  117337. * @return {?}
  117338. */
  117339. function (ast) { return null; },
  117340. visitPrefixNot: /**
  117341. * @param {?} ast
  117342. * @return {?}
  117343. */
  117344. function (ast) { return null; },
  117345. visitNonNullAssert: /**
  117346. * @param {?} ast
  117347. * @return {?}
  117348. */
  117349. function (ast) { return null; },
  117350. visitPropertyRead: /**
  117351. * @param {?} ast
  117352. * @return {?}
  117353. */
  117354. function (ast) { return visit(this, ast.receiver); },
  117355. visitPropertyWrite: /**
  117356. * @param {?} ast
  117357. * @return {?}
  117358. */
  117359. function (ast) { return null; },
  117360. visitQuote: /**
  117361. * @param {?} ast
  117362. * @return {?}
  117363. */
  117364. function (ast) { return null; },
  117365. visitSafeMethodCall: /**
  117366. * @param {?} ast
  117367. * @return {?}
  117368. */
  117369. function (ast) { return visit(this, ast.receiver) || ast; },
  117370. visitSafePropertyRead: /**
  117371. * @param {?} ast
  117372. * @return {?}
  117373. */
  117374. function (ast) {
  117375. return visit(this, ast.receiver) || ast;
  117376. }
  117377. });
  117378. };
  117379. /**
  117380. * @param {?} ast
  117381. * @return {?}
  117382. */
  117383. _AstToIrVisitor.prototype.needsTemporary = /**
  117384. * @param {?} ast
  117385. * @return {?}
  117386. */
  117387. function (ast) {
  117388. var _this = this;
  117389. var /** @type {?} */ visit = function (visitor, ast) {
  117390. return ast && (_this._nodeMap.get(ast) || ast).visit(visitor);
  117391. };
  117392. var /** @type {?} */ visitSome = function (visitor, ast) {
  117393. return ast.some(function (ast) { return visit(visitor, ast); });
  117394. };
  117395. return ast.visit({
  117396. visitBinary: /**
  117397. * @param {?} ast
  117398. * @return {?}
  117399. */
  117400. function (ast) { return visit(this, ast.left) || visit(this, ast.right); },
  117401. visitChain: /**
  117402. * @param {?} ast
  117403. * @return {?}
  117404. */
  117405. function (ast) { return false; },
  117406. visitConditional: /**
  117407. * @param {?} ast
  117408. * @return {?}
  117409. */
  117410. function (ast) {
  117411. return visit(this, ast.condition) || visit(this, ast.trueExp) ||
  117412. visit(this, ast.falseExp);
  117413. },
  117414. visitFunctionCall: /**
  117415. * @param {?} ast
  117416. * @return {?}
  117417. */
  117418. function (ast) { return true; },
  117419. visitImplicitReceiver: /**
  117420. * @param {?} ast
  117421. * @return {?}
  117422. */
  117423. function (ast) { return false; },
  117424. visitInterpolation: /**
  117425. * @param {?} ast
  117426. * @return {?}
  117427. */
  117428. function (ast) { return visitSome(this, ast.expressions); },
  117429. visitKeyedRead: /**
  117430. * @param {?} ast
  117431. * @return {?}
  117432. */
  117433. function (ast) { return false; },
  117434. visitKeyedWrite: /**
  117435. * @param {?} ast
  117436. * @return {?}
  117437. */
  117438. function (ast) { return false; },
  117439. visitLiteralArray: /**
  117440. * @param {?} ast
  117441. * @return {?}
  117442. */
  117443. function (ast) { return true; },
  117444. visitLiteralMap: /**
  117445. * @param {?} ast
  117446. * @return {?}
  117447. */
  117448. function (ast) { return true; },
  117449. visitLiteralPrimitive: /**
  117450. * @param {?} ast
  117451. * @return {?}
  117452. */
  117453. function (ast) { return false; },
  117454. visitMethodCall: /**
  117455. * @param {?} ast
  117456. * @return {?}
  117457. */
  117458. function (ast) { return true; },
  117459. visitPipe: /**
  117460. * @param {?} ast
  117461. * @return {?}
  117462. */
  117463. function (ast) { return true; },
  117464. visitPrefixNot: /**
  117465. * @param {?} ast
  117466. * @return {?}
  117467. */
  117468. function (ast) { return visit(this, ast.expression); },
  117469. visitNonNullAssert: /**
  117470. * @param {?} ast
  117471. * @return {?}
  117472. */
  117473. function (ast) { return visit(this, ast.expression); },
  117474. visitPropertyRead: /**
  117475. * @param {?} ast
  117476. * @return {?}
  117477. */
  117478. function (ast) { return false; },
  117479. visitPropertyWrite: /**
  117480. * @param {?} ast
  117481. * @return {?}
  117482. */
  117483. function (ast) { return false; },
  117484. visitQuote: /**
  117485. * @param {?} ast
  117486. * @return {?}
  117487. */
  117488. function (ast) { return false; },
  117489. visitSafeMethodCall: /**
  117490. * @param {?} ast
  117491. * @return {?}
  117492. */
  117493. function (ast) { return true; },
  117494. visitSafePropertyRead: /**
  117495. * @param {?} ast
  117496. * @return {?}
  117497. */
  117498. function (ast) { return false; }
  117499. });
  117500. };
  117501. /**
  117502. * @return {?}
  117503. */
  117504. _AstToIrVisitor.prototype.allocateTemporary = /**
  117505. * @return {?}
  117506. */
  117507. function () {
  117508. var /** @type {?} */ tempNumber = this._currentTemporary++;
  117509. this.temporaryCount = Math.max(this._currentTemporary, this.temporaryCount);
  117510. return new ReadVarExpr(temporaryName(this.bindingId, tempNumber));
  117511. };
  117512. /**
  117513. * @param {?} temporary
  117514. * @return {?}
  117515. */
  117516. _AstToIrVisitor.prototype.releaseTemporary = /**
  117517. * @param {?} temporary
  117518. * @return {?}
  117519. */
  117520. function (temporary) {
  117521. this._currentTemporary--;
  117522. if (temporary.name != temporaryName(this.bindingId, this._currentTemporary)) {
  117523. throw new Error("Temporary " + temporary.name + " released out of order");
  117524. }
  117525. };
  117526. return _AstToIrVisitor;
  117527. }());
  117528. /**
  117529. * @param {?} arg
  117530. * @param {?} output
  117531. * @return {?}
  117532. */
  117533. function flattenStatements(arg, output) {
  117534. if (Array.isArray(arg)) {
  117535. (/** @type {?} */ (arg)).forEach(function (entry) { return flattenStatements(entry, output); });
  117536. }
  117537. else {
  117538. output.push(arg);
  117539. }
  117540. }
  117541. var DefaultLocalResolver = /** @class */ (function () {
  117542. function DefaultLocalResolver() {
  117543. }
  117544. /**
  117545. * @param {?} name
  117546. * @return {?}
  117547. */
  117548. DefaultLocalResolver.prototype.getLocal = /**
  117549. * @param {?} name
  117550. * @return {?}
  117551. */
  117552. function (name) {
  117553. if (name === EventHandlerVars.event.name) {
  117554. return EventHandlerVars.event;
  117555. }
  117556. return null;
  117557. };
  117558. return DefaultLocalResolver;
  117559. }());
  117560. /**
  117561. * @param {?} bindingId
  117562. * @return {?}
  117563. */
  117564. function createCurrValueExpr(bindingId) {
  117565. return variable("currVal_" + bindingId); // fix syntax highlighting: `
  117566. }
  117567. /**
  117568. * @param {?} bindingId
  117569. * @return {?}
  117570. */
  117571. function createPreventDefaultVar(bindingId) {
  117572. return variable("pd_" + bindingId);
  117573. }
  117574. /**
  117575. * @param {?} stmt
  117576. * @return {?}
  117577. */
  117578. function convertStmtIntoExpression(stmt) {
  117579. if (stmt instanceof ExpressionStatement) {
  117580. return stmt.expr;
  117581. }
  117582. else if (stmt instanceof ReturnStatement) {
  117583. return stmt.value;
  117584. }
  117585. return null;
  117586. }
  117587. var BuiltinFunctionCall = /** @class */ (function (_super) {
  117588. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(BuiltinFunctionCall, _super);
  117589. function BuiltinFunctionCall(span, args, converter) {
  117590. var _this = _super.call(this, span, null, args) || this;
  117591. _this.args = args;
  117592. _this.converter = converter;
  117593. return _this;
  117594. }
  117595. return BuiltinFunctionCall;
  117596. }(FunctionCall));
  117597. /**
  117598. * @fileoverview added by tsickle
  117599. * @suppress {checkTypes} checked by tsc
  117600. */
  117601. /**
  117602. * @license
  117603. * Copyright Google Inc. All Rights Reserved.
  117604. *
  117605. * Use of this source code is governed by an MIT-style license that can be
  117606. * found in the LICENSE file at https://angular.io/license
  117607. */
  117608. /**
  117609. * Generates code that is used to type check templates.
  117610. */
  117611. var TypeCheckCompiler = /** @class */ (function () {
  117612. function TypeCheckCompiler(options, reflector) {
  117613. this.options = options;
  117614. this.reflector = reflector;
  117615. }
  117616. /**
  117617. * Important notes:
  117618. * - This must not produce new `import` statements, but only refer to types outside
  117619. * of the file via the variables provided via externalReferenceVars.
  117620. * This allows Typescript to reuse the old program's structure as no imports have changed.
  117621. * - This must not produce any exports, as this would pollute the .d.ts file
  117622. * and also violate the point above.
  117623. */
  117624. /**
  117625. * Important notes:
  117626. * - This must not produce new `import` statements, but only refer to types outside
  117627. * of the file via the variables provided via externalReferenceVars.
  117628. * This allows Typescript to reuse the old program's structure as no imports have changed.
  117629. * - This must not produce any exports, as this would pollute the .d.ts file
  117630. * and also violate the point above.
  117631. * @param {?} componentId
  117632. * @param {?} component
  117633. * @param {?} template
  117634. * @param {?} usedPipes
  117635. * @param {?} externalReferenceVars
  117636. * @param {?} ctx
  117637. * @return {?}
  117638. */
  117639. TypeCheckCompiler.prototype.compileComponent = /**
  117640. * Important notes:
  117641. * - This must not produce new `import` statements, but only refer to types outside
  117642. * of the file via the variables provided via externalReferenceVars.
  117643. * This allows Typescript to reuse the old program's structure as no imports have changed.
  117644. * - This must not produce any exports, as this would pollute the .d.ts file
  117645. * and also violate the point above.
  117646. * @param {?} componentId
  117647. * @param {?} component
  117648. * @param {?} template
  117649. * @param {?} usedPipes
  117650. * @param {?} externalReferenceVars
  117651. * @param {?} ctx
  117652. * @return {?}
  117653. */
  117654. function (componentId, component, template, usedPipes, externalReferenceVars, ctx) {
  117655. var _this = this;
  117656. var /** @type {?} */ pipes = new Map();
  117657. usedPipes.forEach(function (p) { return pipes.set(p.name, p.type.reference); });
  117658. var /** @type {?} */ embeddedViewCount = 0;
  117659. var /** @type {?} */ viewBuilderFactory = function (parent, guards) {
  117660. var /** @type {?} */ embeddedViewIndex = embeddedViewCount++;
  117661. return new ViewBuilder(_this.options, _this.reflector, externalReferenceVars, parent, component.type.reference, component.isHost, embeddedViewIndex, pipes, guards, ctx, viewBuilderFactory);
  117662. };
  117663. var /** @type {?} */ visitor = viewBuilderFactory(null, []);
  117664. visitor.visitAll([], template);
  117665. return visitor.build(componentId);
  117666. };
  117667. return TypeCheckCompiler;
  117668. }());
  117669. var DYNAMIC_VAR_NAME = '_any';
  117670. var TypeCheckLocalResolver = /** @class */ (function () {
  117671. function TypeCheckLocalResolver() {
  117672. }
  117673. /**
  117674. * @param {?} name
  117675. * @return {?}
  117676. */
  117677. TypeCheckLocalResolver.prototype.getLocal = /**
  117678. * @param {?} name
  117679. * @return {?}
  117680. */
  117681. function (name) {
  117682. if (name === EventHandlerVars.event.name) {
  117683. // References to the event should not be type-checked.
  117684. // TODO(chuckj): determine a better type for the event.
  117685. return variable(DYNAMIC_VAR_NAME);
  117686. }
  117687. return null;
  117688. };
  117689. return TypeCheckLocalResolver;
  117690. }());
  117691. var defaultResolver = new TypeCheckLocalResolver();
  117692. var ViewBuilder = /** @class */ (function () {
  117693. function ViewBuilder(options, reflector, externalReferenceVars, parent, component, isHostComponent, embeddedViewIndex, pipes, guards, ctx, viewBuilderFactory) {
  117694. this.options = options;
  117695. this.reflector = reflector;
  117696. this.externalReferenceVars = externalReferenceVars;
  117697. this.parent = parent;
  117698. this.component = component;
  117699. this.isHostComponent = isHostComponent;
  117700. this.embeddedViewIndex = embeddedViewIndex;
  117701. this.pipes = pipes;
  117702. this.guards = guards;
  117703. this.ctx = ctx;
  117704. this.viewBuilderFactory = viewBuilderFactory;
  117705. this.refOutputVars = new Map();
  117706. this.variables = [];
  117707. this.children = [];
  117708. this.updates = [];
  117709. this.actions = [];
  117710. }
  117711. /**
  117712. * @param {?} type
  117713. * @return {?}
  117714. */
  117715. ViewBuilder.prototype.getOutputVar = /**
  117716. * @param {?} type
  117717. * @return {?}
  117718. */
  117719. function (type) {
  117720. var /** @type {?} */ varName;
  117721. if (type === this.component && this.isHostComponent) {
  117722. varName = DYNAMIC_VAR_NAME;
  117723. }
  117724. else if (type instanceof StaticSymbol) {
  117725. varName = this.externalReferenceVars.get(type);
  117726. }
  117727. else {
  117728. varName = DYNAMIC_VAR_NAME;
  117729. }
  117730. if (!varName) {
  117731. throw new Error("Illegal State: referring to a type without a variable " + JSON.stringify(type));
  117732. }
  117733. return varName;
  117734. };
  117735. /**
  117736. * @param {?} ast
  117737. * @return {?}
  117738. */
  117739. ViewBuilder.prototype.getTypeGuardExpressions = /**
  117740. * @param {?} ast
  117741. * @return {?}
  117742. */
  117743. function (ast) {
  117744. var /** @type {?} */ result = this.guards.slice();
  117745. for (var _i = 0, _a = ast.directives; _i < _a.length; _i++) {
  117746. var directive = _a[_i];
  117747. for (var _b = 0, _c = directive.inputs; _b < _c.length; _b++) {
  117748. var input = _c[_b];
  117749. var /** @type {?} */ guard = directive.directive.guards[input.directiveName];
  117750. if (guard) {
  117751. var /** @type {?} */ useIf = guard === 'UseIf';
  117752. result.push({
  117753. guard: guard,
  117754. useIf: useIf,
  117755. expression: /** @type {?} */ ({ context: this.component, value: input.value })
  117756. });
  117757. }
  117758. }
  117759. }
  117760. return result;
  117761. };
  117762. /**
  117763. * @param {?} variables
  117764. * @param {?} astNodes
  117765. * @return {?}
  117766. */
  117767. ViewBuilder.prototype.visitAll = /**
  117768. * @param {?} variables
  117769. * @param {?} astNodes
  117770. * @return {?}
  117771. */
  117772. function (variables, astNodes) {
  117773. this.variables = variables;
  117774. templateVisitAll(this, astNodes);
  117775. };
  117776. /**
  117777. * @param {?} componentId
  117778. * @param {?=} targetStatements
  117779. * @return {?}
  117780. */
  117781. ViewBuilder.prototype.build = /**
  117782. * @param {?} componentId
  117783. * @param {?=} targetStatements
  117784. * @return {?}
  117785. */
  117786. function (componentId, targetStatements) {
  117787. var _this = this;
  117788. if (targetStatements === void 0) { targetStatements = []; }
  117789. this.children.forEach(function (child) { return child.build(componentId, targetStatements); });
  117790. var /** @type {?} */ viewStmts = [variable(DYNAMIC_VAR_NAME).set(NULL_EXPR).toDeclStmt(DYNAMIC_TYPE)];
  117791. var /** @type {?} */ bindingCount = 0;
  117792. this.updates.forEach(function (expression) {
  117793. var _a = _this.preprocessUpdateExpression(expression), sourceSpan = _a.sourceSpan, context = _a.context, value = _a.value;
  117794. var /** @type {?} */ bindingId = "" + bindingCount++;
  117795. var /** @type {?} */ nameResolver = context === _this.component ? _this : defaultResolver;
  117796. var _b = convertPropertyBinding(nameResolver, variable(_this.getOutputVar(context)), value, bindingId, BindingForm.General), stmts = _b.stmts, currValExpr = _b.currValExpr;
  117797. stmts.push(new ExpressionStatement(currValExpr));
  117798. viewStmts.push.apply(viewStmts, stmts.map(function (stmt) { return applySourceSpanToStatementIfNeeded(stmt, sourceSpan); }));
  117799. });
  117800. this.actions.forEach(function (_a) {
  117801. var sourceSpan = _a.sourceSpan, context = _a.context, value = _a.value;
  117802. var /** @type {?} */ bindingId = "" + bindingCount++;
  117803. var /** @type {?} */ nameResolver = context === _this.component ? _this : defaultResolver;
  117804. var stmts = convertActionBinding(nameResolver, variable(_this.getOutputVar(context)), value, bindingId).stmts;
  117805. viewStmts.push.apply(viewStmts, stmts.map(function (stmt) { return applySourceSpanToStatementIfNeeded(stmt, sourceSpan); }));
  117806. });
  117807. if (this.guards.length) {
  117808. var /** @type {?} */ guardExpression = undefined;
  117809. for (var _i = 0, _a = this.guards; _i < _a.length; _i++) {
  117810. var guard = _a[_i];
  117811. var _b = this.preprocessUpdateExpression(guard.expression), context = _b.context, value = _b.value;
  117812. var /** @type {?} */ bindingId = "" + bindingCount++;
  117813. var /** @type {?} */ nameResolver = context === this.component ? this : defaultResolver;
  117814. // We only support support simple expressions and ignore others as they
  117815. // are unlikely to affect type narrowing.
  117816. var _c = convertPropertyBinding(nameResolver, variable(this.getOutputVar(context)), value, bindingId, BindingForm.TrySimple), stmts = _c.stmts, currValExpr = _c.currValExpr;
  117817. if (stmts.length == 0) {
  117818. var /** @type {?} */ guardClause = guard.useIf ? currValExpr : this.ctx.importExpr(guard.guard).callFn([currValExpr]);
  117819. guardExpression = guardExpression ? guardExpression.and(guardClause) : guardClause;
  117820. }
  117821. }
  117822. if (guardExpression) {
  117823. viewStmts = [new IfStmt(guardExpression, viewStmts)];
  117824. }
  117825. }
  117826. var /** @type {?} */ viewName = "_View_" + componentId + "_" + this.embeddedViewIndex;
  117827. var /** @type {?} */ viewFactory = new DeclareFunctionStmt(viewName, [], viewStmts);
  117828. targetStatements.push(viewFactory);
  117829. return targetStatements;
  117830. };
  117831. /**
  117832. * @param {?} ast
  117833. * @param {?} context
  117834. * @return {?}
  117835. */
  117836. ViewBuilder.prototype.visitBoundText = /**
  117837. * @param {?} ast
  117838. * @param {?} context
  117839. * @return {?}
  117840. */
  117841. function (ast, context) {
  117842. var _this = this;
  117843. var /** @type {?} */ astWithSource = /** @type {?} */ (ast.value);
  117844. var /** @type {?} */ inter = /** @type {?} */ (astWithSource.ast);
  117845. inter.expressions.forEach(function (expr) {
  117846. return _this.updates.push({ context: _this.component, value: expr, sourceSpan: ast.sourceSpan });
  117847. });
  117848. };
  117849. /**
  117850. * @param {?} ast
  117851. * @param {?} context
  117852. * @return {?}
  117853. */
  117854. ViewBuilder.prototype.visitEmbeddedTemplate = /**
  117855. * @param {?} ast
  117856. * @param {?} context
  117857. * @return {?}
  117858. */
  117859. function (ast, context) {
  117860. this.visitElementOrTemplate(ast);
  117861. // Note: The old view compiler used to use an `any` type
  117862. // for the context in any embedded view.
  117863. // We keep this behaivor behind a flag for now.
  117864. if (this.options.fullTemplateTypeCheck) {
  117865. // Find any applicable type guards. For example, NgIf has a type guard on ngIf
  117866. // (see NgIf.ngIfTypeGuard) that can be used to indicate that a template is only
  117867. // stamped out if ngIf is truthy so any bindings in the template can assume that,
  117868. // if a nullable type is used for ngIf, that expression is not null or undefined.
  117869. var /** @type {?} */ guards = this.getTypeGuardExpressions(ast);
  117870. var /** @type {?} */ childVisitor = this.viewBuilderFactory(this, guards);
  117871. this.children.push(childVisitor);
  117872. childVisitor.visitAll(ast.variables, ast.children);
  117873. }
  117874. };
  117875. /**
  117876. * @param {?} ast
  117877. * @param {?} context
  117878. * @return {?}
  117879. */
  117880. ViewBuilder.prototype.visitElement = /**
  117881. * @param {?} ast
  117882. * @param {?} context
  117883. * @return {?}
  117884. */
  117885. function (ast, context) {
  117886. var _this = this;
  117887. this.visitElementOrTemplate(ast);
  117888. var /** @type {?} */ inputDefs = [];
  117889. var /** @type {?} */ updateRendererExpressions = [];
  117890. var /** @type {?} */ outputDefs = [];
  117891. ast.inputs.forEach(function (inputAst) {
  117892. _this.updates.push({ context: _this.component, value: inputAst.value, sourceSpan: inputAst.sourceSpan });
  117893. });
  117894. templateVisitAll(this, ast.children);
  117895. };
  117896. /**
  117897. * @param {?} ast
  117898. * @return {?}
  117899. */
  117900. ViewBuilder.prototype.visitElementOrTemplate = /**
  117901. * @param {?} ast
  117902. * @return {?}
  117903. */
  117904. function (ast) {
  117905. var _this = this;
  117906. ast.directives.forEach(function (dirAst) { _this.visitDirective(dirAst); });
  117907. ast.references.forEach(function (ref) {
  117908. var /** @type {?} */ outputVarType = /** @type {?} */ ((null));
  117909. // Note: The old view compiler used to use an `any` type
  117910. // for directives exposed via `exportAs`.
  117911. // We keep this behaivor behind a flag for now.
  117912. if (ref.value && ref.value.identifier && _this.options.fullTemplateTypeCheck) {
  117913. outputVarType = ref.value.identifier.reference;
  117914. }
  117915. else {
  117916. outputVarType = BuiltinTypeName.Dynamic;
  117917. }
  117918. _this.refOutputVars.set(ref.name, outputVarType);
  117919. });
  117920. ast.outputs.forEach(function (outputAst) {
  117921. _this.actions.push({ context: _this.component, value: outputAst.handler, sourceSpan: outputAst.sourceSpan });
  117922. });
  117923. };
  117924. /**
  117925. * @param {?} dirAst
  117926. * @return {?}
  117927. */
  117928. ViewBuilder.prototype.visitDirective = /**
  117929. * @param {?} dirAst
  117930. * @return {?}
  117931. */
  117932. function (dirAst) {
  117933. var _this = this;
  117934. var /** @type {?} */ dirType = dirAst.directive.type.reference;
  117935. dirAst.inputs.forEach(function (input) {
  117936. return _this.updates.push({ context: _this.component, value: input.value, sourceSpan: input.sourceSpan });
  117937. });
  117938. // Note: The old view compiler used to use an `any` type
  117939. // for expressions in host properties / events.
  117940. // We keep this behaivor behind a flag for now.
  117941. if (this.options.fullTemplateTypeCheck) {
  117942. dirAst.hostProperties.forEach(function (inputAst) {
  117943. return _this.updates.push({ context: dirType, value: inputAst.value, sourceSpan: inputAst.sourceSpan });
  117944. });
  117945. dirAst.hostEvents.forEach(function (hostEventAst) {
  117946. return _this.actions.push({
  117947. context: dirType,
  117948. value: hostEventAst.handler,
  117949. sourceSpan: hostEventAst.sourceSpan
  117950. });
  117951. });
  117952. }
  117953. };
  117954. /**
  117955. * @param {?} name
  117956. * @return {?}
  117957. */
  117958. ViewBuilder.prototype.getLocal = /**
  117959. * @param {?} name
  117960. * @return {?}
  117961. */
  117962. function (name) {
  117963. if (name == EventHandlerVars.event.name) {
  117964. return variable(this.getOutputVar(BuiltinTypeName.Dynamic));
  117965. }
  117966. for (var /** @type {?} */ currBuilder = this; currBuilder; currBuilder = currBuilder.parent) {
  117967. var /** @type {?} */ outputVarType = void 0;
  117968. // check references
  117969. outputVarType = currBuilder.refOutputVars.get(name);
  117970. if (outputVarType == null) {
  117971. // check variables
  117972. var /** @type {?} */ varAst = currBuilder.variables.find(function (varAst) { return varAst.name === name; });
  117973. if (varAst) {
  117974. outputVarType = BuiltinTypeName.Dynamic;
  117975. }
  117976. }
  117977. if (outputVarType != null) {
  117978. return variable(this.getOutputVar(outputVarType));
  117979. }
  117980. }
  117981. return null;
  117982. };
  117983. /**
  117984. * @param {?} name
  117985. * @return {?}
  117986. */
  117987. ViewBuilder.prototype.pipeOutputVar = /**
  117988. * @param {?} name
  117989. * @return {?}
  117990. */
  117991. function (name) {
  117992. var /** @type {?} */ pipe = this.pipes.get(name);
  117993. if (!pipe) {
  117994. throw new Error("Illegal State: Could not find pipe " + name + " in template of " + this.component);
  117995. }
  117996. return this.getOutputVar(pipe);
  117997. };
  117998. /**
  117999. * @param {?} expression
  118000. * @return {?}
  118001. */
  118002. ViewBuilder.prototype.preprocessUpdateExpression = /**
  118003. * @param {?} expression
  118004. * @return {?}
  118005. */
  118006. function (expression) {
  118007. var _this = this;
  118008. return {
  118009. sourceSpan: expression.sourceSpan,
  118010. context: expression.context,
  118011. value: convertPropertyBindingBuiltins({
  118012. createLiteralArrayConverter: function (argCount) {
  118013. return function (args) {
  118014. var /** @type {?} */ arr = literalArr(args);
  118015. // Note: The old view compiler used to use an `any` type
  118016. // for arrays.
  118017. return _this.options.fullTemplateTypeCheck ? arr : arr.cast(DYNAMIC_TYPE);
  118018. };
  118019. },
  118020. createLiteralMapConverter: function (keys) {
  118021. return function (values) {
  118022. var /** @type {?} */ entries = keys.map(function (k, i) {
  118023. return ({
  118024. key: k.key,
  118025. value: values[i],
  118026. quoted: k.quoted,
  118027. });
  118028. });
  118029. var /** @type {?} */ map = literalMap(entries);
  118030. // Note: The old view compiler used to use an `any` type
  118031. // for maps.
  118032. return _this.options.fullTemplateTypeCheck ? map : map.cast(DYNAMIC_TYPE);
  118033. };
  118034. },
  118035. createPipeConverter: function (name, argCount) {
  118036. return function (args) {
  118037. // Note: The old view compiler used to use an `any` type
  118038. // for pipes.
  118039. var /** @type {?} */ pipeExpr = _this.options.fullTemplateTypeCheck ?
  118040. variable(_this.pipeOutputVar(name)) :
  118041. variable(_this.getOutputVar(BuiltinTypeName.Dynamic));
  118042. return pipeExpr.callMethod('transform', args);
  118043. };
  118044. },
  118045. }, expression.value)
  118046. };
  118047. };
  118048. /**
  118049. * @param {?} ast
  118050. * @param {?} context
  118051. * @return {?}
  118052. */
  118053. ViewBuilder.prototype.visitNgContent = /**
  118054. * @param {?} ast
  118055. * @param {?} context
  118056. * @return {?}
  118057. */
  118058. function (ast, context) { };
  118059. /**
  118060. * @param {?} ast
  118061. * @param {?} context
  118062. * @return {?}
  118063. */
  118064. ViewBuilder.prototype.visitText = /**
  118065. * @param {?} ast
  118066. * @param {?} context
  118067. * @return {?}
  118068. */
  118069. function (ast, context) { };
  118070. /**
  118071. * @param {?} ast
  118072. * @param {?} context
  118073. * @return {?}
  118074. */
  118075. ViewBuilder.prototype.visitDirectiveProperty = /**
  118076. * @param {?} ast
  118077. * @param {?} context
  118078. * @return {?}
  118079. */
  118080. function (ast, context) { };
  118081. /**
  118082. * @param {?} ast
  118083. * @param {?} context
  118084. * @return {?}
  118085. */
  118086. ViewBuilder.prototype.visitReference = /**
  118087. * @param {?} ast
  118088. * @param {?} context
  118089. * @return {?}
  118090. */
  118091. function (ast, context) { };
  118092. /**
  118093. * @param {?} ast
  118094. * @param {?} context
  118095. * @return {?}
  118096. */
  118097. ViewBuilder.prototype.visitVariable = /**
  118098. * @param {?} ast
  118099. * @param {?} context
  118100. * @return {?}
  118101. */
  118102. function (ast, context) { };
  118103. /**
  118104. * @param {?} ast
  118105. * @param {?} context
  118106. * @return {?}
  118107. */
  118108. ViewBuilder.prototype.visitEvent = /**
  118109. * @param {?} ast
  118110. * @param {?} context
  118111. * @return {?}
  118112. */
  118113. function (ast, context) { };
  118114. /**
  118115. * @param {?} ast
  118116. * @param {?} context
  118117. * @return {?}
  118118. */
  118119. ViewBuilder.prototype.visitElementProperty = /**
  118120. * @param {?} ast
  118121. * @param {?} context
  118122. * @return {?}
  118123. */
  118124. function (ast, context) { };
  118125. /**
  118126. * @param {?} ast
  118127. * @param {?} context
  118128. * @return {?}
  118129. */
  118130. ViewBuilder.prototype.visitAttr = /**
  118131. * @param {?} ast
  118132. * @param {?} context
  118133. * @return {?}
  118134. */
  118135. function (ast, context) { };
  118136. return ViewBuilder;
  118137. }());
  118138. /**
  118139. * @fileoverview added by tsickle
  118140. * @suppress {checkTypes} checked by tsc
  118141. */
  118142. /**
  118143. * @license
  118144. * Copyright Google Inc. All Rights Reserved.
  118145. *
  118146. * Use of this source code is governed by an MIT-style license that can be
  118147. * found in the LICENSE file at https://angular.io/license
  118148. */
  118149. var CLASS_ATTR$1 = 'class';
  118150. var STYLE_ATTR = 'style';
  118151. var IMPLICIT_TEMPLATE_VAR = '\$implicit';
  118152. var ViewCompileResult = /** @class */ (function () {
  118153. function ViewCompileResult(viewClassVar, rendererTypeVar) {
  118154. this.viewClassVar = viewClassVar;
  118155. this.rendererTypeVar = rendererTypeVar;
  118156. }
  118157. return ViewCompileResult;
  118158. }());
  118159. var ViewCompiler = /** @class */ (function () {
  118160. function ViewCompiler(_reflector) {
  118161. this._reflector = _reflector;
  118162. }
  118163. /**
  118164. * @param {?} outputCtx
  118165. * @param {?} component
  118166. * @param {?} template
  118167. * @param {?} styles
  118168. * @param {?} usedPipes
  118169. * @return {?}
  118170. */
  118171. ViewCompiler.prototype.compileComponent = /**
  118172. * @param {?} outputCtx
  118173. * @param {?} component
  118174. * @param {?} template
  118175. * @param {?} styles
  118176. * @param {?} usedPipes
  118177. * @return {?}
  118178. */
  118179. function (outputCtx, component, template, styles, usedPipes) {
  118180. var _this = this;
  118181. var /** @type {?} */ embeddedViewCount = 0;
  118182. var /** @type {?} */ staticQueryIds = findStaticQueryIds(template);
  118183. var /** @type {?} */ renderComponentVarName = /** @type {?} */ ((undefined));
  118184. if (!component.isHost) {
  118185. var /** @type {?} */ template_1 = /** @type {?} */ ((component.template));
  118186. var /** @type {?} */ customRenderData = [];
  118187. if (template_1.animations && template_1.animations.length) {
  118188. customRenderData.push(new LiteralMapEntry('animation', convertValueToOutputAst(outputCtx, template_1.animations), true));
  118189. }
  118190. var /** @type {?} */ renderComponentVar = variable(rendererTypeName(component.type.reference));
  118191. renderComponentVarName = /** @type {?} */ ((renderComponentVar.name));
  118192. outputCtx.statements.push(renderComponentVar
  118193. .set(importExpr(Identifiers.createRendererType2).callFn([new LiteralMapExpr([
  118194. new LiteralMapEntry('encapsulation', literal(template_1.encapsulation), false),
  118195. new LiteralMapEntry('styles', styles, false),
  118196. new LiteralMapEntry('data', new LiteralMapExpr(customRenderData), false)
  118197. ])]))
  118198. .toDeclStmt(importType(Identifiers.RendererType2), [StmtModifier.Final, StmtModifier.Exported]));
  118199. }
  118200. var /** @type {?} */ viewBuilderFactory = function (parent) {
  118201. var /** @type {?} */ embeddedViewIndex = embeddedViewCount++;
  118202. return new ViewBuilder$1(_this._reflector, outputCtx, parent, component, embeddedViewIndex, usedPipes, staticQueryIds, viewBuilderFactory);
  118203. };
  118204. var /** @type {?} */ visitor = viewBuilderFactory(null);
  118205. visitor.visitAll([], template);
  118206. (_a = outputCtx.statements).push.apply(_a, visitor.build());
  118207. return new ViewCompileResult(visitor.viewName, renderComponentVarName);
  118208. var _a;
  118209. };
  118210. return ViewCompiler;
  118211. }());
  118212. var LOG_VAR$1 = variable('_l');
  118213. var VIEW_VAR = variable('_v');
  118214. var CHECK_VAR = variable('_ck');
  118215. var COMP_VAR = variable('_co');
  118216. var EVENT_NAME_VAR = variable('en');
  118217. var ALLOW_DEFAULT_VAR = variable("ad");
  118218. var ViewBuilder$1 = /** @class */ (function () {
  118219. function ViewBuilder(reflector, outputCtx, parent, component, embeddedViewIndex, usedPipes, staticQueryIds, viewBuilderFactory) {
  118220. this.reflector = reflector;
  118221. this.outputCtx = outputCtx;
  118222. this.parent = parent;
  118223. this.component = component;
  118224. this.embeddedViewIndex = embeddedViewIndex;
  118225. this.usedPipes = usedPipes;
  118226. this.staticQueryIds = staticQueryIds;
  118227. this.viewBuilderFactory = viewBuilderFactory;
  118228. this.nodes = [];
  118229. this.purePipeNodeIndices = Object.create(null);
  118230. this.refNodeIndices = Object.create(null);
  118231. this.variables = [];
  118232. this.children = [];
  118233. // TODO(tbosch): The old view compiler used to use an `any` type
  118234. // for the context in any embedded view. We keep this behaivor for now
  118235. // to be able to introduce the new view compiler without too many errors.
  118236. this.compType = this.embeddedViewIndex > 0 ?
  118237. DYNAMIC_TYPE : /** @type {?} */
  118238. ((expressionType(outputCtx.importExpr(this.component.type.reference))));
  118239. this.viewName = viewClassName(this.component.type.reference, this.embeddedViewIndex);
  118240. }
  118241. /**
  118242. * @param {?} variables
  118243. * @param {?} astNodes
  118244. * @return {?}
  118245. */
  118246. ViewBuilder.prototype.visitAll = /**
  118247. * @param {?} variables
  118248. * @param {?} astNodes
  118249. * @return {?}
  118250. */
  118251. function (variables, astNodes) {
  118252. var _this = this;
  118253. this.variables = variables;
  118254. // create the pipes for the pure pipes immediately, so that we know their indices.
  118255. if (!this.parent) {
  118256. this.usedPipes.forEach(function (pipe) {
  118257. if (pipe.pure) {
  118258. _this.purePipeNodeIndices[pipe.name] = _this._createPipe(null, pipe);
  118259. }
  118260. });
  118261. }
  118262. if (!this.parent) {
  118263. var /** @type {?} */ queryIds_1 = staticViewQueryIds(this.staticQueryIds);
  118264. this.component.viewQueries.forEach(function (query, queryIndex) {
  118265. // Note: queries start with id 1 so we can use the number in a Bloom filter!
  118266. var /** @type {?} */ queryId = queryIndex + 1;
  118267. var /** @type {?} */ bindingType = query.first ? 0 /* First */ : 1;
  118268. var /** @type {?} */ flags = 134217728 /* TypeViewQuery */ | calcStaticDynamicQueryFlags(queryIds_1, queryId, query.first);
  118269. _this.nodes.push(function () {
  118270. return ({
  118271. sourceSpan: null,
  118272. nodeFlags: flags,
  118273. nodeDef: importExpr(Identifiers.queryDef).callFn([
  118274. literal(flags), literal(queryId),
  118275. new LiteralMapExpr([new LiteralMapEntry(query.propertyName, literal(bindingType), false)])
  118276. ])
  118277. });
  118278. });
  118279. });
  118280. }
  118281. templateVisitAll(this, astNodes);
  118282. if (this.parent && (astNodes.length === 0 || needsAdditionalRootNode(astNodes))) {
  118283. // if the view is an embedded view, then we need to add an additional root node in some cases
  118284. this.nodes.push(function () {
  118285. return ({
  118286. sourceSpan: null,
  118287. nodeFlags: 1 /* TypeElement */,
  118288. nodeDef: importExpr(Identifiers.anchorDef).callFn([
  118289. literal(0 /* None */), NULL_EXPR, NULL_EXPR, literal(0)
  118290. ])
  118291. });
  118292. });
  118293. }
  118294. };
  118295. /**
  118296. * @param {?=} targetStatements
  118297. * @return {?}
  118298. */
  118299. ViewBuilder.prototype.build = /**
  118300. * @param {?=} targetStatements
  118301. * @return {?}
  118302. */
  118303. function (targetStatements) {
  118304. if (targetStatements === void 0) { targetStatements = []; }
  118305. this.children.forEach(function (child) { return child.build(targetStatements); });
  118306. var _a = this._createNodeExpressions(), updateRendererStmts = _a.updateRendererStmts, updateDirectivesStmts = _a.updateDirectivesStmts, nodeDefExprs = _a.nodeDefExprs;
  118307. var /** @type {?} */ updateRendererFn = this._createUpdateFn(updateRendererStmts);
  118308. var /** @type {?} */ updateDirectivesFn = this._createUpdateFn(updateDirectivesStmts);
  118309. var /** @type {?} */ viewFlags = 0;
  118310. if (!this.parent && this.component.changeDetection === ChangeDetectionStrategy.OnPush) {
  118311. viewFlags |= 2 /* OnPush */;
  118312. }
  118313. var /** @type {?} */ viewFactory = new DeclareFunctionStmt(this.viewName, [new FnParam(/** @type {?} */ ((LOG_VAR$1.name)))], [new ReturnStatement(importExpr(Identifiers.viewDef).callFn([
  118314. literal(viewFlags),
  118315. literalArr(nodeDefExprs),
  118316. updateDirectivesFn,
  118317. updateRendererFn,
  118318. ]))], importType(Identifiers.ViewDefinition), this.embeddedViewIndex === 0 ? [StmtModifier.Exported] : []);
  118319. targetStatements.push(viewFactory);
  118320. return targetStatements;
  118321. };
  118322. /**
  118323. * @param {?} updateStmts
  118324. * @return {?}
  118325. */
  118326. ViewBuilder.prototype._createUpdateFn = /**
  118327. * @param {?} updateStmts
  118328. * @return {?}
  118329. */
  118330. function (updateStmts) {
  118331. var /** @type {?} */ updateFn;
  118332. if (updateStmts.length > 0) {
  118333. var /** @type {?} */ preStmts = [];
  118334. if (!this.component.isHost && findReadVarNames(updateStmts).has(/** @type {?} */ ((COMP_VAR.name)))) {
  118335. preStmts.push(COMP_VAR.set(VIEW_VAR.prop('component')).toDeclStmt(this.compType));
  118336. }
  118337. updateFn = fn([
  118338. new FnParam(/** @type {?} */ ((CHECK_VAR.name)), INFERRED_TYPE),
  118339. new FnParam(/** @type {?} */ ((VIEW_VAR.name)), INFERRED_TYPE)
  118340. ], preStmts.concat(updateStmts), INFERRED_TYPE);
  118341. }
  118342. else {
  118343. updateFn = NULL_EXPR;
  118344. }
  118345. return updateFn;
  118346. };
  118347. /**
  118348. * @param {?} ast
  118349. * @param {?} context
  118350. * @return {?}
  118351. */
  118352. ViewBuilder.prototype.visitNgContent = /**
  118353. * @param {?} ast
  118354. * @param {?} context
  118355. * @return {?}
  118356. */
  118357. function (ast, context) {
  118358. // ngContentDef(ngContentIndex: number, index: number): NodeDef;
  118359. this.nodes.push(function () {
  118360. return ({
  118361. sourceSpan: ast.sourceSpan,
  118362. nodeFlags: 8 /* TypeNgContent */,
  118363. nodeDef: importExpr(Identifiers.ngContentDef).callFn([
  118364. literal(ast.ngContentIndex), literal(ast.index)
  118365. ])
  118366. });
  118367. });
  118368. };
  118369. /**
  118370. * @param {?} ast
  118371. * @param {?} context
  118372. * @return {?}
  118373. */
  118374. ViewBuilder.prototype.visitText = /**
  118375. * @param {?} ast
  118376. * @param {?} context
  118377. * @return {?}
  118378. */
  118379. function (ast, context) {
  118380. // Static text nodes have no check function
  118381. var /** @type {?} */ checkIndex = -1;
  118382. this.nodes.push(function () {
  118383. return ({
  118384. sourceSpan: ast.sourceSpan,
  118385. nodeFlags: 2 /* TypeText */,
  118386. nodeDef: importExpr(Identifiers.textDef).callFn([
  118387. literal(checkIndex),
  118388. literal(ast.ngContentIndex),
  118389. literalArr([literal(ast.value)]),
  118390. ])
  118391. });
  118392. });
  118393. };
  118394. /**
  118395. * @param {?} ast
  118396. * @param {?} context
  118397. * @return {?}
  118398. */
  118399. ViewBuilder.prototype.visitBoundText = /**
  118400. * @param {?} ast
  118401. * @param {?} context
  118402. * @return {?}
  118403. */
  118404. function (ast, context) {
  118405. var _this = this;
  118406. var /** @type {?} */ nodeIndex = this.nodes.length;
  118407. // reserve the space in the nodeDefs array
  118408. this.nodes.push(/** @type {?} */ ((null)));
  118409. var /** @type {?} */ astWithSource = /** @type {?} */ (ast.value);
  118410. var /** @type {?} */ inter = /** @type {?} */ (astWithSource.ast);
  118411. var /** @type {?} */ updateRendererExpressions = inter.expressions.map(function (expr, bindingIndex) {
  118412. return _this._preprocessUpdateExpression({ nodeIndex: nodeIndex, bindingIndex: bindingIndex, sourceSpan: ast.sourceSpan, context: COMP_VAR, value: expr });
  118413. });
  118414. // Check index is the same as the node index during compilation
  118415. // They might only differ at runtime
  118416. var /** @type {?} */ checkIndex = nodeIndex;
  118417. this.nodes[nodeIndex] = function () {
  118418. return ({
  118419. sourceSpan: ast.sourceSpan,
  118420. nodeFlags: 2 /* TypeText */,
  118421. nodeDef: importExpr(Identifiers.textDef).callFn([
  118422. literal(checkIndex),
  118423. literal(ast.ngContentIndex),
  118424. literalArr(inter.strings.map(function (s) { return literal(s); })),
  118425. ]),
  118426. updateRenderer: updateRendererExpressions
  118427. });
  118428. };
  118429. };
  118430. /**
  118431. * @param {?} ast
  118432. * @param {?} context
  118433. * @return {?}
  118434. */
  118435. ViewBuilder.prototype.visitEmbeddedTemplate = /**
  118436. * @param {?} ast
  118437. * @param {?} context
  118438. * @return {?}
  118439. */
  118440. function (ast, context) {
  118441. var _this = this;
  118442. var /** @type {?} */ nodeIndex = this.nodes.length;
  118443. // reserve the space in the nodeDefs array
  118444. this.nodes.push(/** @type {?} */ ((null)));
  118445. var _a = this._visitElementOrTemplate(nodeIndex, ast), flags = _a.flags, queryMatchesExpr = _a.queryMatchesExpr, hostEvents = _a.hostEvents;
  118446. var /** @type {?} */ childVisitor = this.viewBuilderFactory(this);
  118447. this.children.push(childVisitor);
  118448. childVisitor.visitAll(ast.variables, ast.children);
  118449. var /** @type {?} */ childCount = this.nodes.length - nodeIndex - 1;
  118450. // anchorDef(
  118451. // flags: NodeFlags, matchedQueries: [string, QueryValueType][], ngContentIndex: number,
  118452. // childCount: number, handleEventFn?: ElementHandleEventFn, templateFactory?:
  118453. // ViewDefinitionFactory): NodeDef;
  118454. this.nodes[nodeIndex] = function () {
  118455. return ({
  118456. sourceSpan: ast.sourceSpan,
  118457. nodeFlags: 1 /* TypeElement */ | flags,
  118458. nodeDef: importExpr(Identifiers.anchorDef).callFn([
  118459. literal(flags),
  118460. queryMatchesExpr,
  118461. literal(ast.ngContentIndex),
  118462. literal(childCount),
  118463. _this._createElementHandleEventFn(nodeIndex, hostEvents),
  118464. variable(childVisitor.viewName),
  118465. ])
  118466. });
  118467. };
  118468. };
  118469. /**
  118470. * @param {?} ast
  118471. * @param {?} context
  118472. * @return {?}
  118473. */
  118474. ViewBuilder.prototype.visitElement = /**
  118475. * @param {?} ast
  118476. * @param {?} context
  118477. * @return {?}
  118478. */
  118479. function (ast, context) {
  118480. var _this = this;
  118481. var /** @type {?} */ nodeIndex = this.nodes.length;
  118482. // reserve the space in the nodeDefs array so we can add children
  118483. this.nodes.push(/** @type {?} */ ((null)));
  118484. // Using a null element name creates an anchor.
  118485. var /** @type {?} */ elName = isNgContainer(ast.name) ? null : ast.name;
  118486. var _a = this._visitElementOrTemplate(nodeIndex, ast), flags = _a.flags, usedEvents = _a.usedEvents, queryMatchesExpr = _a.queryMatchesExpr, dirHostBindings = _a.hostBindings, hostEvents = _a.hostEvents;
  118487. var /** @type {?} */ inputDefs = [];
  118488. var /** @type {?} */ updateRendererExpressions = [];
  118489. var /** @type {?} */ outputDefs = [];
  118490. if (elName) {
  118491. var /** @type {?} */ hostBindings = ast.inputs
  118492. .map(function (inputAst) {
  118493. return ({
  118494. context: /** @type {?} */ (COMP_VAR),
  118495. inputAst: inputAst,
  118496. dirAst: /** @type {?} */ (null),
  118497. });
  118498. })
  118499. .concat(dirHostBindings);
  118500. if (hostBindings.length) {
  118501. updateRendererExpressions =
  118502. hostBindings.map(function (hostBinding, bindingIndex) {
  118503. return _this._preprocessUpdateExpression({
  118504. context: hostBinding.context,
  118505. nodeIndex: nodeIndex,
  118506. bindingIndex: bindingIndex,
  118507. sourceSpan: hostBinding.inputAst.sourceSpan,
  118508. value: hostBinding.inputAst.value
  118509. });
  118510. });
  118511. inputDefs = hostBindings.map(function (hostBinding) { return elementBindingDef(hostBinding.inputAst, hostBinding.dirAst); });
  118512. }
  118513. outputDefs = usedEvents.map(function (_a) {
  118514. var target = _a[0], eventName = _a[1];
  118515. return literalArr([literal(target), literal(eventName)]);
  118516. });
  118517. }
  118518. templateVisitAll(this, ast.children);
  118519. var /** @type {?} */ childCount = this.nodes.length - nodeIndex - 1;
  118520. var /** @type {?} */ compAst = ast.directives.find(function (dirAst) { return dirAst.directive.isComponent; });
  118521. var /** @type {?} */ compRendererType = /** @type {?} */ (NULL_EXPR);
  118522. var /** @type {?} */ compView = /** @type {?} */ (NULL_EXPR);
  118523. if (compAst) {
  118524. compView = this.outputCtx.importExpr(compAst.directive.componentViewType);
  118525. compRendererType = this.outputCtx.importExpr(compAst.directive.rendererType);
  118526. }
  118527. // Check index is the same as the node index during compilation
  118528. // They might only differ at runtime
  118529. var /** @type {?} */ checkIndex = nodeIndex;
  118530. this.nodes[nodeIndex] = function () {
  118531. return ({
  118532. sourceSpan: ast.sourceSpan,
  118533. nodeFlags: 1 /* TypeElement */ | flags,
  118534. nodeDef: importExpr(Identifiers.elementDef).callFn([
  118535. literal(checkIndex),
  118536. literal(flags),
  118537. queryMatchesExpr,
  118538. literal(ast.ngContentIndex),
  118539. literal(childCount),
  118540. literal(elName),
  118541. elName ? fixedAttrsDef(ast) : NULL_EXPR,
  118542. inputDefs.length ? literalArr(inputDefs) : NULL_EXPR,
  118543. outputDefs.length ? literalArr(outputDefs) : NULL_EXPR,
  118544. _this._createElementHandleEventFn(nodeIndex, hostEvents),
  118545. compView,
  118546. compRendererType,
  118547. ]),
  118548. updateRenderer: updateRendererExpressions
  118549. });
  118550. };
  118551. };
  118552. /**
  118553. * @param {?} nodeIndex
  118554. * @param {?} ast
  118555. * @return {?}
  118556. */
  118557. ViewBuilder.prototype._visitElementOrTemplate = /**
  118558. * @param {?} nodeIndex
  118559. * @param {?} ast
  118560. * @return {?}
  118561. */
  118562. function (nodeIndex, ast) {
  118563. var _this = this;
  118564. var /** @type {?} */ flags = 0;
  118565. if (ast.hasViewContainer) {
  118566. flags |= 16777216 /* EmbeddedViews */;
  118567. }
  118568. var /** @type {?} */ usedEvents = new Map();
  118569. ast.outputs.forEach(function (event) {
  118570. var _a = elementEventNameAndTarget(event, null), name = _a.name, target = _a.target;
  118571. usedEvents.set(elementEventFullName(target, name), [target, name]);
  118572. });
  118573. ast.directives.forEach(function (dirAst) {
  118574. dirAst.hostEvents.forEach(function (event) {
  118575. var _a = elementEventNameAndTarget(event, dirAst), name = _a.name, target = _a.target;
  118576. usedEvents.set(elementEventFullName(target, name), [target, name]);
  118577. });
  118578. });
  118579. var /** @type {?} */ hostBindings = [];
  118580. var /** @type {?} */ hostEvents = [];
  118581. this._visitComponentFactoryResolverProvider(ast.directives);
  118582. ast.providers.forEach(function (providerAst, providerIndex) {
  118583. var /** @type {?} */ dirAst = /** @type {?} */ ((undefined));
  118584. var /** @type {?} */ dirIndex = /** @type {?} */ ((undefined));
  118585. ast.directives.forEach(function (localDirAst, i) {
  118586. if (localDirAst.directive.type.reference === tokenReference(providerAst.token)) {
  118587. dirAst = localDirAst;
  118588. dirIndex = i;
  118589. }
  118590. });
  118591. if (dirAst) {
  118592. var _a = _this._visitDirective(providerAst, dirAst, dirIndex, nodeIndex, ast.references, ast.queryMatches, usedEvents, /** @type {?} */ ((_this.staticQueryIds.get(/** @type {?} */ (ast))))), dirHostBindings = _a.hostBindings, dirHostEvents = _a.hostEvents;
  118593. hostBindings.push.apply(hostBindings, dirHostBindings);
  118594. hostEvents.push.apply(hostEvents, dirHostEvents);
  118595. }
  118596. else {
  118597. _this._visitProvider(providerAst, ast.queryMatches);
  118598. }
  118599. });
  118600. var /** @type {?} */ queryMatchExprs = [];
  118601. ast.queryMatches.forEach(function (match) {
  118602. var /** @type {?} */ valueType = /** @type {?} */ ((undefined));
  118603. if (tokenReference(match.value) ===
  118604. _this.reflector.resolveExternalReference(Identifiers.ElementRef)) {
  118605. valueType = 0 /* ElementRef */;
  118606. }
  118607. else if (tokenReference(match.value) ===
  118608. _this.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) {
  118609. valueType = 3 /* ViewContainerRef */;
  118610. }
  118611. else if (tokenReference(match.value) ===
  118612. _this.reflector.resolveExternalReference(Identifiers.TemplateRef)) {
  118613. valueType = 2 /* TemplateRef */;
  118614. }
  118615. if (valueType != null) {
  118616. queryMatchExprs.push(literalArr([literal(match.queryId), literal(valueType)]));
  118617. }
  118618. });
  118619. ast.references.forEach(function (ref) {
  118620. var /** @type {?} */ valueType = /** @type {?} */ ((undefined));
  118621. if (!ref.value) {
  118622. valueType = 1 /* RenderElement */;
  118623. }
  118624. else if (tokenReference(ref.value) ===
  118625. _this.reflector.resolveExternalReference(Identifiers.TemplateRef)) {
  118626. valueType = 2 /* TemplateRef */;
  118627. }
  118628. if (valueType != null) {
  118629. _this.refNodeIndices[ref.name] = nodeIndex;
  118630. queryMatchExprs.push(literalArr([literal(ref.name), literal(valueType)]));
  118631. }
  118632. });
  118633. ast.outputs.forEach(function (outputAst) {
  118634. hostEvents.push({ context: COMP_VAR, eventAst: outputAst, dirAst: /** @type {?} */ ((null)) });
  118635. });
  118636. return {
  118637. flags: flags,
  118638. usedEvents: Array.from(usedEvents.values()),
  118639. queryMatchesExpr: queryMatchExprs.length ? literalArr(queryMatchExprs) : NULL_EXPR,
  118640. hostBindings: hostBindings,
  118641. hostEvents: hostEvents
  118642. };
  118643. };
  118644. /**
  118645. * @param {?} providerAst
  118646. * @param {?} dirAst
  118647. * @param {?} directiveIndex
  118648. * @param {?} elementNodeIndex
  118649. * @param {?} refs
  118650. * @param {?} queryMatches
  118651. * @param {?} usedEvents
  118652. * @param {?} queryIds
  118653. * @return {?}
  118654. */
  118655. ViewBuilder.prototype._visitDirective = /**
  118656. * @param {?} providerAst
  118657. * @param {?} dirAst
  118658. * @param {?} directiveIndex
  118659. * @param {?} elementNodeIndex
  118660. * @param {?} refs
  118661. * @param {?} queryMatches
  118662. * @param {?} usedEvents
  118663. * @param {?} queryIds
  118664. * @return {?}
  118665. */
  118666. function (providerAst, dirAst, directiveIndex, elementNodeIndex, refs, queryMatches, usedEvents, queryIds) {
  118667. var _this = this;
  118668. var /** @type {?} */ nodeIndex = this.nodes.length;
  118669. // reserve the space in the nodeDefs array so we can add children
  118670. this.nodes.push(/** @type {?} */ ((null)));
  118671. dirAst.directive.queries.forEach(function (query, queryIndex) {
  118672. var /** @type {?} */ queryId = dirAst.contentQueryStartId + queryIndex;
  118673. var /** @type {?} */ flags = 67108864 /* TypeContentQuery */ | calcStaticDynamicQueryFlags(queryIds, queryId, query.first);
  118674. var /** @type {?} */ bindingType = query.first ? 0 /* First */ : 1;
  118675. _this.nodes.push(function () {
  118676. return ({
  118677. sourceSpan: dirAst.sourceSpan,
  118678. nodeFlags: flags,
  118679. nodeDef: importExpr(Identifiers.queryDef).callFn([
  118680. literal(flags), literal(queryId),
  118681. new LiteralMapExpr([new LiteralMapEntry(query.propertyName, literal(bindingType), false)])
  118682. ]),
  118683. });
  118684. });
  118685. });
  118686. // Note: the operation below might also create new nodeDefs,
  118687. // but we don't want them to be a child of a directive,
  118688. // as they might be a provider/pipe on their own.
  118689. // I.e. we only allow queries as children of directives nodes.
  118690. var /** @type {?} */ childCount = this.nodes.length - nodeIndex - 1;
  118691. var _a = this._visitProviderOrDirective(providerAst, queryMatches), flags = _a.flags, queryMatchExprs = _a.queryMatchExprs, providerExpr = _a.providerExpr, depsExpr = _a.depsExpr;
  118692. refs.forEach(function (ref) {
  118693. if (ref.value && tokenReference(ref.value) === tokenReference(providerAst.token)) {
  118694. _this.refNodeIndices[ref.name] = nodeIndex;
  118695. queryMatchExprs.push(literalArr([literal(ref.name), literal(4 /* Provider */)]));
  118696. }
  118697. });
  118698. if (dirAst.directive.isComponent) {
  118699. flags |= 32768 /* Component */;
  118700. }
  118701. var /** @type {?} */ inputDefs = dirAst.inputs.map(function (inputAst, inputIndex) {
  118702. var /** @type {?} */ mapValue = literalArr([literal(inputIndex), literal(inputAst.directiveName)]);
  118703. // Note: it's important to not quote the key so that we can capture renames by minifiers!
  118704. return new LiteralMapEntry(inputAst.directiveName, mapValue, false);
  118705. });
  118706. var /** @type {?} */ outputDefs = [];
  118707. var /** @type {?} */ dirMeta = dirAst.directive;
  118708. Object.keys(dirMeta.outputs).forEach(function (propName) {
  118709. var /** @type {?} */ eventName = dirMeta.outputs[propName];
  118710. if (usedEvents.has(eventName)) {
  118711. // Note: it's important to not quote the key so that we can capture renames by minifiers!
  118712. outputDefs.push(new LiteralMapEntry(propName, literal(eventName), false));
  118713. }
  118714. });
  118715. var /** @type {?} */ updateDirectiveExpressions = [];
  118716. if (dirAst.inputs.length || (flags & (262144 /* DoCheck */ | 65536 /* OnInit */)) > 0) {
  118717. updateDirectiveExpressions =
  118718. dirAst.inputs.map(function (input, bindingIndex) {
  118719. return _this._preprocessUpdateExpression({
  118720. nodeIndex: nodeIndex,
  118721. bindingIndex: bindingIndex,
  118722. sourceSpan: input.sourceSpan,
  118723. context: COMP_VAR,
  118724. value: input.value
  118725. });
  118726. });
  118727. }
  118728. var /** @type {?} */ dirContextExpr = importExpr(Identifiers.nodeValue).callFn([VIEW_VAR, literal(nodeIndex)]);
  118729. var /** @type {?} */ hostBindings = dirAst.hostProperties.map(function (inputAst) {
  118730. return ({
  118731. context: dirContextExpr,
  118732. dirAst: dirAst,
  118733. inputAst: inputAst,
  118734. });
  118735. });
  118736. var /** @type {?} */ hostEvents = dirAst.hostEvents.map(function (hostEventAst) {
  118737. return ({
  118738. context: dirContextExpr,
  118739. eventAst: hostEventAst, dirAst: dirAst,
  118740. });
  118741. });
  118742. // Check index is the same as the node index during compilation
  118743. // They might only differ at runtime
  118744. var /** @type {?} */ checkIndex = nodeIndex;
  118745. this.nodes[nodeIndex] = function () {
  118746. return ({
  118747. sourceSpan: dirAst.sourceSpan,
  118748. nodeFlags: 16384 /* TypeDirective */ | flags,
  118749. nodeDef: importExpr(Identifiers.directiveDef).callFn([
  118750. literal(checkIndex),
  118751. literal(flags),
  118752. queryMatchExprs.length ? literalArr(queryMatchExprs) : NULL_EXPR,
  118753. literal(childCount),
  118754. providerExpr,
  118755. depsExpr,
  118756. inputDefs.length ? new LiteralMapExpr(inputDefs) : NULL_EXPR,
  118757. outputDefs.length ? new LiteralMapExpr(outputDefs) : NULL_EXPR,
  118758. ]),
  118759. updateDirectives: updateDirectiveExpressions,
  118760. directive: dirAst.directive.type,
  118761. });
  118762. };
  118763. return { hostBindings: hostBindings, hostEvents: hostEvents };
  118764. };
  118765. /**
  118766. * @param {?} providerAst
  118767. * @param {?} queryMatches
  118768. * @return {?}
  118769. */
  118770. ViewBuilder.prototype._visitProvider = /**
  118771. * @param {?} providerAst
  118772. * @param {?} queryMatches
  118773. * @return {?}
  118774. */
  118775. function (providerAst, queryMatches) {
  118776. this._addProviderNode(this._visitProviderOrDirective(providerAst, queryMatches));
  118777. };
  118778. /**
  118779. * @param {?} directives
  118780. * @return {?}
  118781. */
  118782. ViewBuilder.prototype._visitComponentFactoryResolverProvider = /**
  118783. * @param {?} directives
  118784. * @return {?}
  118785. */
  118786. function (directives) {
  118787. var /** @type {?} */ componentDirMeta = directives.find(function (dirAst) { return dirAst.directive.isComponent; });
  118788. if (componentDirMeta && componentDirMeta.directive.entryComponents.length) {
  118789. var _a = componentFactoryResolverProviderDef(this.reflector, this.outputCtx, 8192 /* PrivateProvider */, componentDirMeta.directive.entryComponents), providerExpr = _a.providerExpr, depsExpr = _a.depsExpr, flags = _a.flags, tokenExpr = _a.tokenExpr;
  118790. this._addProviderNode({
  118791. providerExpr: providerExpr,
  118792. depsExpr: depsExpr,
  118793. flags: flags,
  118794. tokenExpr: tokenExpr,
  118795. queryMatchExprs: [],
  118796. sourceSpan: componentDirMeta.sourceSpan
  118797. });
  118798. }
  118799. };
  118800. /**
  118801. * @param {?} data
  118802. * @return {?}
  118803. */
  118804. ViewBuilder.prototype._addProviderNode = /**
  118805. * @param {?} data
  118806. * @return {?}
  118807. */
  118808. function (data) {
  118809. var /** @type {?} */ nodeIndex = this.nodes.length;
  118810. // providerDef(
  118811. // flags: NodeFlags, matchedQueries: [string, QueryValueType][], token:any,
  118812. // value: any, deps: ([DepFlags, any] | any)[]): NodeDef;
  118813. this.nodes.push(function () {
  118814. return ({
  118815. sourceSpan: data.sourceSpan,
  118816. nodeFlags: data.flags,
  118817. nodeDef: importExpr(Identifiers.providerDef).callFn([
  118818. literal(data.flags),
  118819. data.queryMatchExprs.length ? literalArr(data.queryMatchExprs) : NULL_EXPR,
  118820. data.tokenExpr, data.providerExpr, data.depsExpr
  118821. ])
  118822. });
  118823. });
  118824. };
  118825. /**
  118826. * @param {?} providerAst
  118827. * @param {?} queryMatches
  118828. * @return {?}
  118829. */
  118830. ViewBuilder.prototype._visitProviderOrDirective = /**
  118831. * @param {?} providerAst
  118832. * @param {?} queryMatches
  118833. * @return {?}
  118834. */
  118835. function (providerAst, queryMatches) {
  118836. var /** @type {?} */ flags = 0;
  118837. var /** @type {?} */ queryMatchExprs = [];
  118838. queryMatches.forEach(function (match) {
  118839. if (tokenReference(match.value) === tokenReference(providerAst.token)) {
  118840. queryMatchExprs.push(literalArr([literal(match.queryId), literal(4 /* Provider */)]));
  118841. }
  118842. });
  118843. var _a = providerDef(this.outputCtx, providerAst), providerExpr = _a.providerExpr, depsExpr = _a.depsExpr, providerFlags = _a.flags, tokenExpr = _a.tokenExpr;
  118844. return {
  118845. flags: flags | providerFlags,
  118846. queryMatchExprs: queryMatchExprs,
  118847. providerExpr: providerExpr,
  118848. depsExpr: depsExpr,
  118849. tokenExpr: tokenExpr,
  118850. sourceSpan: providerAst.sourceSpan
  118851. };
  118852. };
  118853. /**
  118854. * @param {?} name
  118855. * @return {?}
  118856. */
  118857. ViewBuilder.prototype.getLocal = /**
  118858. * @param {?} name
  118859. * @return {?}
  118860. */
  118861. function (name) {
  118862. if (name == EventHandlerVars.event.name) {
  118863. return EventHandlerVars.event;
  118864. }
  118865. var /** @type {?} */ currViewExpr = VIEW_VAR;
  118866. for (var /** @type {?} */ currBuilder = this; currBuilder; currBuilder = currBuilder.parent,
  118867. currViewExpr = currViewExpr.prop('parent').cast(DYNAMIC_TYPE)) {
  118868. // check references
  118869. var /** @type {?} */ refNodeIndex = currBuilder.refNodeIndices[name];
  118870. if (refNodeIndex != null) {
  118871. return importExpr(Identifiers.nodeValue).callFn([currViewExpr, literal(refNodeIndex)]);
  118872. }
  118873. // check variables
  118874. var /** @type {?} */ varAst = currBuilder.variables.find(function (varAst) { return varAst.name === name; });
  118875. if (varAst) {
  118876. var /** @type {?} */ varValue = varAst.value || IMPLICIT_TEMPLATE_VAR;
  118877. return currViewExpr.prop('context').prop(varValue);
  118878. }
  118879. }
  118880. return null;
  118881. };
  118882. /**
  118883. * @param {?} sourceSpan
  118884. * @param {?} argCount
  118885. * @return {?}
  118886. */
  118887. ViewBuilder.prototype._createLiteralArrayConverter = /**
  118888. * @param {?} sourceSpan
  118889. * @param {?} argCount
  118890. * @return {?}
  118891. */
  118892. function (sourceSpan, argCount) {
  118893. if (argCount === 0) {
  118894. var /** @type {?} */ valueExpr_1 = importExpr(Identifiers.EMPTY_ARRAY);
  118895. return function () { return valueExpr_1; };
  118896. }
  118897. var /** @type {?} */ checkIndex = this.nodes.length;
  118898. this.nodes.push(function () {
  118899. return ({
  118900. sourceSpan: sourceSpan,
  118901. nodeFlags: 32 /* TypePureArray */,
  118902. nodeDef: importExpr(Identifiers.pureArrayDef).callFn([
  118903. literal(checkIndex),
  118904. literal(argCount),
  118905. ])
  118906. });
  118907. });
  118908. return function (args) { return callCheckStmt(checkIndex, args); };
  118909. };
  118910. /**
  118911. * @param {?} sourceSpan
  118912. * @param {?} keys
  118913. * @return {?}
  118914. */
  118915. ViewBuilder.prototype._createLiteralMapConverter = /**
  118916. * @param {?} sourceSpan
  118917. * @param {?} keys
  118918. * @return {?}
  118919. */
  118920. function (sourceSpan, keys) {
  118921. if (keys.length === 0) {
  118922. var /** @type {?} */ valueExpr_2 = importExpr(Identifiers.EMPTY_MAP);
  118923. return function () { return valueExpr_2; };
  118924. }
  118925. var /** @type {?} */ map = literalMap(keys.map(function (e, i) { return (Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, e, { value: literal(i) })); }));
  118926. var /** @type {?} */ checkIndex = this.nodes.length;
  118927. this.nodes.push(function () {
  118928. return ({
  118929. sourceSpan: sourceSpan,
  118930. nodeFlags: 64 /* TypePureObject */,
  118931. nodeDef: importExpr(Identifiers.pureObjectDef).callFn([
  118932. literal(checkIndex),
  118933. map,
  118934. ])
  118935. });
  118936. });
  118937. return function (args) { return callCheckStmt(checkIndex, args); };
  118938. };
  118939. /**
  118940. * @param {?} expression
  118941. * @param {?} name
  118942. * @param {?} argCount
  118943. * @return {?}
  118944. */
  118945. ViewBuilder.prototype._createPipeConverter = /**
  118946. * @param {?} expression
  118947. * @param {?} name
  118948. * @param {?} argCount
  118949. * @return {?}
  118950. */
  118951. function (expression, name, argCount) {
  118952. var /** @type {?} */ pipe = /** @type {?} */ ((this.usedPipes.find(function (pipeSummary) { return pipeSummary.name === name; })));
  118953. if (pipe.pure) {
  118954. var /** @type {?} */ checkIndex_1 = this.nodes.length;
  118955. this.nodes.push(function () {
  118956. return ({
  118957. sourceSpan: expression.sourceSpan,
  118958. nodeFlags: 128 /* TypePurePipe */,
  118959. nodeDef: importExpr(Identifiers.purePipeDef).callFn([
  118960. literal(checkIndex_1),
  118961. literal(argCount),
  118962. ])
  118963. });
  118964. });
  118965. // find underlying pipe in the component view
  118966. var /** @type {?} */ compViewExpr = VIEW_VAR;
  118967. var /** @type {?} */ compBuilder = this;
  118968. while (compBuilder.parent) {
  118969. compBuilder = compBuilder.parent;
  118970. compViewExpr = compViewExpr.prop('parent').cast(DYNAMIC_TYPE);
  118971. }
  118972. var /** @type {?} */ pipeNodeIndex = compBuilder.purePipeNodeIndices[name];
  118973. var /** @type {?} */ pipeValueExpr_1 = importExpr(Identifiers.nodeValue).callFn([compViewExpr, literal(pipeNodeIndex)]);
  118974. return function (args) {
  118975. return callUnwrapValue(expression.nodeIndex, expression.bindingIndex, callCheckStmt(checkIndex_1, [pipeValueExpr_1].concat(args)));
  118976. };
  118977. }
  118978. else {
  118979. var /** @type {?} */ nodeIndex = this._createPipe(expression.sourceSpan, pipe);
  118980. var /** @type {?} */ nodeValueExpr_1 = importExpr(Identifiers.nodeValue).callFn([VIEW_VAR, literal(nodeIndex)]);
  118981. return function (args) {
  118982. return callUnwrapValue(expression.nodeIndex, expression.bindingIndex, nodeValueExpr_1.callMethod('transform', args));
  118983. };
  118984. }
  118985. };
  118986. /**
  118987. * @param {?} sourceSpan
  118988. * @param {?} pipe
  118989. * @return {?}
  118990. */
  118991. ViewBuilder.prototype._createPipe = /**
  118992. * @param {?} sourceSpan
  118993. * @param {?} pipe
  118994. * @return {?}
  118995. */
  118996. function (sourceSpan, pipe) {
  118997. var _this = this;
  118998. var /** @type {?} */ nodeIndex = this.nodes.length;
  118999. var /** @type {?} */ flags = 0;
  119000. pipe.type.lifecycleHooks.forEach(function (lifecycleHook) {
  119001. // for pipes, we only support ngOnDestroy
  119002. if (lifecycleHook === LifecycleHooks.OnDestroy) {
  119003. flags |= lifecycleHookToNodeFlag(lifecycleHook);
  119004. }
  119005. });
  119006. var /** @type {?} */ depExprs = pipe.type.diDeps.map(function (diDep) { return depDef(_this.outputCtx, diDep); });
  119007. // function pipeDef(
  119008. // flags: NodeFlags, ctor: any, deps: ([DepFlags, any] | any)[]): NodeDef
  119009. this.nodes.push(function () {
  119010. return ({
  119011. sourceSpan: sourceSpan,
  119012. nodeFlags: 16 /* TypePipe */,
  119013. nodeDef: importExpr(Identifiers.pipeDef).callFn([
  119014. literal(flags), _this.outputCtx.importExpr(pipe.type.reference), literalArr(depExprs)
  119015. ])
  119016. });
  119017. });
  119018. return nodeIndex;
  119019. };
  119020. /**
  119021. * For the AST in `UpdateExpression.value`:
  119022. * - create nodes for pipes, literal arrays and, literal maps,
  119023. * - update the AST to replace pipes, literal arrays and, literal maps with calls to check fn.
  119024. *
  119025. * WARNING: This might create new nodeDefs (for pipes and literal arrays and literal maps)!
  119026. * @param {?} expression
  119027. * @return {?}
  119028. */
  119029. ViewBuilder.prototype._preprocessUpdateExpression = /**
  119030. * For the AST in `UpdateExpression.value`:
  119031. * - create nodes for pipes, literal arrays and, literal maps,
  119032. * - update the AST to replace pipes, literal arrays and, literal maps with calls to check fn.
  119033. *
  119034. * WARNING: This might create new nodeDefs (for pipes and literal arrays and literal maps)!
  119035. * @param {?} expression
  119036. * @return {?}
  119037. */
  119038. function (expression) {
  119039. var _this = this;
  119040. return {
  119041. nodeIndex: expression.nodeIndex,
  119042. bindingIndex: expression.bindingIndex,
  119043. sourceSpan: expression.sourceSpan,
  119044. context: expression.context,
  119045. value: convertPropertyBindingBuiltins({
  119046. createLiteralArrayConverter: function (argCount) {
  119047. return _this._createLiteralArrayConverter(expression.sourceSpan, argCount);
  119048. },
  119049. createLiteralMapConverter: function (keys) {
  119050. return _this._createLiteralMapConverter(expression.sourceSpan, keys);
  119051. },
  119052. createPipeConverter: function (name, argCount) {
  119053. return _this._createPipeConverter(expression, name, argCount);
  119054. }
  119055. }, expression.value)
  119056. };
  119057. };
  119058. /**
  119059. * @return {?}
  119060. */
  119061. ViewBuilder.prototype._createNodeExpressions = /**
  119062. * @return {?}
  119063. */
  119064. function () {
  119065. var /** @type {?} */ self = this;
  119066. var /** @type {?} */ updateBindingCount = 0;
  119067. var /** @type {?} */ updateRendererStmts = [];
  119068. var /** @type {?} */ updateDirectivesStmts = [];
  119069. var /** @type {?} */ nodeDefExprs = this.nodes.map(function (factory, nodeIndex) {
  119070. var _a = factory(), nodeDef = _a.nodeDef, nodeFlags = _a.nodeFlags, updateDirectives = _a.updateDirectives, updateRenderer = _a.updateRenderer, sourceSpan = _a.sourceSpan;
  119071. if (updateRenderer) {
  119072. updateRendererStmts.push.apply(updateRendererStmts, createUpdateStatements(nodeIndex, sourceSpan, updateRenderer, false));
  119073. }
  119074. if (updateDirectives) {
  119075. updateDirectivesStmts.push.apply(updateDirectivesStmts, createUpdateStatements(nodeIndex, sourceSpan, updateDirectives, (nodeFlags & (262144 /* DoCheck */ | 65536 /* OnInit */)) > 0));
  119076. }
  119077. // We use a comma expression to call the log function before
  119078. // the nodeDef function, but still use the result of the nodeDef function
  119079. // as the value.
  119080. // Note: We only add the logger to elements / text nodes,
  119081. // so we don't generate too much code.
  119082. var /** @type {?} */ logWithNodeDef = nodeFlags & 3 /* CatRenderNode */ ?
  119083. new CommaExpr([LOG_VAR$1.callFn([]).callFn([]), nodeDef]) :
  119084. nodeDef;
  119085. return applySourceSpanToExpressionIfNeeded(logWithNodeDef, sourceSpan);
  119086. });
  119087. return { updateRendererStmts: updateRendererStmts, updateDirectivesStmts: updateDirectivesStmts, nodeDefExprs: nodeDefExprs };
  119088. /**
  119089. * @param {?} nodeIndex
  119090. * @param {?} sourceSpan
  119091. * @param {?} expressions
  119092. * @param {?} allowEmptyExprs
  119093. * @return {?}
  119094. */
  119095. function createUpdateStatements(nodeIndex, sourceSpan, expressions, allowEmptyExprs) {
  119096. var /** @type {?} */ updateStmts = [];
  119097. var /** @type {?} */ exprs = expressions.map(function (_a) {
  119098. var sourceSpan = _a.sourceSpan, context = _a.context, value = _a.value;
  119099. var /** @type {?} */ bindingId = "" + updateBindingCount++;
  119100. var /** @type {?} */ nameResolver = context === COMP_VAR ? self : null;
  119101. var _b = convertPropertyBinding(nameResolver, context, value, bindingId, BindingForm.General), stmts = _b.stmts, currValExpr = _b.currValExpr;
  119102. updateStmts.push.apply(updateStmts, stmts.map(function (stmt) { return applySourceSpanToStatementIfNeeded(stmt, sourceSpan); }));
  119103. return applySourceSpanToExpressionIfNeeded(currValExpr, sourceSpan);
  119104. });
  119105. if (expressions.length || allowEmptyExprs) {
  119106. updateStmts.push(applySourceSpanToStatementIfNeeded(callCheckStmt(nodeIndex, exprs).toStmt(), sourceSpan));
  119107. }
  119108. return updateStmts;
  119109. }
  119110. };
  119111. /**
  119112. * @param {?} nodeIndex
  119113. * @param {?} handlers
  119114. * @return {?}
  119115. */
  119116. ViewBuilder.prototype._createElementHandleEventFn = /**
  119117. * @param {?} nodeIndex
  119118. * @param {?} handlers
  119119. * @return {?}
  119120. */
  119121. function (nodeIndex, handlers) {
  119122. var _this = this;
  119123. var /** @type {?} */ handleEventStmts = [];
  119124. var /** @type {?} */ handleEventBindingCount = 0;
  119125. handlers.forEach(function (_a) {
  119126. var context = _a.context, eventAst = _a.eventAst, dirAst = _a.dirAst;
  119127. var /** @type {?} */ bindingId = "" + handleEventBindingCount++;
  119128. var /** @type {?} */ nameResolver = context === COMP_VAR ? _this : null;
  119129. var _b = convertActionBinding(nameResolver, context, eventAst.handler, bindingId), stmts = _b.stmts, allowDefault = _b.allowDefault;
  119130. var /** @type {?} */ trueStmts = stmts;
  119131. if (allowDefault) {
  119132. trueStmts.push(ALLOW_DEFAULT_VAR.set(allowDefault.and(ALLOW_DEFAULT_VAR)).toStmt());
  119133. }
  119134. var _c = elementEventNameAndTarget(eventAst, dirAst), eventTarget = _c.target, eventName = _c.name;
  119135. var /** @type {?} */ fullEventName = elementEventFullName(eventTarget, eventName);
  119136. handleEventStmts.push(applySourceSpanToStatementIfNeeded(new IfStmt(literal(fullEventName).identical(EVENT_NAME_VAR), trueStmts), eventAst.sourceSpan));
  119137. });
  119138. var /** @type {?} */ handleEventFn;
  119139. if (handleEventStmts.length > 0) {
  119140. var /** @type {?} */ preStmts = [ALLOW_DEFAULT_VAR.set(literal(true)).toDeclStmt(BOOL_TYPE)];
  119141. if (!this.component.isHost && findReadVarNames(handleEventStmts).has(/** @type {?} */ ((COMP_VAR.name)))) {
  119142. preStmts.push(COMP_VAR.set(VIEW_VAR.prop('component')).toDeclStmt(this.compType));
  119143. }
  119144. handleEventFn = fn([
  119145. new FnParam(/** @type {?} */ ((VIEW_VAR.name)), INFERRED_TYPE),
  119146. new FnParam(/** @type {?} */ ((EVENT_NAME_VAR.name)), INFERRED_TYPE),
  119147. new FnParam(/** @type {?} */ ((EventHandlerVars.event.name)), INFERRED_TYPE)
  119148. ], preStmts.concat(handleEventStmts, [new ReturnStatement(ALLOW_DEFAULT_VAR)]), INFERRED_TYPE);
  119149. }
  119150. else {
  119151. handleEventFn = NULL_EXPR;
  119152. }
  119153. return handleEventFn;
  119154. };
  119155. /**
  119156. * @param {?} ast
  119157. * @param {?} context
  119158. * @return {?}
  119159. */
  119160. ViewBuilder.prototype.visitDirective = /**
  119161. * @param {?} ast
  119162. * @param {?} context
  119163. * @return {?}
  119164. */
  119165. function (ast, context) { };
  119166. /**
  119167. * @param {?} ast
  119168. * @param {?} context
  119169. * @return {?}
  119170. */
  119171. ViewBuilder.prototype.visitDirectiveProperty = /**
  119172. * @param {?} ast
  119173. * @param {?} context
  119174. * @return {?}
  119175. */
  119176. function (ast, context) { };
  119177. /**
  119178. * @param {?} ast
  119179. * @param {?} context
  119180. * @return {?}
  119181. */
  119182. ViewBuilder.prototype.visitReference = /**
  119183. * @param {?} ast
  119184. * @param {?} context
  119185. * @return {?}
  119186. */
  119187. function (ast, context) { };
  119188. /**
  119189. * @param {?} ast
  119190. * @param {?} context
  119191. * @return {?}
  119192. */
  119193. ViewBuilder.prototype.visitVariable = /**
  119194. * @param {?} ast
  119195. * @param {?} context
  119196. * @return {?}
  119197. */
  119198. function (ast, context) { };
  119199. /**
  119200. * @param {?} ast
  119201. * @param {?} context
  119202. * @return {?}
  119203. */
  119204. ViewBuilder.prototype.visitEvent = /**
  119205. * @param {?} ast
  119206. * @param {?} context
  119207. * @return {?}
  119208. */
  119209. function (ast, context) { };
  119210. /**
  119211. * @param {?} ast
  119212. * @param {?} context
  119213. * @return {?}
  119214. */
  119215. ViewBuilder.prototype.visitElementProperty = /**
  119216. * @param {?} ast
  119217. * @param {?} context
  119218. * @return {?}
  119219. */
  119220. function (ast, context) { };
  119221. /**
  119222. * @param {?} ast
  119223. * @param {?} context
  119224. * @return {?}
  119225. */
  119226. ViewBuilder.prototype.visitAttr = /**
  119227. * @param {?} ast
  119228. * @param {?} context
  119229. * @return {?}
  119230. */
  119231. function (ast, context) { };
  119232. return ViewBuilder;
  119233. }());
  119234. /**
  119235. * @param {?} astNodes
  119236. * @return {?}
  119237. */
  119238. function needsAdditionalRootNode(astNodes) {
  119239. var /** @type {?} */ lastAstNode = astNodes[astNodes.length - 1];
  119240. if (lastAstNode instanceof EmbeddedTemplateAst) {
  119241. return lastAstNode.hasViewContainer;
  119242. }
  119243. if (lastAstNode instanceof ElementAst) {
  119244. if (isNgContainer(lastAstNode.name) && lastAstNode.children.length) {
  119245. return needsAdditionalRootNode(lastAstNode.children);
  119246. }
  119247. return lastAstNode.hasViewContainer;
  119248. }
  119249. return lastAstNode instanceof NgContentAst;
  119250. }
  119251. /**
  119252. * @param {?} inputAst
  119253. * @param {?} dirAst
  119254. * @return {?}
  119255. */
  119256. function elementBindingDef(inputAst, dirAst) {
  119257. switch (inputAst.type) {
  119258. case PropertyBindingType.Attribute:
  119259. return literalArr([
  119260. literal(1 /* TypeElementAttribute */), literal(inputAst.name),
  119261. literal(inputAst.securityContext)
  119262. ]);
  119263. case PropertyBindingType.Property:
  119264. return literalArr([
  119265. literal(8 /* TypeProperty */), literal(inputAst.name),
  119266. literal(inputAst.securityContext)
  119267. ]);
  119268. case PropertyBindingType.Animation:
  119269. var /** @type {?} */ bindingType = 8 /* TypeProperty */ |
  119270. (dirAst && dirAst.directive.isComponent ? 32 /* SyntheticHostProperty */ :
  119271. 16 /* SyntheticProperty */);
  119272. return literalArr([
  119273. literal(bindingType), literal('@' + inputAst.name), literal(inputAst.securityContext)
  119274. ]);
  119275. case PropertyBindingType.Class:
  119276. return literalArr([literal(2 /* TypeElementClass */), literal(inputAst.name), NULL_EXPR]);
  119277. case PropertyBindingType.Style:
  119278. return literalArr([
  119279. literal(4 /* TypeElementStyle */), literal(inputAst.name), literal(inputAst.unit)
  119280. ]);
  119281. }
  119282. }
  119283. /**
  119284. * @param {?} elementAst
  119285. * @return {?}
  119286. */
  119287. function fixedAttrsDef(elementAst) {
  119288. var /** @type {?} */ mapResult = Object.create(null);
  119289. elementAst.attrs.forEach(function (attrAst) { mapResult[attrAst.name] = attrAst.value; });
  119290. elementAst.directives.forEach(function (dirAst) {
  119291. Object.keys(dirAst.directive.hostAttributes).forEach(function (name) {
  119292. var /** @type {?} */ value = dirAst.directive.hostAttributes[name];
  119293. var /** @type {?} */ prevValue = mapResult[name];
  119294. mapResult[name] = prevValue != null ? mergeAttributeValue(name, prevValue, value) : value;
  119295. });
  119296. });
  119297. // Note: We need to sort to get a defined output order
  119298. // for tests and for caching generated artifacts...
  119299. return literalArr(Object.keys(mapResult).sort().map(function (attrName) { return literalArr([literal(attrName), literal(mapResult[attrName])]); }));
  119300. }
  119301. /**
  119302. * @param {?} attrName
  119303. * @param {?} attrValue1
  119304. * @param {?} attrValue2
  119305. * @return {?}
  119306. */
  119307. function mergeAttributeValue(attrName, attrValue1, attrValue2) {
  119308. if (attrName == CLASS_ATTR$1 || attrName == STYLE_ATTR) {
  119309. return attrValue1 + " " + attrValue2;
  119310. }
  119311. else {
  119312. return attrValue2;
  119313. }
  119314. }
  119315. /**
  119316. * @param {?} nodeIndex
  119317. * @param {?} exprs
  119318. * @return {?}
  119319. */
  119320. function callCheckStmt(nodeIndex, exprs) {
  119321. if (exprs.length > 10) {
  119322. return CHECK_VAR.callFn([VIEW_VAR, literal(nodeIndex), literal(1 /* Dynamic */), literalArr(exprs)]);
  119323. }
  119324. else {
  119325. return CHECK_VAR.callFn([VIEW_VAR, literal(nodeIndex), literal(0 /* Inline */)].concat(exprs));
  119326. }
  119327. }
  119328. /**
  119329. * @param {?} nodeIndex
  119330. * @param {?} bindingIdx
  119331. * @param {?} expr
  119332. * @return {?}
  119333. */
  119334. function callUnwrapValue(nodeIndex, bindingIdx, expr) {
  119335. return importExpr(Identifiers.unwrapValue).callFn([
  119336. VIEW_VAR, literal(nodeIndex), literal(bindingIdx), expr
  119337. ]);
  119338. }
  119339. /**
  119340. * @param {?} nodes
  119341. * @param {?=} result
  119342. * @return {?}
  119343. */
  119344. function findStaticQueryIds(nodes, result) {
  119345. if (result === void 0) { result = new Map(); }
  119346. nodes.forEach(function (node) {
  119347. var /** @type {?} */ staticQueryIds = new Set();
  119348. var /** @type {?} */ dynamicQueryIds = new Set();
  119349. var /** @type {?} */ queryMatches = /** @type {?} */ ((undefined));
  119350. if (node instanceof ElementAst) {
  119351. findStaticQueryIds(node.children, result);
  119352. node.children.forEach(function (child) {
  119353. var /** @type {?} */ childData = /** @type {?} */ ((result.get(child)));
  119354. childData.staticQueryIds.forEach(function (queryId) { return staticQueryIds.add(queryId); });
  119355. childData.dynamicQueryIds.forEach(function (queryId) { return dynamicQueryIds.add(queryId); });
  119356. });
  119357. queryMatches = node.queryMatches;
  119358. }
  119359. else if (node instanceof EmbeddedTemplateAst) {
  119360. findStaticQueryIds(node.children, result);
  119361. node.children.forEach(function (child) {
  119362. var /** @type {?} */ childData = /** @type {?} */ ((result.get(child)));
  119363. childData.staticQueryIds.forEach(function (queryId) { return dynamicQueryIds.add(queryId); });
  119364. childData.dynamicQueryIds.forEach(function (queryId) { return dynamicQueryIds.add(queryId); });
  119365. });
  119366. queryMatches = node.queryMatches;
  119367. }
  119368. if (queryMatches) {
  119369. queryMatches.forEach(function (match) { return staticQueryIds.add(match.queryId); });
  119370. }
  119371. dynamicQueryIds.forEach(function (queryId) { return staticQueryIds.delete(queryId); });
  119372. result.set(node, { staticQueryIds: staticQueryIds, dynamicQueryIds: dynamicQueryIds });
  119373. });
  119374. return result;
  119375. }
  119376. /**
  119377. * @param {?} nodeStaticQueryIds
  119378. * @return {?}
  119379. */
  119380. function staticViewQueryIds(nodeStaticQueryIds) {
  119381. var /** @type {?} */ staticQueryIds = new Set();
  119382. var /** @type {?} */ dynamicQueryIds = new Set();
  119383. Array.from(nodeStaticQueryIds.values()).forEach(function (entry) {
  119384. entry.staticQueryIds.forEach(function (queryId) { return staticQueryIds.add(queryId); });
  119385. entry.dynamicQueryIds.forEach(function (queryId) { return dynamicQueryIds.add(queryId); });
  119386. });
  119387. dynamicQueryIds.forEach(function (queryId) { return staticQueryIds.delete(queryId); });
  119388. return { staticQueryIds: staticQueryIds, dynamicQueryIds: dynamicQueryIds };
  119389. }
  119390. /**
  119391. * @param {?} eventAst
  119392. * @param {?} dirAst
  119393. * @return {?}
  119394. */
  119395. function elementEventNameAndTarget(eventAst, dirAst) {
  119396. if (eventAst.isAnimation) {
  119397. return {
  119398. name: "@" + eventAst.name + "." + eventAst.phase,
  119399. target: dirAst && dirAst.directive.isComponent ? 'component' : null
  119400. };
  119401. }
  119402. else {
  119403. return eventAst;
  119404. }
  119405. }
  119406. /**
  119407. * @param {?} queryIds
  119408. * @param {?} queryId
  119409. * @param {?} isFirst
  119410. * @return {?}
  119411. */
  119412. function calcStaticDynamicQueryFlags(queryIds, queryId, isFirst) {
  119413. var /** @type {?} */ flags = 0;
  119414. // Note: We only make queries static that query for a single item.
  119415. // This is because of backwards compatibility with the old view compiler...
  119416. if (isFirst && (queryIds.staticQueryIds.has(queryId) || !queryIds.dynamicQueryIds.has(queryId))) {
  119417. flags |= 268435456 /* StaticQuery */;
  119418. }
  119419. else {
  119420. flags |= 536870912 /* DynamicQuery */;
  119421. }
  119422. return flags;
  119423. }
  119424. /**
  119425. * @param {?} target
  119426. * @param {?} name
  119427. * @return {?}
  119428. */
  119429. function elementEventFullName(target, name) {
  119430. return target ? target + ":" + name : name;
  119431. }
  119432. /**
  119433. * @fileoverview added by tsickle
  119434. * @suppress {checkTypes} checked by tsc
  119435. */
  119436. /**
  119437. * @license
  119438. * Copyright Google Inc. All Rights Reserved.
  119439. *
  119440. * Use of this source code is governed by an MIT-style license that can be
  119441. * found in the LICENSE file at https://angular.io/license
  119442. */
  119443. /**
  119444. * A container for message extracted from the templates.
  119445. */
  119446. var MessageBundle = /** @class */ (function () {
  119447. function MessageBundle(_htmlParser, _implicitTags, _implicitAttrs, _locale) {
  119448. if (_locale === void 0) { _locale = null; }
  119449. this._htmlParser = _htmlParser;
  119450. this._implicitTags = _implicitTags;
  119451. this._implicitAttrs = _implicitAttrs;
  119452. this._locale = _locale;
  119453. this._messages = [];
  119454. }
  119455. /**
  119456. * @param {?} html
  119457. * @param {?} url
  119458. * @param {?} interpolationConfig
  119459. * @return {?}
  119460. */
  119461. MessageBundle.prototype.updateFromTemplate = /**
  119462. * @param {?} html
  119463. * @param {?} url
  119464. * @param {?} interpolationConfig
  119465. * @return {?}
  119466. */
  119467. function (html, url, interpolationConfig) {
  119468. var /** @type {?} */ htmlParserResult = this._htmlParser.parse(html, url, true, interpolationConfig);
  119469. if (htmlParserResult.errors.length) {
  119470. return htmlParserResult.errors;
  119471. }
  119472. var /** @type {?} */ i18nParserResult = extractMessages(htmlParserResult.rootNodes, interpolationConfig, this._implicitTags, this._implicitAttrs);
  119473. if (i18nParserResult.errors.length) {
  119474. return i18nParserResult.errors;
  119475. }
  119476. (_a = this._messages).push.apply(_a, i18nParserResult.messages);
  119477. return [];
  119478. var _a;
  119479. };
  119480. // Return the message in the internal format
  119481. // The public (serialized) format might be different, see the `write` method.
  119482. /**
  119483. * @return {?}
  119484. */
  119485. MessageBundle.prototype.getMessages = /**
  119486. * @return {?}
  119487. */
  119488. function () { return this._messages; };
  119489. /**
  119490. * @param {?} serializer
  119491. * @param {?=} filterSources
  119492. * @return {?}
  119493. */
  119494. MessageBundle.prototype.write = /**
  119495. * @param {?} serializer
  119496. * @param {?=} filterSources
  119497. * @return {?}
  119498. */
  119499. function (serializer, filterSources) {
  119500. var /** @type {?} */ messages = {};
  119501. var /** @type {?} */ mapperVisitor = new MapPlaceholderNames();
  119502. // Deduplicate messages based on their ID
  119503. this._messages.forEach(function (message) {
  119504. var /** @type {?} */ id = serializer.digest(message);
  119505. if (!messages.hasOwnProperty(id)) {
  119506. messages[id] = message;
  119507. }
  119508. else {
  119509. (_a = messages[id].sources).push.apply(_a, message.sources);
  119510. }
  119511. var _a;
  119512. });
  119513. // Transform placeholder names using the serializer mapping
  119514. var /** @type {?} */ msgList = Object.keys(messages).map(function (id) {
  119515. var /** @type {?} */ mapper = serializer.createNameMapper(messages[id]);
  119516. var /** @type {?} */ src = messages[id];
  119517. var /** @type {?} */ nodes = mapper ? mapperVisitor.convert(src.nodes, mapper) : src.nodes;
  119518. var /** @type {?} */ transformedMessage = new Message(nodes, {}, {}, src.meaning, src.description, id);
  119519. transformedMessage.sources = src.sources;
  119520. if (filterSources) {
  119521. transformedMessage.sources.forEach(function (source) { return source.filePath = filterSources(source.filePath); });
  119522. }
  119523. return transformedMessage;
  119524. });
  119525. return serializer.write(msgList, this._locale);
  119526. };
  119527. return MessageBundle;
  119528. }());
  119529. var MapPlaceholderNames = /** @class */ (function (_super) {
  119530. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(MapPlaceholderNames, _super);
  119531. function MapPlaceholderNames() {
  119532. return _super !== null && _super.apply(this, arguments) || this;
  119533. }
  119534. /**
  119535. * @param {?} nodes
  119536. * @param {?} mapper
  119537. * @return {?}
  119538. */
  119539. MapPlaceholderNames.prototype.convert = /**
  119540. * @param {?} nodes
  119541. * @param {?} mapper
  119542. * @return {?}
  119543. */
  119544. function (nodes, mapper) {
  119545. var _this = this;
  119546. return mapper ? nodes.map(function (n) { return n.visit(_this, mapper); }) : nodes;
  119547. };
  119548. /**
  119549. * @param {?} ph
  119550. * @param {?} mapper
  119551. * @return {?}
  119552. */
  119553. MapPlaceholderNames.prototype.visitTagPlaceholder = /**
  119554. * @param {?} ph
  119555. * @param {?} mapper
  119556. * @return {?}
  119557. */
  119558. function (ph, mapper) {
  119559. var _this = this;
  119560. var /** @type {?} */ startName = /** @type {?} */ ((mapper.toPublicName(ph.startName)));
  119561. var /** @type {?} */ closeName = ph.closeName ? /** @type {?} */ ((mapper.toPublicName(ph.closeName))) : ph.closeName;
  119562. var /** @type {?} */ children = ph.children.map(function (n) { return n.visit(_this, mapper); });
  119563. return new TagPlaceholder(ph.tag, ph.attrs, startName, closeName, children, ph.isVoid, ph.sourceSpan);
  119564. };
  119565. /**
  119566. * @param {?} ph
  119567. * @param {?} mapper
  119568. * @return {?}
  119569. */
  119570. MapPlaceholderNames.prototype.visitPlaceholder = /**
  119571. * @param {?} ph
  119572. * @param {?} mapper
  119573. * @return {?}
  119574. */
  119575. function (ph, mapper) {
  119576. return new Placeholder(ph.value, /** @type {?} */ ((mapper.toPublicName(ph.name))), ph.sourceSpan);
  119577. };
  119578. /**
  119579. * @param {?} ph
  119580. * @param {?} mapper
  119581. * @return {?}
  119582. */
  119583. MapPlaceholderNames.prototype.visitIcuPlaceholder = /**
  119584. * @param {?} ph
  119585. * @param {?} mapper
  119586. * @return {?}
  119587. */
  119588. function (ph, mapper) {
  119589. return new IcuPlaceholder(ph.value, /** @type {?} */ ((mapper.toPublicName(ph.name))), ph.sourceSpan);
  119590. };
  119591. return MapPlaceholderNames;
  119592. }(CloneVisitor));
  119593. /**
  119594. * @fileoverview added by tsickle
  119595. * @suppress {checkTypes} checked by tsc
  119596. */
  119597. /**
  119598. * @license
  119599. * Copyright Google Inc. All Rights Reserved.
  119600. *
  119601. * Use of this source code is governed by an MIT-style license that can be
  119602. * found in the LICENSE file at https://angular.io/license
  119603. */
  119604. var GeneratedFile = /** @class */ (function () {
  119605. function GeneratedFile(srcFileUrl, genFileUrl, sourceOrStmts) {
  119606. this.srcFileUrl = srcFileUrl;
  119607. this.genFileUrl = genFileUrl;
  119608. if (typeof sourceOrStmts === 'string') {
  119609. this.source = sourceOrStmts;
  119610. this.stmts = null;
  119611. }
  119612. else {
  119613. this.source = null;
  119614. this.stmts = sourceOrStmts;
  119615. }
  119616. }
  119617. /**
  119618. * @param {?} other
  119619. * @return {?}
  119620. */
  119621. GeneratedFile.prototype.isEquivalent = /**
  119622. * @param {?} other
  119623. * @return {?}
  119624. */
  119625. function (other) {
  119626. if (this.genFileUrl !== other.genFileUrl) {
  119627. return false;
  119628. }
  119629. if (this.source) {
  119630. return this.source === other.source;
  119631. }
  119632. if (other.stmts == null) {
  119633. return false;
  119634. }
  119635. // Note: the constructor guarantees that if this.source is not filled,
  119636. // then this.stmts is.
  119637. return areAllEquivalent(/** @type {?} */ ((this.stmts)), /** @type {?} */ ((other.stmts)));
  119638. };
  119639. return GeneratedFile;
  119640. }());
  119641. /**
  119642. * @param {?} file
  119643. * @param {?=} preamble
  119644. * @return {?}
  119645. */
  119646. function toTypeScript(file, preamble) {
  119647. if (preamble === void 0) { preamble = ''; }
  119648. if (!file.stmts) {
  119649. throw new Error("Illegal state: No stmts present on GeneratedFile " + file.genFileUrl);
  119650. }
  119651. return new TypeScriptEmitter().emitStatements(file.genFileUrl, file.stmts, preamble);
  119652. }
  119653. /**
  119654. * @fileoverview added by tsickle
  119655. * @suppress {checkTypes} checked by tsc
  119656. */
  119657. /**
  119658. * @license
  119659. * Copyright Google Inc. All Rights Reserved.
  119660. *
  119661. * Use of this source code is governed by an MIT-style license that can be
  119662. * found in the LICENSE file at https://angular.io/license
  119663. */
  119664. /**
  119665. * @record
  119666. */
  119667. /**
  119668. * @param {?} moduleMeta
  119669. * @param {?} reflector
  119670. * @return {?}
  119671. */
  119672. function listLazyRoutes(moduleMeta, reflector) {
  119673. var /** @type {?} */ allLazyRoutes = [];
  119674. for (var _i = 0, _a = moduleMeta.transitiveModule.providers; _i < _a.length; _i++) {
  119675. var _b = _a[_i], provider = _b.provider, module = _b.module;
  119676. if (tokenReference(provider.token) === reflector.ROUTES) {
  119677. var /** @type {?} */ loadChildren = _collectLoadChildren(provider.useValue);
  119678. for (var _c = 0, loadChildren_1 = loadChildren; _c < loadChildren_1.length; _c++) {
  119679. var route = loadChildren_1[_c];
  119680. allLazyRoutes.push(parseLazyRoute(route, reflector, module.reference));
  119681. }
  119682. }
  119683. }
  119684. return allLazyRoutes;
  119685. }
  119686. /**
  119687. * @param {?} routes
  119688. * @param {?=} target
  119689. * @return {?}
  119690. */
  119691. function _collectLoadChildren(routes, target) {
  119692. if (target === void 0) { target = []; }
  119693. if (typeof routes === 'string') {
  119694. target.push(routes);
  119695. }
  119696. else if (Array.isArray(routes)) {
  119697. for (var _i = 0, routes_1 = routes; _i < routes_1.length; _i++) {
  119698. var route = routes_1[_i];
  119699. _collectLoadChildren(route, target);
  119700. }
  119701. }
  119702. else if (routes.loadChildren) {
  119703. _collectLoadChildren(routes.loadChildren, target);
  119704. }
  119705. else if (routes.children) {
  119706. _collectLoadChildren(routes.children, target);
  119707. }
  119708. return target;
  119709. }
  119710. /**
  119711. * @param {?} route
  119712. * @param {?} reflector
  119713. * @param {?=} module
  119714. * @return {?}
  119715. */
  119716. function parseLazyRoute(route, reflector, module) {
  119717. var _a = route.split('#'), routePath = _a[0], routeName = _a[1];
  119718. var /** @type {?} */ referencedModule = reflector.resolveExternalReference({
  119719. moduleName: routePath,
  119720. name: routeName,
  119721. }, module ? module.filePath : undefined);
  119722. return { route: route, module: module || referencedModule, referencedModule: referencedModule };
  119723. }
  119724. /**
  119725. * @fileoverview added by tsickle
  119726. * @suppress {checkTypes} checked by tsc
  119727. */
  119728. /**
  119729. * @license
  119730. * Copyright Google Inc. All Rights Reserved.
  119731. *
  119732. * Use of this source code is governed by an MIT-style license that can be
  119733. * found in the LICENSE file at https://angular.io/license
  119734. */
  119735. var ResolvedStaticSymbol = /** @class */ (function () {
  119736. function ResolvedStaticSymbol(symbol, metadata) {
  119737. this.symbol = symbol;
  119738. this.metadata = metadata;
  119739. }
  119740. return ResolvedStaticSymbol;
  119741. }());
  119742. /**
  119743. * The host of the SymbolResolverHost disconnects the implementation from TypeScript / other
  119744. * language
  119745. * services and from underlying file systems.
  119746. * @record
  119747. */
  119748. var SUPPORTED_SCHEMA_VERSION = 4;
  119749. /**
  119750. * This class is responsible for loading metadata per symbol,
  119751. * and normalizing references between symbols.
  119752. *
  119753. * Internally, it only uses symbols without members,
  119754. * and deduces the values for symbols with members based
  119755. * on these symbols.
  119756. */
  119757. var StaticSymbolResolver = /** @class */ (function () {
  119758. function StaticSymbolResolver(host, staticSymbolCache, summaryResolver, errorRecorder) {
  119759. this.host = host;
  119760. this.staticSymbolCache = staticSymbolCache;
  119761. this.summaryResolver = summaryResolver;
  119762. this.errorRecorder = errorRecorder;
  119763. this.metadataCache = new Map();
  119764. this.resolvedSymbols = new Map();
  119765. this.resolvedFilePaths = new Set();
  119766. this.importAs = new Map();
  119767. this.symbolResourcePaths = new Map();
  119768. this.symbolFromFile = new Map();
  119769. this.knownFileNameToModuleNames = new Map();
  119770. }
  119771. /**
  119772. * @param {?} staticSymbol
  119773. * @return {?}
  119774. */
  119775. StaticSymbolResolver.prototype.resolveSymbol = /**
  119776. * @param {?} staticSymbol
  119777. * @return {?}
  119778. */
  119779. function (staticSymbol) {
  119780. if (staticSymbol.members.length > 0) {
  119781. return /** @type {?} */ ((this._resolveSymbolMembers(staticSymbol)));
  119782. }
  119783. // Note: always ask for a summary first,
  119784. // as we might have read shallow metadata via a .d.ts file
  119785. // for the symbol.
  119786. var /** @type {?} */ resultFromSummary = /** @type {?} */ ((this._resolveSymbolFromSummary(staticSymbol)));
  119787. if (resultFromSummary) {
  119788. return resultFromSummary;
  119789. }
  119790. var /** @type {?} */ resultFromCache = this.resolvedSymbols.get(staticSymbol);
  119791. if (resultFromCache) {
  119792. return resultFromCache;
  119793. }
  119794. // Note: Some users use libraries that were not compiled with ngc, i.e. they don't
  119795. // have summaries, only .d.ts files. So we always need to check both, the summary
  119796. // and metadata.
  119797. this._createSymbolsOf(staticSymbol.filePath);
  119798. return /** @type {?} */ ((this.resolvedSymbols.get(staticSymbol)));
  119799. };
  119800. /**
  119801. * getImportAs produces a symbol that can be used to import the given symbol.
  119802. * The import might be different than the symbol if the symbol is exported from
  119803. * a library with a summary; in which case we want to import the symbol from the
  119804. * ngfactory re-export instead of directly to avoid introducing a direct dependency
  119805. * on an otherwise indirect dependency.
  119806. *
  119807. * @param staticSymbol the symbol for which to generate a import symbol
  119808. */
  119809. /**
  119810. * getImportAs produces a symbol that can be used to import the given symbol.
  119811. * The import might be different than the symbol if the symbol is exported from
  119812. * a library with a summary; in which case we want to import the symbol from the
  119813. * ngfactory re-export instead of directly to avoid introducing a direct dependency
  119814. * on an otherwise indirect dependency.
  119815. *
  119816. * @param {?} staticSymbol the symbol for which to generate a import symbol
  119817. * @param {?=} useSummaries
  119818. * @return {?}
  119819. */
  119820. StaticSymbolResolver.prototype.getImportAs = /**
  119821. * getImportAs produces a symbol that can be used to import the given symbol.
  119822. * The import might be different than the symbol if the symbol is exported from
  119823. * a library with a summary; in which case we want to import the symbol from the
  119824. * ngfactory re-export instead of directly to avoid introducing a direct dependency
  119825. * on an otherwise indirect dependency.
  119826. *
  119827. * @param {?} staticSymbol the symbol for which to generate a import symbol
  119828. * @param {?=} useSummaries
  119829. * @return {?}
  119830. */
  119831. function (staticSymbol, useSummaries) {
  119832. if (useSummaries === void 0) { useSummaries = true; }
  119833. if (staticSymbol.members.length) {
  119834. var /** @type {?} */ baseSymbol = this.getStaticSymbol(staticSymbol.filePath, staticSymbol.name);
  119835. var /** @type {?} */ baseImportAs = this.getImportAs(baseSymbol, useSummaries);
  119836. return baseImportAs ?
  119837. this.getStaticSymbol(baseImportAs.filePath, baseImportAs.name, staticSymbol.members) :
  119838. null;
  119839. }
  119840. var /** @type {?} */ summarizedFileName = stripSummaryForJitFileSuffix(staticSymbol.filePath);
  119841. if (summarizedFileName !== staticSymbol.filePath) {
  119842. var /** @type {?} */ summarizedName = stripSummaryForJitNameSuffix(staticSymbol.name);
  119843. var /** @type {?} */ baseSymbol = this.getStaticSymbol(summarizedFileName, summarizedName, staticSymbol.members);
  119844. var /** @type {?} */ baseImportAs = this.getImportAs(baseSymbol, useSummaries);
  119845. return baseImportAs ?
  119846. this.getStaticSymbol(summaryForJitFileName(baseImportAs.filePath), summaryForJitName(baseImportAs.name), baseSymbol.members) :
  119847. null;
  119848. }
  119849. var /** @type {?} */ result = (useSummaries && this.summaryResolver.getImportAs(staticSymbol)) || null;
  119850. if (!result) {
  119851. result = /** @type {?} */ ((this.importAs.get(staticSymbol)));
  119852. }
  119853. return result;
  119854. };
  119855. /**
  119856. * getResourcePath produces the path to the original location of the symbol and should
  119857. * be used to determine the relative location of resource references recorded in
  119858. * symbol metadata.
  119859. */
  119860. /**
  119861. * getResourcePath produces the path to the original location of the symbol and should
  119862. * be used to determine the relative location of resource references recorded in
  119863. * symbol metadata.
  119864. * @param {?} staticSymbol
  119865. * @return {?}
  119866. */
  119867. StaticSymbolResolver.prototype.getResourcePath = /**
  119868. * getResourcePath produces the path to the original location of the symbol and should
  119869. * be used to determine the relative location of resource references recorded in
  119870. * symbol metadata.
  119871. * @param {?} staticSymbol
  119872. * @return {?}
  119873. */
  119874. function (staticSymbol) {
  119875. return this.symbolResourcePaths.get(staticSymbol) || staticSymbol.filePath;
  119876. };
  119877. /**
  119878. * getTypeArity returns the number of generic type parameters the given symbol
  119879. * has. If the symbol is not a type the result is null.
  119880. */
  119881. /**
  119882. * getTypeArity returns the number of generic type parameters the given symbol
  119883. * has. If the symbol is not a type the result is null.
  119884. * @param {?} staticSymbol
  119885. * @return {?}
  119886. */
  119887. StaticSymbolResolver.prototype.getTypeArity = /**
  119888. * getTypeArity returns the number of generic type parameters the given symbol
  119889. * has. If the symbol is not a type the result is null.
  119890. * @param {?} staticSymbol
  119891. * @return {?}
  119892. */
  119893. function (staticSymbol) {
  119894. // If the file is a factory/ngsummary file, don't resolve the symbol as doing so would
  119895. // cause the metadata for an factory/ngsummary file to be loaded which doesn't exist.
  119896. // All references to generated classes must include the correct arity whenever
  119897. // generating code.
  119898. if (isGeneratedFile(staticSymbol.filePath)) {
  119899. return null;
  119900. }
  119901. var /** @type {?} */ resolvedSymbol = unwrapResolvedMetadata(this.resolveSymbol(staticSymbol));
  119902. while (resolvedSymbol && resolvedSymbol.metadata instanceof StaticSymbol) {
  119903. resolvedSymbol = unwrapResolvedMetadata(this.resolveSymbol(resolvedSymbol.metadata));
  119904. }
  119905. return (resolvedSymbol && resolvedSymbol.metadata && resolvedSymbol.metadata.arity) || null;
  119906. };
  119907. /**
  119908. * @param {?} filePath
  119909. * @return {?}
  119910. */
  119911. StaticSymbolResolver.prototype.getKnownModuleName = /**
  119912. * @param {?} filePath
  119913. * @return {?}
  119914. */
  119915. function (filePath) {
  119916. return this.knownFileNameToModuleNames.get(filePath) || null;
  119917. };
  119918. /**
  119919. * @param {?} sourceSymbol
  119920. * @param {?} targetSymbol
  119921. * @return {?}
  119922. */
  119923. StaticSymbolResolver.prototype.recordImportAs = /**
  119924. * @param {?} sourceSymbol
  119925. * @param {?} targetSymbol
  119926. * @return {?}
  119927. */
  119928. function (sourceSymbol, targetSymbol) {
  119929. sourceSymbol.assertNoMembers();
  119930. targetSymbol.assertNoMembers();
  119931. this.importAs.set(sourceSymbol, targetSymbol);
  119932. };
  119933. /**
  119934. * @param {?} fileName
  119935. * @param {?} moduleName
  119936. * @return {?}
  119937. */
  119938. StaticSymbolResolver.prototype.recordModuleNameForFileName = /**
  119939. * @param {?} fileName
  119940. * @param {?} moduleName
  119941. * @return {?}
  119942. */
  119943. function (fileName, moduleName) {
  119944. this.knownFileNameToModuleNames.set(fileName, moduleName);
  119945. };
  119946. /**
  119947. * Invalidate all information derived from the given file.
  119948. *
  119949. * @param fileName the file to invalidate
  119950. */
  119951. /**
  119952. * Invalidate all information derived from the given file.
  119953. *
  119954. * @param {?} fileName the file to invalidate
  119955. * @return {?}
  119956. */
  119957. StaticSymbolResolver.prototype.invalidateFile = /**
  119958. * Invalidate all information derived from the given file.
  119959. *
  119960. * @param {?} fileName the file to invalidate
  119961. * @return {?}
  119962. */
  119963. function (fileName) {
  119964. this.metadataCache.delete(fileName);
  119965. this.resolvedFilePaths.delete(fileName);
  119966. var /** @type {?} */ symbols = this.symbolFromFile.get(fileName);
  119967. if (symbols) {
  119968. this.symbolFromFile.delete(fileName);
  119969. for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
  119970. var symbol = symbols_1[_i];
  119971. this.resolvedSymbols.delete(symbol);
  119972. this.importAs.delete(symbol);
  119973. this.symbolResourcePaths.delete(symbol);
  119974. }
  119975. }
  119976. };
  119977. /* @internal */
  119978. /**
  119979. * @template T
  119980. * @param {?} cb
  119981. * @return {?}
  119982. */
  119983. StaticSymbolResolver.prototype.ignoreErrorsFor = /**
  119984. * @template T
  119985. * @param {?} cb
  119986. * @return {?}
  119987. */
  119988. function (cb) {
  119989. var /** @type {?} */ recorder = this.errorRecorder;
  119990. this.errorRecorder = function () { };
  119991. try {
  119992. return cb();
  119993. }
  119994. finally {
  119995. this.errorRecorder = recorder;
  119996. }
  119997. };
  119998. /**
  119999. * @param {?} staticSymbol
  120000. * @return {?}
  120001. */
  120002. StaticSymbolResolver.prototype._resolveSymbolMembers = /**
  120003. * @param {?} staticSymbol
  120004. * @return {?}
  120005. */
  120006. function (staticSymbol) {
  120007. var /** @type {?} */ members = staticSymbol.members;
  120008. var /** @type {?} */ baseResolvedSymbol = this.resolveSymbol(this.getStaticSymbol(staticSymbol.filePath, staticSymbol.name));
  120009. if (!baseResolvedSymbol) {
  120010. return null;
  120011. }
  120012. var /** @type {?} */ baseMetadata = unwrapResolvedMetadata(baseResolvedSymbol.metadata);
  120013. if (baseMetadata instanceof StaticSymbol) {
  120014. return new ResolvedStaticSymbol(staticSymbol, this.getStaticSymbol(baseMetadata.filePath, baseMetadata.name, members));
  120015. }
  120016. else if (baseMetadata && baseMetadata.__symbolic === 'class') {
  120017. if (baseMetadata.statics && members.length === 1) {
  120018. return new ResolvedStaticSymbol(staticSymbol, baseMetadata.statics[members[0]]);
  120019. }
  120020. }
  120021. else {
  120022. var /** @type {?} */ value = baseMetadata;
  120023. for (var /** @type {?} */ i = 0; i < members.length && value; i++) {
  120024. value = value[members[i]];
  120025. }
  120026. return new ResolvedStaticSymbol(staticSymbol, value);
  120027. }
  120028. return null;
  120029. };
  120030. /**
  120031. * @param {?} staticSymbol
  120032. * @return {?}
  120033. */
  120034. StaticSymbolResolver.prototype._resolveSymbolFromSummary = /**
  120035. * @param {?} staticSymbol
  120036. * @return {?}
  120037. */
  120038. function (staticSymbol) {
  120039. var /** @type {?} */ summary = this.summaryResolver.resolveSummary(staticSymbol);
  120040. return summary ? new ResolvedStaticSymbol(staticSymbol, summary.metadata) : null;
  120041. };
  120042. /**
  120043. * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
  120044. * All types passed to the StaticResolver should be pseudo-types returned by this method.
  120045. *
  120046. * @param declarationFile the absolute path of the file where the symbol is declared
  120047. * @param name the name of the type.
  120048. * @param members a symbol for a static member of the named type
  120049. */
  120050. /**
  120051. * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
  120052. * All types passed to the StaticResolver should be pseudo-types returned by this method.
  120053. *
  120054. * @param {?} declarationFile the absolute path of the file where the symbol is declared
  120055. * @param {?} name the name of the type.
  120056. * @param {?=} members a symbol for a static member of the named type
  120057. * @return {?}
  120058. */
  120059. StaticSymbolResolver.prototype.getStaticSymbol = /**
  120060. * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
  120061. * All types passed to the StaticResolver should be pseudo-types returned by this method.
  120062. *
  120063. * @param {?} declarationFile the absolute path of the file where the symbol is declared
  120064. * @param {?} name the name of the type.
  120065. * @param {?=} members a symbol for a static member of the named type
  120066. * @return {?}
  120067. */
  120068. function (declarationFile, name, members) {
  120069. return this.staticSymbolCache.get(declarationFile, name, members);
  120070. };
  120071. /**
  120072. * hasDecorators checks a file's metadata for the presense of decorators without evalutating the
  120073. * metadata.
  120074. *
  120075. * @param filePath the absolute path to examine for decorators.
  120076. * @returns true if any class in the file has a decorator.
  120077. */
  120078. /**
  120079. * hasDecorators checks a file's metadata for the presense of decorators without evalutating the
  120080. * metadata.
  120081. *
  120082. * @param {?} filePath the absolute path to examine for decorators.
  120083. * @return {?} true if any class in the file has a decorator.
  120084. */
  120085. StaticSymbolResolver.prototype.hasDecorators = /**
  120086. * hasDecorators checks a file's metadata for the presense of decorators without evalutating the
  120087. * metadata.
  120088. *
  120089. * @param {?} filePath the absolute path to examine for decorators.
  120090. * @return {?} true if any class in the file has a decorator.
  120091. */
  120092. function (filePath) {
  120093. var /** @type {?} */ metadata = this.getModuleMetadata(filePath);
  120094. if (metadata['metadata']) {
  120095. return Object.keys(metadata['metadata']).some(function (metadataKey) {
  120096. var /** @type {?} */ entry = metadata['metadata'][metadataKey];
  120097. return entry && entry.__symbolic === 'class' && entry.decorators;
  120098. });
  120099. }
  120100. return false;
  120101. };
  120102. /**
  120103. * @param {?} filePath
  120104. * @return {?}
  120105. */
  120106. StaticSymbolResolver.prototype.getSymbolsOf = /**
  120107. * @param {?} filePath
  120108. * @return {?}
  120109. */
  120110. function (filePath) {
  120111. var /** @type {?} */ summarySymbols = this.summaryResolver.getSymbolsOf(filePath);
  120112. if (summarySymbols) {
  120113. return summarySymbols;
  120114. }
  120115. // Note: Some users use libraries that were not compiled with ngc, i.e. they don't
  120116. // have summaries, only .d.ts files, but `summaryResolver.isLibraryFile` returns true.
  120117. this._createSymbolsOf(filePath);
  120118. var /** @type {?} */ metadataSymbols = [];
  120119. this.resolvedSymbols.forEach(function (resolvedSymbol) {
  120120. if (resolvedSymbol.symbol.filePath === filePath) {
  120121. metadataSymbols.push(resolvedSymbol.symbol);
  120122. }
  120123. });
  120124. return metadataSymbols;
  120125. };
  120126. /**
  120127. * @param {?} filePath
  120128. * @return {?}
  120129. */
  120130. StaticSymbolResolver.prototype._createSymbolsOf = /**
  120131. * @param {?} filePath
  120132. * @return {?}
  120133. */
  120134. function (filePath) {
  120135. var _this = this;
  120136. if (this.resolvedFilePaths.has(filePath)) {
  120137. return;
  120138. }
  120139. this.resolvedFilePaths.add(filePath);
  120140. var /** @type {?} */ resolvedSymbols = [];
  120141. var /** @type {?} */ metadata = this.getModuleMetadata(filePath);
  120142. if (metadata['importAs']) {
  120143. // Index bundle indices should use the importAs module name defined
  120144. // in the bundle.
  120145. this.knownFileNameToModuleNames.set(filePath, metadata['importAs']);
  120146. }
  120147. // handle the symbols in one of the re-export location
  120148. if (metadata['exports']) {
  120149. var _loop_1 = function (moduleExport) {
  120150. // handle the symbols in the list of explicitly re-exported symbols.
  120151. if (moduleExport.export) {
  120152. moduleExport.export.forEach(function (exportSymbol) {
  120153. var /** @type {?} */ symbolName;
  120154. if (typeof exportSymbol === 'string') {
  120155. symbolName = exportSymbol;
  120156. }
  120157. else {
  120158. symbolName = exportSymbol.as;
  120159. }
  120160. symbolName = unescapeIdentifier(symbolName);
  120161. var /** @type {?} */ symName = symbolName;
  120162. if (typeof exportSymbol !== 'string') {
  120163. symName = unescapeIdentifier(exportSymbol.name);
  120164. }
  120165. var /** @type {?} */ resolvedModule = _this.resolveModule(moduleExport.from, filePath);
  120166. if (resolvedModule) {
  120167. var /** @type {?} */ targetSymbol = _this.getStaticSymbol(resolvedModule, symName);
  120168. var /** @type {?} */ sourceSymbol = _this.getStaticSymbol(filePath, symbolName);
  120169. resolvedSymbols.push(_this.createExport(sourceSymbol, targetSymbol));
  120170. }
  120171. });
  120172. }
  120173. else {
  120174. // handle the symbols via export * directives.
  120175. var /** @type {?} */ resolvedModule = this_1.resolveModule(moduleExport.from, filePath);
  120176. if (resolvedModule) {
  120177. var /** @type {?} */ nestedExports = this_1.getSymbolsOf(resolvedModule);
  120178. nestedExports.forEach(function (targetSymbol) {
  120179. var /** @type {?} */ sourceSymbol = _this.getStaticSymbol(filePath, targetSymbol.name);
  120180. resolvedSymbols.push(_this.createExport(sourceSymbol, targetSymbol));
  120181. });
  120182. }
  120183. }
  120184. };
  120185. var this_1 = this;
  120186. for (var _i = 0, _a = metadata['exports']; _i < _a.length; _i++) {
  120187. var moduleExport = _a[_i];
  120188. _loop_1(moduleExport);
  120189. }
  120190. }
  120191. // handle the actual metadata. Has to be after the exports
  120192. // as there migth be collisions in the names, and we want the symbols
  120193. // of the current module to win ofter reexports.
  120194. if (metadata['metadata']) {
  120195. // handle direct declarations of the symbol
  120196. var /** @type {?} */ topLevelSymbolNames_1 = new Set(Object.keys(metadata['metadata']).map(unescapeIdentifier));
  120197. var /** @type {?} */ origins_1 = metadata['origins'] || {};
  120198. Object.keys(metadata['metadata']).forEach(function (metadataKey) {
  120199. var /** @type {?} */ symbolMeta = metadata['metadata'][metadataKey];
  120200. var /** @type {?} */ name = unescapeIdentifier(metadataKey);
  120201. var /** @type {?} */ symbol = _this.getStaticSymbol(filePath, name);
  120202. var /** @type {?} */ origin = origins_1.hasOwnProperty(metadataKey) && origins_1[metadataKey];
  120203. if (origin) {
  120204. // If the symbol is from a bundled index, use the declaration location of the
  120205. // symbol so relative references (such as './my.html') will be calculated
  120206. // correctly.
  120207. var /** @type {?} */ originFilePath = _this.resolveModule(origin, filePath);
  120208. if (!originFilePath) {
  120209. _this.reportError(new Error("Couldn't resolve original symbol for " + origin + " from " + filePath));
  120210. }
  120211. else {
  120212. _this.symbolResourcePaths.set(symbol, originFilePath);
  120213. }
  120214. }
  120215. resolvedSymbols.push(_this.createResolvedSymbol(symbol, filePath, topLevelSymbolNames_1, symbolMeta));
  120216. });
  120217. }
  120218. resolvedSymbols.forEach(function (resolvedSymbol) { return _this.resolvedSymbols.set(resolvedSymbol.symbol, resolvedSymbol); });
  120219. this.symbolFromFile.set(filePath, resolvedSymbols.map(function (resolvedSymbol) { return resolvedSymbol.symbol; }));
  120220. };
  120221. /**
  120222. * @param {?} sourceSymbol
  120223. * @param {?} topLevelPath
  120224. * @param {?} topLevelSymbolNames
  120225. * @param {?} metadata
  120226. * @return {?}
  120227. */
  120228. StaticSymbolResolver.prototype.createResolvedSymbol = /**
  120229. * @param {?} sourceSymbol
  120230. * @param {?} topLevelPath
  120231. * @param {?} topLevelSymbolNames
  120232. * @param {?} metadata
  120233. * @return {?}
  120234. */
  120235. function (sourceSymbol, topLevelPath, topLevelSymbolNames, metadata) {
  120236. var _this = this;
  120237. // For classes that don't have Angular summaries / metadata,
  120238. // we only keep their arity, but nothing else
  120239. // (e.g. their constructor parameters).
  120240. // We do this to prevent introducing deep imports
  120241. // as we didn't generate .ngfactory.ts files with proper reexports.
  120242. if (this.summaryResolver.isLibraryFile(sourceSymbol.filePath) && metadata &&
  120243. metadata['__symbolic'] === 'class') {
  120244. var /** @type {?} */ transformedMeta_1 = { __symbolic: 'class', arity: metadata.arity };
  120245. return new ResolvedStaticSymbol(sourceSymbol, transformedMeta_1);
  120246. }
  120247. var /** @type {?} */ _originalFileMemo;
  120248. var /** @type {?} */ getOriginalName = function () {
  120249. if (!_originalFileMemo) {
  120250. // Guess what hte original file name is from the reference. If it has a `.d.ts` extension
  120251. // replace it with `.ts`. If it already has `.ts` just leave it in place. If it doesn't have
  120252. // .ts or .d.ts, append `.ts'. Also, if it is in `node_modules`, trim the `node_module`
  120253. // location as it is not important to finding the file.
  120254. _originalFileMemo =
  120255. _this.host.getOutputName(topLevelPath.replace(/((\.ts)|(\.d\.ts)|)$/, '.ts')
  120256. .replace(/^.*node_modules[/\\]/, ''));
  120257. }
  120258. return _originalFileMemo;
  120259. };
  120260. var /** @type {?} */ self = this;
  120261. var ReferenceTransformer = /** @class */ (function (_super) {
  120262. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ReferenceTransformer, _super);
  120263. function ReferenceTransformer() {
  120264. return _super !== null && _super.apply(this, arguments) || this;
  120265. }
  120266. /**
  120267. * @param {?} map
  120268. * @param {?} functionParams
  120269. * @return {?}
  120270. */
  120271. ReferenceTransformer.prototype.visitStringMap = /**
  120272. * @param {?} map
  120273. * @param {?} functionParams
  120274. * @return {?}
  120275. */
  120276. function (map, functionParams) {
  120277. var /** @type {?} */ symbolic = map['__symbolic'];
  120278. if (symbolic === 'function') {
  120279. var /** @type {?} */ oldLen = functionParams.length;
  120280. functionParams.push.apply(functionParams, (map['parameters'] || []));
  120281. var /** @type {?} */ result = _super.prototype.visitStringMap.call(this, map, functionParams);
  120282. functionParams.length = oldLen;
  120283. return result;
  120284. }
  120285. else if (symbolic === 'reference') {
  120286. var /** @type {?} */ module = map['module'];
  120287. var /** @type {?} */ name_1 = map['name'] ? unescapeIdentifier(map['name']) : map['name'];
  120288. if (!name_1) {
  120289. return null;
  120290. }
  120291. var /** @type {?} */ filePath = void 0;
  120292. if (module) {
  120293. filePath = /** @type {?} */ ((self.resolveModule(module, sourceSymbol.filePath)));
  120294. if (!filePath) {
  120295. return {
  120296. __symbolic: 'error',
  120297. message: "Could not resolve " + module + " relative to " + sourceSymbol.filePath + ".",
  120298. line: map["line"],
  120299. character: map["character"],
  120300. fileName: getOriginalName()
  120301. };
  120302. }
  120303. return {
  120304. __symbolic: 'resolved',
  120305. symbol: self.getStaticSymbol(filePath, name_1),
  120306. line: map["line"],
  120307. character: map["character"],
  120308. fileName: getOriginalName()
  120309. };
  120310. }
  120311. else if (functionParams.indexOf(name_1) >= 0) {
  120312. // reference to a function parameter
  120313. return { __symbolic: 'reference', name: name_1 };
  120314. }
  120315. else {
  120316. if (topLevelSymbolNames.has(name_1)) {
  120317. return self.getStaticSymbol(topLevelPath, name_1);
  120318. }
  120319. // ambient value
  120320. null;
  120321. }
  120322. }
  120323. else if (symbolic === 'error') {
  120324. return Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __assign */])({}, map, { fileName: getOriginalName() });
  120325. }
  120326. else {
  120327. return _super.prototype.visitStringMap.call(this, map, functionParams);
  120328. }
  120329. };
  120330. return ReferenceTransformer;
  120331. }(ValueTransformer));
  120332. var /** @type {?} */ transformedMeta = visitValue(metadata, new ReferenceTransformer(), []);
  120333. var /** @type {?} */ unwrappedTransformedMeta = unwrapResolvedMetadata(transformedMeta);
  120334. if (unwrappedTransformedMeta instanceof StaticSymbol) {
  120335. return this.createExport(sourceSymbol, unwrappedTransformedMeta);
  120336. }
  120337. return new ResolvedStaticSymbol(sourceSymbol, transformedMeta);
  120338. };
  120339. /**
  120340. * @param {?} sourceSymbol
  120341. * @param {?} targetSymbol
  120342. * @return {?}
  120343. */
  120344. StaticSymbolResolver.prototype.createExport = /**
  120345. * @param {?} sourceSymbol
  120346. * @param {?} targetSymbol
  120347. * @return {?}
  120348. */
  120349. function (sourceSymbol, targetSymbol) {
  120350. sourceSymbol.assertNoMembers();
  120351. targetSymbol.assertNoMembers();
  120352. if (this.summaryResolver.isLibraryFile(sourceSymbol.filePath) &&
  120353. this.summaryResolver.isLibraryFile(targetSymbol.filePath)) {
  120354. // This case is for an ng library importing symbols from a plain ts library
  120355. // transitively.
  120356. // Note: We rely on the fact that we discover symbols in the direction
  120357. // from source files to library files
  120358. this.importAs.set(targetSymbol, this.getImportAs(sourceSymbol) || sourceSymbol);
  120359. }
  120360. return new ResolvedStaticSymbol(sourceSymbol, targetSymbol);
  120361. };
  120362. /**
  120363. * @param {?} error
  120364. * @param {?=} context
  120365. * @param {?=} path
  120366. * @return {?}
  120367. */
  120368. StaticSymbolResolver.prototype.reportError = /**
  120369. * @param {?} error
  120370. * @param {?=} context
  120371. * @param {?=} path
  120372. * @return {?}
  120373. */
  120374. function (error, context, path) {
  120375. if (this.errorRecorder) {
  120376. this.errorRecorder(error, (context && context.filePath) || path);
  120377. }
  120378. else {
  120379. throw error;
  120380. }
  120381. };
  120382. /**
  120383. * @param {?} module an absolute path to a module file.
  120384. * @return {?}
  120385. */
  120386. StaticSymbolResolver.prototype.getModuleMetadata = /**
  120387. * @param {?} module an absolute path to a module file.
  120388. * @return {?}
  120389. */
  120390. function (module) {
  120391. var /** @type {?} */ moduleMetadata = this.metadataCache.get(module);
  120392. if (!moduleMetadata) {
  120393. var /** @type {?} */ moduleMetadatas = this.host.getMetadataFor(module);
  120394. if (moduleMetadatas) {
  120395. var /** @type {?} */ maxVersion_1 = -1;
  120396. moduleMetadatas.forEach(function (md) {
  120397. if (md && md['version'] > maxVersion_1) {
  120398. maxVersion_1 = md['version'];
  120399. moduleMetadata = md;
  120400. }
  120401. });
  120402. }
  120403. if (!moduleMetadata) {
  120404. moduleMetadata =
  120405. { __symbolic: 'module', version: SUPPORTED_SCHEMA_VERSION, module: module, metadata: {} };
  120406. }
  120407. if (moduleMetadata['version'] != SUPPORTED_SCHEMA_VERSION) {
  120408. var /** @type {?} */ errorMessage = moduleMetadata['version'] == 2 ?
  120409. "Unsupported metadata version " + moduleMetadata['version'] + " for module " + module + ". This module should be compiled with a newer version of ngc" :
  120410. "Metadata version mismatch for module " + module + ", found version " + moduleMetadata['version'] + ", expected " + SUPPORTED_SCHEMA_VERSION;
  120411. this.reportError(new Error(errorMessage));
  120412. }
  120413. this.metadataCache.set(module, moduleMetadata);
  120414. }
  120415. return moduleMetadata;
  120416. };
  120417. /**
  120418. * @param {?} module
  120419. * @param {?} symbolName
  120420. * @param {?=} containingFile
  120421. * @return {?}
  120422. */
  120423. StaticSymbolResolver.prototype.getSymbolByModule = /**
  120424. * @param {?} module
  120425. * @param {?} symbolName
  120426. * @param {?=} containingFile
  120427. * @return {?}
  120428. */
  120429. function (module, symbolName, containingFile) {
  120430. var /** @type {?} */ filePath = this.resolveModule(module, containingFile);
  120431. if (!filePath) {
  120432. this.reportError(new Error("Could not resolve module " + module + (containingFile ? ' relative to ' +
  120433. containingFile : '')));
  120434. return this.getStaticSymbol("ERROR:" + module, symbolName);
  120435. }
  120436. return this.getStaticSymbol(filePath, symbolName);
  120437. };
  120438. /**
  120439. * @param {?} module
  120440. * @param {?=} containingFile
  120441. * @return {?}
  120442. */
  120443. StaticSymbolResolver.prototype.resolveModule = /**
  120444. * @param {?} module
  120445. * @param {?=} containingFile
  120446. * @return {?}
  120447. */
  120448. function (module, containingFile) {
  120449. try {
  120450. return this.host.moduleNameToFileName(module, containingFile);
  120451. }
  120452. catch (/** @type {?} */ e) {
  120453. console.error("Could not resolve module '" + module + "' relative to file " + containingFile);
  120454. this.reportError(e, undefined, containingFile);
  120455. }
  120456. return null;
  120457. };
  120458. return StaticSymbolResolver;
  120459. }());
  120460. /**
  120461. * @param {?} identifier
  120462. * @return {?}
  120463. */
  120464. function unescapeIdentifier(identifier) {
  120465. return identifier.startsWith('___') ? identifier.substr(1) : identifier;
  120466. }
  120467. /**
  120468. * @param {?} metadata
  120469. * @return {?}
  120470. */
  120471. function unwrapResolvedMetadata(metadata) {
  120472. if (metadata && metadata.__symbolic === 'resolved') {
  120473. return metadata.symbol;
  120474. }
  120475. return metadata;
  120476. }
  120477. /**
  120478. * @fileoverview added by tsickle
  120479. * @suppress {checkTypes} checked by tsc
  120480. */
  120481. /**
  120482. * @param {?} srcFileName
  120483. * @param {?} forJitCtx
  120484. * @param {?} summaryResolver
  120485. * @param {?} symbolResolver
  120486. * @param {?} symbols
  120487. * @param {?} types
  120488. * @return {?}
  120489. */
  120490. function serializeSummaries(srcFileName, forJitCtx, summaryResolver, symbolResolver, symbols, types) {
  120491. var /** @type {?} */ toJsonSerializer = new ToJsonSerializer(symbolResolver, summaryResolver, srcFileName);
  120492. // for symbols, we use everything except for the class metadata itself
  120493. // (we keep the statics though), as the class metadata is contained in the
  120494. // CompileTypeSummary.
  120495. symbols.forEach(function (resolvedSymbol) {
  120496. return toJsonSerializer.addSummary({ symbol: resolvedSymbol.symbol, metadata: resolvedSymbol.metadata });
  120497. });
  120498. // Add type summaries.
  120499. types.forEach(function (_a) {
  120500. var summary = _a.summary, metadata = _a.metadata;
  120501. toJsonSerializer.addSummary({ symbol: summary.type.reference, metadata: undefined, type: summary });
  120502. });
  120503. var _a = toJsonSerializer.serialize(), json = _a.json, exportAs = _a.exportAs;
  120504. if (forJitCtx) {
  120505. var /** @type {?} */ forJitSerializer_1 = new ForJitSerializer(forJitCtx, symbolResolver, summaryResolver);
  120506. types.forEach(function (_a) {
  120507. var summary = _a.summary, metadata = _a.metadata;
  120508. forJitSerializer_1.addSourceType(summary, metadata);
  120509. });
  120510. toJsonSerializer.unprocessedSymbolSummariesBySymbol.forEach(function (summary) {
  120511. if (summaryResolver.isLibraryFile(summary.symbol.filePath) && summary.type) {
  120512. forJitSerializer_1.addLibType(summary.type);
  120513. }
  120514. });
  120515. forJitSerializer_1.serialize(exportAs);
  120516. }
  120517. return { json: json, exportAs: exportAs };
  120518. }
  120519. /**
  120520. * @param {?} symbolCache
  120521. * @param {?} summaryResolver
  120522. * @param {?} libraryFileName
  120523. * @param {?} json
  120524. * @return {?}
  120525. */
  120526. function deserializeSummaries(symbolCache, summaryResolver, libraryFileName, json) {
  120527. var /** @type {?} */ deserializer = new FromJsonDeserializer(symbolCache, summaryResolver);
  120528. return deserializer.deserialize(libraryFileName, json);
  120529. }
  120530. /**
  120531. * @param {?} outputCtx
  120532. * @param {?} reference
  120533. * @return {?}
  120534. */
  120535. function createForJitStub(outputCtx, reference) {
  120536. return createSummaryForJitFunction(outputCtx, reference, NULL_EXPR);
  120537. }
  120538. /**
  120539. * @param {?} outputCtx
  120540. * @param {?} reference
  120541. * @param {?} value
  120542. * @return {?}
  120543. */
  120544. function createSummaryForJitFunction(outputCtx, reference, value) {
  120545. var /** @type {?} */ fnName = summaryForJitName(reference.name);
  120546. outputCtx.statements.push(fn([], [new ReturnStatement(value)], new ArrayType(DYNAMIC_TYPE)).toDeclStmt(fnName, [
  120547. StmtModifier.Final, StmtModifier.Exported
  120548. ]));
  120549. }
  120550. var ToJsonSerializer = /** @class */ (function (_super) {
  120551. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(ToJsonSerializer, _super);
  120552. function ToJsonSerializer(symbolResolver, summaryResolver, srcFileName) {
  120553. var _this = _super.call(this) || this;
  120554. _this.symbolResolver = symbolResolver;
  120555. _this.summaryResolver = summaryResolver;
  120556. _this.srcFileName = srcFileName;
  120557. _this.symbols = [];
  120558. _this.indexBySymbol = new Map();
  120559. _this.reexportedBy = new Map();
  120560. _this.processedSummaryBySymbol = new Map();
  120561. _this.processedSummaries = [];
  120562. _this.unprocessedSymbolSummariesBySymbol = new Map();
  120563. _this.moduleName = symbolResolver.getKnownModuleName(srcFileName);
  120564. return _this;
  120565. }
  120566. /**
  120567. * @param {?} summary
  120568. * @return {?}
  120569. */
  120570. ToJsonSerializer.prototype.addSummary = /**
  120571. * @param {?} summary
  120572. * @return {?}
  120573. */
  120574. function (summary) {
  120575. var _this = this;
  120576. var /** @type {?} */ unprocessedSummary = this.unprocessedSymbolSummariesBySymbol.get(summary.symbol);
  120577. var /** @type {?} */ processedSummary = this.processedSummaryBySymbol.get(summary.symbol);
  120578. if (!unprocessedSummary) {
  120579. unprocessedSummary = { symbol: summary.symbol, metadata: undefined };
  120580. this.unprocessedSymbolSummariesBySymbol.set(summary.symbol, unprocessedSummary);
  120581. processedSummary = { symbol: this.processValue(summary.symbol, 0 /* None */) };
  120582. this.processedSummaries.push(processedSummary);
  120583. this.processedSummaryBySymbol.set(summary.symbol, processedSummary);
  120584. }
  120585. if (!unprocessedSummary.metadata && summary.metadata) {
  120586. var /** @type {?} */ metadata_1 = summary.metadata || {};
  120587. if (metadata_1.__symbolic === 'class') {
  120588. // For classes, we keep everything except their class decorators.
  120589. // We need to keep e.g. the ctor args, method names, method decorators
  120590. // so that the class can be extended in another compilation unit.
  120591. // We don't keep the class decorators as
  120592. // 1) they refer to data
  120593. // that should not cause a rebuild of downstream compilation units
  120594. // (e.g. inline templates of @Component, or @NgModule.declarations)
  120595. // 2) their data is already captured in TypeSummaries, e.g. DirectiveSummary.
  120596. var /** @type {?} */ clone_1 = {};
  120597. Object.keys(metadata_1).forEach(function (propName) {
  120598. if (propName !== 'decorators') {
  120599. clone_1[propName] = metadata_1[propName];
  120600. }
  120601. });
  120602. metadata_1 = clone_1;
  120603. }
  120604. else if (isCall(metadata_1)) {
  120605. if (!isFunctionCall(metadata_1) && !isMethodCallOnVariable(metadata_1)) {
  120606. // Don't store complex calls as we won't be able to simplify them anyways later on.
  120607. // Don't store complex calls as we won't be able to simplify them anyways later on.
  120608. metadata_1 = {
  120609. __symbolic: 'error',
  120610. message: 'Complex function calls are not supported.',
  120611. };
  120612. }
  120613. }
  120614. // Note: We need to keep storing ctor calls for e.g.
  120615. // `export const x = new InjectionToken(...)`
  120616. unprocessedSummary.metadata = metadata_1;
  120617. processedSummary.metadata = this.processValue(metadata_1, 1 /* ResolveValue */);
  120618. if (metadata_1 instanceof StaticSymbol &&
  120619. this.summaryResolver.isLibraryFile(metadata_1.filePath)) {
  120620. var /** @type {?} */ declarationSymbol = this.symbols[/** @type {?} */ ((this.indexBySymbol.get(metadata_1)))];
  120621. if (!isLoweredSymbol(declarationSymbol.name)) {
  120622. // Note: symbols that were introduced during codegen in the user file can have a reexport
  120623. // if a user used `export *`. However, we can't rely on this as tsickle will change
  120624. // `export *` into named exports, using only the information from the typechecker.
  120625. // As we introduce the new symbols after typecheck, Tsickle does not know about them,
  120626. // and omits them when expanding `export *`.
  120627. // So we have to keep reexporting these symbols manually via .ngfactory files.
  120628. this.reexportedBy.set(declarationSymbol, summary.symbol);
  120629. }
  120630. }
  120631. }
  120632. if (!unprocessedSummary.type && summary.type) {
  120633. unprocessedSummary.type = summary.type;
  120634. // Note: We don't add the summaries of all referenced symbols as for the ResolvedSymbols,
  120635. // as the type summaries already contain the transitive data that they require
  120636. // (in a minimal way).
  120637. processedSummary.type = this.processValue(summary.type, 0 /* None */);
  120638. // except for reexported directives / pipes, so we need to store
  120639. // their summaries explicitly.
  120640. if (summary.type.summaryKind === CompileSummaryKind.NgModule) {
  120641. var /** @type {?} */ ngModuleSummary = /** @type {?} */ (summary.type);
  120642. ngModuleSummary.exportedDirectives.concat(ngModuleSummary.exportedPipes).forEach(function (id) {
  120643. var /** @type {?} */ symbol = id.reference;
  120644. if (_this.summaryResolver.isLibraryFile(symbol.filePath) &&
  120645. !_this.unprocessedSymbolSummariesBySymbol.has(symbol)) {
  120646. var /** @type {?} */ summary_1 = _this.summaryResolver.resolveSummary(symbol);
  120647. if (summary_1) {
  120648. _this.addSummary(summary_1);
  120649. }
  120650. }
  120651. });
  120652. }
  120653. }
  120654. };
  120655. /**
  120656. * @return {?}
  120657. */
  120658. ToJsonSerializer.prototype.serialize = /**
  120659. * @return {?}
  120660. */
  120661. function () {
  120662. var _this = this;
  120663. var /** @type {?} */ exportAs = [];
  120664. var /** @type {?} */ json = JSON.stringify({
  120665. moduleName: this.moduleName,
  120666. summaries: this.processedSummaries,
  120667. symbols: this.symbols.map(function (symbol, index) {
  120668. symbol.assertNoMembers();
  120669. var /** @type {?} */ importAs = /** @type {?} */ ((undefined));
  120670. if (_this.summaryResolver.isLibraryFile(symbol.filePath)) {
  120671. var /** @type {?} */ reexportSymbol = _this.reexportedBy.get(symbol);
  120672. if (reexportSymbol) {
  120673. importAs = /** @type {?} */ ((_this.indexBySymbol.get(reexportSymbol)));
  120674. }
  120675. else {
  120676. var /** @type {?} */ summary = _this.unprocessedSymbolSummariesBySymbol.get(symbol);
  120677. if (!summary || !summary.metadata || summary.metadata.__symbolic !== 'interface') {
  120678. importAs = symbol.name + "_" + index;
  120679. exportAs.push({ symbol: symbol, exportAs: importAs });
  120680. }
  120681. }
  120682. }
  120683. return {
  120684. __symbol: index,
  120685. name: symbol.name,
  120686. filePath: _this.summaryResolver.toSummaryFileName(symbol.filePath, _this.srcFileName),
  120687. importAs: importAs
  120688. };
  120689. })
  120690. });
  120691. return { json: json, exportAs: exportAs };
  120692. };
  120693. /**
  120694. * @param {?} value
  120695. * @param {?} flags
  120696. * @return {?}
  120697. */
  120698. ToJsonSerializer.prototype.processValue = /**
  120699. * @param {?} value
  120700. * @param {?} flags
  120701. * @return {?}
  120702. */
  120703. function (value, flags) {
  120704. return visitValue(value, this, flags);
  120705. };
  120706. /**
  120707. * @param {?} value
  120708. * @param {?} context
  120709. * @return {?}
  120710. */
  120711. ToJsonSerializer.prototype.visitOther = /**
  120712. * @param {?} value
  120713. * @param {?} context
  120714. * @return {?}
  120715. */
  120716. function (value, context) {
  120717. if (value instanceof StaticSymbol) {
  120718. var /** @type {?} */ baseSymbol = this.symbolResolver.getStaticSymbol(value.filePath, value.name);
  120719. var /** @type {?} */ index = this.visitStaticSymbol(baseSymbol, context);
  120720. return { __symbol: index, members: value.members };
  120721. }
  120722. };
  120723. /**
  120724. * Returns null if the options.resolveValue is true, and the summary for the symbol
  120725. * resolved to a type or could not be resolved.
  120726. * @param {?} baseSymbol
  120727. * @param {?} flags
  120728. * @return {?}
  120729. */
  120730. ToJsonSerializer.prototype.visitStaticSymbol = /**
  120731. * Returns null if the options.resolveValue is true, and the summary for the symbol
  120732. * resolved to a type or could not be resolved.
  120733. * @param {?} baseSymbol
  120734. * @param {?} flags
  120735. * @return {?}
  120736. */
  120737. function (baseSymbol, flags) {
  120738. var /** @type {?} */ index = this.indexBySymbol.get(baseSymbol);
  120739. var /** @type {?} */ summary = null;
  120740. if (flags & 1 /* ResolveValue */ &&
  120741. this.summaryResolver.isLibraryFile(baseSymbol.filePath)) {
  120742. if (this.unprocessedSymbolSummariesBySymbol.has(baseSymbol)) {
  120743. // the summary for this symbol was already added
  120744. // -> nothing to do.
  120745. return /** @type {?} */ ((index));
  120746. }
  120747. summary = this.loadSummary(baseSymbol);
  120748. if (summary && summary.metadata instanceof StaticSymbol) {
  120749. // The summary is a reexport
  120750. index = this.visitStaticSymbol(summary.metadata, flags);
  120751. // reset the summary as it is just a reexport, so we don't want to store it.
  120752. summary = null;
  120753. }
  120754. }
  120755. else if (index != null) {
  120756. // Note: == on purpose to compare with undefined!
  120757. // No summary and the symbol is already added -> nothing to do.
  120758. return index;
  120759. }
  120760. // Note: == on purpose to compare with undefined!
  120761. if (index == null) {
  120762. index = this.symbols.length;
  120763. this.symbols.push(baseSymbol);
  120764. }
  120765. this.indexBySymbol.set(baseSymbol, index);
  120766. if (summary) {
  120767. this.addSummary(summary);
  120768. }
  120769. return index;
  120770. };
  120771. /**
  120772. * @param {?} symbol
  120773. * @return {?}
  120774. */
  120775. ToJsonSerializer.prototype.loadSummary = /**
  120776. * @param {?} symbol
  120777. * @return {?}
  120778. */
  120779. function (symbol) {
  120780. var /** @type {?} */ summary = this.summaryResolver.resolveSummary(symbol);
  120781. if (!summary) {
  120782. // some symbols might originate from a plain typescript library
  120783. // that just exported .d.ts and .metadata.json files, i.e. where no summary
  120784. // files were created.
  120785. var /** @type {?} */ resolvedSymbol = this.symbolResolver.resolveSymbol(symbol);
  120786. if (resolvedSymbol) {
  120787. summary = { symbol: resolvedSymbol.symbol, metadata: resolvedSymbol.metadata };
  120788. }
  120789. }
  120790. return summary;
  120791. };
  120792. return ToJsonSerializer;
  120793. }(ValueTransformer));
  120794. var ForJitSerializer = /** @class */ (function () {
  120795. function ForJitSerializer(outputCtx, symbolResolver, summaryResolver) {
  120796. this.outputCtx = outputCtx;
  120797. this.symbolResolver = symbolResolver;
  120798. this.summaryResolver = summaryResolver;
  120799. this.data = [];
  120800. }
  120801. /**
  120802. * @param {?} summary
  120803. * @param {?} metadata
  120804. * @return {?}
  120805. */
  120806. ForJitSerializer.prototype.addSourceType = /**
  120807. * @param {?} summary
  120808. * @param {?} metadata
  120809. * @return {?}
  120810. */
  120811. function (summary, metadata) {
  120812. this.data.push({ summary: summary, metadata: metadata, isLibrary: false });
  120813. };
  120814. /**
  120815. * @param {?} summary
  120816. * @return {?}
  120817. */
  120818. ForJitSerializer.prototype.addLibType = /**
  120819. * @param {?} summary
  120820. * @return {?}
  120821. */
  120822. function (summary) {
  120823. this.data.push({ summary: summary, metadata: null, isLibrary: true });
  120824. };
  120825. /**
  120826. * @param {?} exportAsArr
  120827. * @return {?}
  120828. */
  120829. ForJitSerializer.prototype.serialize = /**
  120830. * @param {?} exportAsArr
  120831. * @return {?}
  120832. */
  120833. function (exportAsArr) {
  120834. var _this = this;
  120835. var /** @type {?} */ exportAsBySymbol = new Map();
  120836. for (var _i = 0, exportAsArr_1 = exportAsArr; _i < exportAsArr_1.length; _i++) {
  120837. var _a = exportAsArr_1[_i], symbol = _a.symbol, exportAs = _a.exportAs;
  120838. exportAsBySymbol.set(symbol, exportAs);
  120839. }
  120840. var /** @type {?} */ ngModuleSymbols = new Set();
  120841. for (var _b = 0, _c = this.data; _b < _c.length; _b++) {
  120842. var _d = _c[_b], summary = _d.summary, metadata = _d.metadata, isLibrary = _d.isLibrary;
  120843. if (summary.summaryKind === CompileSummaryKind.NgModule) {
  120844. // collect the symbols that refer to NgModule classes.
  120845. // Note: we can't just rely on `summary.type.summaryKind` to determine this as
  120846. // we don't add the summaries of all referenced symbols when we serialize type summaries.
  120847. // See serializeSummaries for details.
  120848. ngModuleSymbols.add(summary.type.reference);
  120849. var /** @type {?} */ modSummary = /** @type {?} */ (summary);
  120850. for (var _e = 0, _f = modSummary.modules; _e < _f.length; _e++) {
  120851. var mod = _f[_e];
  120852. ngModuleSymbols.add(mod.reference);
  120853. }
  120854. }
  120855. if (!isLibrary) {
  120856. var /** @type {?} */ fnName = summaryForJitName(summary.type.reference.name);
  120857. createSummaryForJitFunction(this.outputCtx, summary.type.reference, this.serializeSummaryWithDeps(summary, /** @type {?} */ ((metadata))));
  120858. }
  120859. }
  120860. ngModuleSymbols.forEach(function (ngModuleSymbol) {
  120861. if (_this.summaryResolver.isLibraryFile(ngModuleSymbol.filePath)) {
  120862. var /** @type {?} */ exportAs = exportAsBySymbol.get(ngModuleSymbol) || ngModuleSymbol.name;
  120863. var /** @type {?} */ jitExportAsName = summaryForJitName(exportAs);
  120864. _this.outputCtx.statements.push(variable(jitExportAsName)
  120865. .set(_this.serializeSummaryRef(ngModuleSymbol))
  120866. .toDeclStmt(null, [StmtModifier.Exported]));
  120867. }
  120868. });
  120869. };
  120870. /**
  120871. * @param {?} summary
  120872. * @param {?} metadata
  120873. * @return {?}
  120874. */
  120875. ForJitSerializer.prototype.serializeSummaryWithDeps = /**
  120876. * @param {?} summary
  120877. * @param {?} metadata
  120878. * @return {?}
  120879. */
  120880. function (summary, metadata) {
  120881. var _this = this;
  120882. var /** @type {?} */ expressions = [this.serializeSummary(summary)];
  120883. var /** @type {?} */ providers = [];
  120884. if (metadata instanceof CompileNgModuleMetadata) {
  120885. expressions.push.apply(expressions,
  120886. // For directives / pipes, we only add the declared ones,
  120887. // and rely on transitively importing NgModules to get the transitive
  120888. // summaries.
  120889. metadata.declaredDirectives.concat(metadata.declaredPipes)
  120890. .map(function (type) { return type.reference; })
  120891. .concat(metadata.transitiveModule.modules.map(function (type) { return type.reference; })
  120892. .filter(function (ref) { return ref !== metadata.type.reference; }))
  120893. .map(function (ref) { return _this.serializeSummaryRef(ref); }));
  120894. // Note: We don't use `NgModuleSummary.providers`, as that one is transitive,
  120895. // and we already have transitive modules.
  120896. providers = metadata.providers;
  120897. }
  120898. else if (summary.summaryKind === CompileSummaryKind.Directive) {
  120899. var /** @type {?} */ dirSummary = /** @type {?} */ (summary);
  120900. providers = dirSummary.providers.concat(dirSummary.viewProviders);
  120901. }
  120902. // Note: We can't just refer to the `ngsummary.ts` files for `useClass` providers (as we do for
  120903. // declaredDirectives / declaredPipes), as we allow
  120904. // providers without ctor arguments to skip the `@Injectable` decorator,
  120905. // i.e. we didn't generate .ngsummary.ts files for these.
  120906. expressions.push.apply(expressions, providers.filter(function (provider) { return !!provider.useClass; }).map(function (provider) {
  120907. return _this.serializeSummary(/** @type {?} */ ({
  120908. summaryKind: CompileSummaryKind.Injectable, type: provider.useClass
  120909. }));
  120910. }));
  120911. return literalArr(expressions);
  120912. };
  120913. /**
  120914. * @param {?} typeSymbol
  120915. * @return {?}
  120916. */
  120917. ForJitSerializer.prototype.serializeSummaryRef = /**
  120918. * @param {?} typeSymbol
  120919. * @return {?}
  120920. */
  120921. function (typeSymbol) {
  120922. var /** @type {?} */ jitImportedSymbol = this.symbolResolver.getStaticSymbol(summaryForJitFileName(typeSymbol.filePath), summaryForJitName(typeSymbol.name));
  120923. return this.outputCtx.importExpr(jitImportedSymbol);
  120924. };
  120925. /**
  120926. * @param {?} data
  120927. * @return {?}
  120928. */
  120929. ForJitSerializer.prototype.serializeSummary = /**
  120930. * @param {?} data
  120931. * @return {?}
  120932. */
  120933. function (data) {
  120934. var /** @type {?} */ outputCtx = this.outputCtx;
  120935. var Transformer = /** @class */ (function () {
  120936. function Transformer() {
  120937. }
  120938. /**
  120939. * @param {?} arr
  120940. * @param {?} context
  120941. * @return {?}
  120942. */
  120943. Transformer.prototype.visitArray = /**
  120944. * @param {?} arr
  120945. * @param {?} context
  120946. * @return {?}
  120947. */
  120948. function (arr, context) {
  120949. var _this = this;
  120950. return literalArr(arr.map(function (entry) { return visitValue(entry, _this, context); }));
  120951. };
  120952. /**
  120953. * @param {?} map
  120954. * @param {?} context
  120955. * @return {?}
  120956. */
  120957. Transformer.prototype.visitStringMap = /**
  120958. * @param {?} map
  120959. * @param {?} context
  120960. * @return {?}
  120961. */
  120962. function (map, context) {
  120963. var _this = this;
  120964. return new LiteralMapExpr(Object.keys(map).map(function (key) { return new LiteralMapEntry(key, visitValue(map[key], _this, context), false); }));
  120965. };
  120966. /**
  120967. * @param {?} value
  120968. * @param {?} context
  120969. * @return {?}
  120970. */
  120971. Transformer.prototype.visitPrimitive = /**
  120972. * @param {?} value
  120973. * @param {?} context
  120974. * @return {?}
  120975. */
  120976. function (value, context) { return literal(value); };
  120977. /**
  120978. * @param {?} value
  120979. * @param {?} context
  120980. * @return {?}
  120981. */
  120982. Transformer.prototype.visitOther = /**
  120983. * @param {?} value
  120984. * @param {?} context
  120985. * @return {?}
  120986. */
  120987. function (value, context) {
  120988. if (value instanceof StaticSymbol) {
  120989. return outputCtx.importExpr(value);
  120990. }
  120991. else {
  120992. throw new Error("Illegal State: Encountered value " + value);
  120993. }
  120994. };
  120995. return Transformer;
  120996. }());
  120997. return visitValue(data, new Transformer(), null);
  120998. };
  120999. return ForJitSerializer;
  121000. }());
  121001. var FromJsonDeserializer = /** @class */ (function (_super) {
  121002. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(FromJsonDeserializer, _super);
  121003. function FromJsonDeserializer(symbolCache, summaryResolver) {
  121004. var _this = _super.call(this) || this;
  121005. _this.symbolCache = symbolCache;
  121006. _this.summaryResolver = summaryResolver;
  121007. return _this;
  121008. }
  121009. /**
  121010. * @param {?} libraryFileName
  121011. * @param {?} json
  121012. * @return {?}
  121013. */
  121014. FromJsonDeserializer.prototype.deserialize = /**
  121015. * @param {?} libraryFileName
  121016. * @param {?} json
  121017. * @return {?}
  121018. */
  121019. function (libraryFileName, json) {
  121020. var _this = this;
  121021. var /** @type {?} */ data = JSON.parse(json);
  121022. var /** @type {?} */ allImportAs = [];
  121023. this.symbols = data.symbols.map(function (serializedSymbol) {
  121024. return _this.symbolCache.get(_this.summaryResolver.fromSummaryFileName(serializedSymbol.filePath, libraryFileName), serializedSymbol.name);
  121025. });
  121026. data.symbols.forEach(function (serializedSymbol, index) {
  121027. var /** @type {?} */ symbol = _this.symbols[index];
  121028. var /** @type {?} */ importAs = serializedSymbol.importAs;
  121029. if (typeof importAs === 'number') {
  121030. allImportAs.push({ symbol: symbol, importAs: _this.symbols[importAs] });
  121031. }
  121032. else if (typeof importAs === 'string') {
  121033. allImportAs.push({ symbol: symbol, importAs: _this.symbolCache.get(ngfactoryFilePath(libraryFileName), importAs) });
  121034. }
  121035. });
  121036. var /** @type {?} */ summaries = /** @type {?} */ (visitValue(data.summaries, this, null));
  121037. return { moduleName: data.moduleName, summaries: summaries, importAs: allImportAs };
  121038. };
  121039. /**
  121040. * @param {?} map
  121041. * @param {?} context
  121042. * @return {?}
  121043. */
  121044. FromJsonDeserializer.prototype.visitStringMap = /**
  121045. * @param {?} map
  121046. * @param {?} context
  121047. * @return {?}
  121048. */
  121049. function (map, context) {
  121050. if ('__symbol' in map) {
  121051. var /** @type {?} */ baseSymbol = this.symbols[map['__symbol']];
  121052. var /** @type {?} */ members = map['members'];
  121053. return members.length ? this.symbolCache.get(baseSymbol.filePath, baseSymbol.name, members) :
  121054. baseSymbol;
  121055. }
  121056. else {
  121057. return _super.prototype.visitStringMap.call(this, map, context);
  121058. }
  121059. };
  121060. return FromJsonDeserializer;
  121061. }(ValueTransformer));
  121062. /**
  121063. * @param {?} metadata
  121064. * @return {?}
  121065. */
  121066. function isCall(metadata) {
  121067. return metadata && metadata.__symbolic === 'call';
  121068. }
  121069. /**
  121070. * @param {?} metadata
  121071. * @return {?}
  121072. */
  121073. function isFunctionCall(metadata) {
  121074. return isCall(metadata) && unwrapResolvedMetadata(metadata.expression) instanceof StaticSymbol;
  121075. }
  121076. /**
  121077. * @param {?} metadata
  121078. * @return {?}
  121079. */
  121080. function isMethodCallOnVariable(metadata) {
  121081. return isCall(metadata) && metadata.expression && metadata.expression.__symbolic === 'select' &&
  121082. unwrapResolvedMetadata(metadata.expression.expression) instanceof StaticSymbol;
  121083. }
  121084. /**
  121085. * @fileoverview added by tsickle
  121086. * @suppress {checkTypes} checked by tsc
  121087. */
  121088. /**
  121089. * @license
  121090. * Copyright Google Inc. All Rights Reserved.
  121091. *
  121092. * Use of this source code is governed by an MIT-style license that can be
  121093. * found in the LICENSE file at https://angular.io/license
  121094. */
  121095. /** @enum {number} */
  121096. var StubEmitFlags = {
  121097. Basic: 1,
  121098. TypeCheck: 2,
  121099. All: 3,
  121100. };
  121101. StubEmitFlags[StubEmitFlags.Basic] = "Basic";
  121102. StubEmitFlags[StubEmitFlags.TypeCheck] = "TypeCheck";
  121103. StubEmitFlags[StubEmitFlags.All] = "All";
  121104. var AotCompiler = /** @class */ (function () {
  121105. function AotCompiler(_config, _options, _host, _reflector, _metadataResolver, _templateParser, _styleCompiler, _viewCompiler, _typeCheckCompiler, _ngModuleCompiler, _outputEmitter, _summaryResolver, _symbolResolver) {
  121106. this._config = _config;
  121107. this._options = _options;
  121108. this._host = _host;
  121109. this._reflector = _reflector;
  121110. this._metadataResolver = _metadataResolver;
  121111. this._templateParser = _templateParser;
  121112. this._styleCompiler = _styleCompiler;
  121113. this._viewCompiler = _viewCompiler;
  121114. this._typeCheckCompiler = _typeCheckCompiler;
  121115. this._ngModuleCompiler = _ngModuleCompiler;
  121116. this._outputEmitter = _outputEmitter;
  121117. this._summaryResolver = _summaryResolver;
  121118. this._symbolResolver = _symbolResolver;
  121119. this._templateAstCache = new Map();
  121120. this._analyzedFiles = new Map();
  121121. }
  121122. /**
  121123. * @return {?}
  121124. */
  121125. AotCompiler.prototype.clearCache = /**
  121126. * @return {?}
  121127. */
  121128. function () { this._metadataResolver.clearCache(); };
  121129. /**
  121130. * @param {?} rootFiles
  121131. * @return {?}
  121132. */
  121133. AotCompiler.prototype.analyzeModulesSync = /**
  121134. * @param {?} rootFiles
  121135. * @return {?}
  121136. */
  121137. function (rootFiles) {
  121138. var _this = this;
  121139. var /** @type {?} */ analyzeResult = analyzeAndValidateNgModules(rootFiles, this._host, this._symbolResolver, this._metadataResolver);
  121140. analyzeResult.ngModules.forEach(function (ngModule) {
  121141. return _this._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, true);
  121142. });
  121143. return analyzeResult;
  121144. };
  121145. /**
  121146. * @param {?} rootFiles
  121147. * @return {?}
  121148. */
  121149. AotCompiler.prototype.analyzeModulesAsync = /**
  121150. * @param {?} rootFiles
  121151. * @return {?}
  121152. */
  121153. function (rootFiles) {
  121154. var _this = this;
  121155. var /** @type {?} */ analyzeResult = analyzeAndValidateNgModules(rootFiles, this._host, this._symbolResolver, this._metadataResolver);
  121156. return Promise
  121157. .all(analyzeResult.ngModules.map(function (ngModule) {
  121158. return _this._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, false);
  121159. }))
  121160. .then(function () { return analyzeResult; });
  121161. };
  121162. /**
  121163. * @param {?} fileName
  121164. * @return {?}
  121165. */
  121166. AotCompiler.prototype._analyzeFile = /**
  121167. * @param {?} fileName
  121168. * @return {?}
  121169. */
  121170. function (fileName) {
  121171. var /** @type {?} */ analyzedFile = this._analyzedFiles.get(fileName);
  121172. if (!analyzedFile) {
  121173. analyzedFile =
  121174. analyzeFile(this._host, this._symbolResolver, this._metadataResolver, fileName);
  121175. this._analyzedFiles.set(fileName, analyzedFile);
  121176. }
  121177. return analyzedFile;
  121178. };
  121179. /**
  121180. * @param {?} fileName
  121181. * @return {?}
  121182. */
  121183. AotCompiler.prototype.findGeneratedFileNames = /**
  121184. * @param {?} fileName
  121185. * @return {?}
  121186. */
  121187. function (fileName) {
  121188. var _this = this;
  121189. var /** @type {?} */ genFileNames = [];
  121190. var /** @type {?} */ file = this._analyzeFile(fileName);
  121191. // Make sure we create a .ngfactory if we have a injectable/directive/pipe/NgModule
  121192. // or a reference to a non source file.
  121193. // Note: This is overestimating the required .ngfactory files as the real calculation is harder.
  121194. // Only do this for StubEmitFlags.Basic, as adding a type check block
  121195. // does not change this file (as we generate type check blocks based on NgModules).
  121196. if (this._options.allowEmptyCodegenFiles || file.directives.length || file.pipes.length ||
  121197. file.injectables.length || file.ngModules.length || file.exportsNonSourceFiles) {
  121198. genFileNames.push(ngfactoryFilePath(file.fileName, true));
  121199. if (this._options.enableSummariesForJit) {
  121200. genFileNames.push(summaryForJitFileName(file.fileName, true));
  121201. }
  121202. }
  121203. var /** @type {?} */ fileSuffix = normalizeGenFileSuffix(splitTypescriptSuffix(file.fileName, true)[1]);
  121204. file.directives.forEach(function (dirSymbol) {
  121205. var /** @type {?} */ compMeta = /** @type {?} */ ((_this._metadataResolver.getNonNormalizedDirectiveMetadata(dirSymbol))).metadata;
  121206. if (!compMeta.isComponent) {
  121207. return;
  121208. } /** @type {?} */
  121209. ((
  121210. // Note: compMeta is a component and therefore template is non null.
  121211. compMeta.template)).styleUrls.forEach(function (styleUrl) {
  121212. var /** @type {?} */ normalizedUrl = _this._host.resourceNameToFileName(styleUrl, file.fileName);
  121213. if (!normalizedUrl) {
  121214. throw syntaxError("Couldn't resolve resource " + styleUrl + " relative to " + file.fileName);
  121215. }
  121216. var /** @type {?} */ needsShim = (/** @type {?} */ ((compMeta.template)).encapsulation || _this._config.defaultEncapsulation) === ViewEncapsulation.Emulated;
  121217. genFileNames.push(_stylesModuleUrl(normalizedUrl, needsShim, fileSuffix));
  121218. if (_this._options.allowEmptyCodegenFiles) {
  121219. genFileNames.push(_stylesModuleUrl(normalizedUrl, !needsShim, fileSuffix));
  121220. }
  121221. });
  121222. });
  121223. return genFileNames;
  121224. };
  121225. /**
  121226. * @param {?} genFileName
  121227. * @param {?=} originalFileName
  121228. * @return {?}
  121229. */
  121230. AotCompiler.prototype.emitBasicStub = /**
  121231. * @param {?} genFileName
  121232. * @param {?=} originalFileName
  121233. * @return {?}
  121234. */
  121235. function (genFileName, originalFileName) {
  121236. var /** @type {?} */ outputCtx = this._createOutputContext(genFileName);
  121237. if (genFileName.endsWith('.ngfactory.ts')) {
  121238. if (!originalFileName) {
  121239. throw new Error("Assertion error: require the original file for .ngfactory.ts stubs. File: " + genFileName);
  121240. }
  121241. var /** @type {?} */ originalFile = this._analyzeFile(originalFileName);
  121242. this._createNgFactoryStub(outputCtx, originalFile, StubEmitFlags.Basic);
  121243. }
  121244. else if (genFileName.endsWith('.ngsummary.ts')) {
  121245. if (this._options.enableSummariesForJit) {
  121246. if (!originalFileName) {
  121247. throw new Error("Assertion error: require the original file for .ngsummary.ts stubs. File: " + genFileName);
  121248. }
  121249. var /** @type {?} */ originalFile = this._analyzeFile(originalFileName);
  121250. _createEmptyStub(outputCtx);
  121251. originalFile.ngModules.forEach(function (ngModule) {
  121252. // create exports that user code can reference
  121253. createForJitStub(outputCtx, ngModule.type.reference);
  121254. });
  121255. }
  121256. }
  121257. else if (genFileName.endsWith('.ngstyle.ts')) {
  121258. _createEmptyStub(outputCtx);
  121259. }
  121260. // Note: for the stubs, we don't need a property srcFileUrl,
  121261. // as lateron in emitAllImpls we will create the proper GeneratedFiles with the
  121262. // correct srcFileUrl.
  121263. // This is good as e.g. for .ngstyle.ts files we can't derive
  121264. // the url of components based on the genFileUrl.
  121265. return this._codegenSourceModule('unknown', outputCtx);
  121266. };
  121267. /**
  121268. * @param {?} genFileName
  121269. * @param {?} originalFileName
  121270. * @return {?}
  121271. */
  121272. AotCompiler.prototype.emitTypeCheckStub = /**
  121273. * @param {?} genFileName
  121274. * @param {?} originalFileName
  121275. * @return {?}
  121276. */
  121277. function (genFileName, originalFileName) {
  121278. var /** @type {?} */ originalFile = this._analyzeFile(originalFileName);
  121279. var /** @type {?} */ outputCtx = this._createOutputContext(genFileName);
  121280. if (genFileName.endsWith('.ngfactory.ts')) {
  121281. this._createNgFactoryStub(outputCtx, originalFile, StubEmitFlags.TypeCheck);
  121282. }
  121283. return outputCtx.statements.length > 0 ?
  121284. this._codegenSourceModule(originalFile.fileName, outputCtx) :
  121285. null;
  121286. };
  121287. /**
  121288. * @param {?} fileNames
  121289. * @return {?}
  121290. */
  121291. AotCompiler.prototype.loadFilesAsync = /**
  121292. * @param {?} fileNames
  121293. * @return {?}
  121294. */
  121295. function (fileNames) {
  121296. var _this = this;
  121297. var /** @type {?} */ files = fileNames.map(function (fileName) { return _this._analyzeFile(fileName); });
  121298. var /** @type {?} */ loadingPromises = [];
  121299. files.forEach(function (file) {
  121300. return file.ngModules.forEach(function (ngModule) {
  121301. return loadingPromises.push(_this._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, false));
  121302. });
  121303. });
  121304. return Promise.all(loadingPromises).then(function (_) { return mergeAndValidateNgFiles(files); });
  121305. };
  121306. /**
  121307. * @param {?} fileNames
  121308. * @return {?}
  121309. */
  121310. AotCompiler.prototype.loadFilesSync = /**
  121311. * @param {?} fileNames
  121312. * @return {?}
  121313. */
  121314. function (fileNames) {
  121315. var _this = this;
  121316. var /** @type {?} */ files = fileNames.map(function (fileName) { return _this._analyzeFile(fileName); });
  121317. files.forEach(function (file) {
  121318. return file.ngModules.forEach(function (ngModule) {
  121319. return _this._metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, true);
  121320. });
  121321. });
  121322. return mergeAndValidateNgFiles(files);
  121323. };
  121324. /**
  121325. * @param {?} outputCtx
  121326. * @param {?} file
  121327. * @param {?} emitFlags
  121328. * @return {?}
  121329. */
  121330. AotCompiler.prototype._createNgFactoryStub = /**
  121331. * @param {?} outputCtx
  121332. * @param {?} file
  121333. * @param {?} emitFlags
  121334. * @return {?}
  121335. */
  121336. function (outputCtx, file, emitFlags) {
  121337. var _this = this;
  121338. var /** @type {?} */ componentId = 0;
  121339. file.ngModules.forEach(function (ngModuleMeta, ngModuleIndex) {
  121340. // Note: the code below needs to executed for StubEmitFlags.Basic and StubEmitFlags.TypeCheck,
  121341. // so we don't change the .ngfactory file too much when adding the typecheck block.
  121342. // create exports that user code can reference
  121343. // Note: the code below needs to executed for StubEmitFlags.Basic and StubEmitFlags.TypeCheck,
  121344. // so we don't change the .ngfactory file too much when adding the typecheck block.
  121345. // create exports that user code can reference
  121346. _this._ngModuleCompiler.createStub(outputCtx, ngModuleMeta.type.reference);
  121347. // add references to the symbols from the metadata.
  121348. // These can be used by the type check block for components,
  121349. // and they also cause TypeScript to include these files into the program too,
  121350. // which will make them part of the analyzedFiles.
  121351. var /** @type {?} */ externalReferences = ngModuleMeta.transitiveModule.directives.map(function (d) { return d.reference; }).concat(ngModuleMeta.transitiveModule.pipes.map(function (d) { return d.reference; }), ngModuleMeta.importedModules.map(function (m) { return m.type.reference; }), ngModuleMeta.exportedModules.map(function (m) { return m.type.reference; }), _this._externalIdentifierReferences([Identifiers.TemplateRef, Identifiers.ElementRef]));
  121352. var /** @type {?} */ externalReferenceVars = new Map();
  121353. externalReferences.forEach(function (ref, typeIndex) {
  121354. externalReferenceVars.set(ref, "_decl" + ngModuleIndex + "_" + typeIndex);
  121355. });
  121356. externalReferenceVars.forEach(function (varName, reference) {
  121357. outputCtx.statements.push(variable(varName)
  121358. .set(NULL_EXPR.cast(DYNAMIC_TYPE))
  121359. .toDeclStmt(expressionType(outputCtx.importExpr(reference, /* typeParams */ null, /* useSummaries */ /* useSummaries */ false))));
  121360. });
  121361. if (emitFlags & StubEmitFlags.TypeCheck) {
  121362. // add the typecheck block for all components of the NgModule
  121363. ngModuleMeta.declaredDirectives.forEach(function (dirId) {
  121364. var /** @type {?} */ compMeta = _this._metadataResolver.getDirectiveMetadata(dirId.reference);
  121365. if (!compMeta.isComponent) {
  121366. return;
  121367. }
  121368. componentId++;
  121369. _this._createTypeCheckBlock(outputCtx, compMeta.type.reference.name + "_Host_" + componentId, ngModuleMeta, _this._metadataResolver.getHostComponentMetadata(compMeta), [compMeta.type], externalReferenceVars);
  121370. _this._createTypeCheckBlock(outputCtx, compMeta.type.reference.name + "_" + componentId, ngModuleMeta, compMeta, ngModuleMeta.transitiveModule.directives, externalReferenceVars);
  121371. });
  121372. }
  121373. });
  121374. if (outputCtx.statements.length === 0) {
  121375. _createEmptyStub(outputCtx);
  121376. }
  121377. };
  121378. /**
  121379. * @param {?} references
  121380. * @return {?}
  121381. */
  121382. AotCompiler.prototype._externalIdentifierReferences = /**
  121383. * @param {?} references
  121384. * @return {?}
  121385. */
  121386. function (references) {
  121387. var /** @type {?} */ result = [];
  121388. for (var _i = 0, references_1 = references; _i < references_1.length; _i++) {
  121389. var reference = references_1[_i];
  121390. var /** @type {?} */ token = createTokenForExternalReference(this._reflector, reference);
  121391. if (token.identifier) {
  121392. result.push(token.identifier.reference);
  121393. }
  121394. }
  121395. return result;
  121396. };
  121397. /**
  121398. * @param {?} ctx
  121399. * @param {?} componentId
  121400. * @param {?} moduleMeta
  121401. * @param {?} compMeta
  121402. * @param {?} directives
  121403. * @param {?} externalReferenceVars
  121404. * @return {?}
  121405. */
  121406. AotCompiler.prototype._createTypeCheckBlock = /**
  121407. * @param {?} ctx
  121408. * @param {?} componentId
  121409. * @param {?} moduleMeta
  121410. * @param {?} compMeta
  121411. * @param {?} directives
  121412. * @param {?} externalReferenceVars
  121413. * @return {?}
  121414. */
  121415. function (ctx, componentId, moduleMeta, compMeta, directives, externalReferenceVars) {
  121416. var _a = this._parseTemplate(compMeta, moduleMeta, directives), parsedTemplate = _a.template, usedPipes = _a.pipes;
  121417. (_b = ctx.statements).push.apply(_b, this._typeCheckCompiler.compileComponent(componentId, compMeta, parsedTemplate, usedPipes, externalReferenceVars, ctx));
  121418. var _b;
  121419. };
  121420. /**
  121421. * @param {?} analyzeResult
  121422. * @param {?} locale
  121423. * @return {?}
  121424. */
  121425. AotCompiler.prototype.emitMessageBundle = /**
  121426. * @param {?} analyzeResult
  121427. * @param {?} locale
  121428. * @return {?}
  121429. */
  121430. function (analyzeResult, locale) {
  121431. var _this = this;
  121432. var /** @type {?} */ errors = [];
  121433. var /** @type {?} */ htmlParser = new HtmlParser();
  121434. // TODO(vicb): implicit tags & attributes
  121435. var /** @type {?} */ messageBundle = new MessageBundle(htmlParser, [], {}, locale);
  121436. analyzeResult.files.forEach(function (file) {
  121437. var /** @type {?} */ compMetas = [];
  121438. file.directives.forEach(function (directiveType) {
  121439. var /** @type {?} */ dirMeta = _this._metadataResolver.getDirectiveMetadata(directiveType);
  121440. if (dirMeta && dirMeta.isComponent) {
  121441. compMetas.push(dirMeta);
  121442. }
  121443. });
  121444. compMetas.forEach(function (compMeta) {
  121445. var /** @type {?} */ html = /** @type {?} */ ((/** @type {?} */ ((compMeta.template)).template));
  121446. var /** @type {?} */ interpolationConfig = InterpolationConfig.fromArray(/** @type {?} */ ((compMeta.template)).interpolation);
  121447. errors.push.apply(errors, /** @type {?} */ ((messageBundle.updateFromTemplate(html, file.fileName, interpolationConfig))));
  121448. });
  121449. });
  121450. if (errors.length) {
  121451. throw new Error(errors.map(function (e) { return e.toString(); }).join('\n'));
  121452. }
  121453. return messageBundle;
  121454. };
  121455. /**
  121456. * @param {?} analyzeResult
  121457. * @return {?}
  121458. */
  121459. AotCompiler.prototype.emitAllImpls = /**
  121460. * @param {?} analyzeResult
  121461. * @return {?}
  121462. */
  121463. function (analyzeResult) {
  121464. var _this = this;
  121465. var ngModuleByPipeOrDirective = analyzeResult.ngModuleByPipeOrDirective, files = analyzeResult.files;
  121466. var /** @type {?} */ sourceModules = files.map(function (file) {
  121467. return _this._compileImplFile(file.fileName, ngModuleByPipeOrDirective, file.directives, file.pipes, file.ngModules, file.injectables);
  121468. });
  121469. return flatten(sourceModules);
  121470. };
  121471. /**
  121472. * @param {?} srcFileUrl
  121473. * @param {?} ngModuleByPipeOrDirective
  121474. * @param {?} directives
  121475. * @param {?} pipes
  121476. * @param {?} ngModules
  121477. * @param {?} injectables
  121478. * @return {?}
  121479. */
  121480. AotCompiler.prototype._compileImplFile = /**
  121481. * @param {?} srcFileUrl
  121482. * @param {?} ngModuleByPipeOrDirective
  121483. * @param {?} directives
  121484. * @param {?} pipes
  121485. * @param {?} ngModules
  121486. * @param {?} injectables
  121487. * @return {?}
  121488. */
  121489. function (srcFileUrl, ngModuleByPipeOrDirective, directives, pipes, ngModules, injectables) {
  121490. var _this = this;
  121491. var /** @type {?} */ fileSuffix = normalizeGenFileSuffix(splitTypescriptSuffix(srcFileUrl, true)[1]);
  121492. var /** @type {?} */ generatedFiles = [];
  121493. var /** @type {?} */ outputCtx = this._createOutputContext(ngfactoryFilePath(srcFileUrl, true));
  121494. generatedFiles.push.apply(generatedFiles, this._createSummary(srcFileUrl, directives, pipes, ngModules, injectables, outputCtx));
  121495. // compile all ng modules
  121496. ngModules.forEach(function (ngModuleMeta) { return _this._compileModule(outputCtx, ngModuleMeta); });
  121497. // compile components
  121498. directives.forEach(function (dirType) {
  121499. var /** @type {?} */ compMeta = _this._metadataResolver.getDirectiveMetadata(/** @type {?} */ (dirType));
  121500. if (!compMeta.isComponent) {
  121501. return;
  121502. }
  121503. var /** @type {?} */ ngModule = ngModuleByPipeOrDirective.get(dirType);
  121504. if (!ngModule) {
  121505. throw new Error("Internal Error: cannot determine the module for component " + identifierName(compMeta.type) + "!");
  121506. }
  121507. // compile styles
  121508. var /** @type {?} */ componentStylesheet = _this._styleCompiler.compileComponent(outputCtx, compMeta); /** @type {?} */
  121509. ((
  121510. // Note: compMeta is a component and therefore template is non null.
  121511. compMeta.template)).externalStylesheets.forEach(function (stylesheetMeta) {
  121512. // Note: fill non shim and shim style files as they might
  121513. // be shared by component with and without ViewEncapsulation.
  121514. var /** @type {?} */ shim = _this._styleCompiler.needsStyleShim(compMeta);
  121515. generatedFiles.push(_this._codegenStyles(srcFileUrl, compMeta, stylesheetMeta, shim, fileSuffix));
  121516. if (_this._options.allowEmptyCodegenFiles) {
  121517. generatedFiles.push(_this._codegenStyles(srcFileUrl, compMeta, stylesheetMeta, !shim, fileSuffix));
  121518. }
  121519. });
  121520. // compile components
  121521. var /** @type {?} */ compViewVars = _this._compileComponent(outputCtx, compMeta, ngModule, ngModule.transitiveModule.directives, componentStylesheet, fileSuffix);
  121522. _this._compileComponentFactory(outputCtx, compMeta, ngModule, fileSuffix);
  121523. });
  121524. if (outputCtx.statements.length > 0 || this._options.allowEmptyCodegenFiles) {
  121525. var /** @type {?} */ srcModule = this._codegenSourceModule(srcFileUrl, outputCtx);
  121526. generatedFiles.unshift(srcModule);
  121527. }
  121528. return generatedFiles;
  121529. };
  121530. /**
  121531. * @param {?} srcFileName
  121532. * @param {?} directives
  121533. * @param {?} pipes
  121534. * @param {?} ngModules
  121535. * @param {?} injectables
  121536. * @param {?} ngFactoryCtx
  121537. * @return {?}
  121538. */
  121539. AotCompiler.prototype._createSummary = /**
  121540. * @param {?} srcFileName
  121541. * @param {?} directives
  121542. * @param {?} pipes
  121543. * @param {?} ngModules
  121544. * @param {?} injectables
  121545. * @param {?} ngFactoryCtx
  121546. * @return {?}
  121547. */
  121548. function (srcFileName, directives, pipes, ngModules, injectables, ngFactoryCtx) {
  121549. var _this = this;
  121550. var /** @type {?} */ symbolSummaries = this._symbolResolver.getSymbolsOf(srcFileName)
  121551. .map(function (symbol) { return _this._symbolResolver.resolveSymbol(symbol); });
  121552. var /** @type {?} */ typeData = ngModules.map(function (meta) {
  121553. return ({
  121554. summary: /** @type {?} */ ((_this._metadataResolver.getNgModuleSummary(meta.type.reference))),
  121555. metadata: /** @type {?} */ ((_this._metadataResolver.getNgModuleMetadata(meta.type.reference)))
  121556. });
  121557. }).concat(directives.map(function (ref) {
  121558. return ({
  121559. summary: /** @type {?} */ ((_this._metadataResolver.getDirectiveSummary(ref))),
  121560. metadata: /** @type {?} */ ((_this._metadataResolver.getDirectiveMetadata(ref)))
  121561. });
  121562. }), pipes.map(function (ref) {
  121563. return ({
  121564. summary: /** @type {?} */ ((_this._metadataResolver.getPipeSummary(ref))),
  121565. metadata: /** @type {?} */ ((_this._metadataResolver.getPipeMetadata(ref)))
  121566. });
  121567. }), injectables.map(function (ref) {
  121568. return ({
  121569. summary: /** @type {?} */ ((_this._metadataResolver.getInjectableSummary(ref))),
  121570. metadata: /** @type {?} */ ((_this._metadataResolver.getInjectableSummary(ref))).type
  121571. });
  121572. }));
  121573. var /** @type {?} */ forJitOutputCtx = this._options.enableSummariesForJit ?
  121574. this._createOutputContext(summaryForJitFileName(srcFileName, true)) :
  121575. null;
  121576. var _a = serializeSummaries(srcFileName, forJitOutputCtx, this._summaryResolver, this._symbolResolver, symbolSummaries, typeData), json = _a.json, exportAs = _a.exportAs;
  121577. exportAs.forEach(function (entry) {
  121578. ngFactoryCtx.statements.push(variable(entry.exportAs).set(ngFactoryCtx.importExpr(entry.symbol)).toDeclStmt(null, [
  121579. StmtModifier.Exported
  121580. ]));
  121581. });
  121582. var /** @type {?} */ summaryJson = new GeneratedFile(srcFileName, summaryFileName(srcFileName), json);
  121583. var /** @type {?} */ result = [summaryJson];
  121584. if (forJitOutputCtx) {
  121585. result.push(this._codegenSourceModule(srcFileName, forJitOutputCtx));
  121586. }
  121587. return result;
  121588. };
  121589. /**
  121590. * @param {?} outputCtx
  121591. * @param {?} ngModule
  121592. * @return {?}
  121593. */
  121594. AotCompiler.prototype._compileModule = /**
  121595. * @param {?} outputCtx
  121596. * @param {?} ngModule
  121597. * @return {?}
  121598. */
  121599. function (outputCtx, ngModule) {
  121600. var /** @type {?} */ providers = [];
  121601. if (this._options.locale) {
  121602. var /** @type {?} */ normalizedLocale = this._options.locale.replace(/_/g, '-');
  121603. providers.push({
  121604. token: createTokenForExternalReference(this._reflector, Identifiers.LOCALE_ID),
  121605. useValue: normalizedLocale,
  121606. });
  121607. }
  121608. if (this._options.i18nFormat) {
  121609. providers.push({
  121610. token: createTokenForExternalReference(this._reflector, Identifiers.TRANSLATIONS_FORMAT),
  121611. useValue: this._options.i18nFormat
  121612. });
  121613. }
  121614. this._ngModuleCompiler.compile(outputCtx, ngModule, providers);
  121615. };
  121616. /**
  121617. * @param {?} outputCtx
  121618. * @param {?} compMeta
  121619. * @param {?} ngModule
  121620. * @param {?} fileSuffix
  121621. * @return {?}
  121622. */
  121623. AotCompiler.prototype._compileComponentFactory = /**
  121624. * @param {?} outputCtx
  121625. * @param {?} compMeta
  121626. * @param {?} ngModule
  121627. * @param {?} fileSuffix
  121628. * @return {?}
  121629. */
  121630. function (outputCtx, compMeta, ngModule, fileSuffix) {
  121631. var /** @type {?} */ hostMeta = this._metadataResolver.getHostComponentMetadata(compMeta);
  121632. var /** @type {?} */ hostViewFactoryVar = this._compileComponent(outputCtx, hostMeta, ngModule, [compMeta.type], null, fileSuffix)
  121633. .viewClassVar;
  121634. var /** @type {?} */ compFactoryVar = componentFactoryName(compMeta.type.reference);
  121635. var /** @type {?} */ inputsExprs = [];
  121636. for (var /** @type {?} */ propName in compMeta.inputs) {
  121637. var /** @type {?} */ templateName = compMeta.inputs[propName];
  121638. // Don't quote so that the key gets minified...
  121639. inputsExprs.push(new LiteralMapEntry(propName, literal(templateName), false));
  121640. }
  121641. var /** @type {?} */ outputsExprs = [];
  121642. for (var /** @type {?} */ propName in compMeta.outputs) {
  121643. var /** @type {?} */ templateName = compMeta.outputs[propName];
  121644. // Don't quote so that the key gets minified...
  121645. outputsExprs.push(new LiteralMapEntry(propName, literal(templateName), false));
  121646. }
  121647. outputCtx.statements.push(variable(compFactoryVar)
  121648. .set(importExpr(Identifiers.createComponentFactory).callFn([
  121649. literal(compMeta.selector), outputCtx.importExpr(compMeta.type.reference),
  121650. variable(hostViewFactoryVar), new LiteralMapExpr(inputsExprs),
  121651. new LiteralMapExpr(outputsExprs),
  121652. literalArr(/** @type {?} */ ((compMeta.template)).ngContentSelectors.map(function (selector) { return literal(selector); }))
  121653. ]))
  121654. .toDeclStmt(importType(Identifiers.ComponentFactory, [/** @type {?} */ ((expressionType(outputCtx.importExpr(compMeta.type.reference))))], [TypeModifier.Const]), [StmtModifier.Final, StmtModifier.Exported]));
  121655. };
  121656. /**
  121657. * @param {?} outputCtx
  121658. * @param {?} compMeta
  121659. * @param {?} ngModule
  121660. * @param {?} directiveIdentifiers
  121661. * @param {?} componentStyles
  121662. * @param {?} fileSuffix
  121663. * @return {?}
  121664. */
  121665. AotCompiler.prototype._compileComponent = /**
  121666. * @param {?} outputCtx
  121667. * @param {?} compMeta
  121668. * @param {?} ngModule
  121669. * @param {?} directiveIdentifiers
  121670. * @param {?} componentStyles
  121671. * @param {?} fileSuffix
  121672. * @return {?}
  121673. */
  121674. function (outputCtx, compMeta, ngModule, directiveIdentifiers, componentStyles, fileSuffix) {
  121675. var _a = this._parseTemplate(compMeta, ngModule, directiveIdentifiers), parsedTemplate = _a.template, usedPipes = _a.pipes;
  121676. var /** @type {?} */ stylesExpr = componentStyles ? variable(componentStyles.stylesVar) : literalArr([]);
  121677. var /** @type {?} */ viewResult = this._viewCompiler.compileComponent(outputCtx, compMeta, parsedTemplate, stylesExpr, usedPipes);
  121678. if (componentStyles) {
  121679. _resolveStyleStatements(this._symbolResolver, componentStyles, this._styleCompiler.needsStyleShim(compMeta), fileSuffix);
  121680. }
  121681. return viewResult;
  121682. };
  121683. /**
  121684. * @param {?} compMeta
  121685. * @param {?} ngModule
  121686. * @param {?} directiveIdentifiers
  121687. * @return {?}
  121688. */
  121689. AotCompiler.prototype._parseTemplate = /**
  121690. * @param {?} compMeta
  121691. * @param {?} ngModule
  121692. * @param {?} directiveIdentifiers
  121693. * @return {?}
  121694. */
  121695. function (compMeta, ngModule, directiveIdentifiers) {
  121696. var _this = this;
  121697. if (this._templateAstCache.has(compMeta.type.reference)) {
  121698. return /** @type {?} */ ((this._templateAstCache.get(compMeta.type.reference)));
  121699. }
  121700. var /** @type {?} */ preserveWhitespaces = /** @type {?} */ ((/** @type {?} */ ((compMeta)).template)).preserveWhitespaces;
  121701. var /** @type {?} */ directives = directiveIdentifiers.map(function (dir) { return _this._metadataResolver.getDirectiveSummary(dir.reference); });
  121702. var /** @type {?} */ pipes = ngModule.transitiveModule.pipes.map(function (pipe) { return _this._metadataResolver.getPipeSummary(pipe.reference); });
  121703. var /** @type {?} */ result = this._templateParser.parse(compMeta, /** @type {?} */ ((/** @type {?} */ ((compMeta.template)).htmlAst)), directives, pipes, ngModule.schemas, templateSourceUrl(ngModule.type, compMeta, /** @type {?} */ ((compMeta.template))), preserveWhitespaces);
  121704. this._templateAstCache.set(compMeta.type.reference, result);
  121705. return result;
  121706. };
  121707. /**
  121708. * @param {?} genFilePath
  121709. * @return {?}
  121710. */
  121711. AotCompiler.prototype._createOutputContext = /**
  121712. * @param {?} genFilePath
  121713. * @return {?}
  121714. */
  121715. function (genFilePath) {
  121716. var _this = this;
  121717. var /** @type {?} */ importExpr$$1 = function (symbol, typeParams, useSummaries) {
  121718. if (typeParams === void 0) { typeParams = null; }
  121719. if (useSummaries === void 0) { useSummaries = true; }
  121720. if (!(symbol instanceof StaticSymbol)) {
  121721. throw new Error("Internal error: unknown identifier " + JSON.stringify(symbol));
  121722. }
  121723. var /** @type {?} */ arity = _this._symbolResolver.getTypeArity(symbol) || 0;
  121724. var _a = _this._symbolResolver.getImportAs(symbol, useSummaries) || symbol, filePath = _a.filePath, name = _a.name, members = _a.members;
  121725. var /** @type {?} */ importModule = _this._fileNameToModuleName(filePath, genFilePath);
  121726. // It should be good enough to compare filePath to genFilePath and if they are equal
  121727. // there is a self reference. However, ngfactory files generate to .ts but their
  121728. // symbols have .d.ts so a simple compare is insufficient. They should be canonical
  121729. // and is tracked by #17705.
  121730. var /** @type {?} */ selfReference = _this._fileNameToModuleName(genFilePath, genFilePath);
  121731. var /** @type {?} */ moduleName = importModule === selfReference ? null : importModule;
  121732. // If we are in a type expression that refers to a generic type then supply
  121733. // the required type parameters. If there were not enough type parameters
  121734. // supplied, supply any as the type. Outside a type expression the reference
  121735. // should not supply type parameters and be treated as a simple value reference
  121736. // to the constructor function itself.
  121737. var /** @type {?} */ suppliedTypeParams = typeParams || [];
  121738. var /** @type {?} */ missingTypeParamsCount = arity - suppliedTypeParams.length;
  121739. var /** @type {?} */ allTypeParams = suppliedTypeParams.concat(new Array(missingTypeParamsCount).fill(DYNAMIC_TYPE));
  121740. return members.reduce(function (expr, memberName) { return expr.prop(memberName); }, /** @type {?} */ (importExpr(new ExternalReference(moduleName, name, null), allTypeParams)));
  121741. };
  121742. return { statements: [], genFilePath: genFilePath, importExpr: importExpr$$1 };
  121743. };
  121744. /**
  121745. * @param {?} importedFilePath
  121746. * @param {?} containingFilePath
  121747. * @return {?}
  121748. */
  121749. AotCompiler.prototype._fileNameToModuleName = /**
  121750. * @param {?} importedFilePath
  121751. * @param {?} containingFilePath
  121752. * @return {?}
  121753. */
  121754. function (importedFilePath, containingFilePath) {
  121755. return this._summaryResolver.getKnownModuleName(importedFilePath) ||
  121756. this._symbolResolver.getKnownModuleName(importedFilePath) ||
  121757. this._host.fileNameToModuleName(importedFilePath, containingFilePath);
  121758. };
  121759. /**
  121760. * @param {?} srcFileUrl
  121761. * @param {?} compMeta
  121762. * @param {?} stylesheetMetadata
  121763. * @param {?} isShimmed
  121764. * @param {?} fileSuffix
  121765. * @return {?}
  121766. */
  121767. AotCompiler.prototype._codegenStyles = /**
  121768. * @param {?} srcFileUrl
  121769. * @param {?} compMeta
  121770. * @param {?} stylesheetMetadata
  121771. * @param {?} isShimmed
  121772. * @param {?} fileSuffix
  121773. * @return {?}
  121774. */
  121775. function (srcFileUrl, compMeta, stylesheetMetadata, isShimmed, fileSuffix) {
  121776. var /** @type {?} */ outputCtx = this._createOutputContext(_stylesModuleUrl(/** @type {?} */ ((stylesheetMetadata.moduleUrl)), isShimmed, fileSuffix));
  121777. var /** @type {?} */ compiledStylesheet = this._styleCompiler.compileStyles(outputCtx, compMeta, stylesheetMetadata, isShimmed);
  121778. _resolveStyleStatements(this._symbolResolver, compiledStylesheet, isShimmed, fileSuffix);
  121779. return this._codegenSourceModule(srcFileUrl, outputCtx);
  121780. };
  121781. /**
  121782. * @param {?} srcFileUrl
  121783. * @param {?} ctx
  121784. * @return {?}
  121785. */
  121786. AotCompiler.prototype._codegenSourceModule = /**
  121787. * @param {?} srcFileUrl
  121788. * @param {?} ctx
  121789. * @return {?}
  121790. */
  121791. function (srcFileUrl, ctx) {
  121792. return new GeneratedFile(srcFileUrl, ctx.genFilePath, ctx.statements);
  121793. };
  121794. /**
  121795. * @param {?=} entryRoute
  121796. * @param {?=} analyzedModules
  121797. * @return {?}
  121798. */
  121799. AotCompiler.prototype.listLazyRoutes = /**
  121800. * @param {?=} entryRoute
  121801. * @param {?=} analyzedModules
  121802. * @return {?}
  121803. */
  121804. function (entryRoute, analyzedModules) {
  121805. var /** @type {?} */ self = this;
  121806. if (entryRoute) {
  121807. var /** @type {?} */ symbol = parseLazyRoute(entryRoute, this._reflector).referencedModule;
  121808. return visitLazyRoute(symbol);
  121809. }
  121810. else if (analyzedModules) {
  121811. var /** @type {?} */ allLazyRoutes = [];
  121812. for (var _i = 0, _a = analyzedModules.ngModules; _i < _a.length; _i++) {
  121813. var ngModule = _a[_i];
  121814. var /** @type {?} */ lazyRoutes = listLazyRoutes(ngModule, this._reflector);
  121815. for (var _b = 0, lazyRoutes_1 = lazyRoutes; _b < lazyRoutes_1.length; _b++) {
  121816. var lazyRoute = lazyRoutes_1[_b];
  121817. allLazyRoutes.push(lazyRoute);
  121818. }
  121819. }
  121820. return allLazyRoutes;
  121821. }
  121822. else {
  121823. throw new Error("Either route or analyzedModules has to be specified!");
  121824. }
  121825. /**
  121826. * @param {?} symbol
  121827. * @param {?=} seenRoutes
  121828. * @param {?=} allLazyRoutes
  121829. * @return {?}
  121830. */
  121831. function visitLazyRoute(symbol, seenRoutes, allLazyRoutes) {
  121832. if (seenRoutes === void 0) { seenRoutes = new Set(); }
  121833. if (allLazyRoutes === void 0) { allLazyRoutes = []; }
  121834. // Support pointing to default exports, but stop recursing there,
  121835. // as the StaticReflector does not yet support default exports.
  121836. if (seenRoutes.has(symbol) || !symbol.name) {
  121837. return allLazyRoutes;
  121838. }
  121839. seenRoutes.add(symbol);
  121840. var /** @type {?} */ lazyRoutes = listLazyRoutes(/** @type {?} */ ((self._metadataResolver.getNgModuleMetadata(symbol, true))), self._reflector);
  121841. for (var _i = 0, lazyRoutes_2 = lazyRoutes; _i < lazyRoutes_2.length; _i++) {
  121842. var lazyRoute = lazyRoutes_2[_i];
  121843. allLazyRoutes.push(lazyRoute);
  121844. visitLazyRoute(lazyRoute.referencedModule, seenRoutes, allLazyRoutes);
  121845. }
  121846. return allLazyRoutes;
  121847. }
  121848. };
  121849. return AotCompiler;
  121850. }());
  121851. /**
  121852. * @param {?} outputCtx
  121853. * @return {?}
  121854. */
  121855. function _createEmptyStub(outputCtx) {
  121856. // Note: We need to produce at least one import statement so that
  121857. // TypeScript knows that the file is an es6 module. Otherwise our generated
  121858. // exports / imports won't be emitted properly by TypeScript.
  121859. outputCtx.statements.push(importExpr(Identifiers.ComponentFactory).toStmt());
  121860. }
  121861. /**
  121862. * @param {?} symbolResolver
  121863. * @param {?} compileResult
  121864. * @param {?} needsShim
  121865. * @param {?} fileSuffix
  121866. * @return {?}
  121867. */
  121868. function _resolveStyleStatements(symbolResolver, compileResult, needsShim, fileSuffix) {
  121869. compileResult.dependencies.forEach(function (dep) {
  121870. dep.setValue(symbolResolver.getStaticSymbol(_stylesModuleUrl(dep.moduleUrl, needsShim, fileSuffix), dep.name));
  121871. });
  121872. }
  121873. /**
  121874. * @param {?} stylesheetUrl
  121875. * @param {?} shim
  121876. * @param {?} suffix
  121877. * @return {?}
  121878. */
  121879. function _stylesModuleUrl(stylesheetUrl, shim, suffix) {
  121880. return "" + stylesheetUrl + (shim ? '.shim' : '') + ".ngstyle" + suffix;
  121881. }
  121882. /**
  121883. * @record
  121884. */
  121885. /**
  121886. * @record
  121887. */
  121888. /**
  121889. * @record
  121890. */
  121891. /**
  121892. * @param {?} fileNames
  121893. * @param {?} host
  121894. * @param {?} staticSymbolResolver
  121895. * @param {?} metadataResolver
  121896. * @return {?}
  121897. */
  121898. function analyzeNgModules(fileNames, host, staticSymbolResolver, metadataResolver) {
  121899. var /** @type {?} */ files = _analyzeFilesIncludingNonProgramFiles(fileNames, host, staticSymbolResolver, metadataResolver);
  121900. return mergeAnalyzedFiles(files);
  121901. }
  121902. /**
  121903. * @param {?} fileNames
  121904. * @param {?} host
  121905. * @param {?} staticSymbolResolver
  121906. * @param {?} metadataResolver
  121907. * @return {?}
  121908. */
  121909. function analyzeAndValidateNgModules(fileNames, host, staticSymbolResolver, metadataResolver) {
  121910. return validateAnalyzedModules(analyzeNgModules(fileNames, host, staticSymbolResolver, metadataResolver));
  121911. }
  121912. /**
  121913. * @param {?} analyzedModules
  121914. * @return {?}
  121915. */
  121916. function validateAnalyzedModules(analyzedModules) {
  121917. if (analyzedModules.symbolsMissingModule && analyzedModules.symbolsMissingModule.length) {
  121918. var /** @type {?} */ messages = analyzedModules.symbolsMissingModule.map(function (s) {
  121919. return "Cannot determine the module for class " + s.name + " in " + s.filePath + "! Add " + s.name + " to the NgModule to fix it.";
  121920. });
  121921. throw syntaxError(messages.join('\n'));
  121922. }
  121923. return analyzedModules;
  121924. }
  121925. /**
  121926. * @param {?} fileNames
  121927. * @param {?} host
  121928. * @param {?} staticSymbolResolver
  121929. * @param {?} metadataResolver
  121930. * @return {?}
  121931. */
  121932. function _analyzeFilesIncludingNonProgramFiles(fileNames, host, staticSymbolResolver, metadataResolver) {
  121933. var /** @type {?} */ seenFiles = new Set();
  121934. var /** @type {?} */ files = [];
  121935. var /** @type {?} */ visitFile = function (fileName) {
  121936. if (seenFiles.has(fileName) || !host.isSourceFile(fileName)) {
  121937. return false;
  121938. }
  121939. seenFiles.add(fileName);
  121940. var /** @type {?} */ analyzedFile = analyzeFile(host, staticSymbolResolver, metadataResolver, fileName);
  121941. files.push(analyzedFile);
  121942. analyzedFile.ngModules.forEach(function (ngModule) {
  121943. ngModule.transitiveModule.modules.forEach(function (modMeta) { return visitFile(modMeta.reference.filePath); });
  121944. });
  121945. };
  121946. fileNames.forEach(function (fileName) { return visitFile(fileName); });
  121947. return files;
  121948. }
  121949. /**
  121950. * @param {?} host
  121951. * @param {?} staticSymbolResolver
  121952. * @param {?} metadataResolver
  121953. * @param {?} fileName
  121954. * @return {?}
  121955. */
  121956. function analyzeFile(host, staticSymbolResolver, metadataResolver, fileName) {
  121957. var /** @type {?} */ directives = [];
  121958. var /** @type {?} */ pipes = [];
  121959. var /** @type {?} */ injectables = [];
  121960. var /** @type {?} */ ngModules = [];
  121961. var /** @type {?} */ hasDecorators = staticSymbolResolver.hasDecorators(fileName);
  121962. var /** @type {?} */ exportsNonSourceFiles = false;
  121963. // Don't analyze .d.ts files that have no decorators as a shortcut
  121964. // to speed up the analysis. This prevents us from
  121965. // resolving the references in these files.
  121966. // Note: exportsNonSourceFiles is only needed when compiling with summaries,
  121967. // which is not the case when .d.ts files are treated as input files.
  121968. if (!fileName.endsWith('.d.ts') || hasDecorators) {
  121969. staticSymbolResolver.getSymbolsOf(fileName).forEach(function (symbol) {
  121970. var /** @type {?} */ resolvedSymbol = staticSymbolResolver.resolveSymbol(symbol);
  121971. var /** @type {?} */ symbolMeta = resolvedSymbol.metadata;
  121972. if (!symbolMeta || symbolMeta.__symbolic === 'error') {
  121973. return;
  121974. }
  121975. var /** @type {?} */ isNgSymbol = false;
  121976. if (symbolMeta.__symbolic === 'class') {
  121977. if (metadataResolver.isDirective(symbol)) {
  121978. isNgSymbol = true;
  121979. directives.push(symbol);
  121980. }
  121981. else if (metadataResolver.isPipe(symbol)) {
  121982. isNgSymbol = true;
  121983. pipes.push(symbol);
  121984. }
  121985. else if (metadataResolver.isNgModule(symbol)) {
  121986. var /** @type {?} */ ngModule = metadataResolver.getNgModuleMetadata(symbol, false);
  121987. if (ngModule) {
  121988. isNgSymbol = true;
  121989. ngModules.push(ngModule);
  121990. }
  121991. }
  121992. else if (metadataResolver.isInjectable(symbol)) {
  121993. isNgSymbol = true;
  121994. injectables.push(symbol);
  121995. }
  121996. }
  121997. if (!isNgSymbol) {
  121998. exportsNonSourceFiles =
  121999. exportsNonSourceFiles || isValueExportingNonSourceFile(host, symbolMeta);
  122000. }
  122001. });
  122002. }
  122003. return {
  122004. fileName: fileName, directives: directives, pipes: pipes, ngModules: ngModules, injectables: injectables, exportsNonSourceFiles: exportsNonSourceFiles,
  122005. };
  122006. }
  122007. /**
  122008. * @param {?} host
  122009. * @param {?} metadata
  122010. * @return {?}
  122011. */
  122012. function isValueExportingNonSourceFile(host, metadata) {
  122013. var /** @type {?} */ exportsNonSourceFiles = false;
  122014. var Visitor = /** @class */ (function () {
  122015. function Visitor() {
  122016. }
  122017. /**
  122018. * @param {?} arr
  122019. * @param {?} context
  122020. * @return {?}
  122021. */
  122022. Visitor.prototype.visitArray = /**
  122023. * @param {?} arr
  122024. * @param {?} context
  122025. * @return {?}
  122026. */
  122027. function (arr, context) {
  122028. var _this = this;
  122029. arr.forEach(function (v) { return visitValue(v, _this, context); });
  122030. };
  122031. /**
  122032. * @param {?} map
  122033. * @param {?} context
  122034. * @return {?}
  122035. */
  122036. Visitor.prototype.visitStringMap = /**
  122037. * @param {?} map
  122038. * @param {?} context
  122039. * @return {?}
  122040. */
  122041. function (map, context) {
  122042. var _this = this;
  122043. Object.keys(map).forEach(function (key) { return visitValue(map[key], _this, context); });
  122044. };
  122045. /**
  122046. * @param {?} value
  122047. * @param {?} context
  122048. * @return {?}
  122049. */
  122050. Visitor.prototype.visitPrimitive = /**
  122051. * @param {?} value
  122052. * @param {?} context
  122053. * @return {?}
  122054. */
  122055. function (value, context) { };
  122056. /**
  122057. * @param {?} value
  122058. * @param {?} context
  122059. * @return {?}
  122060. */
  122061. Visitor.prototype.visitOther = /**
  122062. * @param {?} value
  122063. * @param {?} context
  122064. * @return {?}
  122065. */
  122066. function (value, context) {
  122067. if (value instanceof StaticSymbol && !host.isSourceFile(value.filePath)) {
  122068. exportsNonSourceFiles = true;
  122069. }
  122070. };
  122071. return Visitor;
  122072. }());
  122073. visitValue(metadata, new Visitor(), null);
  122074. return exportsNonSourceFiles;
  122075. }
  122076. /**
  122077. * @param {?} analyzedFiles
  122078. * @return {?}
  122079. */
  122080. function mergeAnalyzedFiles(analyzedFiles) {
  122081. var /** @type {?} */ allNgModules = [];
  122082. var /** @type {?} */ ngModuleByPipeOrDirective = new Map();
  122083. var /** @type {?} */ allPipesAndDirectives = new Set();
  122084. analyzedFiles.forEach(function (af) {
  122085. af.ngModules.forEach(function (ngModule) {
  122086. allNgModules.push(ngModule);
  122087. ngModule.declaredDirectives.forEach(function (d) { return ngModuleByPipeOrDirective.set(d.reference, ngModule); });
  122088. ngModule.declaredPipes.forEach(function (p) { return ngModuleByPipeOrDirective.set(p.reference, ngModule); });
  122089. });
  122090. af.directives.forEach(function (d) { return allPipesAndDirectives.add(d); });
  122091. af.pipes.forEach(function (p) { return allPipesAndDirectives.add(p); });
  122092. });
  122093. var /** @type {?} */ symbolsMissingModule = [];
  122094. allPipesAndDirectives.forEach(function (ref) {
  122095. if (!ngModuleByPipeOrDirective.has(ref)) {
  122096. symbolsMissingModule.push(ref);
  122097. }
  122098. });
  122099. return {
  122100. ngModules: allNgModules,
  122101. ngModuleByPipeOrDirective: ngModuleByPipeOrDirective,
  122102. symbolsMissingModule: symbolsMissingModule,
  122103. files: analyzedFiles
  122104. };
  122105. }
  122106. /**
  122107. * @param {?} files
  122108. * @return {?}
  122109. */
  122110. function mergeAndValidateNgFiles(files) {
  122111. return validateAnalyzedModules(mergeAnalyzedFiles(files));
  122112. }
  122113. /**
  122114. * @fileoverview added by tsickle
  122115. * @suppress {checkTypes} checked by tsc
  122116. */
  122117. /**
  122118. * @license
  122119. * Copyright Google Inc. All Rights Reserved.
  122120. *
  122121. * Use of this source code is governed by an MIT-style license that can be
  122122. * found in the LICENSE file at https://angular.io/license
  122123. */
  122124. /**
  122125. * @record
  122126. */
  122127. /**
  122128. * @record
  122129. */
  122130. var FORMATTED_MESSAGE = 'ngFormattedMessage';
  122131. /**
  122132. * @param {?} level
  122133. * @return {?}
  122134. */
  122135. function indentStr(level) {
  122136. if (level <= 0)
  122137. return '';
  122138. if (level < 6)
  122139. return ['', ' ', ' ', ' ', ' ', ' '][level];
  122140. var /** @type {?} */ half = indentStr(Math.floor(level / 2));
  122141. return half + half + (level % 2 === 1 ? ' ' : '');
  122142. }
  122143. /**
  122144. * @param {?} chain
  122145. * @param {?=} indent
  122146. * @return {?}
  122147. */
  122148. function formatChain(chain, indent) {
  122149. if (indent === void 0) { indent = 0; }
  122150. if (!chain)
  122151. return '';
  122152. var /** @type {?} */ position = chain.position ?
  122153. chain.position.fileName + "(" + (chain.position.line + 1) + "," + (chain.position.column + 1) + ")" :
  122154. '';
  122155. var /** @type {?} */ prefix = position && indent === 0 ? position + ": " : '';
  122156. var /** @type {?} */ postfix = position && indent !== 0 ? " at " + position : '';
  122157. var /** @type {?} */ message = "" + prefix + chain.message + postfix;
  122158. return "" + indentStr(indent) + message + ((chain.next && ('\n' + formatChain(chain.next, indent + 2))) || '');
  122159. }
  122160. /**
  122161. * @param {?} chain
  122162. * @return {?}
  122163. */
  122164. function formattedError(chain) {
  122165. var /** @type {?} */ message = formatChain(chain) + '.';
  122166. var /** @type {?} */ error = /** @type {?} */ (syntaxError(message));
  122167. (/** @type {?} */ (error))[FORMATTED_MESSAGE] = true;
  122168. error.chain = chain;
  122169. error.position = chain.position;
  122170. return error;
  122171. }
  122172. /**
  122173. * @param {?} error
  122174. * @return {?}
  122175. */
  122176. function isFormattedError(error) {
  122177. return !!(/** @type {?} */ (error))[FORMATTED_MESSAGE];
  122178. }
  122179. /**
  122180. * @fileoverview added by tsickle
  122181. * @suppress {checkTypes} checked by tsc
  122182. */
  122183. /**
  122184. * @license
  122185. * Copyright Google Inc. All Rights Reserved.
  122186. *
  122187. * Use of this source code is governed by an MIT-style license that can be
  122188. * found in the LICENSE file at https://angular.io/license
  122189. */
  122190. var ANGULAR_CORE = '@angular/core';
  122191. var ANGULAR_ROUTER = '@angular/router';
  122192. var HIDDEN_KEY = /^\$.*\$$/;
  122193. var IGNORE = {
  122194. __symbolic: 'ignore'
  122195. };
  122196. var USE_VALUE = 'useValue';
  122197. var PROVIDE = 'provide';
  122198. var REFERENCE_SET = new Set([USE_VALUE, 'useFactory', 'data']);
  122199. var TYPEGUARD_POSTFIX = 'TypeGuard';
  122200. var USE_IF = 'UseIf';
  122201. /**
  122202. * @param {?} value
  122203. * @return {?}
  122204. */
  122205. function shouldIgnore(value) {
  122206. return value && value.__symbolic == 'ignore';
  122207. }
  122208. /**
  122209. * A static reflector implements enough of the Reflector API that is necessary to compile
  122210. * templates statically.
  122211. */
  122212. var StaticReflector = /** @class */ (function () {
  122213. function StaticReflector(summaryResolver, symbolResolver, knownMetadataClasses, knownMetadataFunctions, errorRecorder) {
  122214. if (knownMetadataClasses === void 0) { knownMetadataClasses = []; }
  122215. if (knownMetadataFunctions === void 0) { knownMetadataFunctions = []; }
  122216. var _this = this;
  122217. this.summaryResolver = summaryResolver;
  122218. this.symbolResolver = symbolResolver;
  122219. this.errorRecorder = errorRecorder;
  122220. this.annotationCache = new Map();
  122221. this.propertyCache = new Map();
  122222. this.parameterCache = new Map();
  122223. this.methodCache = new Map();
  122224. this.staticCache = new Map();
  122225. this.conversionMap = new Map();
  122226. this.resolvedExternalReferences = new Map();
  122227. this.annotationForParentClassWithSummaryKind = new Map();
  122228. this.initializeConversionMap();
  122229. knownMetadataClasses.forEach(function (kc) {
  122230. return _this._registerDecoratorOrConstructor(_this.getStaticSymbol(kc.filePath, kc.name), kc.ctor);
  122231. });
  122232. knownMetadataFunctions.forEach(function (kf) { return _this._registerFunction(_this.getStaticSymbol(kf.filePath, kf.name), kf.fn); });
  122233. this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.Directive, [createDirective, createComponent]);
  122234. this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.Pipe, [createPipe]);
  122235. this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.NgModule, [createNgModule]);
  122236. this.annotationForParentClassWithSummaryKind.set(CompileSummaryKind.Injectable, [createInjectable, createPipe, createDirective, createComponent, createNgModule]);
  122237. }
  122238. /**
  122239. * @param {?} typeOrFunc
  122240. * @return {?}
  122241. */
  122242. StaticReflector.prototype.componentModuleUrl = /**
  122243. * @param {?} typeOrFunc
  122244. * @return {?}
  122245. */
  122246. function (typeOrFunc) {
  122247. var /** @type {?} */ staticSymbol = this.findSymbolDeclaration(typeOrFunc);
  122248. return this.symbolResolver.getResourcePath(staticSymbol);
  122249. };
  122250. /**
  122251. * @param {?} ref
  122252. * @param {?=} containingFile
  122253. * @return {?}
  122254. */
  122255. StaticReflector.prototype.resolveExternalReference = /**
  122256. * @param {?} ref
  122257. * @param {?=} containingFile
  122258. * @return {?}
  122259. */
  122260. function (ref, containingFile) {
  122261. var /** @type {?} */ key = undefined;
  122262. if (!containingFile) {
  122263. key = ref.moduleName + ":" + ref.name;
  122264. var /** @type {?} */ declarationSymbol_1 = this.resolvedExternalReferences.get(key);
  122265. if (declarationSymbol_1)
  122266. return declarationSymbol_1;
  122267. }
  122268. var /** @type {?} */ refSymbol = this.symbolResolver.getSymbolByModule(/** @type {?} */ ((ref.moduleName)), /** @type {?} */ ((ref.name)), containingFile);
  122269. var /** @type {?} */ declarationSymbol = this.findSymbolDeclaration(refSymbol);
  122270. if (!containingFile) {
  122271. this.symbolResolver.recordModuleNameForFileName(refSymbol.filePath, /** @type {?} */ ((ref.moduleName)));
  122272. this.symbolResolver.recordImportAs(declarationSymbol, refSymbol);
  122273. }
  122274. if (key) {
  122275. this.resolvedExternalReferences.set(key, declarationSymbol);
  122276. }
  122277. return declarationSymbol;
  122278. };
  122279. /**
  122280. * @param {?} moduleUrl
  122281. * @param {?} name
  122282. * @param {?=} containingFile
  122283. * @return {?}
  122284. */
  122285. StaticReflector.prototype.findDeclaration = /**
  122286. * @param {?} moduleUrl
  122287. * @param {?} name
  122288. * @param {?=} containingFile
  122289. * @return {?}
  122290. */
  122291. function (moduleUrl, name, containingFile) {
  122292. return this.findSymbolDeclaration(this.symbolResolver.getSymbolByModule(moduleUrl, name, containingFile));
  122293. };
  122294. /**
  122295. * @param {?} moduleUrl
  122296. * @param {?} name
  122297. * @return {?}
  122298. */
  122299. StaticReflector.prototype.tryFindDeclaration = /**
  122300. * @param {?} moduleUrl
  122301. * @param {?} name
  122302. * @return {?}
  122303. */
  122304. function (moduleUrl, name) {
  122305. var _this = this;
  122306. return this.symbolResolver.ignoreErrorsFor(function () { return _this.findDeclaration(moduleUrl, name); });
  122307. };
  122308. /**
  122309. * @param {?} symbol
  122310. * @return {?}
  122311. */
  122312. StaticReflector.prototype.findSymbolDeclaration = /**
  122313. * @param {?} symbol
  122314. * @return {?}
  122315. */
  122316. function (symbol) {
  122317. var /** @type {?} */ resolvedSymbol = this.symbolResolver.resolveSymbol(symbol);
  122318. if (resolvedSymbol) {
  122319. var /** @type {?} */ resolvedMetadata = resolvedSymbol.metadata;
  122320. if (resolvedMetadata && resolvedMetadata.__symbolic === 'resolved') {
  122321. resolvedMetadata = resolvedMetadata.symbol;
  122322. }
  122323. if (resolvedMetadata instanceof StaticSymbol) {
  122324. return this.findSymbolDeclaration(resolvedSymbol.metadata);
  122325. }
  122326. }
  122327. return symbol;
  122328. };
  122329. /**
  122330. * @param {?} type
  122331. * @return {?}
  122332. */
  122333. StaticReflector.prototype.annotations = /**
  122334. * @param {?} type
  122335. * @return {?}
  122336. */
  122337. function (type) {
  122338. var /** @type {?} */ annotations = this.annotationCache.get(type);
  122339. if (!annotations) {
  122340. annotations = [];
  122341. var /** @type {?} */ classMetadata = this.getTypeMetadata(type);
  122342. var /** @type {?} */ parentType = this.findParentType(type, classMetadata);
  122343. if (parentType) {
  122344. var /** @type {?} */ parentAnnotations = this.annotations(parentType);
  122345. annotations.push.apply(annotations, parentAnnotations);
  122346. }
  122347. var /** @type {?} */ ownAnnotations_1 = [];
  122348. if (classMetadata['decorators']) {
  122349. ownAnnotations_1 = this.simplify(type, classMetadata['decorators']);
  122350. annotations.push.apply(annotations, ownAnnotations_1);
  122351. }
  122352. if (parentType && !this.summaryResolver.isLibraryFile(type.filePath) &&
  122353. this.summaryResolver.isLibraryFile(parentType.filePath)) {
  122354. var /** @type {?} */ summary = this.summaryResolver.resolveSummary(parentType);
  122355. if (summary && summary.type) {
  122356. var /** @type {?} */ requiredAnnotationTypes = /** @type {?} */ ((this.annotationForParentClassWithSummaryKind.get(/** @type {?} */ ((summary.type.summaryKind)))));
  122357. var /** @type {?} */ typeHasRequiredAnnotation = requiredAnnotationTypes.some(function (requiredType) { return ownAnnotations_1.some(function (ann) { return requiredType.isTypeOf(ann); }); });
  122358. if (!typeHasRequiredAnnotation) {
  122359. this.reportError(formatMetadataError(metadataError("Class " + type.name + " in " + type.filePath + " extends from a " + CompileSummaryKind[(/** @type {?} */ ((summary.type.summaryKind)))] + " in another compilation unit without duplicating the decorator", undefined, "Please add a " + requiredAnnotationTypes.map(function (type) { return type.ngMetadataName; }).join(' or ') + " decorator to the class"), type), type);
  122360. }
  122361. }
  122362. }
  122363. this.annotationCache.set(type, annotations.filter(function (ann) { return !!ann; }));
  122364. }
  122365. return annotations;
  122366. };
  122367. /**
  122368. * @param {?} type
  122369. * @return {?}
  122370. */
  122371. StaticReflector.prototype.propMetadata = /**
  122372. * @param {?} type
  122373. * @return {?}
  122374. */
  122375. function (type) {
  122376. var _this = this;
  122377. var /** @type {?} */ propMetadata = this.propertyCache.get(type);
  122378. if (!propMetadata) {
  122379. var /** @type {?} */ classMetadata = this.getTypeMetadata(type);
  122380. propMetadata = {};
  122381. var /** @type {?} */ parentType = this.findParentType(type, classMetadata);
  122382. if (parentType) {
  122383. var /** @type {?} */ parentPropMetadata_1 = this.propMetadata(parentType);
  122384. Object.keys(parentPropMetadata_1).forEach(function (parentProp) {
  122385. /** @type {?} */ ((propMetadata))[parentProp] = parentPropMetadata_1[parentProp];
  122386. });
  122387. }
  122388. var /** @type {?} */ members_1 = classMetadata['members'] || {};
  122389. Object.keys(members_1).forEach(function (propName) {
  122390. var /** @type {?} */ propData = members_1[propName];
  122391. var /** @type {?} */ prop = (/** @type {?} */ (propData))
  122392. .find(function (a) { return a['__symbolic'] == 'property' || a['__symbolic'] == 'method'; });
  122393. var /** @type {?} */ decorators = [];
  122394. if (/** @type {?} */ ((propMetadata))[propName]) {
  122395. decorators.push.apply(decorators, /** @type {?} */ ((propMetadata))[propName]);
  122396. } /** @type {?} */
  122397. ((propMetadata))[propName] = decorators;
  122398. if (prop && prop['decorators']) {
  122399. decorators.push.apply(decorators, _this.simplify(type, prop['decorators']));
  122400. }
  122401. });
  122402. this.propertyCache.set(type, propMetadata);
  122403. }
  122404. return propMetadata;
  122405. };
  122406. /**
  122407. * @param {?} type
  122408. * @return {?}
  122409. */
  122410. StaticReflector.prototype.parameters = /**
  122411. * @param {?} type
  122412. * @return {?}
  122413. */
  122414. function (type) {
  122415. var _this = this;
  122416. if (!(type instanceof StaticSymbol)) {
  122417. this.reportError(new Error("parameters received " + JSON.stringify(type) + " which is not a StaticSymbol"), type);
  122418. return [];
  122419. }
  122420. try {
  122421. var /** @type {?} */ parameters_1 = this.parameterCache.get(type);
  122422. if (!parameters_1) {
  122423. var /** @type {?} */ classMetadata = this.getTypeMetadata(type);
  122424. var /** @type {?} */ parentType = this.findParentType(type, classMetadata);
  122425. var /** @type {?} */ members = classMetadata ? classMetadata['members'] : null;
  122426. var /** @type {?} */ ctorData = members ? members['__ctor__'] : null;
  122427. if (ctorData) {
  122428. var /** @type {?} */ ctor = (/** @type {?} */ (ctorData)).find(function (a) { return a['__symbolic'] == 'constructor'; });
  122429. var /** @type {?} */ rawParameterTypes = /** @type {?} */ (ctor['parameters']) || [];
  122430. var /** @type {?} */ parameterDecorators_1 = /** @type {?} */ (this.simplify(type, ctor['parameterDecorators'] || []));
  122431. parameters_1 = [];
  122432. rawParameterTypes.forEach(function (rawParamType, index) {
  122433. var /** @type {?} */ nestedResult = [];
  122434. var /** @type {?} */ paramType = _this.trySimplify(type, rawParamType);
  122435. if (paramType)
  122436. nestedResult.push(paramType);
  122437. var /** @type {?} */ decorators = parameterDecorators_1 ? parameterDecorators_1[index] : null;
  122438. if (decorators) {
  122439. nestedResult.push.apply(nestedResult, decorators);
  122440. } /** @type {?} */
  122441. ((parameters_1)).push(nestedResult);
  122442. });
  122443. }
  122444. else if (parentType) {
  122445. parameters_1 = this.parameters(parentType);
  122446. }
  122447. if (!parameters_1) {
  122448. parameters_1 = [];
  122449. }
  122450. this.parameterCache.set(type, parameters_1);
  122451. }
  122452. return parameters_1;
  122453. }
  122454. catch (/** @type {?} */ e) {
  122455. console.error("Failed on type " + JSON.stringify(type) + " with error " + e);
  122456. throw e;
  122457. }
  122458. };
  122459. /**
  122460. * @param {?} type
  122461. * @return {?}
  122462. */
  122463. StaticReflector.prototype._methodNames = /**
  122464. * @param {?} type
  122465. * @return {?}
  122466. */
  122467. function (type) {
  122468. var /** @type {?} */ methodNames = this.methodCache.get(type);
  122469. if (!methodNames) {
  122470. var /** @type {?} */ classMetadata = this.getTypeMetadata(type);
  122471. methodNames = {};
  122472. var /** @type {?} */ parentType = this.findParentType(type, classMetadata);
  122473. if (parentType) {
  122474. var /** @type {?} */ parentMethodNames_1 = this._methodNames(parentType);
  122475. Object.keys(parentMethodNames_1).forEach(function (parentProp) {
  122476. /** @type {?} */ ((methodNames))[parentProp] = parentMethodNames_1[parentProp];
  122477. });
  122478. }
  122479. var /** @type {?} */ members_2 = classMetadata['members'] || {};
  122480. Object.keys(members_2).forEach(function (propName) {
  122481. var /** @type {?} */ propData = members_2[propName];
  122482. var /** @type {?} */ isMethod = (/** @type {?} */ (propData)).some(function (a) { return a['__symbolic'] == 'method'; }); /** @type {?} */
  122483. ((methodNames))[propName] = /** @type {?} */ ((methodNames))[propName] || isMethod;
  122484. });
  122485. this.methodCache.set(type, methodNames);
  122486. }
  122487. return methodNames;
  122488. };
  122489. /**
  122490. * @param {?} type
  122491. * @return {?}
  122492. */
  122493. StaticReflector.prototype._staticMembers = /**
  122494. * @param {?} type
  122495. * @return {?}
  122496. */
  122497. function (type) {
  122498. var /** @type {?} */ staticMembers = this.staticCache.get(type);
  122499. if (!staticMembers) {
  122500. var /** @type {?} */ classMetadata = this.getTypeMetadata(type);
  122501. var /** @type {?} */ staticMemberData = classMetadata['statics'] || {};
  122502. staticMembers = Object.keys(staticMemberData);
  122503. this.staticCache.set(type, staticMembers);
  122504. }
  122505. return staticMembers;
  122506. };
  122507. /**
  122508. * @param {?} type
  122509. * @param {?} classMetadata
  122510. * @return {?}
  122511. */
  122512. StaticReflector.prototype.findParentType = /**
  122513. * @param {?} type
  122514. * @param {?} classMetadata
  122515. * @return {?}
  122516. */
  122517. function (type, classMetadata) {
  122518. var /** @type {?} */ parentType = this.trySimplify(type, classMetadata['extends']);
  122519. if (parentType instanceof StaticSymbol) {
  122520. return parentType;
  122521. }
  122522. };
  122523. /**
  122524. * @param {?} type
  122525. * @param {?} lcProperty
  122526. * @return {?}
  122527. */
  122528. StaticReflector.prototype.hasLifecycleHook = /**
  122529. * @param {?} type
  122530. * @param {?} lcProperty
  122531. * @return {?}
  122532. */
  122533. function (type, lcProperty) {
  122534. if (!(type instanceof StaticSymbol)) {
  122535. this.reportError(new Error("hasLifecycleHook received " + JSON.stringify(type) + " which is not a StaticSymbol"), type);
  122536. }
  122537. try {
  122538. return !!this._methodNames(type)[lcProperty];
  122539. }
  122540. catch (/** @type {?} */ e) {
  122541. console.error("Failed on type " + JSON.stringify(type) + " with error " + e);
  122542. throw e;
  122543. }
  122544. };
  122545. /**
  122546. * @param {?} type
  122547. * @return {?}
  122548. */
  122549. StaticReflector.prototype.guards = /**
  122550. * @param {?} type
  122551. * @return {?}
  122552. */
  122553. function (type) {
  122554. if (!(type instanceof StaticSymbol)) {
  122555. this.reportError(new Error("guards received " + JSON.stringify(type) + " which is not a StaticSymbol"), type);
  122556. return {};
  122557. }
  122558. var /** @type {?} */ staticMembers = this._staticMembers(type);
  122559. var /** @type {?} */ result = {};
  122560. for (var _i = 0, staticMembers_1 = staticMembers; _i < staticMembers_1.length; _i++) {
  122561. var name_1 = staticMembers_1[_i];
  122562. if (name_1.endsWith(TYPEGUARD_POSTFIX)) {
  122563. var /** @type {?} */ property = name_1.substr(0, name_1.length - TYPEGUARD_POSTFIX.length);
  122564. var /** @type {?} */ value = void 0;
  122565. if (property.endsWith(USE_IF)) {
  122566. property = name_1.substr(0, property.length - USE_IF.length);
  122567. value = USE_IF;
  122568. }
  122569. else {
  122570. value = this.getStaticSymbol(type.filePath, type.name, [name_1]);
  122571. }
  122572. result[property] = value;
  122573. }
  122574. }
  122575. return result;
  122576. };
  122577. /**
  122578. * @param {?} type
  122579. * @param {?} ctor
  122580. * @return {?}
  122581. */
  122582. StaticReflector.prototype._registerDecoratorOrConstructor = /**
  122583. * @param {?} type
  122584. * @param {?} ctor
  122585. * @return {?}
  122586. */
  122587. function (type, ctor) {
  122588. this.conversionMap.set(type, function (context, args) { return new (ctor.bind.apply(ctor, [void 0].concat(args)))(); });
  122589. };
  122590. /**
  122591. * @param {?} type
  122592. * @param {?} fn
  122593. * @return {?}
  122594. */
  122595. StaticReflector.prototype._registerFunction = /**
  122596. * @param {?} type
  122597. * @param {?} fn
  122598. * @return {?}
  122599. */
  122600. function (type, fn) {
  122601. this.conversionMap.set(type, function (context, args) { return fn.apply(undefined, args); });
  122602. };
  122603. /**
  122604. * @return {?}
  122605. */
  122606. StaticReflector.prototype.initializeConversionMap = /**
  122607. * @return {?}
  122608. */
  122609. function () {
  122610. this.injectionToken = this.findDeclaration(ANGULAR_CORE, 'InjectionToken');
  122611. this.opaqueToken = this.findDeclaration(ANGULAR_CORE, 'OpaqueToken');
  122612. this.ROUTES = this.tryFindDeclaration(ANGULAR_ROUTER, 'ROUTES');
  122613. this.ANALYZE_FOR_ENTRY_COMPONENTS =
  122614. this.findDeclaration(ANGULAR_CORE, 'ANALYZE_FOR_ENTRY_COMPONENTS');
  122615. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Host'), createHost);
  122616. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Injectable'), createInjectable);
  122617. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Self'), createSelf);
  122618. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'SkipSelf'), createSkipSelf);
  122619. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Inject'), createInject);
  122620. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Optional'), createOptional);
  122621. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Attribute'), createAttribute);
  122622. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ContentChild'), createContentChild);
  122623. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ContentChildren'), createContentChildren);
  122624. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ViewChild'), createViewChild);
  122625. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'ViewChildren'), createViewChildren);
  122626. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Input'), createInput);
  122627. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Output'), createOutput);
  122628. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Pipe'), createPipe);
  122629. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'HostBinding'), createHostBinding);
  122630. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'HostListener'), createHostListener);
  122631. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Directive'), createDirective);
  122632. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Component'), createComponent);
  122633. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'NgModule'), createNgModule);
  122634. // Note: Some metadata classes can be used directly with Provider.deps.
  122635. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Host'), createHost);
  122636. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Self'), createSelf);
  122637. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'SkipSelf'), createSkipSelf);
  122638. this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Optional'), createOptional);
  122639. };
  122640. /**
  122641. * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
  122642. * All types passed to the StaticResolver should be pseudo-types returned by this method.
  122643. *
  122644. * @param declarationFile the absolute path of the file where the symbol is declared
  122645. * @param name the name of the type.
  122646. */
  122647. /**
  122648. * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
  122649. * All types passed to the StaticResolver should be pseudo-types returned by this method.
  122650. *
  122651. * @param {?} declarationFile the absolute path of the file where the symbol is declared
  122652. * @param {?} name the name of the type.
  122653. * @param {?=} members
  122654. * @return {?}
  122655. */
  122656. StaticReflector.prototype.getStaticSymbol = /**
  122657. * getStaticSymbol produces a Type whose metadata is known but whose implementation is not loaded.
  122658. * All types passed to the StaticResolver should be pseudo-types returned by this method.
  122659. *
  122660. * @param {?} declarationFile the absolute path of the file where the symbol is declared
  122661. * @param {?} name the name of the type.
  122662. * @param {?=} members
  122663. * @return {?}
  122664. */
  122665. function (declarationFile, name, members) {
  122666. return this.symbolResolver.getStaticSymbol(declarationFile, name, members);
  122667. };
  122668. /**
  122669. * Simplify but discard any errors
  122670. * @param {?} context
  122671. * @param {?} value
  122672. * @return {?}
  122673. */
  122674. StaticReflector.prototype.trySimplify = /**
  122675. * Simplify but discard any errors
  122676. * @param {?} context
  122677. * @param {?} value
  122678. * @return {?}
  122679. */
  122680. function (context, value) {
  122681. var /** @type {?} */ originalRecorder = this.errorRecorder;
  122682. this.errorRecorder = function (error, fileName) { };
  122683. var /** @type {?} */ result = this.simplify(context, value);
  122684. this.errorRecorder = originalRecorder;
  122685. return result;
  122686. };
  122687. /**
  122688. * \@internal
  122689. * @param {?} context
  122690. * @param {?} value
  122691. * @return {?}
  122692. */
  122693. StaticReflector.prototype.simplify = /**
  122694. * \@internal
  122695. * @param {?} context
  122696. * @param {?} value
  122697. * @return {?}
  122698. */
  122699. function (context, value) {
  122700. var /** @type {?} */ self = this;
  122701. var /** @type {?} */ scope = BindingScope.empty;
  122702. var /** @type {?} */ calling = new Map();
  122703. var /** @type {?} */ rootContext = context;
  122704. /**
  122705. * @param {?} context
  122706. * @param {?} value
  122707. * @param {?} depth
  122708. * @param {?} references
  122709. * @return {?}
  122710. */
  122711. function simplifyInContext(context, value, depth, references) {
  122712. /**
  122713. * @param {?} staticSymbol
  122714. * @return {?}
  122715. */
  122716. function resolveReferenceValue(staticSymbol) {
  122717. var /** @type {?} */ resolvedSymbol = self.symbolResolver.resolveSymbol(staticSymbol);
  122718. return resolvedSymbol ? resolvedSymbol.metadata : null;
  122719. }
  122720. /**
  122721. * @param {?} value
  122722. * @return {?}
  122723. */
  122724. function simplifyEagerly(value) {
  122725. return simplifyInContext(context, value, depth, 0);
  122726. }
  122727. /**
  122728. * @param {?} value
  122729. * @return {?}
  122730. */
  122731. function simplifyLazily(value) {
  122732. return simplifyInContext(context, value, depth, references + 1);
  122733. }
  122734. /**
  122735. * @param {?} nestedContext
  122736. * @param {?} value
  122737. * @return {?}
  122738. */
  122739. function simplifyNested(nestedContext, value) {
  122740. if (nestedContext === context) {
  122741. // If the context hasn't changed let the exception propagate unmodified.
  122742. return simplifyInContext(nestedContext, value, depth + 1, references);
  122743. }
  122744. try {
  122745. return simplifyInContext(nestedContext, value, depth + 1, references);
  122746. }
  122747. catch (/** @type {?} */ e) {
  122748. if (isMetadataError(e)) {
  122749. // Propagate the message text up but add a message to the chain that explains how we got
  122750. // here.
  122751. // e.chain implies e.symbol
  122752. var /** @type {?} */ summaryMsg = e.chain ? 'references \'' + /** @type {?} */ ((e.symbol)).name + '\'' : errorSummary(e);
  122753. var /** @type {?} */ summary = "'" + nestedContext.name + "' " + summaryMsg;
  122754. var /** @type {?} */ chain = { message: summary, position: e.position, next: e.chain };
  122755. // TODO(chuckj): retrieve the position information indirectly from the collectors node
  122756. // map if the metadata is from a .ts file.
  122757. self.error({
  122758. message: e.message,
  122759. advise: e.advise,
  122760. context: e.context, chain: chain,
  122761. symbol: nestedContext
  122762. }, context);
  122763. }
  122764. else {
  122765. // It is probably an internal error.
  122766. throw e;
  122767. }
  122768. }
  122769. }
  122770. /**
  122771. * @param {?} functionSymbol
  122772. * @param {?} targetFunction
  122773. * @param {?} args
  122774. * @param {?} targetExpression
  122775. * @return {?}
  122776. */
  122777. function simplifyCall(functionSymbol, targetFunction, args, targetExpression) {
  122778. if (targetFunction && targetFunction['__symbolic'] == 'function') {
  122779. if (calling.get(functionSymbol)) {
  122780. self.error({
  122781. message: 'Recursion is not supported',
  122782. summary: "called '" + functionSymbol.name + "' recursively",
  122783. value: targetFunction
  122784. }, functionSymbol);
  122785. }
  122786. try {
  122787. var /** @type {?} */ value_1 = targetFunction['value'];
  122788. if (value_1 && (depth != 0 || value_1.__symbolic != 'error')) {
  122789. var /** @type {?} */ parameters = targetFunction['parameters'];
  122790. var /** @type {?} */ defaults = targetFunction.defaults;
  122791. args = args.map(function (arg) { return simplifyNested(context, arg); })
  122792. .map(function (arg) { return shouldIgnore(arg) ? undefined : arg; });
  122793. if (defaults && defaults.length > args.length) {
  122794. args.push.apply(args, defaults.slice(args.length).map(function (value) { return simplify(value); }));
  122795. }
  122796. calling.set(functionSymbol, true);
  122797. var /** @type {?} */ functionScope = BindingScope.build();
  122798. for (var /** @type {?} */ i = 0; i < parameters.length; i++) {
  122799. functionScope.define(parameters[i], args[i]);
  122800. }
  122801. var /** @type {?} */ oldScope = scope;
  122802. var /** @type {?} */ result_1;
  122803. try {
  122804. scope = functionScope.done();
  122805. result_1 = simplifyNested(functionSymbol, value_1);
  122806. }
  122807. finally {
  122808. scope = oldScope;
  122809. }
  122810. return result_1;
  122811. }
  122812. }
  122813. finally {
  122814. calling.delete(functionSymbol);
  122815. }
  122816. }
  122817. if (depth === 0) {
  122818. // If depth is 0 we are evaluating the top level expression that is describing element
  122819. // decorator. In this case, it is a decorator we don't understand, such as a custom
  122820. // non-angular decorator, and we should just ignore it.
  122821. return IGNORE;
  122822. }
  122823. var /** @type {?} */ position = undefined;
  122824. if (targetExpression && targetExpression.__symbolic == 'resolved') {
  122825. var /** @type {?} */ line = targetExpression.line;
  122826. var /** @type {?} */ character = targetExpression.character;
  122827. var /** @type {?} */ fileName = targetExpression.fileName;
  122828. if (fileName != null && line != null && character != null) {
  122829. position = { fileName: fileName, line: line, column: character };
  122830. }
  122831. }
  122832. self.error({
  122833. message: FUNCTION_CALL_NOT_SUPPORTED,
  122834. context: functionSymbol,
  122835. value: targetFunction, position: position
  122836. }, context);
  122837. }
  122838. /**
  122839. * @param {?} expression
  122840. * @return {?}
  122841. */
  122842. function simplify(expression) {
  122843. if (isPrimitive(expression)) {
  122844. return expression;
  122845. }
  122846. if (expression instanceof Array) {
  122847. var /** @type {?} */ result_2 = [];
  122848. for (var _i = 0, _a = (/** @type {?} */ (expression)); _i < _a.length; _i++) {
  122849. var item = _a[_i];
  122850. // Check for a spread expression
  122851. if (item && item.__symbolic === 'spread') {
  122852. // We call with references as 0 because we require the actual value and cannot
  122853. // tolerate a reference here.
  122854. var /** @type {?} */ spreadArray = simplifyEagerly(item.expression);
  122855. if (Array.isArray(spreadArray)) {
  122856. for (var _b = 0, spreadArray_1 = spreadArray; _b < spreadArray_1.length; _b++) {
  122857. var spreadItem = spreadArray_1[_b];
  122858. result_2.push(spreadItem);
  122859. }
  122860. continue;
  122861. }
  122862. }
  122863. var /** @type {?} */ value_2 = simplify(item);
  122864. if (shouldIgnore(value_2)) {
  122865. continue;
  122866. }
  122867. result_2.push(value_2);
  122868. }
  122869. return result_2;
  122870. }
  122871. if (expression instanceof StaticSymbol) {
  122872. // Stop simplification at builtin symbols or if we are in a reference context and
  122873. // the symbol doesn't have members.
  122874. if (expression === self.injectionToken || self.conversionMap.has(expression) ||
  122875. (references > 0 && !expression.members.length)) {
  122876. return expression;
  122877. }
  122878. else {
  122879. var /** @type {?} */ staticSymbol = expression;
  122880. var /** @type {?} */ declarationValue = resolveReferenceValue(staticSymbol);
  122881. if (declarationValue != null) {
  122882. return simplifyNested(staticSymbol, declarationValue);
  122883. }
  122884. else {
  122885. return staticSymbol;
  122886. }
  122887. }
  122888. }
  122889. if (expression) {
  122890. if (expression['__symbolic']) {
  122891. var /** @type {?} */ staticSymbol = void 0;
  122892. switch (expression['__symbolic']) {
  122893. case 'binop':
  122894. var /** @type {?} */ left = simplify(expression['left']);
  122895. if (shouldIgnore(left))
  122896. return left;
  122897. var /** @type {?} */ right = simplify(expression['right']);
  122898. if (shouldIgnore(right))
  122899. return right;
  122900. switch (expression['operator']) {
  122901. case '&&':
  122902. return left && right;
  122903. case '||':
  122904. return left || right;
  122905. case '|':
  122906. return left | right;
  122907. case '^':
  122908. return left ^ right;
  122909. case '&':
  122910. return left & right;
  122911. case '==':
  122912. return left == right;
  122913. case '!=':
  122914. return left != right;
  122915. case '===':
  122916. return left === right;
  122917. case '!==':
  122918. return left !== right;
  122919. case '<':
  122920. return left < right;
  122921. case '>':
  122922. return left > right;
  122923. case '<=':
  122924. return left <= right;
  122925. case '>=':
  122926. return left >= right;
  122927. case '<<':
  122928. return left << right;
  122929. case '>>':
  122930. return left >> right;
  122931. case '+':
  122932. return left + right;
  122933. case '-':
  122934. return left - right;
  122935. case '*':
  122936. return left * right;
  122937. case '/':
  122938. return left / right;
  122939. case '%':
  122940. return left % right;
  122941. }
  122942. return null;
  122943. case 'if':
  122944. var /** @type {?} */ condition = simplify(expression['condition']);
  122945. return condition ? simplify(expression['thenExpression']) :
  122946. simplify(expression['elseExpression']);
  122947. case 'pre':
  122948. var /** @type {?} */ operand = simplify(expression['operand']);
  122949. if (shouldIgnore(operand))
  122950. return operand;
  122951. switch (expression['operator']) {
  122952. case '+':
  122953. return operand;
  122954. case '-':
  122955. return -operand;
  122956. case '!':
  122957. return !operand;
  122958. case '~':
  122959. return ~operand;
  122960. }
  122961. return null;
  122962. case 'index':
  122963. var /** @type {?} */ indexTarget = simplifyEagerly(expression['expression']);
  122964. var /** @type {?} */ index = simplifyEagerly(expression['index']);
  122965. if (indexTarget && isPrimitive(index))
  122966. return indexTarget[index];
  122967. return null;
  122968. case 'select':
  122969. var /** @type {?} */ member = expression['member'];
  122970. var /** @type {?} */ selectContext = context;
  122971. var /** @type {?} */ selectTarget = simplify(expression['expression']);
  122972. if (selectTarget instanceof StaticSymbol) {
  122973. var /** @type {?} */ members = selectTarget.members.concat(member);
  122974. selectContext =
  122975. self.getStaticSymbol(selectTarget.filePath, selectTarget.name, members);
  122976. var /** @type {?} */ declarationValue = resolveReferenceValue(selectContext);
  122977. if (declarationValue != null) {
  122978. return simplifyNested(selectContext, declarationValue);
  122979. }
  122980. else {
  122981. return selectContext;
  122982. }
  122983. }
  122984. if (selectTarget && isPrimitive(member))
  122985. return simplifyNested(selectContext, selectTarget[member]);
  122986. return null;
  122987. case 'reference':
  122988. // Note: This only has to deal with variable references, as symbol references have
  122989. // been converted into 'resolved'
  122990. // in the StaticSymbolResolver.
  122991. var /** @type {?} */ name_2 = expression['name'];
  122992. var /** @type {?} */ localValue = scope.resolve(name_2);
  122993. if (localValue != BindingScope.missing) {
  122994. return localValue;
  122995. }
  122996. break;
  122997. case 'resolved':
  122998. try {
  122999. return simplify(expression.symbol);
  123000. }
  123001. catch (/** @type {?} */ e) {
  123002. // If an error is reported evaluating the symbol record the position of the
  123003. // reference in the error so it can
  123004. // be reported in the error message generated from the exception.
  123005. if (isMetadataError(e) && expression.fileName != null &&
  123006. expression.line != null && expression.character != null) {
  123007. e.position = {
  123008. fileName: expression.fileName,
  123009. line: expression.line,
  123010. column: expression.character
  123011. };
  123012. }
  123013. throw e;
  123014. }
  123015. case 'class':
  123016. return context;
  123017. case 'function':
  123018. return context;
  123019. case 'new':
  123020. case 'call':
  123021. // Determine if the function is a built-in conversion
  123022. staticSymbol = simplifyInContext(context, expression['expression'], depth + 1, /* references */ 0);
  123023. if (staticSymbol instanceof StaticSymbol) {
  123024. if (staticSymbol === self.injectionToken || staticSymbol === self.opaqueToken) {
  123025. // if somebody calls new InjectionToken, don't create an InjectionToken,
  123026. // but rather return the symbol to which the InjectionToken is assigned to.
  123027. // OpaqueToken is supported too as it is required by the language service to
  123028. // support v4 and prior versions of Angular.
  123029. return context;
  123030. }
  123031. var /** @type {?} */ argExpressions = expression['arguments'] || [];
  123032. var /** @type {?} */ converter = self.conversionMap.get(staticSymbol);
  123033. if (converter) {
  123034. var /** @type {?} */ args = argExpressions.map(function (arg) { return simplifyNested(context, arg); })
  123035. .map(function (arg) { return shouldIgnore(arg) ? undefined : arg; });
  123036. return converter(context, args);
  123037. }
  123038. else {
  123039. // Determine if the function is one we can simplify.
  123040. var /** @type {?} */ targetFunction = resolveReferenceValue(staticSymbol);
  123041. return simplifyCall(staticSymbol, targetFunction, argExpressions, expression['expression']);
  123042. }
  123043. }
  123044. return IGNORE;
  123045. case 'error':
  123046. var /** @type {?} */ message = expression.message;
  123047. if (expression['line'] != null) {
  123048. self.error({
  123049. message: message,
  123050. context: expression.context,
  123051. value: expression,
  123052. position: {
  123053. fileName: expression['fileName'],
  123054. line: expression['line'],
  123055. column: expression['character']
  123056. }
  123057. }, context);
  123058. }
  123059. else {
  123060. self.error({ message: message, context: expression.context }, context);
  123061. }
  123062. return IGNORE;
  123063. case 'ignore':
  123064. return expression;
  123065. }
  123066. return null;
  123067. }
  123068. return mapStringMap(expression, function (value, name) {
  123069. if (REFERENCE_SET.has(name)) {
  123070. if (name === USE_VALUE && PROVIDE in expression) {
  123071. // If this is a provider expression, check for special tokens that need the value
  123072. // during analysis.
  123073. var /** @type {?} */ provide = simplify(expression.provide);
  123074. if (provide === self.ROUTES || provide == self.ANALYZE_FOR_ENTRY_COMPONENTS) {
  123075. return simplify(value);
  123076. }
  123077. }
  123078. return simplifyLazily(value);
  123079. }
  123080. return simplify(value);
  123081. });
  123082. }
  123083. return IGNORE;
  123084. }
  123085. return simplify(value);
  123086. }
  123087. var /** @type {?} */ result;
  123088. try {
  123089. result = simplifyInContext(context, value, 0, 0);
  123090. }
  123091. catch (/** @type {?} */ e) {
  123092. if (this.errorRecorder) {
  123093. this.reportError(e, context);
  123094. }
  123095. else {
  123096. throw formatMetadataError(e, context);
  123097. }
  123098. }
  123099. if (shouldIgnore(result)) {
  123100. return undefined;
  123101. }
  123102. return result;
  123103. };
  123104. /**
  123105. * @param {?} type
  123106. * @return {?}
  123107. */
  123108. StaticReflector.prototype.getTypeMetadata = /**
  123109. * @param {?} type
  123110. * @return {?}
  123111. */
  123112. function (type) {
  123113. var /** @type {?} */ resolvedSymbol = this.symbolResolver.resolveSymbol(type);
  123114. return resolvedSymbol && resolvedSymbol.metadata ? resolvedSymbol.metadata :
  123115. { __symbolic: 'class' };
  123116. };
  123117. /**
  123118. * @param {?} error
  123119. * @param {?} context
  123120. * @param {?=} path
  123121. * @return {?}
  123122. */
  123123. StaticReflector.prototype.reportError = /**
  123124. * @param {?} error
  123125. * @param {?} context
  123126. * @param {?=} path
  123127. * @return {?}
  123128. */
  123129. function (error, context, path) {
  123130. if (this.errorRecorder) {
  123131. this.errorRecorder(formatMetadataError(error, context), (context && context.filePath) || path);
  123132. }
  123133. else {
  123134. throw error;
  123135. }
  123136. };
  123137. /**
  123138. * @param {?} __0
  123139. * @param {?} reportingContext
  123140. * @return {?}
  123141. */
  123142. StaticReflector.prototype.error = /**
  123143. * @param {?} __0
  123144. * @param {?} reportingContext
  123145. * @return {?}
  123146. */
  123147. function (_a, reportingContext) {
  123148. var message = _a.message, summary = _a.summary, advise = _a.advise, position = _a.position, context = _a.context, value = _a.value, symbol = _a.symbol, chain = _a.chain;
  123149. this.reportError(metadataError(message, summary, advise, position, symbol, context, chain), reportingContext);
  123150. };
  123151. return StaticReflector;
  123152. }());
  123153. var METADATA_ERROR = 'ngMetadataError';
  123154. /**
  123155. * @param {?} message
  123156. * @param {?=} summary
  123157. * @param {?=} advise
  123158. * @param {?=} position
  123159. * @param {?=} symbol
  123160. * @param {?=} context
  123161. * @param {?=} chain
  123162. * @return {?}
  123163. */
  123164. function metadataError(message, summary, advise, position, symbol, context, chain) {
  123165. var /** @type {?} */ error = /** @type {?} */ (syntaxError(message));
  123166. (/** @type {?} */ (error))[METADATA_ERROR] = true;
  123167. if (advise)
  123168. error.advise = advise;
  123169. if (position)
  123170. error.position = position;
  123171. if (summary)
  123172. error.summary = summary;
  123173. if (context)
  123174. error.context = context;
  123175. if (chain)
  123176. error.chain = chain;
  123177. if (symbol)
  123178. error.symbol = symbol;
  123179. return error;
  123180. }
  123181. /**
  123182. * @param {?} error
  123183. * @return {?}
  123184. */
  123185. function isMetadataError(error) {
  123186. return !!(/** @type {?} */ (error))[METADATA_ERROR];
  123187. }
  123188. var REFERENCE_TO_NONEXPORTED_CLASS = 'Reference to non-exported class';
  123189. var VARIABLE_NOT_INITIALIZED = 'Variable not initialized';
  123190. var DESTRUCTURE_NOT_SUPPORTED = 'Destructuring not supported';
  123191. var COULD_NOT_RESOLVE_TYPE = 'Could not resolve type';
  123192. var FUNCTION_CALL_NOT_SUPPORTED = 'Function call not supported';
  123193. var REFERENCE_TO_LOCAL_SYMBOL = 'Reference to a local symbol';
  123194. var LAMBDA_NOT_SUPPORTED = 'Lambda not supported';
  123195. /**
  123196. * @param {?} message
  123197. * @param {?} context
  123198. * @return {?}
  123199. */
  123200. function expandedMessage(message, context) {
  123201. switch (message) {
  123202. case REFERENCE_TO_NONEXPORTED_CLASS:
  123203. if (context && context.className) {
  123204. return "References to a non-exported class are not supported in decorators but " + context.className + " was referenced.";
  123205. }
  123206. break;
  123207. case VARIABLE_NOT_INITIALIZED:
  123208. return 'Only initialized variables and constants can be referenced in decorators because the value of this variable is needed by the template compiler';
  123209. case DESTRUCTURE_NOT_SUPPORTED:
  123210. return 'Referencing an exported destructured variable or constant is not supported in decorators and this value is needed by the template compiler';
  123211. case COULD_NOT_RESOLVE_TYPE:
  123212. if (context && context.typeName) {
  123213. return "Could not resolve type " + context.typeName;
  123214. }
  123215. break;
  123216. case FUNCTION_CALL_NOT_SUPPORTED:
  123217. if (context && context.name) {
  123218. return "Function calls are not supported in decorators but '" + context.name + "' was called";
  123219. }
  123220. return 'Function calls are not supported in decorators';
  123221. case REFERENCE_TO_LOCAL_SYMBOL:
  123222. if (context && context.name) {
  123223. return "Reference to a local (non-exported) symbols are not supported in decorators but '" + context.name + "' was referenced";
  123224. }
  123225. break;
  123226. case LAMBDA_NOT_SUPPORTED:
  123227. return "Function expressions are not supported in decorators";
  123228. }
  123229. return message;
  123230. }
  123231. /**
  123232. * @param {?} message
  123233. * @param {?} context
  123234. * @return {?}
  123235. */
  123236. function messageAdvise(message, context) {
  123237. switch (message) {
  123238. case REFERENCE_TO_NONEXPORTED_CLASS:
  123239. if (context && context.className) {
  123240. return "Consider exporting '" + context.className + "'";
  123241. }
  123242. break;
  123243. case DESTRUCTURE_NOT_SUPPORTED:
  123244. return 'Consider simplifying to avoid destructuring';
  123245. case REFERENCE_TO_LOCAL_SYMBOL:
  123246. if (context && context.name) {
  123247. return "Consider exporting '" + context.name + "'";
  123248. }
  123249. break;
  123250. case LAMBDA_NOT_SUPPORTED:
  123251. return "Consider changing the function expression into an exported function";
  123252. }
  123253. return undefined;
  123254. }
  123255. /**
  123256. * @param {?} error
  123257. * @return {?}
  123258. */
  123259. function errorSummary(error) {
  123260. if (error.summary) {
  123261. return error.summary;
  123262. }
  123263. switch (error.message) {
  123264. case REFERENCE_TO_NONEXPORTED_CLASS:
  123265. if (error.context && error.context.className) {
  123266. return "references non-exported class " + error.context.className;
  123267. }
  123268. break;
  123269. case VARIABLE_NOT_INITIALIZED:
  123270. return 'is not initialized';
  123271. case DESTRUCTURE_NOT_SUPPORTED:
  123272. return 'is a destructured variable';
  123273. case COULD_NOT_RESOLVE_TYPE:
  123274. return 'could not be resolved';
  123275. case FUNCTION_CALL_NOT_SUPPORTED:
  123276. if (error.context && error.context.name) {
  123277. return "calls '" + error.context.name + "'";
  123278. }
  123279. return "calls a function";
  123280. case REFERENCE_TO_LOCAL_SYMBOL:
  123281. if (error.context && error.context.name) {
  123282. return "references local variable " + error.context.name;
  123283. }
  123284. return "references a local variable";
  123285. }
  123286. return 'contains the error';
  123287. }
  123288. /**
  123289. * @param {?} input
  123290. * @param {?} transform
  123291. * @return {?}
  123292. */
  123293. function mapStringMap(input, transform) {
  123294. if (!input)
  123295. return {};
  123296. var /** @type {?} */ result = {};
  123297. Object.keys(input).forEach(function (key) {
  123298. var /** @type {?} */ value = transform(input[key], key);
  123299. if (!shouldIgnore(value)) {
  123300. if (HIDDEN_KEY.test(key)) {
  123301. Object.defineProperty(result, key, { enumerable: false, configurable: true, value: value });
  123302. }
  123303. else {
  123304. result[key] = value;
  123305. }
  123306. }
  123307. });
  123308. return result;
  123309. }
  123310. /**
  123311. * @param {?} o
  123312. * @return {?}
  123313. */
  123314. function isPrimitive(o) {
  123315. return o === null || (typeof o !== 'function' && typeof o !== 'object');
  123316. }
  123317. /**
  123318. * @abstract
  123319. */
  123320. var BindingScope = /** @class */ (function () {
  123321. function BindingScope() {
  123322. }
  123323. /**
  123324. * @return {?}
  123325. */
  123326. BindingScope.build = /**
  123327. * @return {?}
  123328. */
  123329. function () {
  123330. var /** @type {?} */ current = new Map();
  123331. return {
  123332. define: function (name, value) {
  123333. current.set(name, value);
  123334. return this;
  123335. },
  123336. done: function () {
  123337. return current.size > 0 ? new PopulatedScope(current) : BindingScope.empty;
  123338. }
  123339. };
  123340. };
  123341. BindingScope.missing = {};
  123342. BindingScope.empty = { resolve: function (name) { return BindingScope.missing; } };
  123343. return BindingScope;
  123344. }());
  123345. var PopulatedScope = /** @class */ (function (_super) {
  123346. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(PopulatedScope, _super);
  123347. function PopulatedScope(bindings) {
  123348. var _this = _super.call(this) || this;
  123349. _this.bindings = bindings;
  123350. return _this;
  123351. }
  123352. /**
  123353. * @param {?} name
  123354. * @return {?}
  123355. */
  123356. PopulatedScope.prototype.resolve = /**
  123357. * @param {?} name
  123358. * @return {?}
  123359. */
  123360. function (name) {
  123361. return this.bindings.has(name) ? this.bindings.get(name) : BindingScope.missing;
  123362. };
  123363. return PopulatedScope;
  123364. }(BindingScope));
  123365. /**
  123366. * @param {?} chain
  123367. * @param {?} advise
  123368. * @return {?}
  123369. */
  123370. function formatMetadataMessageChain(chain, advise) {
  123371. var /** @type {?} */ expanded = expandedMessage(chain.message, chain.context);
  123372. var /** @type {?} */ nesting = chain.symbol ? " in '" + chain.symbol.name + "'" : '';
  123373. var /** @type {?} */ message = "" + expanded + nesting;
  123374. var /** @type {?} */ position = chain.position;
  123375. var /** @type {?} */ next = chain.next ?
  123376. formatMetadataMessageChain(chain.next, advise) :
  123377. advise ? { message: advise } : undefined;
  123378. return { message: message, position: position, next: next };
  123379. }
  123380. /**
  123381. * @param {?} e
  123382. * @param {?} context
  123383. * @return {?}
  123384. */
  123385. function formatMetadataError(e, context) {
  123386. if (isMetadataError(e)) {
  123387. // Produce a formatted version of the and leaving enough information in the original error
  123388. // to recover the formatting information to eventually produce a diagnostic error message.
  123389. var /** @type {?} */ position = e.position;
  123390. var /** @type {?} */ chain = {
  123391. message: "Error during template compile of '" + context.name + "'",
  123392. position: position,
  123393. next: { message: e.message, next: e.chain, context: e.context, symbol: e.symbol }
  123394. };
  123395. var /** @type {?} */ advise = e.advise || messageAdvise(e.message, e.context);
  123396. return formattedError(formatMetadataMessageChain(chain, advise));
  123397. }
  123398. return e;
  123399. }
  123400. /**
  123401. * @fileoverview added by tsickle
  123402. * @suppress {checkTypes} checked by tsc
  123403. */
  123404. /**
  123405. * @license
  123406. * Copyright Google Inc. All Rights Reserved.
  123407. *
  123408. * Use of this source code is governed by an MIT-style license that can be
  123409. * found in the LICENSE file at https://angular.io/license
  123410. */
  123411. /**
  123412. * @record
  123413. */
  123414. var AotSummaryResolver = /** @class */ (function () {
  123415. function AotSummaryResolver(host, staticSymbolCache) {
  123416. this.host = host;
  123417. this.staticSymbolCache = staticSymbolCache;
  123418. this.summaryCache = new Map();
  123419. this.loadedFilePaths = new Map();
  123420. this.importAs = new Map();
  123421. this.knownFileNameToModuleNames = new Map();
  123422. }
  123423. /**
  123424. * @param {?} filePath
  123425. * @return {?}
  123426. */
  123427. AotSummaryResolver.prototype.isLibraryFile = /**
  123428. * @param {?} filePath
  123429. * @return {?}
  123430. */
  123431. function (filePath) {
  123432. // Note: We need to strip the .ngfactory. file path,
  123433. // so this method also works for generated files
  123434. // (for which host.isSourceFile will always return false).
  123435. return !this.host.isSourceFile(stripGeneratedFileSuffix(filePath));
  123436. };
  123437. /**
  123438. * @param {?} filePath
  123439. * @param {?} referringSrcFileName
  123440. * @return {?}
  123441. */
  123442. AotSummaryResolver.prototype.toSummaryFileName = /**
  123443. * @param {?} filePath
  123444. * @param {?} referringSrcFileName
  123445. * @return {?}
  123446. */
  123447. function (filePath, referringSrcFileName) {
  123448. return this.host.toSummaryFileName(filePath, referringSrcFileName);
  123449. };
  123450. /**
  123451. * @param {?} fileName
  123452. * @param {?} referringLibFileName
  123453. * @return {?}
  123454. */
  123455. AotSummaryResolver.prototype.fromSummaryFileName = /**
  123456. * @param {?} fileName
  123457. * @param {?} referringLibFileName
  123458. * @return {?}
  123459. */
  123460. function (fileName, referringLibFileName) {
  123461. return this.host.fromSummaryFileName(fileName, referringLibFileName);
  123462. };
  123463. /**
  123464. * @param {?} staticSymbol
  123465. * @return {?}
  123466. */
  123467. AotSummaryResolver.prototype.resolveSummary = /**
  123468. * @param {?} staticSymbol
  123469. * @return {?}
  123470. */
  123471. function (staticSymbol) {
  123472. var /** @type {?} */ rootSymbol = staticSymbol.members.length ?
  123473. this.staticSymbolCache.get(staticSymbol.filePath, staticSymbol.name) :
  123474. staticSymbol;
  123475. var /** @type {?} */ summary = this.summaryCache.get(rootSymbol);
  123476. if (!summary) {
  123477. this._loadSummaryFile(staticSymbol.filePath);
  123478. summary = /** @type {?} */ ((this.summaryCache.get(staticSymbol)));
  123479. }
  123480. return (rootSymbol === staticSymbol && summary) || null;
  123481. };
  123482. /**
  123483. * @param {?} filePath
  123484. * @return {?}
  123485. */
  123486. AotSummaryResolver.prototype.getSymbolsOf = /**
  123487. * @param {?} filePath
  123488. * @return {?}
  123489. */
  123490. function (filePath) {
  123491. if (this._loadSummaryFile(filePath)) {
  123492. return Array.from(this.summaryCache.keys()).filter(function (symbol) { return symbol.filePath === filePath; });
  123493. }
  123494. return null;
  123495. };
  123496. /**
  123497. * @param {?} staticSymbol
  123498. * @return {?}
  123499. */
  123500. AotSummaryResolver.prototype.getImportAs = /**
  123501. * @param {?} staticSymbol
  123502. * @return {?}
  123503. */
  123504. function (staticSymbol) {
  123505. staticSymbol.assertNoMembers();
  123506. return /** @type {?} */ ((this.importAs.get(staticSymbol)));
  123507. };
  123508. /**
  123509. * Converts a file path to a module name that can be used as an `import`.
  123510. */
  123511. /**
  123512. * Converts a file path to a module name that can be used as an `import`.
  123513. * @param {?} importedFilePath
  123514. * @return {?}
  123515. */
  123516. AotSummaryResolver.prototype.getKnownModuleName = /**
  123517. * Converts a file path to a module name that can be used as an `import`.
  123518. * @param {?} importedFilePath
  123519. * @return {?}
  123520. */
  123521. function (importedFilePath) {
  123522. return this.knownFileNameToModuleNames.get(importedFilePath) || null;
  123523. };
  123524. /**
  123525. * @param {?} summary
  123526. * @return {?}
  123527. */
  123528. AotSummaryResolver.prototype.addSummary = /**
  123529. * @param {?} summary
  123530. * @return {?}
  123531. */
  123532. function (summary) { this.summaryCache.set(summary.symbol, summary); };
  123533. /**
  123534. * @param {?} filePath
  123535. * @return {?}
  123536. */
  123537. AotSummaryResolver.prototype._loadSummaryFile = /**
  123538. * @param {?} filePath
  123539. * @return {?}
  123540. */
  123541. function (filePath) {
  123542. var _this = this;
  123543. var /** @type {?} */ hasSummary = this.loadedFilePaths.get(filePath);
  123544. if (hasSummary != null) {
  123545. return hasSummary;
  123546. }
  123547. var /** @type {?} */ json = null;
  123548. if (this.isLibraryFile(filePath)) {
  123549. var /** @type {?} */ summaryFilePath = summaryFileName(filePath);
  123550. try {
  123551. json = this.host.loadSummary(summaryFilePath);
  123552. }
  123553. catch (/** @type {?} */ e) {
  123554. console.error("Error loading summary file " + summaryFilePath);
  123555. throw e;
  123556. }
  123557. }
  123558. hasSummary = json != null;
  123559. this.loadedFilePaths.set(filePath, hasSummary);
  123560. if (json) {
  123561. var _a = deserializeSummaries(this.staticSymbolCache, this, filePath, json), moduleName = _a.moduleName, summaries = _a.summaries, importAs = _a.importAs;
  123562. summaries.forEach(function (summary) { return _this.summaryCache.set(summary.symbol, summary); });
  123563. if (moduleName) {
  123564. this.knownFileNameToModuleNames.set(filePath, moduleName);
  123565. }
  123566. importAs.forEach(function (importAs) { _this.importAs.set(importAs.symbol, importAs.importAs); });
  123567. }
  123568. return hasSummary;
  123569. };
  123570. return AotSummaryResolver;
  123571. }());
  123572. /**
  123573. * @fileoverview added by tsickle
  123574. * @suppress {checkTypes} checked by tsc
  123575. */
  123576. /**
  123577. * @license
  123578. * Copyright Google Inc. All Rights Reserved.
  123579. *
  123580. * Use of this source code is governed by an MIT-style license that can be
  123581. * found in the LICENSE file at https://angular.io/license
  123582. */
  123583. /**
  123584. * @param {?} host
  123585. * @return {?}
  123586. */
  123587. function createAotUrlResolver(host) {
  123588. return {
  123589. resolve: function (basePath, url) {
  123590. var /** @type {?} */ filePath = host.resourceNameToFileName(url, basePath);
  123591. if (!filePath) {
  123592. throw syntaxError("Couldn't resolve resource " + url + " from " + basePath);
  123593. }
  123594. return filePath;
  123595. }
  123596. };
  123597. }
  123598. /**
  123599. * Creates a new AotCompiler based on options and a host.
  123600. * @param {?} compilerHost
  123601. * @param {?} options
  123602. * @param {?=} errorCollector
  123603. * @return {?}
  123604. */
  123605. function createAotCompiler(compilerHost, options, errorCollector) {
  123606. var /** @type {?} */ translations = options.translations || '';
  123607. var /** @type {?} */ urlResolver = createAotUrlResolver(compilerHost);
  123608. var /** @type {?} */ symbolCache = new StaticSymbolCache();
  123609. var /** @type {?} */ summaryResolver = new AotSummaryResolver(compilerHost, symbolCache);
  123610. var /** @type {?} */ symbolResolver = new StaticSymbolResolver(compilerHost, symbolCache, summaryResolver);
  123611. var /** @type {?} */ staticReflector = new StaticReflector(summaryResolver, symbolResolver, [], [], errorCollector);
  123612. var /** @type {?} */ htmlParser = new I18NHtmlParser(new HtmlParser(), translations, options.i18nFormat, options.missingTranslation, console);
  123613. var /** @type {?} */ config = new CompilerConfig({
  123614. defaultEncapsulation: ViewEncapsulation.Emulated,
  123615. useJit: false,
  123616. enableLegacyTemplate: options.enableLegacyTemplate === true,
  123617. missingTranslation: options.missingTranslation,
  123618. preserveWhitespaces: options.preserveWhitespaces,
  123619. strictInjectionParameters: options.strictInjectionParameters,
  123620. });
  123621. var /** @type {?} */ normalizer = new DirectiveNormalizer({ get: function (url) { return compilerHost.loadResource(url); } }, urlResolver, htmlParser, config);
  123622. var /** @type {?} */ expressionParser = new Parser(new Lexer());
  123623. var /** @type {?} */ elementSchemaRegistry = new DomElementSchemaRegistry();
  123624. var /** @type {?} */ tmplParser = new TemplateParser(config, staticReflector, expressionParser, elementSchemaRegistry, htmlParser, console, []);
  123625. var /** @type {?} */ resolver = new CompileMetadataResolver(config, htmlParser, new NgModuleResolver(staticReflector), new DirectiveResolver(staticReflector), new PipeResolver(staticReflector), summaryResolver, elementSchemaRegistry, normalizer, console, symbolCache, staticReflector, errorCollector);
  123626. // TODO(vicb): do not pass options.i18nFormat here
  123627. var /** @type {?} */ viewCompiler = new ViewCompiler(staticReflector);
  123628. var /** @type {?} */ typeCheckCompiler = new TypeCheckCompiler(options, staticReflector);
  123629. var /** @type {?} */ compiler = new AotCompiler(config, options, compilerHost, staticReflector, resolver, tmplParser, new StyleCompiler(urlResolver), viewCompiler, typeCheckCompiler, new NgModuleCompiler(staticReflector), new TypeScriptEmitter(), summaryResolver, symbolResolver);
  123630. return { compiler: compiler, reflector: staticReflector };
  123631. }
  123632. /**
  123633. * @fileoverview added by tsickle
  123634. * @suppress {checkTypes} checked by tsc
  123635. */
  123636. /**
  123637. * @record
  123638. * @template T
  123639. */
  123640. /**
  123641. * @abstract
  123642. * @template T
  123643. */
  123644. var SummaryResolver = /** @class */ (function () {
  123645. function SummaryResolver() {
  123646. }
  123647. return SummaryResolver;
  123648. }());
  123649. var JitSummaryResolver = /** @class */ (function () {
  123650. function JitSummaryResolver() {
  123651. this._summaries = new Map();
  123652. }
  123653. /**
  123654. * @return {?}
  123655. */
  123656. JitSummaryResolver.prototype.isLibraryFile = /**
  123657. * @return {?}
  123658. */
  123659. function () { return false; };
  123660. /**
  123661. * @param {?} fileName
  123662. * @return {?}
  123663. */
  123664. JitSummaryResolver.prototype.toSummaryFileName = /**
  123665. * @param {?} fileName
  123666. * @return {?}
  123667. */
  123668. function (fileName) { return fileName; };
  123669. /**
  123670. * @param {?} fileName
  123671. * @return {?}
  123672. */
  123673. JitSummaryResolver.prototype.fromSummaryFileName = /**
  123674. * @param {?} fileName
  123675. * @return {?}
  123676. */
  123677. function (fileName) { return fileName; };
  123678. /**
  123679. * @param {?} reference
  123680. * @return {?}
  123681. */
  123682. JitSummaryResolver.prototype.resolveSummary = /**
  123683. * @param {?} reference
  123684. * @return {?}
  123685. */
  123686. function (reference) {
  123687. return this._summaries.get(reference) || null;
  123688. };
  123689. /**
  123690. * @return {?}
  123691. */
  123692. JitSummaryResolver.prototype.getSymbolsOf = /**
  123693. * @return {?}
  123694. */
  123695. function () { return []; };
  123696. /**
  123697. * @param {?} reference
  123698. * @return {?}
  123699. */
  123700. JitSummaryResolver.prototype.getImportAs = /**
  123701. * @param {?} reference
  123702. * @return {?}
  123703. */
  123704. function (reference) { return reference; };
  123705. /**
  123706. * @param {?} fileName
  123707. * @return {?}
  123708. */
  123709. JitSummaryResolver.prototype.getKnownModuleName = /**
  123710. * @param {?} fileName
  123711. * @return {?}
  123712. */
  123713. function (fileName) { return null; };
  123714. /**
  123715. * @param {?} summary
  123716. * @return {?}
  123717. */
  123718. JitSummaryResolver.prototype.addSummary = /**
  123719. * @param {?} summary
  123720. * @return {?}
  123721. */
  123722. function (summary) { this._summaries.set(summary.symbol, summary); };
  123723. return JitSummaryResolver;
  123724. }());
  123725. /**
  123726. * @fileoverview added by tsickle
  123727. * @suppress {checkTypes} checked by tsc
  123728. */
  123729. /**
  123730. * @license
  123731. * Copyright Google Inc. All Rights Reserved.
  123732. *
  123733. * Use of this source code is governed by an MIT-style license that can be
  123734. * found in the LICENSE file at https://angular.io/license
  123735. */
  123736. /**
  123737. * @param {?} statements
  123738. * @param {?} reflector
  123739. * @return {?}
  123740. */
  123741. function interpretStatements(statements, reflector) {
  123742. var /** @type {?} */ ctx = new _ExecutionContext(null, null, null, new Map());
  123743. var /** @type {?} */ visitor = new StatementInterpreter(reflector);
  123744. visitor.visitAllStatements(statements, ctx);
  123745. var /** @type {?} */ result = {};
  123746. ctx.exports.forEach(function (exportName) { result[exportName] = ctx.vars.get(exportName); });
  123747. return result;
  123748. }
  123749. /**
  123750. * @param {?} varNames
  123751. * @param {?} varValues
  123752. * @param {?} statements
  123753. * @param {?} ctx
  123754. * @param {?} visitor
  123755. * @return {?}
  123756. */
  123757. function _executeFunctionStatements(varNames, varValues, statements, ctx, visitor) {
  123758. var /** @type {?} */ childCtx = ctx.createChildWihtLocalVars();
  123759. for (var /** @type {?} */ i = 0; i < varNames.length; i++) {
  123760. childCtx.vars.set(varNames[i], varValues[i]);
  123761. }
  123762. var /** @type {?} */ result = visitor.visitAllStatements(statements, childCtx);
  123763. return result ? result.value : null;
  123764. }
  123765. var _ExecutionContext = /** @class */ (function () {
  123766. function _ExecutionContext(parent, instance, className, vars) {
  123767. this.parent = parent;
  123768. this.instance = instance;
  123769. this.className = className;
  123770. this.vars = vars;
  123771. this.exports = [];
  123772. }
  123773. /**
  123774. * @return {?}
  123775. */
  123776. _ExecutionContext.prototype.createChildWihtLocalVars = /**
  123777. * @return {?}
  123778. */
  123779. function () {
  123780. return new _ExecutionContext(this, this.instance, this.className, new Map());
  123781. };
  123782. return _ExecutionContext;
  123783. }());
  123784. var ReturnValue = /** @class */ (function () {
  123785. function ReturnValue(value) {
  123786. this.value = value;
  123787. }
  123788. return ReturnValue;
  123789. }());
  123790. /**
  123791. * @param {?} _classStmt
  123792. * @param {?} _ctx
  123793. * @param {?} _visitor
  123794. * @return {?}
  123795. */
  123796. function createDynamicClass(_classStmt, _ctx, _visitor) {
  123797. var /** @type {?} */ propertyDescriptors = {};
  123798. _classStmt.getters.forEach(function (getter) {
  123799. // Note: use `function` instead of arrow function to capture `this`
  123800. propertyDescriptors[getter.name] = {
  123801. configurable: false,
  123802. get: function () {
  123803. var /** @type {?} */ instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
  123804. return _executeFunctionStatements([], [], getter.body, instanceCtx, _visitor);
  123805. }
  123806. };
  123807. });
  123808. _classStmt.methods.forEach(function (method) {
  123809. var /** @type {?} */ paramNames = method.params.map(function (param) { return param.name; });
  123810. // Note: use `function` instead of arrow function to capture `this`
  123811. propertyDescriptors[/** @type {?} */ ((method.name))] = {
  123812. writable: false,
  123813. configurable: false,
  123814. value: function () {
  123815. var args = [];
  123816. for (var _i = 0; _i < arguments.length; _i++) {
  123817. args[_i] = arguments[_i];
  123818. }
  123819. var /** @type {?} */ instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
  123820. return _executeFunctionStatements(paramNames, args, method.body, instanceCtx, _visitor);
  123821. }
  123822. };
  123823. });
  123824. var /** @type {?} */ ctorParamNames = _classStmt.constructorMethod.params.map(function (param) { return param.name; });
  123825. // Note: use `function` instead of arrow function to capture `this`
  123826. var /** @type {?} */ ctor = function () {
  123827. var _this = this;
  123828. var args = [];
  123829. for (var _i = 0; _i < arguments.length; _i++) {
  123830. args[_i] = arguments[_i];
  123831. }
  123832. var /** @type {?} */ instanceCtx = new _ExecutionContext(_ctx, this, _classStmt.name, _ctx.vars);
  123833. _classStmt.fields.forEach(function (field) { _this[field.name] = undefined; });
  123834. _executeFunctionStatements(ctorParamNames, args, _classStmt.constructorMethod.body, instanceCtx, _visitor);
  123835. };
  123836. var /** @type {?} */ superClass = _classStmt.parent ? _classStmt.parent.visitExpression(_visitor, _ctx) : Object;
  123837. ctor.prototype = Object.create(superClass.prototype, propertyDescriptors);
  123838. return ctor;
  123839. }
  123840. var StatementInterpreter = /** @class */ (function () {
  123841. function StatementInterpreter(reflector) {
  123842. this.reflector = reflector;
  123843. }
  123844. /**
  123845. * @param {?} ast
  123846. * @return {?}
  123847. */
  123848. StatementInterpreter.prototype.debugAst = /**
  123849. * @param {?} ast
  123850. * @return {?}
  123851. */
  123852. function (ast) { return debugOutputAstAsTypeScript(ast); };
  123853. /**
  123854. * @param {?} stmt
  123855. * @param {?} ctx
  123856. * @return {?}
  123857. */
  123858. StatementInterpreter.prototype.visitDeclareVarStmt = /**
  123859. * @param {?} stmt
  123860. * @param {?} ctx
  123861. * @return {?}
  123862. */
  123863. function (stmt, ctx) {
  123864. ctx.vars.set(stmt.name, stmt.value.visitExpression(this, ctx));
  123865. if (stmt.hasModifier(StmtModifier.Exported)) {
  123866. ctx.exports.push(stmt.name);
  123867. }
  123868. return null;
  123869. };
  123870. /**
  123871. * @param {?} expr
  123872. * @param {?} ctx
  123873. * @return {?}
  123874. */
  123875. StatementInterpreter.prototype.visitWriteVarExpr = /**
  123876. * @param {?} expr
  123877. * @param {?} ctx
  123878. * @return {?}
  123879. */
  123880. function (expr, ctx) {
  123881. var /** @type {?} */ value = expr.value.visitExpression(this, ctx);
  123882. var /** @type {?} */ currCtx = ctx;
  123883. while (currCtx != null) {
  123884. if (currCtx.vars.has(expr.name)) {
  123885. currCtx.vars.set(expr.name, value);
  123886. return value;
  123887. }
  123888. currCtx = /** @type {?} */ ((currCtx.parent));
  123889. }
  123890. throw new Error("Not declared variable " + expr.name);
  123891. };
  123892. /**
  123893. * @param {?} ast
  123894. * @param {?} ctx
  123895. * @return {?}
  123896. */
  123897. StatementInterpreter.prototype.visitReadVarExpr = /**
  123898. * @param {?} ast
  123899. * @param {?} ctx
  123900. * @return {?}
  123901. */
  123902. function (ast, ctx) {
  123903. var /** @type {?} */ varName = /** @type {?} */ ((ast.name));
  123904. if (ast.builtin != null) {
  123905. switch (ast.builtin) {
  123906. case BuiltinVar.Super:
  123907. return ctx.instance.__proto__;
  123908. case BuiltinVar.This:
  123909. return ctx.instance;
  123910. case BuiltinVar.CatchError:
  123911. varName = CATCH_ERROR_VAR$2;
  123912. break;
  123913. case BuiltinVar.CatchStack:
  123914. varName = CATCH_STACK_VAR$2;
  123915. break;
  123916. default:
  123917. throw new Error("Unknown builtin variable " + ast.builtin);
  123918. }
  123919. }
  123920. var /** @type {?} */ currCtx = ctx;
  123921. while (currCtx != null) {
  123922. if (currCtx.vars.has(varName)) {
  123923. return currCtx.vars.get(varName);
  123924. }
  123925. currCtx = /** @type {?} */ ((currCtx.parent));
  123926. }
  123927. throw new Error("Not declared variable " + varName);
  123928. };
  123929. /**
  123930. * @param {?} expr
  123931. * @param {?} ctx
  123932. * @return {?}
  123933. */
  123934. StatementInterpreter.prototype.visitWriteKeyExpr = /**
  123935. * @param {?} expr
  123936. * @param {?} ctx
  123937. * @return {?}
  123938. */
  123939. function (expr, ctx) {
  123940. var /** @type {?} */ receiver = expr.receiver.visitExpression(this, ctx);
  123941. var /** @type {?} */ index = expr.index.visitExpression(this, ctx);
  123942. var /** @type {?} */ value = expr.value.visitExpression(this, ctx);
  123943. receiver[index] = value;
  123944. return value;
  123945. };
  123946. /**
  123947. * @param {?} expr
  123948. * @param {?} ctx
  123949. * @return {?}
  123950. */
  123951. StatementInterpreter.prototype.visitWritePropExpr = /**
  123952. * @param {?} expr
  123953. * @param {?} ctx
  123954. * @return {?}
  123955. */
  123956. function (expr, ctx) {
  123957. var /** @type {?} */ receiver = expr.receiver.visitExpression(this, ctx);
  123958. var /** @type {?} */ value = expr.value.visitExpression(this, ctx);
  123959. receiver[expr.name] = value;
  123960. return value;
  123961. };
  123962. /**
  123963. * @param {?} expr
  123964. * @param {?} ctx
  123965. * @return {?}
  123966. */
  123967. StatementInterpreter.prototype.visitInvokeMethodExpr = /**
  123968. * @param {?} expr
  123969. * @param {?} ctx
  123970. * @return {?}
  123971. */
  123972. function (expr, ctx) {
  123973. var /** @type {?} */ receiver = expr.receiver.visitExpression(this, ctx);
  123974. var /** @type {?} */ args = this.visitAllExpressions(expr.args, ctx);
  123975. var /** @type {?} */ result;
  123976. if (expr.builtin != null) {
  123977. switch (expr.builtin) {
  123978. case BuiltinMethod.ConcatArray:
  123979. result = receiver.concat.apply(receiver, args);
  123980. break;
  123981. case BuiltinMethod.SubscribeObservable:
  123982. result = receiver.subscribe({ next: args[0] });
  123983. break;
  123984. case BuiltinMethod.Bind:
  123985. result = receiver.bind.apply(receiver, args);
  123986. break;
  123987. default:
  123988. throw new Error("Unknown builtin method " + expr.builtin);
  123989. }
  123990. }
  123991. else {
  123992. result = receiver[/** @type {?} */ ((expr.name))].apply(receiver, args);
  123993. }
  123994. return result;
  123995. };
  123996. /**
  123997. * @param {?} stmt
  123998. * @param {?} ctx
  123999. * @return {?}
  124000. */
  124001. StatementInterpreter.prototype.visitInvokeFunctionExpr = /**
  124002. * @param {?} stmt
  124003. * @param {?} ctx
  124004. * @return {?}
  124005. */
  124006. function (stmt, ctx) {
  124007. var /** @type {?} */ args = this.visitAllExpressions(stmt.args, ctx);
  124008. var /** @type {?} */ fnExpr = stmt.fn;
  124009. if (fnExpr instanceof ReadVarExpr && fnExpr.builtin === BuiltinVar.Super) {
  124010. ctx.instance.constructor.prototype.constructor.apply(ctx.instance, args);
  124011. return null;
  124012. }
  124013. else {
  124014. var /** @type {?} */ fn$$1 = stmt.fn.visitExpression(this, ctx);
  124015. return fn$$1.apply(null, args);
  124016. }
  124017. };
  124018. /**
  124019. * @param {?} stmt
  124020. * @param {?} ctx
  124021. * @return {?}
  124022. */
  124023. StatementInterpreter.prototype.visitReturnStmt = /**
  124024. * @param {?} stmt
  124025. * @param {?} ctx
  124026. * @return {?}
  124027. */
  124028. function (stmt, ctx) {
  124029. return new ReturnValue(stmt.value.visitExpression(this, ctx));
  124030. };
  124031. /**
  124032. * @param {?} stmt
  124033. * @param {?} ctx
  124034. * @return {?}
  124035. */
  124036. StatementInterpreter.prototype.visitDeclareClassStmt = /**
  124037. * @param {?} stmt
  124038. * @param {?} ctx
  124039. * @return {?}
  124040. */
  124041. function (stmt, ctx) {
  124042. var /** @type {?} */ clazz = createDynamicClass(stmt, ctx, this);
  124043. ctx.vars.set(stmt.name, clazz);
  124044. if (stmt.hasModifier(StmtModifier.Exported)) {
  124045. ctx.exports.push(stmt.name);
  124046. }
  124047. return null;
  124048. };
  124049. /**
  124050. * @param {?} stmt
  124051. * @param {?} ctx
  124052. * @return {?}
  124053. */
  124054. StatementInterpreter.prototype.visitExpressionStmt = /**
  124055. * @param {?} stmt
  124056. * @param {?} ctx
  124057. * @return {?}
  124058. */
  124059. function (stmt, ctx) {
  124060. return stmt.expr.visitExpression(this, ctx);
  124061. };
  124062. /**
  124063. * @param {?} stmt
  124064. * @param {?} ctx
  124065. * @return {?}
  124066. */
  124067. StatementInterpreter.prototype.visitIfStmt = /**
  124068. * @param {?} stmt
  124069. * @param {?} ctx
  124070. * @return {?}
  124071. */
  124072. function (stmt, ctx) {
  124073. var /** @type {?} */ condition = stmt.condition.visitExpression(this, ctx);
  124074. if (condition) {
  124075. return this.visitAllStatements(stmt.trueCase, ctx);
  124076. }
  124077. else if (stmt.falseCase != null) {
  124078. return this.visitAllStatements(stmt.falseCase, ctx);
  124079. }
  124080. return null;
  124081. };
  124082. /**
  124083. * @param {?} stmt
  124084. * @param {?} ctx
  124085. * @return {?}
  124086. */
  124087. StatementInterpreter.prototype.visitTryCatchStmt = /**
  124088. * @param {?} stmt
  124089. * @param {?} ctx
  124090. * @return {?}
  124091. */
  124092. function (stmt, ctx) {
  124093. try {
  124094. return this.visitAllStatements(stmt.bodyStmts, ctx);
  124095. }
  124096. catch (/** @type {?} */ e) {
  124097. var /** @type {?} */ childCtx = ctx.createChildWihtLocalVars();
  124098. childCtx.vars.set(CATCH_ERROR_VAR$2, e);
  124099. childCtx.vars.set(CATCH_STACK_VAR$2, e.stack);
  124100. return this.visitAllStatements(stmt.catchStmts, childCtx);
  124101. }
  124102. };
  124103. /**
  124104. * @param {?} stmt
  124105. * @param {?} ctx
  124106. * @return {?}
  124107. */
  124108. StatementInterpreter.prototype.visitThrowStmt = /**
  124109. * @param {?} stmt
  124110. * @param {?} ctx
  124111. * @return {?}
  124112. */
  124113. function (stmt, ctx) {
  124114. throw stmt.error.visitExpression(this, ctx);
  124115. };
  124116. /**
  124117. * @param {?} stmt
  124118. * @param {?=} context
  124119. * @return {?}
  124120. */
  124121. StatementInterpreter.prototype.visitCommentStmt = /**
  124122. * @param {?} stmt
  124123. * @param {?=} context
  124124. * @return {?}
  124125. */
  124126. function (stmt, context) { return null; };
  124127. /**
  124128. * @param {?} ast
  124129. * @param {?} ctx
  124130. * @return {?}
  124131. */
  124132. StatementInterpreter.prototype.visitInstantiateExpr = /**
  124133. * @param {?} ast
  124134. * @param {?} ctx
  124135. * @return {?}
  124136. */
  124137. function (ast, ctx) {
  124138. var /** @type {?} */ args = this.visitAllExpressions(ast.args, ctx);
  124139. var /** @type {?} */ clazz = ast.classExpr.visitExpression(this, ctx);
  124140. return new (clazz.bind.apply(clazz, [void 0].concat(args)))();
  124141. };
  124142. /**
  124143. * @param {?} ast
  124144. * @param {?} ctx
  124145. * @return {?}
  124146. */
  124147. StatementInterpreter.prototype.visitLiteralExpr = /**
  124148. * @param {?} ast
  124149. * @param {?} ctx
  124150. * @return {?}
  124151. */
  124152. function (ast, ctx) { return ast.value; };
  124153. /**
  124154. * @param {?} ast
  124155. * @param {?} ctx
  124156. * @return {?}
  124157. */
  124158. StatementInterpreter.prototype.visitExternalExpr = /**
  124159. * @param {?} ast
  124160. * @param {?} ctx
  124161. * @return {?}
  124162. */
  124163. function (ast, ctx) {
  124164. return this.reflector.resolveExternalReference(ast.value);
  124165. };
  124166. /**
  124167. * @param {?} ast
  124168. * @param {?} ctx
  124169. * @return {?}
  124170. */
  124171. StatementInterpreter.prototype.visitConditionalExpr = /**
  124172. * @param {?} ast
  124173. * @param {?} ctx
  124174. * @return {?}
  124175. */
  124176. function (ast, ctx) {
  124177. if (ast.condition.visitExpression(this, ctx)) {
  124178. return ast.trueCase.visitExpression(this, ctx);
  124179. }
  124180. else if (ast.falseCase != null) {
  124181. return ast.falseCase.visitExpression(this, ctx);
  124182. }
  124183. return null;
  124184. };
  124185. /**
  124186. * @param {?} ast
  124187. * @param {?} ctx
  124188. * @return {?}
  124189. */
  124190. StatementInterpreter.prototype.visitNotExpr = /**
  124191. * @param {?} ast
  124192. * @param {?} ctx
  124193. * @return {?}
  124194. */
  124195. function (ast, ctx) {
  124196. return !ast.condition.visitExpression(this, ctx);
  124197. };
  124198. /**
  124199. * @param {?} ast
  124200. * @param {?} ctx
  124201. * @return {?}
  124202. */
  124203. StatementInterpreter.prototype.visitAssertNotNullExpr = /**
  124204. * @param {?} ast
  124205. * @param {?} ctx
  124206. * @return {?}
  124207. */
  124208. function (ast, ctx) {
  124209. return ast.condition.visitExpression(this, ctx);
  124210. };
  124211. /**
  124212. * @param {?} ast
  124213. * @param {?} ctx
  124214. * @return {?}
  124215. */
  124216. StatementInterpreter.prototype.visitCastExpr = /**
  124217. * @param {?} ast
  124218. * @param {?} ctx
  124219. * @return {?}
  124220. */
  124221. function (ast, ctx) {
  124222. return ast.value.visitExpression(this, ctx);
  124223. };
  124224. /**
  124225. * @param {?} ast
  124226. * @param {?} ctx
  124227. * @return {?}
  124228. */
  124229. StatementInterpreter.prototype.visitFunctionExpr = /**
  124230. * @param {?} ast
  124231. * @param {?} ctx
  124232. * @return {?}
  124233. */
  124234. function (ast, ctx) {
  124235. var /** @type {?} */ paramNames = ast.params.map(function (param) { return param.name; });
  124236. return _declareFn(paramNames, ast.statements, ctx, this);
  124237. };
  124238. /**
  124239. * @param {?} stmt
  124240. * @param {?} ctx
  124241. * @return {?}
  124242. */
  124243. StatementInterpreter.prototype.visitDeclareFunctionStmt = /**
  124244. * @param {?} stmt
  124245. * @param {?} ctx
  124246. * @return {?}
  124247. */
  124248. function (stmt, ctx) {
  124249. var /** @type {?} */ paramNames = stmt.params.map(function (param) { return param.name; });
  124250. ctx.vars.set(stmt.name, _declareFn(paramNames, stmt.statements, ctx, this));
  124251. if (stmt.hasModifier(StmtModifier.Exported)) {
  124252. ctx.exports.push(stmt.name);
  124253. }
  124254. return null;
  124255. };
  124256. /**
  124257. * @param {?} ast
  124258. * @param {?} ctx
  124259. * @return {?}
  124260. */
  124261. StatementInterpreter.prototype.visitBinaryOperatorExpr = /**
  124262. * @param {?} ast
  124263. * @param {?} ctx
  124264. * @return {?}
  124265. */
  124266. function (ast, ctx) {
  124267. var _this = this;
  124268. var /** @type {?} */ lhs = function () { return ast.lhs.visitExpression(_this, ctx); };
  124269. var /** @type {?} */ rhs = function () { return ast.rhs.visitExpression(_this, ctx); };
  124270. switch (ast.operator) {
  124271. case BinaryOperator.Equals:
  124272. return lhs() == rhs();
  124273. case BinaryOperator.Identical:
  124274. return lhs() === rhs();
  124275. case BinaryOperator.NotEquals:
  124276. return lhs() != rhs();
  124277. case BinaryOperator.NotIdentical:
  124278. return lhs() !== rhs();
  124279. case BinaryOperator.And:
  124280. return lhs() && rhs();
  124281. case BinaryOperator.Or:
  124282. return lhs() || rhs();
  124283. case BinaryOperator.Plus:
  124284. return lhs() + rhs();
  124285. case BinaryOperator.Minus:
  124286. return lhs() - rhs();
  124287. case BinaryOperator.Divide:
  124288. return lhs() / rhs();
  124289. case BinaryOperator.Multiply:
  124290. return lhs() * rhs();
  124291. case BinaryOperator.Modulo:
  124292. return lhs() % rhs();
  124293. case BinaryOperator.Lower:
  124294. return lhs() < rhs();
  124295. case BinaryOperator.LowerEquals:
  124296. return lhs() <= rhs();
  124297. case BinaryOperator.Bigger:
  124298. return lhs() > rhs();
  124299. case BinaryOperator.BiggerEquals:
  124300. return lhs() >= rhs();
  124301. default:
  124302. throw new Error("Unknown operator " + ast.operator);
  124303. }
  124304. };
  124305. /**
  124306. * @param {?} ast
  124307. * @param {?} ctx
  124308. * @return {?}
  124309. */
  124310. StatementInterpreter.prototype.visitReadPropExpr = /**
  124311. * @param {?} ast
  124312. * @param {?} ctx
  124313. * @return {?}
  124314. */
  124315. function (ast, ctx) {
  124316. var /** @type {?} */ result;
  124317. var /** @type {?} */ receiver = ast.receiver.visitExpression(this, ctx);
  124318. result = receiver[ast.name];
  124319. return result;
  124320. };
  124321. /**
  124322. * @param {?} ast
  124323. * @param {?} ctx
  124324. * @return {?}
  124325. */
  124326. StatementInterpreter.prototype.visitReadKeyExpr = /**
  124327. * @param {?} ast
  124328. * @param {?} ctx
  124329. * @return {?}
  124330. */
  124331. function (ast, ctx) {
  124332. var /** @type {?} */ receiver = ast.receiver.visitExpression(this, ctx);
  124333. var /** @type {?} */ prop = ast.index.visitExpression(this, ctx);
  124334. return receiver[prop];
  124335. };
  124336. /**
  124337. * @param {?} ast
  124338. * @param {?} ctx
  124339. * @return {?}
  124340. */
  124341. StatementInterpreter.prototype.visitLiteralArrayExpr = /**
  124342. * @param {?} ast
  124343. * @param {?} ctx
  124344. * @return {?}
  124345. */
  124346. function (ast, ctx) {
  124347. return this.visitAllExpressions(ast.entries, ctx);
  124348. };
  124349. /**
  124350. * @param {?} ast
  124351. * @param {?} ctx
  124352. * @return {?}
  124353. */
  124354. StatementInterpreter.prototype.visitLiteralMapExpr = /**
  124355. * @param {?} ast
  124356. * @param {?} ctx
  124357. * @return {?}
  124358. */
  124359. function (ast, ctx) {
  124360. var _this = this;
  124361. var /** @type {?} */ result = {};
  124362. ast.entries.forEach(function (entry) { return result[entry.key] = entry.value.visitExpression(_this, ctx); });
  124363. return result;
  124364. };
  124365. /**
  124366. * @param {?} ast
  124367. * @param {?} context
  124368. * @return {?}
  124369. */
  124370. StatementInterpreter.prototype.visitCommaExpr = /**
  124371. * @param {?} ast
  124372. * @param {?} context
  124373. * @return {?}
  124374. */
  124375. function (ast, context) {
  124376. var /** @type {?} */ values = this.visitAllExpressions(ast.parts, context);
  124377. return values[values.length - 1];
  124378. };
  124379. /**
  124380. * @param {?} expressions
  124381. * @param {?} ctx
  124382. * @return {?}
  124383. */
  124384. StatementInterpreter.prototype.visitAllExpressions = /**
  124385. * @param {?} expressions
  124386. * @param {?} ctx
  124387. * @return {?}
  124388. */
  124389. function (expressions, ctx) {
  124390. var _this = this;
  124391. return expressions.map(function (expr) { return expr.visitExpression(_this, ctx); });
  124392. };
  124393. /**
  124394. * @param {?} statements
  124395. * @param {?} ctx
  124396. * @return {?}
  124397. */
  124398. StatementInterpreter.prototype.visitAllStatements = /**
  124399. * @param {?} statements
  124400. * @param {?} ctx
  124401. * @return {?}
  124402. */
  124403. function (statements, ctx) {
  124404. for (var /** @type {?} */ i = 0; i < statements.length; i++) {
  124405. var /** @type {?} */ stmt = statements[i];
  124406. var /** @type {?} */ val = stmt.visitStatement(this, ctx);
  124407. if (val instanceof ReturnValue) {
  124408. return val;
  124409. }
  124410. }
  124411. return null;
  124412. };
  124413. return StatementInterpreter;
  124414. }());
  124415. /**
  124416. * @param {?} varNames
  124417. * @param {?} statements
  124418. * @param {?} ctx
  124419. * @param {?} visitor
  124420. * @return {?}
  124421. */
  124422. function _declareFn(varNames, statements, ctx, visitor) {
  124423. return function () {
  124424. var args = [];
  124425. for (var _i = 0; _i < arguments.length; _i++) {
  124426. args[_i] = arguments[_i];
  124427. }
  124428. return _executeFunctionStatements(varNames, args, statements, ctx, visitor);
  124429. };
  124430. }
  124431. var CATCH_ERROR_VAR$2 = 'error';
  124432. var CATCH_STACK_VAR$2 = 'stack';
  124433. /**
  124434. * @fileoverview added by tsickle
  124435. * @suppress {checkTypes} checked by tsc
  124436. */
  124437. /**
  124438. * @license
  124439. * Copyright Google Inc. All Rights Reserved.
  124440. *
  124441. * Use of this source code is governed by an MIT-style license that can be
  124442. * found in the LICENSE file at https://angular.io/license
  124443. */
  124444. /**
  124445. * @abstract
  124446. */
  124447. var AbstractJsEmitterVisitor = /** @class */ (function (_super) {
  124448. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(AbstractJsEmitterVisitor, _super);
  124449. function AbstractJsEmitterVisitor() {
  124450. return _super.call(this, false) || this;
  124451. }
  124452. /**
  124453. * @param {?} stmt
  124454. * @param {?} ctx
  124455. * @return {?}
  124456. */
  124457. AbstractJsEmitterVisitor.prototype.visitDeclareClassStmt = /**
  124458. * @param {?} stmt
  124459. * @param {?} ctx
  124460. * @return {?}
  124461. */
  124462. function (stmt, ctx) {
  124463. var _this = this;
  124464. ctx.pushClass(stmt);
  124465. this._visitClassConstructor(stmt, ctx);
  124466. if (stmt.parent != null) {
  124467. ctx.print(stmt, stmt.name + ".prototype = Object.create(");
  124468. stmt.parent.visitExpression(this, ctx);
  124469. ctx.println(stmt, ".prototype);");
  124470. }
  124471. stmt.getters.forEach(function (getter) { return _this._visitClassGetter(stmt, getter, ctx); });
  124472. stmt.methods.forEach(function (method) { return _this._visitClassMethod(stmt, method, ctx); });
  124473. ctx.popClass();
  124474. return null;
  124475. };
  124476. /**
  124477. * @param {?} stmt
  124478. * @param {?} ctx
  124479. * @return {?}
  124480. */
  124481. AbstractJsEmitterVisitor.prototype._visitClassConstructor = /**
  124482. * @param {?} stmt
  124483. * @param {?} ctx
  124484. * @return {?}
  124485. */
  124486. function (stmt, ctx) {
  124487. ctx.print(stmt, "function " + stmt.name + "(");
  124488. if (stmt.constructorMethod != null) {
  124489. this._visitParams(stmt.constructorMethod.params, ctx);
  124490. }
  124491. ctx.println(stmt, ") {");
  124492. ctx.incIndent();
  124493. if (stmt.constructorMethod != null) {
  124494. if (stmt.constructorMethod.body.length > 0) {
  124495. ctx.println(stmt, "var self = this;");
  124496. this.visitAllStatements(stmt.constructorMethod.body, ctx);
  124497. }
  124498. }
  124499. ctx.decIndent();
  124500. ctx.println(stmt, "}");
  124501. };
  124502. /**
  124503. * @param {?} stmt
  124504. * @param {?} getter
  124505. * @param {?} ctx
  124506. * @return {?}
  124507. */
  124508. AbstractJsEmitterVisitor.prototype._visitClassGetter = /**
  124509. * @param {?} stmt
  124510. * @param {?} getter
  124511. * @param {?} ctx
  124512. * @return {?}
  124513. */
  124514. function (stmt, getter, ctx) {
  124515. ctx.println(stmt, "Object.defineProperty(" + stmt.name + ".prototype, '" + getter.name + "', { get: function() {");
  124516. ctx.incIndent();
  124517. if (getter.body.length > 0) {
  124518. ctx.println(stmt, "var self = this;");
  124519. this.visitAllStatements(getter.body, ctx);
  124520. }
  124521. ctx.decIndent();
  124522. ctx.println(stmt, "}});");
  124523. };
  124524. /**
  124525. * @param {?} stmt
  124526. * @param {?} method
  124527. * @param {?} ctx
  124528. * @return {?}
  124529. */
  124530. AbstractJsEmitterVisitor.prototype._visitClassMethod = /**
  124531. * @param {?} stmt
  124532. * @param {?} method
  124533. * @param {?} ctx
  124534. * @return {?}
  124535. */
  124536. function (stmt, method, ctx) {
  124537. ctx.print(stmt, stmt.name + ".prototype." + method.name + " = function(");
  124538. this._visitParams(method.params, ctx);
  124539. ctx.println(stmt, ") {");
  124540. ctx.incIndent();
  124541. if (method.body.length > 0) {
  124542. ctx.println(stmt, "var self = this;");
  124543. this.visitAllStatements(method.body, ctx);
  124544. }
  124545. ctx.decIndent();
  124546. ctx.println(stmt, "};");
  124547. };
  124548. /**
  124549. * @param {?} ast
  124550. * @param {?} ctx
  124551. * @return {?}
  124552. */
  124553. AbstractJsEmitterVisitor.prototype.visitReadVarExpr = /**
  124554. * @param {?} ast
  124555. * @param {?} ctx
  124556. * @return {?}
  124557. */
  124558. function (ast, ctx) {
  124559. if (ast.builtin === BuiltinVar.This) {
  124560. ctx.print(ast, 'self');
  124561. }
  124562. else if (ast.builtin === BuiltinVar.Super) {
  124563. throw new Error("'super' needs to be handled at a parent ast node, not at the variable level!");
  124564. }
  124565. else {
  124566. _super.prototype.visitReadVarExpr.call(this, ast, ctx);
  124567. }
  124568. return null;
  124569. };
  124570. /**
  124571. * @param {?} stmt
  124572. * @param {?} ctx
  124573. * @return {?}
  124574. */
  124575. AbstractJsEmitterVisitor.prototype.visitDeclareVarStmt = /**
  124576. * @param {?} stmt
  124577. * @param {?} ctx
  124578. * @return {?}
  124579. */
  124580. function (stmt, ctx) {
  124581. ctx.print(stmt, "var " + stmt.name + " = ");
  124582. stmt.value.visitExpression(this, ctx);
  124583. ctx.println(stmt, ";");
  124584. return null;
  124585. };
  124586. /**
  124587. * @param {?} ast
  124588. * @param {?} ctx
  124589. * @return {?}
  124590. */
  124591. AbstractJsEmitterVisitor.prototype.visitCastExpr = /**
  124592. * @param {?} ast
  124593. * @param {?} ctx
  124594. * @return {?}
  124595. */
  124596. function (ast, ctx) {
  124597. ast.value.visitExpression(this, ctx);
  124598. return null;
  124599. };
  124600. /**
  124601. * @param {?} expr
  124602. * @param {?} ctx
  124603. * @return {?}
  124604. */
  124605. AbstractJsEmitterVisitor.prototype.visitInvokeFunctionExpr = /**
  124606. * @param {?} expr
  124607. * @param {?} ctx
  124608. * @return {?}
  124609. */
  124610. function (expr, ctx) {
  124611. var /** @type {?} */ fnExpr = expr.fn;
  124612. if (fnExpr instanceof ReadVarExpr && fnExpr.builtin === BuiltinVar.Super) {
  124613. /** @type {?} */ ((/** @type {?} */ ((ctx.currentClass)).parent)).visitExpression(this, ctx);
  124614. ctx.print(expr, ".call(this");
  124615. if (expr.args.length > 0) {
  124616. ctx.print(expr, ", ");
  124617. this.visitAllExpressions(expr.args, ctx, ',');
  124618. }
  124619. ctx.print(expr, ")");
  124620. }
  124621. else {
  124622. _super.prototype.visitInvokeFunctionExpr.call(this, expr, ctx);
  124623. }
  124624. return null;
  124625. };
  124626. /**
  124627. * @param {?} ast
  124628. * @param {?} ctx
  124629. * @return {?}
  124630. */
  124631. AbstractJsEmitterVisitor.prototype.visitFunctionExpr = /**
  124632. * @param {?} ast
  124633. * @param {?} ctx
  124634. * @return {?}
  124635. */
  124636. function (ast, ctx) {
  124637. ctx.print(ast, "function(");
  124638. this._visitParams(ast.params, ctx);
  124639. ctx.println(ast, ") {");
  124640. ctx.incIndent();
  124641. this.visitAllStatements(ast.statements, ctx);
  124642. ctx.decIndent();
  124643. ctx.print(ast, "}");
  124644. return null;
  124645. };
  124646. /**
  124647. * @param {?} stmt
  124648. * @param {?} ctx
  124649. * @return {?}
  124650. */
  124651. AbstractJsEmitterVisitor.prototype.visitDeclareFunctionStmt = /**
  124652. * @param {?} stmt
  124653. * @param {?} ctx
  124654. * @return {?}
  124655. */
  124656. function (stmt, ctx) {
  124657. ctx.print(stmt, "function " + stmt.name + "(");
  124658. this._visitParams(stmt.params, ctx);
  124659. ctx.println(stmt, ") {");
  124660. ctx.incIndent();
  124661. this.visitAllStatements(stmt.statements, ctx);
  124662. ctx.decIndent();
  124663. ctx.println(stmt, "}");
  124664. return null;
  124665. };
  124666. /**
  124667. * @param {?} stmt
  124668. * @param {?} ctx
  124669. * @return {?}
  124670. */
  124671. AbstractJsEmitterVisitor.prototype.visitTryCatchStmt = /**
  124672. * @param {?} stmt
  124673. * @param {?} ctx
  124674. * @return {?}
  124675. */
  124676. function (stmt, ctx) {
  124677. ctx.println(stmt, "try {");
  124678. ctx.incIndent();
  124679. this.visitAllStatements(stmt.bodyStmts, ctx);
  124680. ctx.decIndent();
  124681. ctx.println(stmt, "} catch (" + CATCH_ERROR_VAR$1.name + ") {");
  124682. ctx.incIndent();
  124683. var /** @type {?} */ catchStmts = [/** @type {?} */ (CATCH_STACK_VAR$1.set(CATCH_ERROR_VAR$1.prop('stack')).toDeclStmt(null, [
  124684. StmtModifier.Final
  124685. ]))].concat(stmt.catchStmts);
  124686. this.visitAllStatements(catchStmts, ctx);
  124687. ctx.decIndent();
  124688. ctx.println(stmt, "}");
  124689. return null;
  124690. };
  124691. /**
  124692. * @param {?} params
  124693. * @param {?} ctx
  124694. * @return {?}
  124695. */
  124696. AbstractJsEmitterVisitor.prototype._visitParams = /**
  124697. * @param {?} params
  124698. * @param {?} ctx
  124699. * @return {?}
  124700. */
  124701. function (params, ctx) {
  124702. this.visitAllObjects(function (param) { return ctx.print(null, param.name); }, params, ctx, ',');
  124703. };
  124704. /**
  124705. * @param {?} method
  124706. * @return {?}
  124707. */
  124708. AbstractJsEmitterVisitor.prototype.getBuiltinMethodName = /**
  124709. * @param {?} method
  124710. * @return {?}
  124711. */
  124712. function (method) {
  124713. var /** @type {?} */ name;
  124714. switch (method) {
  124715. case BuiltinMethod.ConcatArray:
  124716. name = 'concat';
  124717. break;
  124718. case BuiltinMethod.SubscribeObservable:
  124719. name = 'subscribe';
  124720. break;
  124721. case BuiltinMethod.Bind:
  124722. name = 'bind';
  124723. break;
  124724. default:
  124725. throw new Error("Unknown builtin method: " + method);
  124726. }
  124727. return name;
  124728. };
  124729. return AbstractJsEmitterVisitor;
  124730. }(AbstractEmitterVisitor));
  124731. /**
  124732. * @fileoverview added by tsickle
  124733. * @suppress {checkTypes} checked by tsc
  124734. */
  124735. /**
  124736. * @license
  124737. * Copyright Google Inc. All Rights Reserved.
  124738. *
  124739. * Use of this source code is governed by an MIT-style license that can be
  124740. * found in the LICENSE file at https://angular.io/license
  124741. */
  124742. /**
  124743. * @param {?} sourceUrl
  124744. * @param {?} ctx
  124745. * @param {?} vars
  124746. * @param {?} createSourceMap
  124747. * @return {?}
  124748. */
  124749. function evalExpression(sourceUrl, ctx, vars, createSourceMap) {
  124750. var /** @type {?} */ fnBody = ctx.toSource() + "\n//# sourceURL=" + sourceUrl;
  124751. var /** @type {?} */ fnArgNames = [];
  124752. var /** @type {?} */ fnArgValues = [];
  124753. for (var /** @type {?} */ argName in vars) {
  124754. fnArgNames.push(argName);
  124755. fnArgValues.push(vars[argName]);
  124756. }
  124757. if (createSourceMap) {
  124758. // using `new Function(...)` generates a header, 1 line of no arguments, 2 lines otherwise
  124759. // E.g. ```
  124760. // function anonymous(a,b,c
  124761. // /**/) { ... }```
  124762. // We don't want to hard code this fact, so we auto detect it via an empty function first.
  124763. var /** @type {?} */ emptyFn = new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat('return null;'))))().toString();
  124764. var /** @type {?} */ headerLines = emptyFn.slice(0, emptyFn.indexOf('return null;')).split('\n').length - 1;
  124765. fnBody += "\n" + ctx.toSourceMapGenerator(sourceUrl, headerLines).toJsComment();
  124766. }
  124767. return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues);
  124768. }
  124769. /**
  124770. * @param {?} sourceUrl
  124771. * @param {?} statements
  124772. * @param {?} reflector
  124773. * @param {?} createSourceMaps
  124774. * @return {?}
  124775. */
  124776. function jitStatements(sourceUrl, statements, reflector, createSourceMaps) {
  124777. var /** @type {?} */ converter = new JitEmitterVisitor(reflector);
  124778. var /** @type {?} */ ctx = EmitterVisitorContext.createRoot();
  124779. converter.visitAllStatements(statements, ctx);
  124780. converter.createReturnStmt(ctx);
  124781. return evalExpression(sourceUrl, ctx, converter.getArgs(), createSourceMaps);
  124782. }
  124783. var JitEmitterVisitor = /** @class */ (function (_super) {
  124784. Object(__WEBPACK_IMPORTED_MODULE_0_tslib__["b" /* __extends */])(JitEmitterVisitor, _super);
  124785. function JitEmitterVisitor(reflector) {
  124786. var _this = _super.call(this) || this;
  124787. _this.reflector = reflector;
  124788. _this._evalArgNames = [];
  124789. _this._evalArgValues = [];
  124790. _this._evalExportedVars = [];
  124791. return _this;
  124792. }
  124793. /**
  124794. * @param {?} ctx
  124795. * @return {?}
  124796. */
  124797. JitEmitterVisitor.prototype.createReturnStmt = /**
  124798. * @param {?} ctx
  124799. * @return {?}
  124800. */
  124801. function (ctx) {
  124802. var /** @type {?} */ stmt = new ReturnStatement(new LiteralMapExpr(this._evalExportedVars.map(function (resultVar) { return new LiteralMapEntry(resultVar, variable(resultVar), false); })));
  124803. stmt.visitStatement(this, ctx);
  124804. };
  124805. /**
  124806. * @return {?}
  124807. */
  124808. JitEmitterVisitor.prototype.getArgs = /**
  124809. * @return {?}
  124810. */
  124811. function () {
  124812. var /** @type {?} */ result = {};
  124813. for (var /** @type {?} */ i = 0; i < this._evalArgNames.length; i++) {
  124814. result[this._evalArgNames[i]] = this._evalArgValues[i];
  124815. }
  124816. return result;
  124817. };
  124818. /**
  124819. * @param {?} ast
  124820. * @param {?} ctx
  124821. * @return {?}
  124822. */
  124823. JitEmitterVisitor.prototype.visitExternalExpr = /**
  124824. * @param {?} ast
  124825. * @param {?} ctx
  124826. * @return {?}
  124827. */
  124828. function (ast, ctx) {
  124829. var /** @type {?} */ value = this.reflector.resolveExternalReference(ast.value);
  124830. var /** @type {?} */ id = this._evalArgValues.indexOf(value);
  124831. if (id === -1) {
  124832. id = this._evalArgValues.length;
  124833. this._evalArgValues.push(value);
  124834. var /** @type {?} */ name_1 = identifierName({ reference: value }) || 'val';
  124835. this._evalArgNames.push("jit_" + name_1 + "_" + id);
  124836. }
  124837. ctx.print(ast, this._evalArgNames[id]);
  124838. return null;
  124839. };
  124840. /**
  124841. * @param {?} stmt
  124842. * @param {?} ctx
  124843. * @return {?}
  124844. */
  124845. JitEmitterVisitor.prototype.visitDeclareVarStmt = /**
  124846. * @param {?} stmt
  124847. * @param {?} ctx
  124848. * @return {?}
  124849. */
  124850. function (stmt, ctx) {
  124851. if (stmt.hasModifier(StmtModifier.Exported)) {
  124852. this._evalExportedVars.push(stmt.name);
  124853. }
  124854. return _super.prototype.visitDeclareVarStmt.call(this, stmt, ctx);
  124855. };
  124856. /**
  124857. * @param {?} stmt
  124858. * @param {?} ctx
  124859. * @return {?}
  124860. */
  124861. JitEmitterVisitor.prototype.visitDeclareFunctionStmt = /**
  124862. * @param {?} stmt
  124863. * @param {?} ctx
  124864. * @return {?}
  124865. */
  124866. function (stmt, ctx) {
  124867. if (stmt.hasModifier(StmtModifier.Exported)) {
  124868. this._evalExportedVars.push(stmt.name);
  124869. }
  124870. return _super.prototype.visitDeclareFunctionStmt.call(this, stmt, ctx);
  124871. };
  124872. /**
  124873. * @param {?} stmt
  124874. * @param {?} ctx
  124875. * @return {?}
  124876. */
  124877. JitEmitterVisitor.prototype.visitDeclareClassStmt = /**
  124878. * @param {?} stmt
  124879. * @param {?} ctx
  124880. * @return {?}
  124881. */
  124882. function (stmt, ctx) {
  124883. if (stmt.hasModifier(StmtModifier.Exported)) {
  124884. this._evalExportedVars.push(stmt.name);
  124885. }
  124886. return _super.prototype.visitDeclareClassStmt.call(this, stmt, ctx);
  124887. };
  124888. return JitEmitterVisitor;
  124889. }(AbstractJsEmitterVisitor));
  124890. /**
  124891. * @fileoverview added by tsickle
  124892. * @suppress {checkTypes} checked by tsc
  124893. */
  124894. /**
  124895. * @license
  124896. * Copyright Google Inc. All Rights Reserved.
  124897. *
  124898. * Use of this source code is governed by an MIT-style license that can be
  124899. * found in the LICENSE file at https://angular.io/license
  124900. */
  124901. /**
  124902. * @record
  124903. */
  124904. /**
  124905. * An internal module of the Angular compiler that begins with component types,
  124906. * extracts templates, and eventually produces a compiled version of the component
  124907. * ready for linking into an application.
  124908. *
  124909. * \@security When compiling templates at runtime, you must ensure that the entire template comes
  124910. * from a trusted source. Attacker-controlled data introduced by a template could expose your
  124911. * application to XSS risks. For more detail, see the [Security Guide](http://g.co/ng/security).
  124912. */
  124913. var JitCompiler = /** @class */ (function () {
  124914. function JitCompiler(_metadataResolver, _templateParser, _styleCompiler, _viewCompiler, _ngModuleCompiler, _summaryResolver, _reflector, _compilerConfig, _console, getExtraNgModuleProviders) {
  124915. this._metadataResolver = _metadataResolver;
  124916. this._templateParser = _templateParser;
  124917. this._styleCompiler = _styleCompiler;
  124918. this._viewCompiler = _viewCompiler;
  124919. this._ngModuleCompiler = _ngModuleCompiler;
  124920. this._summaryResolver = _summaryResolver;
  124921. this._reflector = _reflector;
  124922. this._compilerConfig = _compilerConfig;
  124923. this._console = _console;
  124924. this.getExtraNgModuleProviders = getExtraNgModuleProviders;
  124925. this._compiledTemplateCache = new Map();
  124926. this._compiledHostTemplateCache = new Map();
  124927. this._compiledDirectiveWrapperCache = new Map();
  124928. this._compiledNgModuleCache = new Map();
  124929. this._sharedStylesheetCount = 0;
  124930. this._addedAotSummaries = new Set();
  124931. }
  124932. /**
  124933. * @param {?} moduleType
  124934. * @return {?}
  124935. */
  124936. JitCompiler.prototype.compileModuleSync = /**
  124937. * @param {?} moduleType
  124938. * @return {?}
  124939. */
  124940. function (moduleType) {
  124941. return SyncAsync.assertSync(this._compileModuleAndComponents(moduleType, true));
  124942. };
  124943. /**
  124944. * @param {?} moduleType
  124945. * @return {?}
  124946. */
  124947. JitCompiler.prototype.compileModuleAsync = /**
  124948. * @param {?} moduleType
  124949. * @return {?}
  124950. */
  124951. function (moduleType) {
  124952. return Promise.resolve(this._compileModuleAndComponents(moduleType, false));
  124953. };
  124954. /**
  124955. * @param {?} moduleType
  124956. * @return {?}
  124957. */
  124958. JitCompiler.prototype.compileModuleAndAllComponentsSync = /**
  124959. * @param {?} moduleType
  124960. * @return {?}
  124961. */
  124962. function (moduleType) {
  124963. return SyncAsync.assertSync(this._compileModuleAndAllComponents(moduleType, true));
  124964. };
  124965. /**
  124966. * @param {?} moduleType
  124967. * @return {?}
  124968. */
  124969. JitCompiler.prototype.compileModuleAndAllComponentsAsync = /**
  124970. * @param {?} moduleType
  124971. * @return {?}
  124972. */
  124973. function (moduleType) {
  124974. return Promise.resolve(this._compileModuleAndAllComponents(moduleType, false));
  124975. };
  124976. /**
  124977. * @param {?} component
  124978. * @return {?}
  124979. */
  124980. JitCompiler.prototype.getComponentFactory = /**
  124981. * @param {?} component
  124982. * @return {?}
  124983. */
  124984. function (component) {
  124985. var /** @type {?} */ summary = this._metadataResolver.getDirectiveSummary(component);
  124986. return /** @type {?} */ (summary.componentFactory);
  124987. };
  124988. /**
  124989. * @param {?} summaries
  124990. * @return {?}
  124991. */
  124992. JitCompiler.prototype.loadAotSummaries = /**
  124993. * @param {?} summaries
  124994. * @return {?}
  124995. */
  124996. function (summaries) {
  124997. this.clearCache();
  124998. this._addAotSummaries(summaries);
  124999. };
  125000. /**
  125001. * @param {?} fn
  125002. * @return {?}
  125003. */
  125004. JitCompiler.prototype._addAotSummaries = /**
  125005. * @param {?} fn
  125006. * @return {?}
  125007. */
  125008. function (fn$$1) {
  125009. if (this._addedAotSummaries.has(fn$$1)) {
  125010. return;
  125011. }
  125012. this._addedAotSummaries.add(fn$$1);
  125013. var /** @type {?} */ summaries = fn$$1();
  125014. for (var /** @type {?} */ i = 0; i < summaries.length; i++) {
  125015. var /** @type {?} */ entry = summaries[i];
  125016. if (typeof entry === 'function') {
  125017. this._addAotSummaries(entry);
  125018. }
  125019. else {
  125020. var /** @type {?} */ summary = /** @type {?} */ (entry);
  125021. this._summaryResolver.addSummary({ symbol: summary.type.reference, metadata: null, type: summary });
  125022. }
  125023. }
  125024. };
  125025. /**
  125026. * @param {?} ref
  125027. * @return {?}
  125028. */
  125029. JitCompiler.prototype.hasAotSummary = /**
  125030. * @param {?} ref
  125031. * @return {?}
  125032. */
  125033. function (ref) { return !!this._summaryResolver.resolveSummary(ref); };
  125034. /**
  125035. * @param {?} ids
  125036. * @return {?}
  125037. */
  125038. JitCompiler.prototype._filterJitIdentifiers = /**
  125039. * @param {?} ids
  125040. * @return {?}
  125041. */
  125042. function (ids) {
  125043. var _this = this;
  125044. return ids.map(function (mod) { return mod.reference; }).filter(function (ref) { return !_this.hasAotSummary(ref); });
  125045. };
  125046. /**
  125047. * @param {?} moduleType
  125048. * @param {?} isSync
  125049. * @return {?}
  125050. */
  125051. JitCompiler.prototype._compileModuleAndComponents = /**
  125052. * @param {?} moduleType
  125053. * @param {?} isSync
  125054. * @return {?}
  125055. */
  125056. function (moduleType, isSync) {
  125057. var _this = this;
  125058. return SyncAsync.then(this._loadModules(moduleType, isSync), function () {
  125059. _this._compileComponents(moduleType, null);
  125060. return _this._compileModule(moduleType);
  125061. });
  125062. };
  125063. /**
  125064. * @param {?} moduleType
  125065. * @param {?} isSync
  125066. * @return {?}
  125067. */
  125068. JitCompiler.prototype._compileModuleAndAllComponents = /**
  125069. * @param {?} moduleType
  125070. * @param {?} isSync
  125071. * @return {?}
  125072. */
  125073. function (moduleType, isSync) {
  125074. var _this = this;
  125075. return SyncAsync.then(this._loadModules(moduleType, isSync), function () {
  125076. var /** @type {?} */ componentFactories = [];
  125077. _this._compileComponents(moduleType, componentFactories);
  125078. return {
  125079. ngModuleFactory: _this._compileModule(moduleType),
  125080. componentFactories: componentFactories
  125081. };
  125082. });
  125083. };
  125084. /**
  125085. * @param {?} mainModule
  125086. * @param {?} isSync
  125087. * @return {?}
  125088. */
  125089. JitCompiler.prototype._loadModules = /**
  125090. * @param {?} mainModule
  125091. * @param {?} isSync
  125092. * @return {?}
  125093. */
  125094. function (mainModule, isSync) {
  125095. var _this = this;
  125096. var /** @type {?} */ loading = [];
  125097. var /** @type {?} */ mainNgModule = /** @type {?} */ ((this._metadataResolver.getNgModuleMetadata(mainModule)));
  125098. // Note: for runtime compilation, we want to transitively compile all modules,
  125099. // so we also need to load the declared directives / pipes for all nested modules.
  125100. this._filterJitIdentifiers(mainNgModule.transitiveModule.modules).forEach(function (nestedNgModule) {
  125101. // getNgModuleMetadata only returns null if the value passed in is not an NgModule
  125102. var /** @type {?} */ moduleMeta = /** @type {?} */ ((_this._metadataResolver.getNgModuleMetadata(nestedNgModule)));
  125103. _this._filterJitIdentifiers(moduleMeta.declaredDirectives).forEach(function (ref) {
  125104. var /** @type {?} */ promise = _this._metadataResolver.loadDirectiveMetadata(moduleMeta.type.reference, ref, isSync);
  125105. if (promise) {
  125106. loading.push(promise);
  125107. }
  125108. });
  125109. _this._filterJitIdentifiers(moduleMeta.declaredPipes)
  125110. .forEach(function (ref) { return _this._metadataResolver.getOrLoadPipeMetadata(ref); });
  125111. });
  125112. return SyncAsync.all(loading);
  125113. };
  125114. /**
  125115. * @param {?} moduleType
  125116. * @return {?}
  125117. */
  125118. JitCompiler.prototype._compileModule = /**
  125119. * @param {?} moduleType
  125120. * @return {?}
  125121. */
  125122. function (moduleType) {
  125123. var /** @type {?} */ ngModuleFactory = /** @type {?} */ ((this._compiledNgModuleCache.get(moduleType)));
  125124. if (!ngModuleFactory) {
  125125. var /** @type {?} */ moduleMeta = /** @type {?} */ ((this._metadataResolver.getNgModuleMetadata(moduleType)));
  125126. // Always provide a bound Compiler
  125127. var /** @type {?} */ extraProviders = this.getExtraNgModuleProviders(moduleMeta.type.reference);
  125128. var /** @type {?} */ outputCtx = createOutputContext();
  125129. var /** @type {?} */ compileResult = this._ngModuleCompiler.compile(outputCtx, moduleMeta, extraProviders);
  125130. ngModuleFactory = this._interpretOrJit(ngModuleJitUrl(moduleMeta), outputCtx.statements)[compileResult.ngModuleFactoryVar];
  125131. this._compiledNgModuleCache.set(moduleMeta.type.reference, ngModuleFactory);
  125132. }
  125133. return ngModuleFactory;
  125134. };
  125135. /**
  125136. * @internal
  125137. */
  125138. /**
  125139. * \@internal
  125140. * @param {?} mainModule
  125141. * @param {?} allComponentFactories
  125142. * @return {?}
  125143. */
  125144. JitCompiler.prototype._compileComponents = /**
  125145. * \@internal
  125146. * @param {?} mainModule
  125147. * @param {?} allComponentFactories
  125148. * @return {?}
  125149. */
  125150. function (mainModule, allComponentFactories) {
  125151. var _this = this;
  125152. var /** @type {?} */ ngModule = /** @type {?} */ ((this._metadataResolver.getNgModuleMetadata(mainModule)));
  125153. var /** @type {?} */ moduleByJitDirective = new Map();
  125154. var /** @type {?} */ templates = new Set();
  125155. var /** @type {?} */ transJitModules = this._filterJitIdentifiers(ngModule.transitiveModule.modules);
  125156. transJitModules.forEach(function (localMod) {
  125157. var /** @type {?} */ localModuleMeta = /** @type {?} */ ((_this._metadataResolver.getNgModuleMetadata(localMod)));
  125158. _this._filterJitIdentifiers(localModuleMeta.declaredDirectives).forEach(function (dirRef) {
  125159. moduleByJitDirective.set(dirRef, localModuleMeta);
  125160. var /** @type {?} */ dirMeta = _this._metadataResolver.getDirectiveMetadata(dirRef);
  125161. if (dirMeta.isComponent) {
  125162. templates.add(_this._createCompiledTemplate(dirMeta, localModuleMeta));
  125163. if (allComponentFactories) {
  125164. var /** @type {?} */ template = _this._createCompiledHostTemplate(dirMeta.type.reference, localModuleMeta);
  125165. templates.add(template);
  125166. allComponentFactories.push(/** @type {?} */ (dirMeta.componentFactory));
  125167. }
  125168. }
  125169. });
  125170. });
  125171. transJitModules.forEach(function (localMod) {
  125172. var /** @type {?} */ localModuleMeta = /** @type {?} */ ((_this._metadataResolver.getNgModuleMetadata(localMod)));
  125173. _this._filterJitIdentifiers(localModuleMeta.declaredDirectives).forEach(function (dirRef) {
  125174. var /** @type {?} */ dirMeta = _this._metadataResolver.getDirectiveMetadata(dirRef);
  125175. if (dirMeta.isComponent) {
  125176. dirMeta.entryComponents.forEach(function (entryComponentType) {
  125177. var /** @type {?} */ moduleMeta = /** @type {?} */ ((moduleByJitDirective.get(entryComponentType.componentType)));
  125178. templates.add(_this._createCompiledHostTemplate(entryComponentType.componentType, moduleMeta));
  125179. });
  125180. }
  125181. });
  125182. localModuleMeta.entryComponents.forEach(function (entryComponentType) {
  125183. if (!_this.hasAotSummary(entryComponentType.componentType.reference)) {
  125184. var /** @type {?} */ moduleMeta = /** @type {?} */ ((moduleByJitDirective.get(entryComponentType.componentType)));
  125185. templates.add(_this._createCompiledHostTemplate(entryComponentType.componentType, moduleMeta));
  125186. }
  125187. });
  125188. });
  125189. templates.forEach(function (template) { return _this._compileTemplate(template); });
  125190. };
  125191. /**
  125192. * @param {?} type
  125193. * @return {?}
  125194. */
  125195. JitCompiler.prototype.clearCacheFor = /**
  125196. * @param {?} type
  125197. * @return {?}
  125198. */
  125199. function (type) {
  125200. this._compiledNgModuleCache.delete(type);
  125201. this._metadataResolver.clearCacheFor(type);
  125202. this._compiledHostTemplateCache.delete(type);
  125203. var /** @type {?} */ compiledTemplate = this._compiledTemplateCache.get(type);
  125204. if (compiledTemplate) {
  125205. this._compiledTemplateCache.delete(type);
  125206. }
  125207. };
  125208. /**
  125209. * @return {?}
  125210. */
  125211. JitCompiler.prototype.clearCache = /**
  125212. * @return {?}
  125213. */
  125214. function () {
  125215. // Note: don't clear the _addedAotSummaries, as they don't change!
  125216. this._metadataResolver.clearCache();
  125217. this._compiledTemplateCache.clear();
  125218. this._compiledHostTemplateCache.clear();
  125219. this._compiledNgModuleCache.clear();
  125220. };
  125221. /**
  125222. * @param {?} compType
  125223. * @param {?} ngModule
  125224. * @return {?}
  125225. */
  125226. JitCompiler.prototype._createCompiledHostTemplate = /**
  125227. * @param {?} compType
  125228. * @param {?} ngModule
  125229. * @return {?}
  125230. */
  125231. function (compType, ngModule) {
  125232. if (!ngModule) {
  125233. throw new Error("Component " + stringify(compType) + " is not part of any NgModule or the module has not been imported into your module.");
  125234. }
  125235. var /** @type {?} */ compiledTemplate = this._compiledHostTemplateCache.get(compType);
  125236. if (!compiledTemplate) {
  125237. var /** @type {?} */ compMeta = this._metadataResolver.getDirectiveMetadata(compType);
  125238. assertComponent(compMeta);
  125239. var /** @type {?} */ hostMeta = this._metadataResolver.getHostComponentMetadata(compMeta, (/** @type {?} */ (compMeta.componentFactory)).viewDefFactory);
  125240. compiledTemplate =
  125241. new CompiledTemplate(true, compMeta.type, hostMeta, ngModule, [compMeta.type]);
  125242. this._compiledHostTemplateCache.set(compType, compiledTemplate);
  125243. }
  125244. return compiledTemplate;
  125245. };
  125246. /**
  125247. * @param {?} compMeta
  125248. * @param {?} ngModule
  125249. * @return {?}
  125250. */
  125251. JitCompiler.prototype._createCompiledTemplate = /**
  125252. * @param {?} compMeta
  125253. * @param {?} ngModule
  125254. * @return {?}
  125255. */
  125256. function (compMeta, ngModule) {
  125257. var /** @type {?} */ compiledTemplate = this._compiledTemplateCache.get(compMeta.type.reference);
  125258. if (!compiledTemplate) {
  125259. assertComponent(compMeta);
  125260. compiledTemplate = new CompiledTemplate(false, compMeta.type, compMeta, ngModule, ngModule.transitiveModule.directives);
  125261. this._compiledTemplateCache.set(compMeta.type.reference, compiledTemplate);
  125262. }
  125263. return compiledTemplate;
  125264. };
  125265. /**
  125266. * @param {?} template
  125267. * @return {?}
  125268. */
  125269. JitCompiler.prototype._compileTemplate = /**
  125270. * @param {?} template
  125271. * @return {?}
  125272. */
  125273. function (template) {
  125274. var _this = this;
  125275. if (template.isCompiled) {
  125276. return;
  125277. }
  125278. var /** @type {?} */ compMeta = template.compMeta;
  125279. var /** @type {?} */ externalStylesheetsByModuleUrl = new Map();
  125280. var /** @type {?} */ outputContext = createOutputContext();
  125281. var /** @type {?} */ componentStylesheet = this._styleCompiler.compileComponent(outputContext, compMeta); /** @type {?} */
  125282. ((compMeta.template)).externalStylesheets.forEach(function (stylesheetMeta) {
  125283. var /** @type {?} */ compiledStylesheet = _this._styleCompiler.compileStyles(createOutputContext(), compMeta, stylesheetMeta);
  125284. externalStylesheetsByModuleUrl.set(/** @type {?} */ ((stylesheetMeta.moduleUrl)), compiledStylesheet);
  125285. });
  125286. this._resolveStylesCompileResult(componentStylesheet, externalStylesheetsByModuleUrl);
  125287. var /** @type {?} */ pipes = template.ngModule.transitiveModule.pipes.map(function (pipe) { return _this._metadataResolver.getPipeSummary(pipe.reference); });
  125288. var _a = this._parseTemplate(compMeta, template.ngModule, template.directives), parsedTemplate = _a.template, usedPipes = _a.pipes;
  125289. var /** @type {?} */ compileResult = this._viewCompiler.compileComponent(outputContext, compMeta, parsedTemplate, variable(componentStylesheet.stylesVar), usedPipes);
  125290. var /** @type {?} */ evalResult = this._interpretOrJit(templateJitUrl(template.ngModule.type, template.compMeta), outputContext.statements);
  125291. var /** @type {?} */ viewClass = evalResult[compileResult.viewClassVar];
  125292. var /** @type {?} */ rendererType = evalResult[compileResult.rendererTypeVar];
  125293. template.compiled(viewClass, rendererType);
  125294. };
  125295. /**
  125296. * @param {?} compMeta
  125297. * @param {?} ngModule
  125298. * @param {?} directiveIdentifiers
  125299. * @return {?}
  125300. */
  125301. JitCompiler.prototype._parseTemplate = /**
  125302. * @param {?} compMeta
  125303. * @param {?} ngModule
  125304. * @param {?} directiveIdentifiers
  125305. * @return {?}
  125306. */
  125307. function (compMeta, ngModule, directiveIdentifiers) {
  125308. var _this = this;
  125309. // Note: ! is ok here as components always have a template.
  125310. var /** @type {?} */ preserveWhitespaces = /** @type {?} */ ((compMeta.template)).preserveWhitespaces;
  125311. var /** @type {?} */ directives = directiveIdentifiers.map(function (dir) { return _this._metadataResolver.getDirectiveSummary(dir.reference); });
  125312. var /** @type {?} */ pipes = ngModule.transitiveModule.pipes.map(function (pipe) { return _this._metadataResolver.getPipeSummary(pipe.reference); });
  125313. return this._templateParser.parse(compMeta, /** @type {?} */ ((/** @type {?} */ ((compMeta.template)).htmlAst)), directives, pipes, ngModule.schemas, templateSourceUrl(ngModule.type, compMeta, /** @type {?} */ ((compMeta.template))), preserveWhitespaces);
  125314. };
  125315. /**
  125316. * @param {?} result
  125317. * @param {?} externalStylesheetsByModuleUrl
  125318. * @return {?}
  125319. */
  125320. JitCompiler.prototype._resolveStylesCompileResult = /**
  125321. * @param {?} result
  125322. * @param {?} externalStylesheetsByModuleUrl
  125323. * @return {?}
  125324. */
  125325. function (result, externalStylesheetsByModuleUrl) {
  125326. var _this = this;
  125327. result.dependencies.forEach(function (dep, i) {
  125328. var /** @type {?} */ nestedCompileResult = /** @type {?} */ ((externalStylesheetsByModuleUrl.get(dep.moduleUrl)));
  125329. var /** @type {?} */ nestedStylesArr = _this._resolveAndEvalStylesCompileResult(nestedCompileResult, externalStylesheetsByModuleUrl);
  125330. dep.setValue(nestedStylesArr);
  125331. });
  125332. };
  125333. /**
  125334. * @param {?} result
  125335. * @param {?} externalStylesheetsByModuleUrl
  125336. * @return {?}
  125337. */
  125338. JitCompiler.prototype._resolveAndEvalStylesCompileResult = /**
  125339. * @param {?} result
  125340. * @param {?} externalStylesheetsByModuleUrl
  125341. * @return {?}
  125342. */
  125343. function (result, externalStylesheetsByModuleUrl) {
  125344. this._resolveStylesCompileResult(result, externalStylesheetsByModuleUrl);
  125345. return this._interpretOrJit(sharedStylesheetJitUrl(result.meta, this._sharedStylesheetCount++), result.outputCtx.statements)[result.stylesVar];
  125346. };
  125347. /**
  125348. * @param {?} sourceUrl
  125349. * @param {?} statements
  125350. * @return {?}
  125351. */
  125352. JitCompiler.prototype._interpretOrJit = /**
  125353. * @param {?} sourceUrl
  125354. * @param {?} statements
  125355. * @return {?}
  125356. */
  125357. function (sourceUrl, statements) {
  125358. if (!this._compilerConfig.useJit) {
  125359. return interpretStatements(statements, this._reflector);
  125360. }
  125361. else {
  125362. return jitStatements(sourceUrl, statements, this._reflector, this._compilerConfig.jitDevMode);
  125363. }
  125364. };
  125365. return JitCompiler;
  125366. }());
  125367. var CompiledTemplate = /** @class */ (function () {
  125368. function CompiledTemplate(isHost, compType, compMeta, ngModule, directives) {
  125369. this.isHost = isHost;
  125370. this.compType = compType;
  125371. this.compMeta = compMeta;
  125372. this.ngModule = ngModule;
  125373. this.directives = directives;
  125374. this._viewClass = /** @type {?} */ ((null));
  125375. this.isCompiled = false;
  125376. }
  125377. /**
  125378. * @param {?} viewClass
  125379. * @param {?} rendererType
  125380. * @return {?}
  125381. */
  125382. CompiledTemplate.prototype.compiled = /**
  125383. * @param {?} viewClass
  125384. * @param {?} rendererType
  125385. * @return {?}
  125386. */
  125387. function (viewClass, rendererType) {
  125388. this._viewClass = viewClass;
  125389. (/** @type {?} */ (this.compMeta.componentViewType)).setDelegate(viewClass);
  125390. for (var /** @type {?} */ prop in rendererType) {
  125391. (/** @type {?} */ (this.compMeta.rendererType))[prop] = rendererType[prop];
  125392. }
  125393. this.isCompiled = true;
  125394. };
  125395. return CompiledTemplate;
  125396. }());
  125397. /**
  125398. * @param {?} meta
  125399. * @return {?}
  125400. */
  125401. function assertComponent(meta) {
  125402. if (!meta.isComponent) {
  125403. throw new Error("Could not compile '" + identifierName(meta.type) + "' because it is not a component.");
  125404. }
  125405. }
  125406. /**
  125407. * @return {?}
  125408. */
  125409. function createOutputContext() {
  125410. var /** @type {?} */ importExpr$$1 = function (symbol) {
  125411. return importExpr({ name: identifierName(symbol), moduleName: null, runtime: symbol });
  125412. };
  125413. return { statements: [], genFilePath: '', importExpr: importExpr$$1 };
  125414. }
  125415. /**
  125416. * @fileoverview added by tsickle
  125417. * @suppress {checkTypes} checked by tsc
  125418. */
  125419. /**
  125420. * @license
  125421. * Copyright Google Inc. All Rights Reserved.
  125422. *
  125423. * Use of this source code is governed by an MIT-style license that can be
  125424. * found in the LICENSE file at https://angular.io/license
  125425. */
  125426. /**
  125427. * Provides access to reflection data about symbols that the compiler needs.
  125428. * @abstract
  125429. */
  125430. var CompileReflector = /** @class */ (function () {
  125431. function CompileReflector() {
  125432. }
  125433. return CompileReflector;
  125434. }());
  125435. /**
  125436. * @fileoverview added by tsickle
  125437. * @suppress {checkTypes} checked by tsc
  125438. */
  125439. /**
  125440. * @license
  125441. * Copyright Google Inc. All Rights Reserved.
  125442. *
  125443. * Use of this source code is governed by an MIT-style license that can be
  125444. * found in the LICENSE file at https://angular.io/license
  125445. */
  125446. /**
  125447. * Create a {\@link UrlResolver} with no package prefix.
  125448. * @return {?}
  125449. */
  125450. function createUrlResolverWithoutPackagePrefix() {
  125451. return new UrlResolver();
  125452. }
  125453. /**
  125454. * @return {?}
  125455. */
  125456. function createOfflineCompileUrlResolver() {
  125457. return new UrlResolver('.');
  125458. }
  125459. /**
  125460. * @record
  125461. */
  125462. var UrlResolver = /** @class */ (function () {
  125463. function UrlResolverImpl(_packagePrefix) {
  125464. if (_packagePrefix === void 0) { _packagePrefix = null; }
  125465. this._packagePrefix = _packagePrefix;
  125466. }
  125467. /**
  125468. * Resolves the `url` given the `baseUrl`:
  125469. * - when the `url` is null, the `baseUrl` is returned,
  125470. * - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of
  125471. * `baseUrl` and `url`,
  125472. * - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is
  125473. * returned as is (ignoring the `baseUrl`)
  125474. */
  125475. /**
  125476. * Resolves the `url` given the `baseUrl`:
  125477. * - when the `url` is null, the `baseUrl` is returned,
  125478. * - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of
  125479. * `baseUrl` and `url`,
  125480. * - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is
  125481. * returned as is (ignoring the `baseUrl`)
  125482. * @param {?} baseUrl
  125483. * @param {?} url
  125484. * @return {?}
  125485. */
  125486. UrlResolverImpl.prototype.resolve = /**
  125487. * Resolves the `url` given the `baseUrl`:
  125488. * - when the `url` is null, the `baseUrl` is returned,
  125489. * - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of
  125490. * `baseUrl` and `url`,
  125491. * - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is
  125492. * returned as is (ignoring the `baseUrl`)
  125493. * @param {?} baseUrl
  125494. * @param {?} url
  125495. * @return {?}
  125496. */
  125497. function (baseUrl, url) {
  125498. var /** @type {?} */ resolvedUrl = url;
  125499. if (baseUrl != null && baseUrl.length > 0) {
  125500. resolvedUrl = _resolveUrl(baseUrl, resolvedUrl);
  125501. }
  125502. var /** @type {?} */ resolvedParts = _split(resolvedUrl);
  125503. var /** @type {?} */ prefix = this._packagePrefix;
  125504. if (prefix != null && resolvedParts != null &&
  125505. resolvedParts[_ComponentIndex.Scheme] == 'package') {
  125506. var /** @type {?} */ path = resolvedParts[_ComponentIndex.Path];
  125507. prefix = prefix.replace(/\/+$/, '');
  125508. path = path.replace(/^\/+/, '');
  125509. return prefix + "/" + path;
  125510. }
  125511. return resolvedUrl;
  125512. };
  125513. return UrlResolverImpl;
  125514. }());
  125515. /**
  125516. * Extract the scheme of a URL.
  125517. * @param {?} url
  125518. * @return {?}
  125519. */
  125520. function getUrlScheme(url) {
  125521. var /** @type {?} */ match = _split(url);
  125522. return (match && match[_ComponentIndex.Scheme]) || '';
  125523. }
  125524. /**
  125525. * Builds a URI string from already-encoded parts.
  125526. *
  125527. * No encoding is performed. Any component may be omitted as either null or
  125528. * undefined.
  125529. *
  125530. * @param {?=} opt_scheme The scheme such as 'http'.
  125531. * @param {?=} opt_userInfo The user name before the '\@'.
  125532. * @param {?=} opt_domain The domain such as 'www.google.com', already
  125533. * URI-encoded.
  125534. * @param {?=} opt_port The port number.
  125535. * @param {?=} opt_path The path, already URI-encoded. If it is not
  125536. * empty, it must begin with a slash.
  125537. * @param {?=} opt_queryData The URI-encoded query data.
  125538. * @param {?=} opt_fragment The URI-encoded fragment identifier.
  125539. * @return {?} The fully combined URI.
  125540. */
  125541. function _buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {
  125542. var /** @type {?} */ out = [];
  125543. if (opt_scheme != null) {
  125544. out.push(opt_scheme + ':');
  125545. }
  125546. if (opt_domain != null) {
  125547. out.push('//');
  125548. if (opt_userInfo != null) {
  125549. out.push(opt_userInfo + '@');
  125550. }
  125551. out.push(opt_domain);
  125552. if (opt_port != null) {
  125553. out.push(':' + opt_port);
  125554. }
  125555. }
  125556. if (opt_path != null) {
  125557. out.push(opt_path);
  125558. }
  125559. if (opt_queryData != null) {
  125560. out.push('?' + opt_queryData);
  125561. }
  125562. if (opt_fragment != null) {
  125563. out.push('#' + opt_fragment);
  125564. }
  125565. return out.join('');
  125566. }
  125567. /**
  125568. * A regular expression for breaking a URI into its component parts.
  125569. *
  125570. * {\@link http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#RFC2234} says
  125571. * As the "first-match-wins" algorithm is identical to the "greedy"
  125572. * disambiguation method used by POSIX regular expressions, it is natural and
  125573. * commonplace to use a regular expression for parsing the potential five
  125574. * components of a URI reference.
  125575. *
  125576. * The following line is the regular expression for breaking-down a
  125577. * well-formed URI reference into its components.
  125578. *
  125579. * <pre>
  125580. * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
  125581. * 12 3 4 5 6 7 8 9
  125582. * </pre>
  125583. *
  125584. * The numbers in the second line above are only to assist readability; they
  125585. * indicate the reference points for each subexpression (i.e., each paired
  125586. * parenthesis). We refer to the value matched for subexpression <n> as $<n>.
  125587. * For example, matching the above expression to
  125588. * <pre>
  125589. * http://www.ics.uci.edu/pub/ietf/uri/#Related
  125590. * </pre>
  125591. * results in the following subexpression matches:
  125592. * <pre>
  125593. * $1 = http:
  125594. * $2 = http
  125595. * $3 = //www.ics.uci.edu
  125596. * $4 = www.ics.uci.edu
  125597. * $5 = /pub/ietf/uri/
  125598. * $6 = <undefined>
  125599. * $7 = <undefined>
  125600. * $8 = #Related
  125601. * $9 = Related
  125602. * </pre>
  125603. * where <undefined> indicates that the component is not present, as is the
  125604. * case for the query component in the above example. Therefore, we can
  125605. * determine the value of the five components as
  125606. * <pre>
  125607. * scheme = $2
  125608. * authority = $4
  125609. * path = $5
  125610. * query = $7
  125611. * fragment = $9
  125612. * </pre>
  125613. *
  125614. * The regular expression has been modified slightly to expose the
  125615. * userInfo, domain, and port separately from the authority.
  125616. * The modified version yields
  125617. * <pre>
  125618. * $1 = http scheme
  125619. * $2 = <undefined> userInfo -\
  125620. * $3 = www.ics.uci.edu domain | authority
  125621. * $4 = <undefined> port -/
  125622. * $5 = /pub/ietf/uri/ path
  125623. * $6 = <undefined> query without ?
  125624. * $7 = Related fragment without #
  125625. * </pre>
  125626. * \@internal
  125627. */
  125628. var _splitRe = new RegExp('^' +
  125629. '(?:' +
  125630. '([^:/?#.]+)' + // scheme - ignore special characters
  125631. ':)?' +
  125632. '(?://' +
  125633. '(?:([^/?#]*)@)?' + // userInfo
  125634. '([\\w\\d\\-\\u0100-\\uffff.%]*)' + // domain - restrict to letters,
  125635. '(?::([0-9]+))?' + // port
  125636. ')?' +
  125637. '([^?#]+)?' + // path
  125638. '(?:\\?([^#]*))?' + // query
  125639. '(?:#(.*))?' + // fragment
  125640. '$');
  125641. /** @enum {number} */
  125642. var _ComponentIndex = {
  125643. Scheme: 1,
  125644. UserInfo: 2,
  125645. Domain: 3,
  125646. Port: 4,
  125647. Path: 5,
  125648. QueryData: 6,
  125649. Fragment: 7,
  125650. };
  125651. _ComponentIndex[_ComponentIndex.Scheme] = "Scheme";
  125652. _ComponentIndex[_ComponentIndex.UserInfo] = "UserInfo";
  125653. _ComponentIndex[_ComponentIndex.Domain] = "Domain";
  125654. _ComponentIndex[_ComponentIndex.Port] = "Port";
  125655. _ComponentIndex[_ComponentIndex.Path] = "Path";
  125656. _ComponentIndex[_ComponentIndex.QueryData] = "QueryData";
  125657. _ComponentIndex[_ComponentIndex.Fragment] = "Fragment";
  125658. /**
  125659. * Splits a URI into its component parts.
  125660. *
  125661. * Each component can be accessed via the component indices; for example:
  125662. * <pre>
  125663. * goog.uri.utils.split(someStr)[goog.uri.utils.CompontentIndex.QUERY_DATA];
  125664. * </pre>
  125665. *
  125666. * @param {?} uri The URI string to examine.
  125667. * @return {?} Each component still URI-encoded.
  125668. * Each component that is present will contain the encoded value, whereas
  125669. * components that are not present will be undefined or empty, depending
  125670. * on the browser's regular expression implementation. Never null, since
  125671. * arbitrary strings may still look like path names.
  125672. */
  125673. function _split(uri) {
  125674. return /** @type {?} */ ((uri.match(_splitRe)));
  125675. }
  125676. /**
  125677. * Removes dot segments in given path component, as described in
  125678. * RFC 3986, section 5.2.4.
  125679. *
  125680. * @param {?} path A non-empty path component.
  125681. * @return {?} Path component with removed dot segments.
  125682. */
  125683. function _removeDotSegments(path) {
  125684. if (path == '/')
  125685. return '/';
  125686. var /** @type {?} */ leadingSlash = path[0] == '/' ? '/' : '';
  125687. var /** @type {?} */ trailingSlash = path[path.length - 1] === '/' ? '/' : '';
  125688. var /** @type {?} */ segments = path.split('/');
  125689. var /** @type {?} */ out = [];
  125690. var /** @type {?} */ up = 0;
  125691. for (var /** @type {?} */ pos = 0; pos < segments.length; pos++) {
  125692. var /** @type {?} */ segment = segments[pos];
  125693. switch (segment) {
  125694. case '':
  125695. case '.':
  125696. break;
  125697. case '..':
  125698. if (out.length > 0) {
  125699. out.pop();
  125700. }
  125701. else {
  125702. up++;
  125703. }
  125704. break;
  125705. default:
  125706. out.push(segment);
  125707. }
  125708. }
  125709. if (leadingSlash == '') {
  125710. while (up-- > 0) {
  125711. out.unshift('..');
  125712. }
  125713. if (out.length === 0)
  125714. out.push('.');
  125715. }
  125716. return leadingSlash + out.join('/') + trailingSlash;
  125717. }
  125718. /**
  125719. * Takes an array of the parts from split and canonicalizes the path part
  125720. * and then joins all the parts.
  125721. * @param {?} parts
  125722. * @return {?}
  125723. */
  125724. function _joinAndCanonicalizePath(parts) {
  125725. var /** @type {?} */ path = parts[_ComponentIndex.Path];
  125726. path = path == null ? '' : _removeDotSegments(path);
  125727. parts[_ComponentIndex.Path] = path;
  125728. return _buildFromEncodedParts(parts[_ComponentIndex.Scheme], parts[_ComponentIndex.UserInfo], parts[_ComponentIndex.Domain], parts[_ComponentIndex.Port], path, parts[_ComponentIndex.QueryData], parts[_ComponentIndex.Fragment]);
  125729. }
  125730. /**
  125731. * Resolves a URL.
  125732. * @param {?} base The URL acting as the base URL.
  125733. * @param {?} url
  125734. * @return {?}
  125735. */
  125736. function _resolveUrl(base, url) {
  125737. var /** @type {?} */ parts = _split(encodeURI(url));
  125738. var /** @type {?} */ baseParts = _split(base);
  125739. if (parts[_ComponentIndex.Scheme] != null) {
  125740. return _joinAndCanonicalizePath(parts);
  125741. }
  125742. else {
  125743. parts[_ComponentIndex.Scheme] = baseParts[_ComponentIndex.Scheme];
  125744. }
  125745. for (var /** @type {?} */ i = _ComponentIndex.Scheme; i <= _ComponentIndex.Port; i++) {
  125746. if (parts[i] == null) {
  125747. parts[i] = baseParts[i];
  125748. }
  125749. }
  125750. if (parts[_ComponentIndex.Path][0] == '/') {
  125751. return _joinAndCanonicalizePath(parts);
  125752. }
  125753. var /** @type {?} */ path = baseParts[_ComponentIndex.Path];
  125754. if (path == null)
  125755. path = '/';
  125756. var /** @type {?} */ index = path.lastIndexOf('/');
  125757. path = path.substring(0, index + 1) + parts[_ComponentIndex.Path];
  125758. parts[_ComponentIndex.Path] = path;
  125759. return _joinAndCanonicalizePath(parts);
  125760. }
  125761. /**
  125762. * @fileoverview added by tsickle
  125763. * @suppress {checkTypes} checked by tsc
  125764. */
  125765. /**
  125766. * @license
  125767. * Copyright Google Inc. All Rights Reserved.
  125768. *
  125769. * Use of this source code is governed by an MIT-style license that can be
  125770. * found in the LICENSE file at https://angular.io/license
  125771. */
  125772. /**
  125773. * An interface for retrieving documents by URL that the compiler uses
  125774. * to load templates.
  125775. */
  125776. var ResourceLoader = /** @class */ (function () {
  125777. function ResourceLoader() {
  125778. }
  125779. /**
  125780. * @param {?} url
  125781. * @return {?}
  125782. */
  125783. ResourceLoader.prototype.get = /**
  125784. * @param {?} url
  125785. * @return {?}
  125786. */
  125787. function (url) { return ''; };
  125788. return ResourceLoader;
  125789. }());
  125790. /**
  125791. * @fileoverview added by tsickle
  125792. * @suppress {checkTypes} checked by tsc
  125793. */
  125794. /**
  125795. * @license
  125796. * Copyright Google Inc. All Rights Reserved.
  125797. *
  125798. * Use of this source code is governed by an MIT-style license that can be
  125799. * found in the LICENSE file at https://angular.io/license
  125800. */
  125801. /**
  125802. * The host of the Extractor disconnects the implementation from TypeScript / other language
  125803. * services and from underlying file systems.
  125804. * @record
  125805. */
  125806. var Extractor = /** @class */ (function () {
  125807. function Extractor(host, staticSymbolResolver, messageBundle, metadataResolver) {
  125808. this.host = host;
  125809. this.staticSymbolResolver = staticSymbolResolver;
  125810. this.messageBundle = messageBundle;
  125811. this.metadataResolver = metadataResolver;
  125812. }
  125813. /**
  125814. * @param {?} rootFiles
  125815. * @return {?}
  125816. */
  125817. Extractor.prototype.extract = /**
  125818. * @param {?} rootFiles
  125819. * @return {?}
  125820. */
  125821. function (rootFiles) {
  125822. var _this = this;
  125823. var _a = analyzeAndValidateNgModules(rootFiles, this.host, this.staticSymbolResolver, this.metadataResolver), files = _a.files, ngModules = _a.ngModules;
  125824. return Promise
  125825. .all(ngModules.map(function (ngModule) {
  125826. return _this.metadataResolver.loadNgModuleDirectiveAndPipeMetadata(ngModule.type.reference, false);
  125827. }))
  125828. .then(function () {
  125829. var /** @type {?} */ errors = [];
  125830. files.forEach(function (file) {
  125831. var /** @type {?} */ compMetas = [];
  125832. file.directives.forEach(function (directiveType) {
  125833. var /** @type {?} */ dirMeta = _this.metadataResolver.getDirectiveMetadata(directiveType);
  125834. if (dirMeta && dirMeta.isComponent) {
  125835. compMetas.push(dirMeta);
  125836. }
  125837. });
  125838. compMetas.forEach(function (compMeta) {
  125839. var /** @type {?} */ html = /** @type {?} */ ((/** @type {?} */ ((compMeta.template)).template));
  125840. var /** @type {?} */ interpolationConfig = InterpolationConfig.fromArray(/** @type {?} */ ((compMeta.template)).interpolation);
  125841. errors.push.apply(errors, /** @type {?} */ ((_this.messageBundle.updateFromTemplate(html, file.fileName, interpolationConfig))));
  125842. });
  125843. });
  125844. if (errors.length) {
  125845. throw new Error(errors.map(function (e) { return e.toString(); }).join('\n'));
  125846. }
  125847. return _this.messageBundle;
  125848. });
  125849. };
  125850. /**
  125851. * @param {?} host
  125852. * @param {?} locale
  125853. * @return {?}
  125854. */
  125855. Extractor.create = /**
  125856. * @param {?} host
  125857. * @param {?} locale
  125858. * @return {?}
  125859. */
  125860. function (host, locale) {
  125861. var /** @type {?} */ htmlParser = new HtmlParser();
  125862. var /** @type {?} */ urlResolver = createAotUrlResolver(host);
  125863. var /** @type {?} */ symbolCache = new StaticSymbolCache();
  125864. var /** @type {?} */ summaryResolver = new AotSummaryResolver(host, symbolCache);
  125865. var /** @type {?} */ staticSymbolResolver = new StaticSymbolResolver(host, symbolCache, summaryResolver);
  125866. var /** @type {?} */ staticReflector = new StaticReflector(summaryResolver, staticSymbolResolver);
  125867. var /** @type {?} */ config = new CompilerConfig({ defaultEncapsulation: ViewEncapsulation.Emulated, useJit: false });
  125868. var /** @type {?} */ normalizer = new DirectiveNormalizer({ get: function (url) { return host.loadResource(url); } }, urlResolver, htmlParser, config);
  125869. var /** @type {?} */ elementSchemaRegistry = new DomElementSchemaRegistry();
  125870. var /** @type {?} */ resolver = new CompileMetadataResolver(config, htmlParser, new NgModuleResolver(staticReflector), new DirectiveResolver(staticReflector), new PipeResolver(staticReflector), summaryResolver, elementSchemaRegistry, normalizer, console, symbolCache, staticReflector);
  125871. // TODO(vicb): implicit tags & attributes
  125872. var /** @type {?} */ messageBundle = new MessageBundle(htmlParser, [], {}, locale);
  125873. var /** @type {?} */ extractor = new Extractor(host, staticSymbolResolver, messageBundle, resolver);
  125874. return { extractor: extractor, staticReflector: staticReflector };
  125875. };
  125876. return Extractor;
  125877. }());
  125878. /**
  125879. * @fileoverview added by tsickle
  125880. * @suppress {checkTypes} checked by tsc
  125881. */
  125882. /**
  125883. * @license
  125884. * Copyright Google Inc. All Rights Reserved.
  125885. *
  125886. * Use of this source code is governed by an MIT-style license that can be
  125887. * found in the LICENSE file at https://angular.io/license
  125888. */
  125889. /**
  125890. * @fileoverview added by tsickle
  125891. * @suppress {checkTypes} checked by tsc
  125892. */
  125893. /**
  125894. * @license
  125895. * Copyright Google Inc. All Rights Reserved.
  125896. *
  125897. * Use of this source code is governed by an MIT-style license that can be
  125898. * found in the LICENSE file at https://angular.io/license
  125899. */
  125900. // This file only reexports content of the `src` folder. Keep it that way.
  125901. /**
  125902. * @fileoverview added by tsickle
  125903. * @suppress {checkTypes} checked by tsc
  125904. */
  125905. /**
  125906. * @license
  125907. * Copyright Google Inc. All Rights Reserved.
  125908. *
  125909. * Use of this source code is governed by an MIT-style license that can be
  125910. * found in the LICENSE file at https://angular.io/license
  125911. */
  125912. /**
  125913. * @module
  125914. * @description
  125915. * Entry point for all public APIs of this package.
  125916. */
  125917. // This file only reexports content of the `src` folder. Keep it that way.
  125918. /**
  125919. * @fileoverview added by tsickle
  125920. * @suppress {checkTypes} checked by tsc
  125921. */
  125922. /**
  125923. * @license
  125924. * Copyright Google Inc. All Rights Reserved.
  125925. *
  125926. * Use of this source code is governed by an MIT-style license that can be
  125927. * found in the LICENSE file at https://angular.io/license
  125928. */
  125929. // This file is not used to build this module. It is only used during editing
  125930. // by the TypeScript language service and during build for verification. `ngc`
  125931. // replaces this file with production index.ts when it rewrites private symbol
  125932. // names.
  125933. //# sourceMappingURL=compiler.js.map
  125934. /***/ }),
  125935. /* 353 */
  125936. /***/ (function(module, exports, __webpack_require__) {
  125937. "use strict";
  125938. var Subscriber_1 = __webpack_require__(4);
  125939. var rxSubscriber_1 = __webpack_require__(63);
  125940. var Observer_1 = __webpack_require__(156);
  125941. function toSubscriber(nextOrObserver, error, complete) {
  125942. if (nextOrObserver) {
  125943. if (nextOrObserver instanceof Subscriber_1.Subscriber) {
  125944. return nextOrObserver;
  125945. }
  125946. if (nextOrObserver[rxSubscriber_1.rxSubscriber]) {
  125947. return nextOrObserver[rxSubscriber_1.rxSubscriber]();
  125948. }
  125949. }
  125950. if (!nextOrObserver && !error && !complete) {
  125951. return new Subscriber_1.Subscriber(Observer_1.empty);
  125952. }
  125953. return new Subscriber_1.Subscriber(nextOrObserver, error, complete);
  125954. }
  125955. exports.toSubscriber = toSubscriber;
  125956. //# sourceMappingURL=toSubscriber.js.map
  125957. /***/ }),
  125958. /* 354 */
  125959. /***/ (function(module, exports, __webpack_require__) {
  125960. "use strict";
  125961. var __extends = (this && this.__extends) || function (d, b) {
  125962. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  125963. function __() { this.constructor = d; }
  125964. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  125965. };
  125966. var Subscriber_1 = __webpack_require__(4);
  125967. /**
  125968. * We need this JSDoc comment for affecting ESDoc.
  125969. * @ignore
  125970. * @extends {Ignored}
  125971. */
  125972. var InnerSubscriber = (function (_super) {
  125973. __extends(InnerSubscriber, _super);
  125974. function InnerSubscriber(parent, outerValue, outerIndex) {
  125975. _super.call(this);
  125976. this.parent = parent;
  125977. this.outerValue = outerValue;
  125978. this.outerIndex = outerIndex;
  125979. this.index = 0;
  125980. }
  125981. InnerSubscriber.prototype._next = function (value) {
  125982. this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
  125983. };
  125984. InnerSubscriber.prototype._error = function (error) {
  125985. this.parent.notifyError(error, this);
  125986. this.unsubscribe();
  125987. };
  125988. InnerSubscriber.prototype._complete = function () {
  125989. this.parent.notifyComplete(this);
  125990. this.unsubscribe();
  125991. };
  125992. return InnerSubscriber;
  125993. }(Subscriber_1.Subscriber));
  125994. exports.InnerSubscriber = InnerSubscriber;
  125995. //# sourceMappingURL=InnerSubscriber.js.map
  125996. /***/ }),
  125997. /* 355 */,
  125998. /* 356 */
  125999. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126000. "use strict";
  126001. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QueryParams; });
  126002. /**
  126003. * @hidden
  126004. */
  126005. var QueryParams = (function () {
  126006. function QueryParams() {
  126007. this.data = {};
  126008. }
  126009. QueryParams.prototype.parseUrl = function (url) {
  126010. if (url) {
  126011. var startIndex = url.indexOf('?');
  126012. if (startIndex > -1) {
  126013. var queries = url.slice(startIndex + 1).split('&');
  126014. for (var i = 0; i < queries.length; i++) {
  126015. if (queries[i].indexOf('=') > 0) {
  126016. var split = queries[i].split('=');
  126017. if (split.length > 1) {
  126018. this.data[split[0].toLowerCase()] = split[1].split('#')[0];
  126019. }
  126020. }
  126021. }
  126022. }
  126023. }
  126024. };
  126025. QueryParams.prototype.get = function (key) {
  126026. return this.data[key.toLowerCase()];
  126027. };
  126028. return QueryParams;
  126029. }());
  126030. //# sourceMappingURL=query-params.js.map
  126031. /***/ }),
  126032. /* 357 */
  126033. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126034. "use strict";
  126035. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IOSTransition; });
  126036. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  126037. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  126038. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__page_transition__ = __webpack_require__(43);
  126039. var __extends = (this && this.__extends) || (function () {
  126040. var extendStatics = Object.setPrototypeOf ||
  126041. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  126042. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  126043. return function (d, b) {
  126044. extendStatics(d, b);
  126045. function __() { this.constructor = d; }
  126046. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126047. };
  126048. })();
  126049. var DURATION = 500;
  126050. var EASING = 'cubic-bezier(0.36,0.66,0.04,1)';
  126051. var OPACITY = 'opacity';
  126052. var TRANSFORM = 'transform';
  126053. var TRANSLATEX = 'translateX';
  126054. var CENTER = '0%';
  126055. var OFF_OPACITY = 0.8;
  126056. var SHOW_BACK_BTN_CSS = 'show-back-button';
  126057. var IOSTransition = (function (_super) {
  126058. __extends(IOSTransition, _super);
  126059. function IOSTransition() {
  126060. return _super !== null && _super.apply(this, arguments) || this;
  126061. }
  126062. IOSTransition.prototype.init = function () {
  126063. _super.prototype.init.call(this);
  126064. var plt = this.plt;
  126065. var OFF_RIGHT = plt.isRTL ? '-99.5%' : '99.5%';
  126066. var OFF_LEFT = plt.isRTL ? '33%' : '-33%';
  126067. var enteringView = this.enteringView;
  126068. var leavingView = this.leavingView;
  126069. var opts = this.opts;
  126070. this.duration(Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.duration) ? opts.duration : DURATION);
  126071. this.easing(Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.easing) ? opts.easing : EASING);
  126072. var backDirection = (opts.direction === 'back');
  126073. var enteringHasNavbar = (enteringView && enteringView.hasNavbar());
  126074. var leavingHasNavbar = (leavingView && leavingView.hasNavbar());
  126075. if (enteringView) {
  126076. // get the native element for the entering page
  126077. var enteringPageEle = enteringView.pageRef().nativeElement;
  126078. // entering content
  126079. var enteringContent = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringView.contentRef());
  126080. enteringContent.element(enteringPageEle.querySelectorAll('ion-header > *:not(ion-navbar),ion-footer > *'));
  126081. this.add(enteringContent);
  126082. if (backDirection) {
  126083. // entering content, back direction
  126084. enteringContent
  126085. .fromTo(TRANSLATEX, OFF_LEFT, CENTER, true)
  126086. .fromTo(OPACITY, OFF_OPACITY, 1, true);
  126087. }
  126088. else {
  126089. // entering content, forward direction
  126090. enteringContent
  126091. .beforeClearStyles([OPACITY])
  126092. .fromTo(TRANSLATEX, OFF_RIGHT, CENTER, true);
  126093. }
  126094. if (enteringHasNavbar) {
  126095. // entering page has a navbar
  126096. var enteringNavbarEle = enteringPageEle.querySelector('ion-navbar');
  126097. var enteringNavBar = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle);
  126098. this.add(enteringNavBar);
  126099. var enteringTitle = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelector('ion-title'));
  126100. var enteringNavbarItems = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelectorAll('ion-buttons,[menuToggle]'));
  126101. var enteringNavbarBg = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelector('.toolbar-background'));
  126102. var enteringBackButton = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelector('.back-button'));
  126103. enteringNavBar
  126104. .add(enteringTitle)
  126105. .add(enteringNavbarItems)
  126106. .add(enteringNavbarBg)
  126107. .add(enteringBackButton);
  126108. enteringTitle.fromTo(OPACITY, 0.01, 1, true);
  126109. enteringNavbarItems.fromTo(OPACITY, 0.01, 1, true);
  126110. // set properties depending on direction
  126111. if (backDirection) {
  126112. // entering navbar, back direction
  126113. enteringTitle.fromTo(TRANSLATEX, OFF_LEFT, CENTER, true);
  126114. if (enteringView.enableBack()) {
  126115. // back direction, entering page has a back button
  126116. enteringBackButton
  126117. .beforeAddClass(SHOW_BACK_BTN_CSS)
  126118. .fromTo(OPACITY, 0.01, 1, true);
  126119. }
  126120. }
  126121. else {
  126122. // entering navbar, forward direction
  126123. enteringTitle.fromTo(TRANSLATEX, OFF_RIGHT, CENTER, true);
  126124. enteringNavbarBg
  126125. .beforeClearStyles([OPACITY])
  126126. .fromTo(TRANSLATEX, OFF_RIGHT, CENTER, true);
  126127. if (enteringView.enableBack()) {
  126128. // forward direction, entering page has a back button
  126129. enteringBackButton
  126130. .beforeAddClass(SHOW_BACK_BTN_CSS)
  126131. .fromTo(OPACITY, 0.01, 1, true);
  126132. var enteringBackBtnText = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelector('.back-button-text'));
  126133. enteringBackBtnText.fromTo(TRANSLATEX, (plt.isRTL ? '-100px' : '100px'), '0px');
  126134. enteringNavBar.add(enteringBackBtnText);
  126135. }
  126136. else {
  126137. enteringBackButton.beforeRemoveClass(SHOW_BACK_BTN_CSS);
  126138. }
  126139. }
  126140. }
  126141. }
  126142. // setup leaving view
  126143. if (leavingView && leavingView.pageRef()) {
  126144. // leaving content
  126145. var leavingPageEle = leavingView.pageRef().nativeElement;
  126146. var leavingContent = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingView.contentRef());
  126147. leavingContent.element(leavingPageEle.querySelectorAll('ion-header > *:not(ion-navbar),ion-footer > *'));
  126148. this.add(leavingContent);
  126149. if (backDirection) {
  126150. // leaving content, back direction
  126151. leavingContent
  126152. .beforeClearStyles([OPACITY])
  126153. .fromTo(TRANSLATEX, CENTER, (plt.isRTL ? '-100%' : '100%'));
  126154. }
  126155. else {
  126156. // leaving content, forward direction
  126157. leavingContent
  126158. .fromTo(TRANSLATEX, CENTER, OFF_LEFT)
  126159. .fromTo(OPACITY, 1, OFF_OPACITY)
  126160. .afterClearStyles([TRANSFORM, OPACITY]);
  126161. }
  126162. if (leavingHasNavbar) {
  126163. // leaving page has a navbar
  126164. var leavingNavbarEle = leavingPageEle.querySelector('ion-navbar');
  126165. var leavingNavBar = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingNavbarEle);
  126166. var leavingTitle = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingNavbarEle.querySelector('ion-title'));
  126167. var leavingNavbarItems = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingNavbarEle.querySelectorAll('ion-buttons,[menuToggle]'));
  126168. var leavingNavbarBg = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingNavbarEle.querySelector('.toolbar-background'));
  126169. var leavingBackButton = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingNavbarEle.querySelector('.back-button'));
  126170. leavingNavBar
  126171. .add(leavingTitle)
  126172. .add(leavingNavbarItems)
  126173. .add(leavingBackButton)
  126174. .add(leavingNavbarBg);
  126175. this.add(leavingNavBar);
  126176. // fade out leaving navbar items
  126177. leavingBackButton.fromTo(OPACITY, 0.99, 0);
  126178. leavingTitle.fromTo(OPACITY, 0.99, 0);
  126179. leavingNavbarItems.fromTo(OPACITY, 0.99, 0);
  126180. if (backDirection) {
  126181. // leaving navbar, back direction
  126182. leavingTitle.fromTo(TRANSLATEX, CENTER, (plt.isRTL ? '-100%' : '100%'));
  126183. // leaving navbar, back direction, and there's no entering navbar
  126184. // should just slide out, no fading out
  126185. leavingNavbarBg
  126186. .beforeClearStyles([OPACITY])
  126187. .fromTo(TRANSLATEX, CENTER, (plt.isRTL ? '-100%' : '100%'));
  126188. var leavingBackBtnText = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingNavbarEle.querySelector('.back-button-text'));
  126189. leavingBackBtnText.fromTo(TRANSLATEX, CENTER, (plt.isRTL ? -300 : 300) + 'px');
  126190. leavingNavBar.add(leavingBackBtnText);
  126191. }
  126192. else {
  126193. // leaving navbar, forward direction
  126194. leavingTitle
  126195. .fromTo(TRANSLATEX, CENTER, OFF_LEFT)
  126196. .afterClearStyles([TRANSFORM]);
  126197. leavingBackButton.afterClearStyles([OPACITY]);
  126198. leavingTitle.afterClearStyles([OPACITY]);
  126199. leavingNavbarItems.afterClearStyles([OPACITY]);
  126200. }
  126201. }
  126202. }
  126203. };
  126204. return IOSTransition;
  126205. }(__WEBPACK_IMPORTED_MODULE_2__page_transition__["a" /* PageTransition */]));
  126206. //# sourceMappingURL=transition-ios.js.map
  126207. /***/ }),
  126208. /* 358 */
  126209. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126210. "use strict";
  126211. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MDTransition; });
  126212. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  126213. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  126214. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__page_transition__ = __webpack_require__(43);
  126215. var __extends = (this && this.__extends) || (function () {
  126216. var extendStatics = Object.setPrototypeOf ||
  126217. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  126218. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  126219. return function (d, b) {
  126220. extendStatics(d, b);
  126221. function __() { this.constructor = d; }
  126222. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126223. };
  126224. })();
  126225. var TRANSLATEY = 'translateY';
  126226. var OFF_BOTTOM = '40px';
  126227. var CENTER = '0px';
  126228. var SHOW_BACK_BTN_CSS = 'show-back-button';
  126229. var MDTransition = (function (_super) {
  126230. __extends(MDTransition, _super);
  126231. function MDTransition() {
  126232. return _super !== null && _super.apply(this, arguments) || this;
  126233. }
  126234. MDTransition.prototype.init = function () {
  126235. _super.prototype.init.call(this);
  126236. var plt = this.plt;
  126237. var enteringView = this.enteringView;
  126238. var leavingView = this.leavingView;
  126239. var opts = this.opts;
  126240. // what direction is the transition going
  126241. var backDirection = (opts.direction === 'back');
  126242. if (enteringView) {
  126243. if (backDirection) {
  126244. this.duration(Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.duration) ? opts.duration : 200).easing('cubic-bezier(0.47,0,0.745,0.715)');
  126245. }
  126246. else {
  126247. this.duration(Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.duration) ? opts.duration : 280).easing('cubic-bezier(0.36,0.66,0.04,1)');
  126248. this.enteringPage
  126249. .fromTo(TRANSLATEY, OFF_BOTTOM, CENTER, true)
  126250. .fromTo('opacity', 0.01, 1, true);
  126251. }
  126252. if (enteringView.hasNavbar()) {
  126253. var enteringPageEle = enteringView.pageRef().nativeElement;
  126254. var enteringNavbarEle = enteringPageEle.querySelector('ion-navbar');
  126255. var enteringNavBar = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle);
  126256. this.add(enteringNavBar);
  126257. var enteringBackButton = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelector('.back-button'));
  126258. this.add(enteringBackButton);
  126259. if (enteringView.enableBack()) {
  126260. enteringBackButton.beforeAddClass(SHOW_BACK_BTN_CSS);
  126261. }
  126262. else {
  126263. enteringBackButton.beforeRemoveClass(SHOW_BACK_BTN_CSS);
  126264. }
  126265. }
  126266. }
  126267. // setup leaving view
  126268. if (leavingView && backDirection) {
  126269. // leaving content
  126270. this.duration(opts.duration || 200).easing('cubic-bezier(0.47,0,0.745,0.715)');
  126271. var leavingPage = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingView.pageRef());
  126272. this.add(leavingPage.fromTo(TRANSLATEY, CENTER, OFF_BOTTOM).fromTo('opacity', 1, 0));
  126273. }
  126274. };
  126275. return MDTransition;
  126276. }(__WEBPACK_IMPORTED_MODULE_2__page_transition__["a" /* PageTransition */]));
  126277. //# sourceMappingURL=transition-md.js.map
  126278. /***/ }),
  126279. /* 359 */
  126280. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126281. "use strict";
  126282. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return WPTransition; });
  126283. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  126284. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_util__ = __webpack_require__(3);
  126285. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__page_transition__ = __webpack_require__(43);
  126286. var __extends = (this && this.__extends) || (function () {
  126287. var extendStatics = Object.setPrototypeOf ||
  126288. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  126289. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  126290. return function (d, b) {
  126291. extendStatics(d, b);
  126292. function __() { this.constructor = d; }
  126293. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126294. };
  126295. })();
  126296. var SHOW_BACK_BTN_CSS = 'show-back-button';
  126297. var SCALE_SMALL = .95;
  126298. var WPTransition = (function (_super) {
  126299. __extends(WPTransition, _super);
  126300. function WPTransition() {
  126301. return _super !== null && _super.apply(this, arguments) || this;
  126302. }
  126303. WPTransition.prototype.init = function () {
  126304. _super.prototype.init.call(this);
  126305. var plt = this.plt;
  126306. var enteringView = this.enteringView;
  126307. var leavingView = this.leavingView;
  126308. var opts = this.opts;
  126309. // what direction is the transition going
  126310. var backDirection = (opts.direction === 'back');
  126311. if (enteringView) {
  126312. if (backDirection) {
  126313. this.duration(Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.duration) ? opts.duration : 120).easing('cubic-bezier(0.47,0,0.745,0.715)');
  126314. this.enteringPage.beforeClearStyles(['scale']);
  126315. }
  126316. else {
  126317. this.duration(Object(__WEBPACK_IMPORTED_MODULE_1__util_util__["l" /* isPresent */])(opts.duration) ? opts.duration : 280).easing('cubic-bezier(0,0,0.05,1)');
  126318. this.enteringPage
  126319. .fromTo('scale', SCALE_SMALL, 1, true)
  126320. .fromTo('opacity', 0.01, 1, true);
  126321. }
  126322. if (enteringView.hasNavbar()) {
  126323. var enteringPageEle = enteringView.pageRef().nativeElement;
  126324. var enteringNavbarEle = enteringPageEle.querySelector('ion-navbar');
  126325. var enteringNavBar = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle);
  126326. this.add(enteringNavBar);
  126327. var enteringBackButton = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, enteringNavbarEle.querySelector('.back-button'));
  126328. this.add(enteringBackButton);
  126329. if (enteringView.enableBack()) {
  126330. enteringBackButton.beforeAddClass(SHOW_BACK_BTN_CSS);
  126331. }
  126332. else {
  126333. enteringBackButton.beforeRemoveClass(SHOW_BACK_BTN_CSS);
  126334. }
  126335. }
  126336. }
  126337. // setup leaving view
  126338. if (leavingView && backDirection) {
  126339. // leaving content
  126340. this.duration(opts.duration || 200).easing('cubic-bezier(0.47,0,0.745,0.715)');
  126341. var leavingPage = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, leavingView.pageRef());
  126342. this.add(leavingPage.fromTo('scale', 1, SCALE_SMALL).fromTo('opacity', 0.99, 0));
  126343. }
  126344. };
  126345. return WPTransition;
  126346. }(__WEBPACK_IMPORTED_MODULE_2__page_transition__["a" /* PageTransition */]));
  126347. //# sourceMappingURL=transition-wp.js.map
  126348. /***/ }),
  126349. /* 360 */
  126350. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126351. "use strict";
  126352. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SwipeBackGesture; });
  126353. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  126354. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__gestures_gesture_controller__ = __webpack_require__(13);
  126355. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gestures_slide_edge_gesture__ = __webpack_require__(92);
  126356. var __extends = (this && this.__extends) || (function () {
  126357. var extendStatics = Object.setPrototypeOf ||
  126358. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  126359. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  126360. return function (d, b) {
  126361. extendStatics(d, b);
  126362. function __() { this.constructor = d; }
  126363. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126364. };
  126365. })();
  126366. /**
  126367. * @hidden
  126368. */
  126369. var SwipeBackGesture = (function (_super) {
  126370. __extends(SwipeBackGesture, _super);
  126371. function SwipeBackGesture(plt, _nav, gestureCtlr, domCtrl) {
  126372. var _this = _super.call(this, plt, plt.doc().body, {
  126373. direction: 'x',
  126374. edge: 'start',
  126375. maxEdgeStart: 75,
  126376. threshold: 5,
  126377. zone: false,
  126378. domController: domCtrl,
  126379. gesture: gestureCtlr.createGesture({
  126380. name: __WEBPACK_IMPORTED_MODULE_1__gestures_gesture_controller__["b" /* GESTURE_GO_BACK_SWIPE */],
  126381. priority: __WEBPACK_IMPORTED_MODULE_1__gestures_gesture_controller__["e" /* GESTURE_PRIORITY_GO_BACK_SWIPE */],
  126382. disableScroll: true
  126383. })
  126384. }) || this;
  126385. _this._nav = _nav;
  126386. return _this;
  126387. }
  126388. SwipeBackGesture.prototype.canStart = function (ev) {
  126389. // the gesture swipe angle must be mainly horizontal and the
  126390. // gesture distance would be relatively short for a swipe back
  126391. // and swipe back must be possible on this nav controller
  126392. return (this._nav.canSwipeBack() &&
  126393. _super.prototype.canStart.call(this, ev));
  126394. };
  126395. SwipeBackGesture.prototype.onSlideBeforeStart = function (_ev) {
  126396. this._nav.swipeBackStart();
  126397. };
  126398. SwipeBackGesture.prototype.onSlide = function (slide, ev) {
  126399. ev.preventDefault();
  126400. ev.stopPropagation();
  126401. var stepValue = (slide.distance / slide.max);
  126402. this._nav.swipeBackProgress(stepValue);
  126403. };
  126404. SwipeBackGesture.prototype.onSlideEnd = function (slide, _ev) {
  126405. var velocity = slide.velocity;
  126406. var currentStepValue = (slide.distance / slide.max);
  126407. var isResetDirecction = velocity < 0;
  126408. var isMovingFast = Math.abs(slide.velocity) > 0.4;
  126409. var isInResetZone = Math.abs(slide.delta) < Math.abs(slide.max) * 0.5;
  126410. var shouldComplete = !Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["t" /* swipeShouldReset */])(isResetDirecction, isMovingFast, isInResetZone);
  126411. this._nav.swipeBackEnd(shouldComplete, currentStepValue, velocity);
  126412. };
  126413. return SwipeBackGesture;
  126414. }(__WEBPACK_IMPORTED_MODULE_2__gestures_slide_edge_gesture__["a" /* SlideEdgeGesture */]));
  126415. //# sourceMappingURL=swipe-back.js.map
  126416. /***/ }),
  126417. /* 361 */
  126418. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126419. "use strict";
  126420. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PanRecognizer; });
  126421. var PanRecognizer = (function () {
  126422. function PanRecognizer(direction, threshold, maxAngle) {
  126423. this.direction = direction;
  126424. this.dirty = false;
  126425. this._angle = 0;
  126426. this._isPan = 0;
  126427. var radians = maxAngle * (Math.PI / 180);
  126428. this.maxCosine = Math.cos(radians);
  126429. this.threshold = threshold * threshold;
  126430. }
  126431. PanRecognizer.prototype.start = function (coord) {
  126432. this.startCoord = coord;
  126433. this._angle = 0;
  126434. this._isPan = 0;
  126435. this.dirty = true;
  126436. };
  126437. PanRecognizer.prototype.detect = function (coord) {
  126438. if (!this.dirty) {
  126439. return false;
  126440. }
  126441. var deltaX = (coord.x - this.startCoord.x);
  126442. var deltaY = (coord.y - this.startCoord.y);
  126443. var distance = deltaX * deltaX + deltaY * deltaY;
  126444. if (distance >= this.threshold) {
  126445. var angle = Math.atan2(deltaY, deltaX);
  126446. var cosine = (this.direction === 'y')
  126447. ? Math.sin(angle)
  126448. : Math.cos(angle);
  126449. this._angle = angle;
  126450. if (cosine > this.maxCosine) {
  126451. this._isPan = 1;
  126452. }
  126453. else if (cosine < -this.maxCosine) {
  126454. this._isPan = -1;
  126455. }
  126456. else {
  126457. this._isPan = 0;
  126458. }
  126459. this.dirty = false;
  126460. return true;
  126461. }
  126462. return false;
  126463. };
  126464. PanRecognizer.prototype.angle = function () {
  126465. return this._angle;
  126466. };
  126467. PanRecognizer.prototype.pan = function () {
  126468. return this._isPan;
  126469. };
  126470. return PanRecognizer;
  126471. }());
  126472. //# sourceMappingURL=recognizers.js.map
  126473. /***/ }),
  126474. /* 362 */
  126475. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126476. "use strict";
  126477. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ActionSheetSlideIn; });
  126478. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ActionSheetSlideOut; });
  126479. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionSheetMdSlideIn; });
  126480. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ActionSheetMdSlideOut; });
  126481. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return ActionSheetWpSlideIn; });
  126482. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return ActionSheetWpSlideOut; });
  126483. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  126484. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_transition__ = __webpack_require__(42);
  126485. var __extends = (this && this.__extends) || (function () {
  126486. var extendStatics = Object.setPrototypeOf ||
  126487. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  126488. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  126489. return function (d, b) {
  126490. extendStatics(d, b);
  126491. function __() { this.constructor = d; }
  126492. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126493. };
  126494. })();
  126495. var ActionSheetSlideIn = (function (_super) {
  126496. __extends(ActionSheetSlideIn, _super);
  126497. function ActionSheetSlideIn() {
  126498. return _super !== null && _super.apply(this, arguments) || this;
  126499. }
  126500. ActionSheetSlideIn.prototype.init = function () {
  126501. var ele = this.enteringView.pageRef().nativeElement;
  126502. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126503. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.action-sheet-wrapper'));
  126504. backdrop.fromTo('opacity', 0.01, 0.4);
  126505. wrapper.fromTo('translateY', '100%', '0%');
  126506. this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add(backdrop).add(wrapper);
  126507. };
  126508. return ActionSheetSlideIn;
  126509. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126510. var ActionSheetSlideOut = (function (_super) {
  126511. __extends(ActionSheetSlideOut, _super);
  126512. function ActionSheetSlideOut() {
  126513. return _super !== null && _super.apply(this, arguments) || this;
  126514. }
  126515. ActionSheetSlideOut.prototype.init = function () {
  126516. var ele = this.leavingView.pageRef().nativeElement;
  126517. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126518. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.action-sheet-wrapper'));
  126519. backdrop.fromTo('opacity', 0.4, 0);
  126520. wrapper.fromTo('translateY', '0%', '100%');
  126521. this.easing('cubic-bezier(.36,.66,.04,1)').duration(300).add(backdrop).add(wrapper);
  126522. };
  126523. return ActionSheetSlideOut;
  126524. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126525. var ActionSheetMdSlideIn = (function (_super) {
  126526. __extends(ActionSheetMdSlideIn, _super);
  126527. function ActionSheetMdSlideIn() {
  126528. return _super !== null && _super.apply(this, arguments) || this;
  126529. }
  126530. ActionSheetMdSlideIn.prototype.init = function () {
  126531. var ele = this.enteringView.pageRef().nativeElement;
  126532. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126533. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.action-sheet-wrapper'));
  126534. backdrop.fromTo('opacity', 0.01, 0.26);
  126535. wrapper.fromTo('translateY', '100%', '0%');
  126536. this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add(backdrop).add(wrapper);
  126537. };
  126538. return ActionSheetMdSlideIn;
  126539. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126540. var ActionSheetMdSlideOut = (function (_super) {
  126541. __extends(ActionSheetMdSlideOut, _super);
  126542. function ActionSheetMdSlideOut() {
  126543. return _super !== null && _super.apply(this, arguments) || this;
  126544. }
  126545. ActionSheetMdSlideOut.prototype.init = function () {
  126546. var ele = this.leavingView.pageRef().nativeElement;
  126547. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126548. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.action-sheet-wrapper'));
  126549. backdrop.fromTo('opacity', 0.26, 0);
  126550. wrapper.fromTo('translateY', '0%', '100%');
  126551. this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add(backdrop).add(wrapper);
  126552. };
  126553. return ActionSheetMdSlideOut;
  126554. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126555. var ActionSheetWpSlideIn = (function (_super) {
  126556. __extends(ActionSheetWpSlideIn, _super);
  126557. function ActionSheetWpSlideIn() {
  126558. return _super !== null && _super.apply(this, arguments) || this;
  126559. }
  126560. ActionSheetWpSlideIn.prototype.init = function () {
  126561. var ele = this.enteringView.pageRef().nativeElement;
  126562. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126563. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.action-sheet-wrapper'));
  126564. backdrop.fromTo('opacity', 0.01, 0.16);
  126565. wrapper.fromTo('translateY', '100%', '0%');
  126566. this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add(backdrop).add(wrapper);
  126567. };
  126568. return ActionSheetWpSlideIn;
  126569. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126570. var ActionSheetWpSlideOut = (function (_super) {
  126571. __extends(ActionSheetWpSlideOut, _super);
  126572. function ActionSheetWpSlideOut() {
  126573. return _super !== null && _super.apply(this, arguments) || this;
  126574. }
  126575. ActionSheetWpSlideOut.prototype.init = function () {
  126576. var ele = this.leavingView.pageRef().nativeElement;
  126577. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126578. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.action-sheet-wrapper'));
  126579. backdrop.fromTo('opacity', 0.1, 0);
  126580. wrapper.fromTo('translateY', '0%', '100%');
  126581. this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add(backdrop).add(wrapper);
  126582. };
  126583. return ActionSheetWpSlideOut;
  126584. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126585. //# sourceMappingURL=action-sheet-transitions.js.map
  126586. /***/ }),
  126587. /* 363 */
  126588. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126589. "use strict";
  126590. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return AlertPopIn; });
  126591. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return AlertPopOut; });
  126592. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AlertMdPopIn; });
  126593. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AlertMdPopOut; });
  126594. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return AlertWpPopIn; });
  126595. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return AlertWpPopOut; });
  126596. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  126597. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_transition__ = __webpack_require__(42);
  126598. var __extends = (this && this.__extends) || (function () {
  126599. var extendStatics = Object.setPrototypeOf ||
  126600. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  126601. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  126602. return function (d, b) {
  126603. extendStatics(d, b);
  126604. function __() { this.constructor = d; }
  126605. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126606. };
  126607. })();
  126608. /**
  126609. * Animations for alerts
  126610. */
  126611. var AlertPopIn = (function (_super) {
  126612. __extends(AlertPopIn, _super);
  126613. function AlertPopIn() {
  126614. return _super !== null && _super.apply(this, arguments) || this;
  126615. }
  126616. AlertPopIn.prototype.init = function () {
  126617. var ele = this.enteringView.pageRef().nativeElement;
  126618. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126619. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.alert-wrapper'));
  126620. wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
  126621. backdrop.fromTo('opacity', 0.01, 0.3);
  126622. this
  126623. .easing('ease-in-out')
  126624. .duration(200)
  126625. .add(backdrop)
  126626. .add(wrapper);
  126627. };
  126628. return AlertPopIn;
  126629. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126630. var AlertPopOut = (function (_super) {
  126631. __extends(AlertPopOut, _super);
  126632. function AlertPopOut() {
  126633. return _super !== null && _super.apply(this, arguments) || this;
  126634. }
  126635. AlertPopOut.prototype.init = function () {
  126636. var ele = this.leavingView.pageRef().nativeElement;
  126637. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126638. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.alert-wrapper'));
  126639. wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
  126640. backdrop.fromTo('opacity', 0.3, 0);
  126641. this
  126642. .easing('ease-in-out')
  126643. .duration(200)
  126644. .add(backdrop)
  126645. .add(wrapper);
  126646. };
  126647. return AlertPopOut;
  126648. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126649. var AlertMdPopIn = (function (_super) {
  126650. __extends(AlertMdPopIn, _super);
  126651. function AlertMdPopIn() {
  126652. return _super !== null && _super.apply(this, arguments) || this;
  126653. }
  126654. AlertMdPopIn.prototype.init = function () {
  126655. var ele = this.enteringView.pageRef().nativeElement;
  126656. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126657. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.alert-wrapper'));
  126658. wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
  126659. backdrop.fromTo('opacity', 0.01, 0.5);
  126660. this
  126661. .easing('ease-in-out')
  126662. .duration(200)
  126663. .add(backdrop)
  126664. .add(wrapper);
  126665. };
  126666. return AlertMdPopIn;
  126667. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126668. var AlertMdPopOut = (function (_super) {
  126669. __extends(AlertMdPopOut, _super);
  126670. function AlertMdPopOut() {
  126671. return _super !== null && _super.apply(this, arguments) || this;
  126672. }
  126673. AlertMdPopOut.prototype.init = function () {
  126674. var ele = this.leavingView.pageRef().nativeElement;
  126675. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126676. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.alert-wrapper'));
  126677. wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
  126678. backdrop.fromTo('opacity', 0.5, 0);
  126679. this
  126680. .easing('ease-in-out')
  126681. .duration(200)
  126682. .add(backdrop)
  126683. .add(wrapper);
  126684. };
  126685. return AlertMdPopOut;
  126686. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126687. var AlertWpPopIn = (function (_super) {
  126688. __extends(AlertWpPopIn, _super);
  126689. function AlertWpPopIn() {
  126690. return _super !== null && _super.apply(this, arguments) || this;
  126691. }
  126692. AlertWpPopIn.prototype.init = function () {
  126693. var ele = this.enteringView.pageRef().nativeElement;
  126694. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126695. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.alert-wrapper'));
  126696. wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.3, 1);
  126697. backdrop.fromTo('opacity', 0.01, 0.5);
  126698. this
  126699. .easing('cubic-bezier(0,0,0.05,1)')
  126700. .duration(200)
  126701. .add(backdrop)
  126702. .add(wrapper);
  126703. };
  126704. return AlertWpPopIn;
  126705. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126706. var AlertWpPopOut = (function (_super) {
  126707. __extends(AlertWpPopOut, _super);
  126708. function AlertWpPopOut() {
  126709. return _super !== null && _super.apply(this, arguments) || this;
  126710. }
  126711. AlertWpPopOut.prototype.init = function () {
  126712. var ele = this.leavingView.pageRef().nativeElement;
  126713. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  126714. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.alert-wrapper'));
  126715. wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 1.3);
  126716. backdrop.fromTo('opacity', 0.5, 0);
  126717. this
  126718. .easing('ease-out')
  126719. .duration(150)
  126720. .add(backdrop)
  126721. .add(wrapper);
  126722. };
  126723. return AlertWpPopOut;
  126724. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  126725. //# sourceMappingURL=alert-transitions.js.map
  126726. /***/ }),
  126727. /* 364 */
  126728. /***/ (function(module, exports, __webpack_require__) {
  126729. "use strict";
  126730. var __extends = (this && this.__extends) || function (d, b) {
  126731. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  126732. function __() { this.constructor = d; }
  126733. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  126734. };
  126735. var Observable_1 = __webpack_require__(0);
  126736. var EmptyObservable_1 = __webpack_require__(33);
  126737. var isArray_1 = __webpack_require__(26);
  126738. var subscribeToResult_1 = __webpack_require__(5);
  126739. var OuterSubscriber_1 = __webpack_require__(6);
  126740. /**
  126741. * We need this JSDoc comment for affecting ESDoc.
  126742. * @extends {Ignored}
  126743. * @hide true
  126744. */
  126745. var ForkJoinObservable = (function (_super) {
  126746. __extends(ForkJoinObservable, _super);
  126747. function ForkJoinObservable(sources, resultSelector) {
  126748. _super.call(this);
  126749. this.sources = sources;
  126750. this.resultSelector = resultSelector;
  126751. }
  126752. /* tslint:enable:max-line-length */
  126753. /**
  126754. * Joins last values emitted by passed Observables.
  126755. *
  126756. * <span class="informal">Wait for Observables to complete and then combine last values they emitted.</span>
  126757. *
  126758. * <img src="./img/forkJoin.png" width="100%">
  126759. *
  126760. * `forkJoin` is an operator that takes any number of Observables which can be passed either as an array
  126761. * or directly as arguments. If no input Observables are provided, resulting stream will complete
  126762. * immediately.
  126763. *
  126764. * `forkJoin` will wait for all passed Observables to complete and then it will emit an array with last
  126765. * values from corresponding Observables. So if you pass `n` Observables to the operator, resulting
  126766. * array will have `n` values, where first value is the last thing emitted by the first Observable,
  126767. * second value is the last thing emitted by the second Observable and so on. That means `forkJoin` will
  126768. * not emit more than once and it will complete after that. If you need to emit combined values not only
  126769. * at the end of lifecycle of passed Observables, but also throughout it, try out {@link combineLatest}
  126770. * or {@link zip} instead.
  126771. *
  126772. * In order for resulting array to have the same length as the number of input Observables, whenever any of
  126773. * that Observables completes without emitting any value, `forkJoin` will complete at that moment as well
  126774. * and it will not emit anything either, even if it already has some last values from other Observables.
  126775. * Conversely, if there is an Observable that never completes, `forkJoin` will never complete as well,
  126776. * unless at any point some other Observable completes without emitting value, which brings us back to
  126777. * the previous case. Overall, in order for `forkJoin` to emit a value, all Observables passed as arguments
  126778. * have to emit something at least once and complete.
  126779. *
  126780. * If any input Observable errors at some point, `forkJoin` will error as well and all other Observables
  126781. * will be immediately unsubscribed.
  126782. *
  126783. * Optionally `forkJoin` accepts project function, that will be called with values which normally
  126784. * would land in emitted array. Whatever is returned by project function, will appear in output
  126785. * Observable instead. This means that default project can be thought of as a function that takes
  126786. * all its arguments and puts them into an array. Note that project function will be called only
  126787. * when output Observable is supposed to emit a result.
  126788. *
  126789. * @example <caption>Use forkJoin with operator emitting immediately</caption>
  126790. * const observable = Rx.Observable.forkJoin(
  126791. * Rx.Observable.of(1, 2, 3, 4),
  126792. * Rx.Observable.of(5, 6, 7, 8)
  126793. * );
  126794. * observable.subscribe(
  126795. * value => console.log(value),
  126796. * err => {},
  126797. * () => console.log('This is how it ends!')
  126798. * );
  126799. *
  126800. * // Logs:
  126801. * // [4, 8]
  126802. * // "This is how it ends!"
  126803. *
  126804. *
  126805. * @example <caption>Use forkJoin with operator emitting after some time</caption>
  126806. * const observable = Rx.Observable.forkJoin(
  126807. * Rx.Observable.interval(1000).take(3), // emit 0, 1, 2 every second and complete
  126808. * Rx.Observable.interval(500).take(4) // emit 0, 1, 2, 3 every half a second and complete
  126809. * );
  126810. * observable.subscribe(
  126811. * value => console.log(value),
  126812. * err => {},
  126813. * () => console.log('This is how it ends!')
  126814. * );
  126815. *
  126816. * // Logs:
  126817. * // [2, 3] after 3 seconds
  126818. * // "This is how it ends!" immediately after
  126819. *
  126820. *
  126821. * @example <caption>Use forkJoin with project function</caption>
  126822. * const observable = Rx.Observable.forkJoin(
  126823. * Rx.Observable.interval(1000).take(3), // emit 0, 1, 2 every second and complete
  126824. * Rx.Observable.interval(500).take(4), // emit 0, 1, 2, 3 every half a second and complete
  126825. * (n, m) => n + m
  126826. * );
  126827. * observable.subscribe(
  126828. * value => console.log(value),
  126829. * err => {},
  126830. * () => console.log('This is how it ends!')
  126831. * );
  126832. *
  126833. * // Logs:
  126834. * // 5 after 3 seconds
  126835. * // "This is how it ends!" immediately after
  126836. *
  126837. * @see {@link combineLatest}
  126838. * @see {@link zip}
  126839. *
  126840. * @param {...SubscribableOrPromise} sources Any number of Observables provided either as an array or as an arguments
  126841. * passed directly to the operator.
  126842. * @param {function} [project] Function that takes values emitted by input Observables and returns value
  126843. * that will appear in resulting Observable instead of default array.
  126844. * @return {Observable} Observable emitting either an array of last values emitted by passed Observables
  126845. * or value from project function.
  126846. * @static true
  126847. * @name forkJoin
  126848. * @owner Observable
  126849. */
  126850. ForkJoinObservable.create = function () {
  126851. var sources = [];
  126852. for (var _i = 0; _i < arguments.length; _i++) {
  126853. sources[_i - 0] = arguments[_i];
  126854. }
  126855. if (sources === null || arguments.length === 0) {
  126856. return new EmptyObservable_1.EmptyObservable();
  126857. }
  126858. var resultSelector = null;
  126859. if (typeof sources[sources.length - 1] === 'function') {
  126860. resultSelector = sources.pop();
  126861. }
  126862. // if the first and only other argument besides the resultSelector is an array
  126863. // assume it's been called with `forkJoin([obs1, obs2, obs3], resultSelector)`
  126864. if (sources.length === 1 && isArray_1.isArray(sources[0])) {
  126865. sources = sources[0];
  126866. }
  126867. if (sources.length === 0) {
  126868. return new EmptyObservable_1.EmptyObservable();
  126869. }
  126870. return new ForkJoinObservable(sources, resultSelector);
  126871. };
  126872. /** @deprecated internal use only */ ForkJoinObservable.prototype._subscribe = function (subscriber) {
  126873. return new ForkJoinSubscriber(subscriber, this.sources, this.resultSelector);
  126874. };
  126875. return ForkJoinObservable;
  126876. }(Observable_1.Observable));
  126877. exports.ForkJoinObservable = ForkJoinObservable;
  126878. /**
  126879. * We need this JSDoc comment for affecting ESDoc.
  126880. * @ignore
  126881. * @extends {Ignored}
  126882. */
  126883. var ForkJoinSubscriber = (function (_super) {
  126884. __extends(ForkJoinSubscriber, _super);
  126885. function ForkJoinSubscriber(destination, sources, resultSelector) {
  126886. _super.call(this, destination);
  126887. this.sources = sources;
  126888. this.resultSelector = resultSelector;
  126889. this.completed = 0;
  126890. this.haveValues = 0;
  126891. var len = sources.length;
  126892. this.total = len;
  126893. this.values = new Array(len);
  126894. for (var i = 0; i < len; i++) {
  126895. var source = sources[i];
  126896. var innerSubscription = subscribeToResult_1.subscribeToResult(this, source, null, i);
  126897. if (innerSubscription) {
  126898. innerSubscription.outerIndex = i;
  126899. this.add(innerSubscription);
  126900. }
  126901. }
  126902. }
  126903. ForkJoinSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
  126904. this.values[outerIndex] = innerValue;
  126905. if (!innerSub._hasValue) {
  126906. innerSub._hasValue = true;
  126907. this.haveValues++;
  126908. }
  126909. };
  126910. ForkJoinSubscriber.prototype.notifyComplete = function (innerSub) {
  126911. var destination = this.destination;
  126912. var _a = this, haveValues = _a.haveValues, resultSelector = _a.resultSelector, values = _a.values;
  126913. var len = values.length;
  126914. if (!innerSub._hasValue) {
  126915. destination.complete();
  126916. return;
  126917. }
  126918. this.completed++;
  126919. if (this.completed !== len) {
  126920. return;
  126921. }
  126922. if (haveValues === len) {
  126923. var value = resultSelector ? resultSelector.apply(this, values) : values;
  126924. destination.next(value);
  126925. }
  126926. destination.complete();
  126927. };
  126928. return ForkJoinSubscriber;
  126929. }(OuterSubscriber_1.OuterSubscriber));
  126930. //# sourceMappingURL=ForkJoinObservable.js.map
  126931. /***/ }),
  126932. /* 365 */
  126933. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  126934. "use strict";
  126935. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemReorderGesture; });
  126936. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__item_reorder_util__ = __webpack_require__(183);
  126937. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_dom__ = __webpack_require__(18);
  126938. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gestures_ui_event_manager__ = __webpack_require__(36);
  126939. /**
  126940. * @hidden
  126941. */
  126942. var ItemReorderGesture = (function () {
  126943. function ItemReorderGesture(plt, reorderList) {
  126944. this.plt = plt;
  126945. this.reorderList = reorderList;
  126946. this.selectedItemEle = null;
  126947. this.events = new __WEBPACK_IMPORTED_MODULE_2__gestures_ui_event_manager__["a" /* UIEventManager */](plt);
  126948. this.events.pointerEvents({
  126949. element: this.reorderList.getNativeElement(),
  126950. pointerDown: this.onDragStart.bind(this),
  126951. pointerMove: this.onDragMove.bind(this),
  126952. pointerUp: this.onDragEnd.bind(this),
  126953. zone: false
  126954. });
  126955. }
  126956. ItemReorderGesture.prototype.onDragStart = function (ev) {
  126957. if (this.selectedItemEle) {
  126958. return false;
  126959. }
  126960. var reorderElement = ev.target;
  126961. if (reorderElement.nodeName !== 'ION-REORDER') {
  126962. return false;
  126963. }
  126964. var reorderMark = reorderElement['$ionComponent'];
  126965. if (!reorderMark) {
  126966. console.error('ion-reorder does not contain $ionComponent');
  126967. return false;
  126968. }
  126969. this.reorderList._reorderPrepare();
  126970. var item = reorderMark.getReorderNode();
  126971. if (!item) {
  126972. console.error('reorder node not found');
  126973. return false;
  126974. }
  126975. ev.preventDefault();
  126976. // Preparing state
  126977. this.selectedItemEle = item;
  126978. this.selectedItemHeight = item.offsetHeight;
  126979. this.lastYcoord = -100;
  126980. this.lastToIndex = Object(__WEBPACK_IMPORTED_MODULE_0__item_reorder_util__["b" /* indexForItem */])(item);
  126981. this.windowHeight = this.plt.height() - AUTO_SCROLL_MARGIN;
  126982. this.lastScrollPosition = this.reorderList._scrollContent(0);
  126983. this.offset = Object(__WEBPACK_IMPORTED_MODULE_1__util_dom__["f" /* pointerCoord */])(ev);
  126984. this.offset.y += this.lastScrollPosition;
  126985. item.classList.add(ITEM_REORDER_ACTIVE);
  126986. this.reorderList._reorderStart();
  126987. return true;
  126988. };
  126989. ItemReorderGesture.prototype.onDragMove = function (ev) {
  126990. var selectedItem = this.selectedItemEle;
  126991. if (!selectedItem) {
  126992. return;
  126993. }
  126994. ev.preventDefault();
  126995. // Get coordinate
  126996. var coord = Object(__WEBPACK_IMPORTED_MODULE_1__util_dom__["f" /* pointerCoord */])(ev);
  126997. var posY = coord.y;
  126998. // Scroll if we reach the scroll margins
  126999. var scrollPosition = this.scroll(posY);
  127000. // Only perform hit test if we moved at least 30px from previous position
  127001. if (Math.abs(posY - this.lastYcoord) > 30) {
  127002. var overItem = this.itemForCoord(coord);
  127003. if (overItem) {
  127004. var toIndex = Object(__WEBPACK_IMPORTED_MODULE_0__item_reorder_util__["b" /* indexForItem */])(overItem);
  127005. if (toIndex !== undefined && (toIndex !== this.lastToIndex || this.emptyZone)) {
  127006. var fromIndex = Object(__WEBPACK_IMPORTED_MODULE_0__item_reorder_util__["b" /* indexForItem */])(selectedItem);
  127007. this.lastToIndex = toIndex;
  127008. this.lastYcoord = posY;
  127009. this.emptyZone = false;
  127010. this.reorderList._reorderMove(fromIndex, toIndex, this.selectedItemHeight);
  127011. }
  127012. }
  127013. else {
  127014. this.emptyZone = true;
  127015. }
  127016. }
  127017. // Update selected item position
  127018. var ydiff = Math.round(posY - this.offset.y + scrollPosition);
  127019. selectedItem.style[this.plt.Css.transform] = "translateY(" + ydiff + "px)";
  127020. };
  127021. ItemReorderGesture.prototype.onDragEnd = function (ev) {
  127022. var _this = this;
  127023. var selectedItem = this.selectedItemEle;
  127024. if (!selectedItem) {
  127025. return;
  127026. }
  127027. if (ev) {
  127028. ev.preventDefault();
  127029. ev.stopPropagation();
  127030. }
  127031. var toIndex = this.lastToIndex;
  127032. var fromIndex = Object(__WEBPACK_IMPORTED_MODULE_0__item_reorder_util__["b" /* indexForItem */])(selectedItem);
  127033. var reorderInactive = function () {
  127034. _this.selectedItemEle.style.transition = '';
  127035. _this.selectedItemEle.classList.remove(ITEM_REORDER_ACTIVE);
  127036. _this.selectedItemEle = null;
  127037. };
  127038. if (toIndex === fromIndex) {
  127039. selectedItem.style.transition = 'transform 200ms ease-in-out';
  127040. setTimeout(reorderInactive, 200);
  127041. }
  127042. else {
  127043. reorderInactive();
  127044. }
  127045. this.reorderList._reorderEmit(fromIndex, toIndex);
  127046. };
  127047. ItemReorderGesture.prototype.itemForCoord = function (coord) {
  127048. var sideOffset = this.reorderList._isStart === this.plt.isRTL ? -100 : 100;
  127049. var x = this.offset.x + sideOffset;
  127050. var y = coord.y;
  127051. var element = this.plt.getElementFromPoint(x, y);
  127052. return Object(__WEBPACK_IMPORTED_MODULE_0__item_reorder_util__["a" /* findReorderItem */])(element, this.reorderList.getNativeElement());
  127053. };
  127054. ItemReorderGesture.prototype.scroll = function (posY) {
  127055. if (posY < AUTO_SCROLL_MARGIN) {
  127056. this.lastScrollPosition = this.reorderList._scrollContent(-SCROLL_JUMP);
  127057. }
  127058. else if (posY > this.windowHeight) {
  127059. this.lastScrollPosition = this.reorderList._scrollContent(SCROLL_JUMP);
  127060. }
  127061. return this.lastScrollPosition;
  127062. };
  127063. /**
  127064. * @hidden
  127065. */
  127066. ItemReorderGesture.prototype.destroy = function () {
  127067. this.onDragEnd(null);
  127068. this.events.destroy();
  127069. this.events = null;
  127070. this.reorderList = null;
  127071. };
  127072. return ItemReorderGesture;
  127073. }());
  127074. var AUTO_SCROLL_MARGIN = 60;
  127075. var SCROLL_JUMP = 10;
  127076. var ITEM_REORDER_ACTIVE = 'reorder-active';
  127077. //# sourceMappingURL=item-reorder-gesture.js.map
  127078. /***/ }),
  127079. /* 366 */
  127080. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127081. "use strict";
  127082. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return PICKER_OPT_SELECTED; });
  127083. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DECELERATION_FRICTION; });
  127084. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return FRAME_MS; });
  127085. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return MAX_PICKER_SPEED; });
  127086. var PICKER_OPT_SELECTED = 'picker-opt-selected';
  127087. var DECELERATION_FRICTION = 0.97;
  127088. var FRAME_MS = (1000 / 60);
  127089. var MAX_PICKER_SPEED = 60;
  127090. //# sourceMappingURL=picker-options.js.map
  127091. /***/ }),
  127092. /* 367 */
  127093. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127094. "use strict";
  127095. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PickerSlideIn; });
  127096. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PickerSlideOut; });
  127097. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  127098. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_transition__ = __webpack_require__(42);
  127099. var __extends = (this && this.__extends) || (function () {
  127100. var extendStatics = Object.setPrototypeOf ||
  127101. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  127102. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  127103. return function (d, b) {
  127104. extendStatics(d, b);
  127105. function __() { this.constructor = d; }
  127106. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  127107. };
  127108. })();
  127109. /**
  127110. * Animations for pickers
  127111. */
  127112. var PickerSlideIn = (function (_super) {
  127113. __extends(PickerSlideIn, _super);
  127114. function PickerSlideIn() {
  127115. return _super !== null && _super.apply(this, arguments) || this;
  127116. }
  127117. PickerSlideIn.prototype.init = function () {
  127118. var ele = this.enteringView.pageRef().nativeElement;
  127119. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127120. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.picker-wrapper'));
  127121. backdrop.fromTo('opacity', 0.01, 0.26);
  127122. wrapper.fromTo('translateY', '100%', '0%');
  127123. this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add(backdrop).add(wrapper);
  127124. };
  127125. return PickerSlideIn;
  127126. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127127. var PickerSlideOut = (function (_super) {
  127128. __extends(PickerSlideOut, _super);
  127129. function PickerSlideOut() {
  127130. return _super !== null && _super.apply(this, arguments) || this;
  127131. }
  127132. PickerSlideOut.prototype.init = function () {
  127133. var ele = this.leavingView.pageRef().nativeElement;
  127134. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127135. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.picker-wrapper'));
  127136. backdrop.fromTo('opacity', 0.26, 0);
  127137. wrapper.fromTo('translateY', '0%', '100%');
  127138. this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add(backdrop).add(wrapper);
  127139. };
  127140. return PickerSlideOut;
  127141. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127142. //# sourceMappingURL=picker-transitions.js.map
  127143. /***/ }),
  127144. /* 368 */
  127145. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127146. "use strict";
  127147. /* harmony export (immutable) */ __webpack_exports__["k"] = renderDateTime;
  127148. /* harmony export (immutable) */ __webpack_exports__["l"] = renderTextFormat;
  127149. /* harmony export (immutable) */ __webpack_exports__["f"] = dateValueRange;
  127150. /* harmony export (immutable) */ __webpack_exports__["e"] = dateSortValue;
  127151. /* harmony export (immutable) */ __webpack_exports__["d"] = dateDataSortValue;
  127152. /* harmony export (immutable) */ __webpack_exports__["g"] = daysInMonth;
  127153. /* unused harmony export isLeapYear */
  127154. /* harmony export (immutable) */ __webpack_exports__["i"] = parseDate;
  127155. /* harmony export (immutable) */ __webpack_exports__["a"] = compareDates;
  127156. /* harmony export (immutable) */ __webpack_exports__["m"] = updateDate;
  127157. /* harmony export (immutable) */ __webpack_exports__["j"] = parseTemplate;
  127158. /* harmony export (immutable) */ __webpack_exports__["h"] = getValueFromFormat;
  127159. /* harmony export (immutable) */ __webpack_exports__["c"] = convertFormatToKey;
  127160. /* harmony export (immutable) */ __webpack_exports__["b"] = convertDataToISO;
  127161. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util__ = __webpack_require__(3);
  127162. function renderDateTime(template, value, locale) {
  127163. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["f" /* isBlank */])(value)) {
  127164. return '';
  127165. }
  127166. var tokens = [];
  127167. var hasText = false;
  127168. FORMAT_KEYS.forEach(function (format, index) {
  127169. if (template.indexOf(format.f) > -1) {
  127170. var token = '{' + index + '}';
  127171. var text = renderTextFormat(format.f, value[format.k], value, locale);
  127172. if (!hasText && text && Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(value[format.k])) {
  127173. hasText = true;
  127174. }
  127175. tokens.push(token, text);
  127176. template = template.replace(format.f, token);
  127177. }
  127178. });
  127179. if (!hasText) {
  127180. return '';
  127181. }
  127182. for (var i = 0; i < tokens.length; i += 2) {
  127183. template = template.replace(tokens[i], tokens[i + 1]);
  127184. }
  127185. return template;
  127186. }
  127187. function renderTextFormat(format, value, date, locale) {
  127188. if (format === FORMAT_DDDD || format === FORMAT_DDD) {
  127189. try {
  127190. value = (new Date(date.year, date.month - 1, date.day)).getDay();
  127191. if (format === FORMAT_DDDD) {
  127192. return (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(locale.dayNames) ? locale.dayNames : DAY_NAMES)[value];
  127193. }
  127194. return (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(locale.dayShortNames) ? locale.dayShortNames : DAY_SHORT_NAMES)[value];
  127195. }
  127196. catch (e) { }
  127197. return '';
  127198. }
  127199. if (format === FORMAT_A) {
  127200. return date ? date.hour < 12 ? 'AM' : 'PM' : Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(value) ? value.toUpperCase() : '';
  127201. }
  127202. if (format === FORMAT_a) {
  127203. return date ? date.hour < 12 ? 'am' : 'pm' : Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(value) ? value : '';
  127204. }
  127205. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["f" /* isBlank */])(value)) {
  127206. return '';
  127207. }
  127208. if (format === FORMAT_YY || format === FORMAT_MM ||
  127209. format === FORMAT_DD || format === FORMAT_HH ||
  127210. format === FORMAT_mm || format === FORMAT_ss) {
  127211. return twoDigit(value);
  127212. }
  127213. if (format === FORMAT_YYYY) {
  127214. return fourDigit(value);
  127215. }
  127216. if (format === FORMAT_MMMM) {
  127217. return (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(locale.monthNames) ? locale.monthNames : MONTH_NAMES)[value - 1];
  127218. }
  127219. if (format === FORMAT_MMM) {
  127220. return (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(locale.monthShortNames) ? locale.monthShortNames : MONTH_SHORT_NAMES)[value - 1];
  127221. }
  127222. if (format === FORMAT_hh || format === FORMAT_h) {
  127223. if (value === 0) {
  127224. return '12';
  127225. }
  127226. if (value > 12) {
  127227. value -= 12;
  127228. }
  127229. if (format === FORMAT_hh && value < 10) {
  127230. return ('0' + value);
  127231. }
  127232. }
  127233. return value.toString();
  127234. }
  127235. function dateValueRange(format, min, max) {
  127236. var opts = [];
  127237. var i;
  127238. if (format === FORMAT_YYYY || format === FORMAT_YY) {
  127239. // year
  127240. i = max.year;
  127241. while (i >= min.year) {
  127242. opts.push(i--);
  127243. }
  127244. }
  127245. else if (format === FORMAT_MMMM || format === FORMAT_MMM ||
  127246. format === FORMAT_MM || format === FORMAT_M ||
  127247. format === FORMAT_hh || format === FORMAT_h) {
  127248. // month or 12-hour
  127249. for (i = 1; i < 13; i++) {
  127250. opts.push(i);
  127251. }
  127252. }
  127253. else if (format === FORMAT_DDDD || format === FORMAT_DDD ||
  127254. format === FORMAT_DD || format === FORMAT_D) {
  127255. // day
  127256. for (i = 1; i < 32; i++) {
  127257. opts.push(i);
  127258. }
  127259. }
  127260. else if (format === FORMAT_HH || format === FORMAT_H) {
  127261. // 24-hour
  127262. for (i = 0; i < 24; i++) {
  127263. opts.push(i);
  127264. }
  127265. }
  127266. else if (format === FORMAT_mm || format === FORMAT_m) {
  127267. // minutes
  127268. for (i = 0; i < 60; i++) {
  127269. opts.push(i);
  127270. }
  127271. }
  127272. else if (format === FORMAT_ss || format === FORMAT_s) {
  127273. // seconds
  127274. for (i = 0; i < 60; i++) {
  127275. opts.push(i);
  127276. }
  127277. }
  127278. else if (format === FORMAT_A || format === FORMAT_a) {
  127279. // AM/PM
  127280. opts.push('am', 'pm');
  127281. }
  127282. return opts;
  127283. }
  127284. function dateSortValue(year, month, day, hour, minute) {
  127285. if (hour === void 0) { hour = 0; }
  127286. if (minute === void 0) { minute = 0; }
  127287. return parseInt("1" + fourDigit(year) + twoDigit(month) + twoDigit(day) + twoDigit(hour) + twoDigit(minute), 10);
  127288. }
  127289. function dateDataSortValue(data) {
  127290. if (data) {
  127291. return dateSortValue(data.year, data.month, data.day, data.hour, data.minute);
  127292. }
  127293. return -1;
  127294. }
  127295. function daysInMonth(month, year) {
  127296. return (month === 4 || month === 6 || month === 9 || month === 11) ? 30 : (month === 2) ? isLeapYear(year) ? 29 : 28 : 31;
  127297. }
  127298. function isLeapYear(year) {
  127299. return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
  127300. }
  127301. var ISO_8601_REGEXP = /^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/;
  127302. var TIME_REGEXP = /^((\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/;
  127303. function parseDate(val) {
  127304. // manually parse IS0 cuz Date.parse cannot be trusted
  127305. // ISO 8601 format: 1994-12-15T13:47:20Z
  127306. var parse;
  127307. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(val) && val !== '') {
  127308. // try parsing for just time first, HH:MM
  127309. parse = TIME_REGEXP.exec(val);
  127310. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(parse)) {
  127311. // adjust the array so it fits nicely with the datetime parse
  127312. parse.unshift(undefined, undefined);
  127313. parse[2] = parse[3] = undefined;
  127314. }
  127315. else {
  127316. // try parsing for full ISO datetime
  127317. parse = ISO_8601_REGEXP.exec(val);
  127318. }
  127319. }
  127320. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["f" /* isBlank */])(parse)) {
  127321. // wasn't able to parse the ISO datetime
  127322. return null;
  127323. }
  127324. // ensure all the parse values exist with at least 0
  127325. for (var i = 1; i < 8; i++) {
  127326. parse[i] = (parse[i] !== undefined ? parseInt(parse[i], 10) : null);
  127327. }
  127328. var tzOffset = 0;
  127329. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(parse[9]) && Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(parse[10])) {
  127330. // hours
  127331. tzOffset = parseInt(parse[10], 10) * 60;
  127332. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(parse[11])) {
  127333. // minutes
  127334. tzOffset += parseInt(parse[11], 10);
  127335. }
  127336. if (parse[9] === '-') {
  127337. // + or -
  127338. tzOffset *= -1;
  127339. }
  127340. }
  127341. return {
  127342. year: parse[1],
  127343. month: parse[2],
  127344. day: parse[3],
  127345. hour: parse[4],
  127346. minute: parse[5],
  127347. second: parse[6],
  127348. millisecond: parse[7],
  127349. tzOffset: tzOffset,
  127350. };
  127351. }
  127352. function compareDates(d1, d2) {
  127353. var date1 = new Date(d1.year, d1.month, d1.day, d1.hour, d1.minute, d1.second);
  127354. var date2 = new Date(d2.year, d2.month, d2.day, d2.hour, d2.minute, d2.second);
  127355. return date1.getTime() - date2.getTime();
  127356. }
  127357. function updateDate(existingData, newData) {
  127358. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData) && newData !== '') {
  127359. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["n" /* isString */])(newData)) {
  127360. // new date is a string, and hopefully in the ISO format
  127361. // convert it to our DateTimeData if a valid ISO
  127362. newData = parseDate(newData);
  127363. if (newData) {
  127364. // successfully parsed the ISO string to our DateTimeData
  127365. Object.assign(existingData, newData);
  127366. return true;
  127367. }
  127368. }
  127369. else if ((Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.year) || Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.hour) || Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.month) || Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.day) || Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.minute) || Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.second))) {
  127370. // newData is from of a datetime picker's selected values
  127371. // update the existing DateTimeData data with the new values
  127372. // do some magic for 12-hour values
  127373. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.ampm) && Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(newData.hour)) {
  127374. if (newData.ampm.value === 'pm') {
  127375. newData.hour.value = (newData.hour.value === 12 ? 12 : newData.hour.value + 12);
  127376. }
  127377. else {
  127378. newData.hour.value = (newData.hour.value === 12 ? 0 : newData.hour.value);
  127379. }
  127380. }
  127381. // merge new values from the picker's selection
  127382. // to the existing DateTimeData values
  127383. for (var k in newData) {
  127384. existingData[k] = newData[k].value;
  127385. }
  127386. return true;
  127387. }
  127388. // eww, invalid data
  127389. console.warn("Error parsing date: \"" + newData + "\". Please provide a valid ISO 8601 datetime format: https://www.w3.org/TR/NOTE-datetime");
  127390. }
  127391. else {
  127392. // blank data, clear everything out
  127393. for (var k in existingData) {
  127394. delete existingData[k];
  127395. }
  127396. }
  127397. return false;
  127398. }
  127399. function parseTemplate(template) {
  127400. var formats = [];
  127401. template = template.replace(/[^\w\s]/gi, ' ');
  127402. FORMAT_KEYS.forEach(function (format) {
  127403. if (format.f.length > 1 && template.indexOf(format.f) > -1 && template.indexOf(format.f + format.f.charAt(0)) < 0) {
  127404. template = template.replace(format.f, ' ' + format.f + ' ');
  127405. }
  127406. });
  127407. var words = template.split(' ').filter(function (w) { return w.length > 0; });
  127408. words.forEach(function (word, i) {
  127409. FORMAT_KEYS.forEach(function (format) {
  127410. if (word === format.f) {
  127411. if (word === FORMAT_A || word === FORMAT_a) {
  127412. // this format is an am/pm format, so it's an "a" or "A"
  127413. if ((formats.indexOf(FORMAT_h) < 0 && formats.indexOf(FORMAT_hh) < 0) ||
  127414. VALID_AMPM_PREFIX.indexOf(words[i - 1]) === -1) {
  127415. // template does not already have a 12-hour format
  127416. // or this am/pm format doesn't have a hour, minute, or second format immediately before it
  127417. // so do not treat this word "a" or "A" as the am/pm format
  127418. return;
  127419. }
  127420. }
  127421. formats.push(word);
  127422. }
  127423. });
  127424. });
  127425. return formats;
  127426. }
  127427. function getValueFromFormat(date, format) {
  127428. if (format === FORMAT_A || format === FORMAT_a) {
  127429. return (date.hour < 12 ? 'am' : 'pm');
  127430. }
  127431. if (format === FORMAT_hh || format === FORMAT_h) {
  127432. return (date.hour > 12 ? date.hour - 12 : date.hour);
  127433. }
  127434. return date[convertFormatToKey(format)];
  127435. }
  127436. function convertFormatToKey(format) {
  127437. for (var k in FORMAT_KEYS) {
  127438. if (FORMAT_KEYS[k].f === format) {
  127439. return FORMAT_KEYS[k].k;
  127440. }
  127441. }
  127442. return null;
  127443. }
  127444. function convertDataToISO(data) {
  127445. // https://www.w3.org/TR/NOTE-datetime
  127446. var rtn = '';
  127447. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data)) {
  127448. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.year)) {
  127449. // YYYY
  127450. rtn = fourDigit(data.year);
  127451. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.month)) {
  127452. // YYYY-MM
  127453. rtn += '-' + twoDigit(data.month);
  127454. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.day)) {
  127455. // YYYY-MM-DD
  127456. rtn += '-' + twoDigit(data.day);
  127457. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.hour)) {
  127458. // YYYY-MM-DDTHH:mm:SS
  127459. rtn += "T" + twoDigit(data.hour) + ":" + twoDigit(data.minute) + ":" + twoDigit(data.second);
  127460. if (data.millisecond > 0) {
  127461. // YYYY-MM-DDTHH:mm:SS.SSS
  127462. rtn += '.' + threeDigit(data.millisecond);
  127463. }
  127464. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["f" /* isBlank */])(data.tzOffset) || data.tzOffset === 0) {
  127465. // YYYY-MM-DDTHH:mm:SSZ
  127466. rtn += 'Z';
  127467. }
  127468. else {
  127469. // YYYY-MM-DDTHH:mm:SS+/-HH:mm
  127470. rtn += (data.tzOffset > 0 ? '+' : '-') + twoDigit(Math.floor(data.tzOffset / 60)) + ':' + twoDigit(data.tzOffset % 60);
  127471. }
  127472. }
  127473. }
  127474. }
  127475. }
  127476. else if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.hour)) {
  127477. // HH:mm
  127478. rtn = twoDigit(data.hour) + ':' + twoDigit(data.minute);
  127479. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.second)) {
  127480. // HH:mm:SS
  127481. rtn += ':' + twoDigit(data.second);
  127482. if (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(data.millisecond)) {
  127483. // HH:mm:SS.SSS
  127484. rtn += '.' + threeDigit(data.millisecond);
  127485. }
  127486. }
  127487. }
  127488. }
  127489. return rtn;
  127490. }
  127491. function twoDigit(val) {
  127492. return ('0' + (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(val) ? Math.abs(val) : '0')).slice(-2);
  127493. }
  127494. function threeDigit(val) {
  127495. return ('00' + (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(val) ? Math.abs(val) : '0')).slice(-3);
  127496. }
  127497. function fourDigit(val) {
  127498. return ('000' + (Object(__WEBPACK_IMPORTED_MODULE_0__util__["l" /* isPresent */])(val) ? Math.abs(val) : '0')).slice(-4);
  127499. }
  127500. var FORMAT_YYYY = 'YYYY';
  127501. var FORMAT_YY = 'YY';
  127502. var FORMAT_MMMM = 'MMMM';
  127503. var FORMAT_MMM = 'MMM';
  127504. var FORMAT_MM = 'MM';
  127505. var FORMAT_M = 'M';
  127506. var FORMAT_DDDD = 'DDDD';
  127507. var FORMAT_DDD = 'DDD';
  127508. var FORMAT_DD = 'DD';
  127509. var FORMAT_D = 'D';
  127510. var FORMAT_HH = 'HH';
  127511. var FORMAT_H = 'H';
  127512. var FORMAT_hh = 'hh';
  127513. var FORMAT_h = 'h';
  127514. var FORMAT_mm = 'mm';
  127515. var FORMAT_m = 'm';
  127516. var FORMAT_ss = 'ss';
  127517. var FORMAT_s = 's';
  127518. var FORMAT_A = 'A';
  127519. var FORMAT_a = 'a';
  127520. var FORMAT_KEYS = [
  127521. { f: FORMAT_YYYY, k: 'year' },
  127522. { f: FORMAT_MMMM, k: 'month' },
  127523. { f: FORMAT_DDDD, k: 'day' },
  127524. { f: FORMAT_MMM, k: 'month' },
  127525. { f: FORMAT_DDD, k: 'day' },
  127526. { f: FORMAT_YY, k: 'year' },
  127527. { f: FORMAT_MM, k: 'month' },
  127528. { f: FORMAT_DD, k: 'day' },
  127529. { f: FORMAT_HH, k: 'hour' },
  127530. { f: FORMAT_hh, k: 'hour' },
  127531. { f: FORMAT_mm, k: 'minute' },
  127532. { f: FORMAT_ss, k: 'second' },
  127533. { f: FORMAT_M, k: 'month' },
  127534. { f: FORMAT_D, k: 'day' },
  127535. { f: FORMAT_H, k: 'hour' },
  127536. { f: FORMAT_h, k: 'hour' },
  127537. { f: FORMAT_m, k: 'minute' },
  127538. { f: FORMAT_s, k: 'second' },
  127539. { f: FORMAT_A, k: 'ampm' },
  127540. { f: FORMAT_a, k: 'ampm' },
  127541. ];
  127542. var DAY_NAMES = [
  127543. 'Sunday',
  127544. 'Monday',
  127545. 'Tuesday',
  127546. 'Wednesday',
  127547. 'Thursday',
  127548. 'Friday',
  127549. 'Saturday',
  127550. ];
  127551. var DAY_SHORT_NAMES = [
  127552. 'Sun',
  127553. 'Mon',
  127554. 'Tue',
  127555. 'Wed',
  127556. 'Thu',
  127557. 'Fri',
  127558. 'Sat',
  127559. ];
  127560. var MONTH_NAMES = [
  127561. 'January',
  127562. 'February',
  127563. 'March',
  127564. 'April',
  127565. 'May',
  127566. 'June',
  127567. 'July',
  127568. 'August',
  127569. 'September',
  127570. 'October',
  127571. 'November',
  127572. 'December',
  127573. ];
  127574. var MONTH_SHORT_NAMES = [
  127575. 'Jan',
  127576. 'Feb',
  127577. 'Mar',
  127578. 'Apr',
  127579. 'May',
  127580. 'Jun',
  127581. 'Jul',
  127582. 'Aug',
  127583. 'Sep',
  127584. 'Oct',
  127585. 'Nov',
  127586. 'Dec',
  127587. ];
  127588. var VALID_AMPM_PREFIX = [
  127589. FORMAT_hh, FORMAT_h, FORMAT_mm, FORMAT_m, FORMAT_ss, FORMAT_s
  127590. ];
  127591. //# sourceMappingURL=datetime-util.js.map
  127592. /***/ }),
  127593. /* 369 */
  127594. /***/ (function(module, exports, __webpack_require__) {
  127595. "use strict";
  127596. var takeUntil_1 = __webpack_require__(194);
  127597. /**
  127598. * Emits the values emitted by the source Observable until a `notifier`
  127599. * Observable emits a value.
  127600. *
  127601. * <span class="informal">Lets values pass until a second Observable,
  127602. * `notifier`, emits something. Then, it completes.</span>
  127603. *
  127604. * <img src="./img/takeUntil.png" width="100%">
  127605. *
  127606. * `takeUntil` subscribes and begins mirroring the source Observable. It also
  127607. * monitors a second Observable, `notifier` that you provide. If the `notifier`
  127608. * emits a value, the output Observable stops mirroring the source Observable
  127609. * and completes.
  127610. *
  127611. * @example <caption>Tick every second until the first click happens</caption>
  127612. * var interval = Rx.Observable.interval(1000);
  127613. * var clicks = Rx.Observable.fromEvent(document, 'click');
  127614. * var result = interval.takeUntil(clicks);
  127615. * result.subscribe(x => console.log(x));
  127616. *
  127617. * @see {@link take}
  127618. * @see {@link takeLast}
  127619. * @see {@link takeWhile}
  127620. * @see {@link skip}
  127621. *
  127622. * @param {Observable} notifier The Observable whose first emitted value will
  127623. * cause the output Observable of `takeUntil` to stop emitting values from the
  127624. * source Observable.
  127625. * @return {Observable<T>} An Observable that emits the values from the source
  127626. * Observable until such time as `notifier` emits its first value.
  127627. * @method takeUntil
  127628. * @owner Observable
  127629. */
  127630. function takeUntil(notifier) {
  127631. return takeUntil_1.takeUntil(notifier)(this);
  127632. }
  127633. exports.takeUntil = takeUntil;
  127634. //# sourceMappingURL=takeUntil.js.map
  127635. /***/ }),
  127636. /* 370 */
  127637. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127638. "use strict";
  127639. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ItemSlidingGesture; });
  127640. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__ = __webpack_require__(13);
  127641. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__gestures_pan_gesture__ = __webpack_require__(70);
  127642. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  127643. var __extends = (this && this.__extends) || (function () {
  127644. var extendStatics = Object.setPrototypeOf ||
  127645. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  127646. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  127647. return function (d, b) {
  127648. extendStatics(d, b);
  127649. function __() { this.constructor = d; }
  127650. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  127651. };
  127652. })();
  127653. /**
  127654. * @hidden
  127655. */
  127656. var ItemSlidingGesture = (function (_super) {
  127657. __extends(ItemSlidingGesture, _super);
  127658. function ItemSlidingGesture(plt, list, gestureCtrl, domCtrl) {
  127659. var _this = _super.call(this, plt, list.getNativeElement(), {
  127660. maxAngle: 20,
  127661. threshold: 5,
  127662. zone: false,
  127663. domController: domCtrl,
  127664. gesture: gestureCtrl.createGesture({
  127665. name: __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__["c" /* GESTURE_ITEM_SWIPE */],
  127666. priority: __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__["h" /* GESTURE_PRIORITY_SLIDING_ITEM */],
  127667. disableScroll: true
  127668. })
  127669. }) || this;
  127670. _this.list = list;
  127671. _this.preSelectedContainer = null;
  127672. _this.selectedContainer = null;
  127673. _this.openContainer = null;
  127674. return _this;
  127675. }
  127676. ItemSlidingGesture.prototype.canStart = function (ev) {
  127677. if (this.selectedContainer) {
  127678. return false;
  127679. }
  127680. // Get swiped sliding container
  127681. var container = getContainer(ev);
  127682. if (!container) {
  127683. this.closeOpened();
  127684. return false;
  127685. }
  127686. // Close open container if it is not the selected one.
  127687. if (container !== this.openContainer) {
  127688. this.closeOpened();
  127689. }
  127690. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  127691. this.preSelectedContainer = container;
  127692. this.firstCoordX = coord.x;
  127693. this.firstTimestamp = Date.now();
  127694. return true;
  127695. };
  127696. ItemSlidingGesture.prototype.onDragStart = function (ev) {
  127697. ev.preventDefault();
  127698. var coord = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev);
  127699. this.selectedContainer = this.openContainer = this.preSelectedContainer;
  127700. this.selectedContainer.startSliding(coord.x);
  127701. };
  127702. ItemSlidingGesture.prototype.onDragMove = function (ev) {
  127703. ev.preventDefault();
  127704. this.selectedContainer.moveSliding(Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev).x);
  127705. };
  127706. ItemSlidingGesture.prototype.onDragEnd = function (ev) {
  127707. ev.preventDefault();
  127708. var coordX = Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev).x;
  127709. var deltaX = (coordX - this.firstCoordX);
  127710. var deltaT = (Date.now() - this.firstTimestamp);
  127711. this.selectedContainer.endSliding(deltaX / deltaT);
  127712. this.selectedContainer = null;
  127713. this.preSelectedContainer = null;
  127714. };
  127715. ItemSlidingGesture.prototype.notCaptured = function (ev) {
  127716. if (!clickedOptionButton(ev)) {
  127717. this.closeOpened();
  127718. }
  127719. };
  127720. ItemSlidingGesture.prototype.closeOpened = function () {
  127721. this.selectedContainer = null;
  127722. if (this.openContainer) {
  127723. this.openContainer.close();
  127724. this.openContainer = null;
  127725. return true;
  127726. }
  127727. return false;
  127728. };
  127729. ItemSlidingGesture.prototype.destroy = function () {
  127730. _super.prototype.destroy.call(this);
  127731. this.closeOpened();
  127732. this.list = null;
  127733. this.preSelectedContainer = null;
  127734. this.selectedContainer = null;
  127735. this.openContainer = null;
  127736. };
  127737. return ItemSlidingGesture;
  127738. }(__WEBPACK_IMPORTED_MODULE_1__gestures_pan_gesture__["a" /* PanGesture */]));
  127739. function getContainer(ev) {
  127740. var ele = ev.target.closest('ion-item-sliding');
  127741. if (ele) {
  127742. return ele['$ionComponent'];
  127743. }
  127744. return null;
  127745. }
  127746. function clickedOptionButton(ev) {
  127747. var ele = ev.target.closest('ion-item-options>button');
  127748. return !!ele;
  127749. }
  127750. //# sourceMappingURL=item-sliding-gesture.js.map
  127751. /***/ }),
  127752. /* 371 */
  127753. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127754. "use strict";
  127755. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return LoadingPopIn; });
  127756. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return LoadingPopOut; });
  127757. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return LoadingMdPopIn; });
  127758. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return LoadingMdPopOut; });
  127759. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return LoadingWpPopIn; });
  127760. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return LoadingWpPopOut; });
  127761. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  127762. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_transition__ = __webpack_require__(42);
  127763. var __extends = (this && this.__extends) || (function () {
  127764. var extendStatics = Object.setPrototypeOf ||
  127765. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  127766. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  127767. return function (d, b) {
  127768. extendStatics(d, b);
  127769. function __() { this.constructor = d; }
  127770. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  127771. };
  127772. })();
  127773. /**
  127774. * Animations for loading
  127775. */
  127776. var LoadingPopIn = (function (_super) {
  127777. __extends(LoadingPopIn, _super);
  127778. function LoadingPopIn() {
  127779. return _super !== null && _super.apply(this, arguments) || this;
  127780. }
  127781. LoadingPopIn.prototype.init = function () {
  127782. var ele = this.enteringView.pageRef().nativeElement;
  127783. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127784. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.loading-wrapper'));
  127785. wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
  127786. backdrop.fromTo('opacity', 0.01, 0.3);
  127787. this
  127788. .easing('ease-in-out')
  127789. .duration(200)
  127790. .add(backdrop)
  127791. .add(wrapper);
  127792. };
  127793. return LoadingPopIn;
  127794. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127795. var LoadingPopOut = (function (_super) {
  127796. __extends(LoadingPopOut, _super);
  127797. function LoadingPopOut() {
  127798. return _super !== null && _super.apply(this, arguments) || this;
  127799. }
  127800. LoadingPopOut.prototype.init = function () {
  127801. var ele = this.leavingView.pageRef().nativeElement;
  127802. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127803. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.loading-wrapper'));
  127804. wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
  127805. backdrop.fromTo('opacity', 0.3, 0);
  127806. this
  127807. .easing('ease-in-out')
  127808. .duration(200)
  127809. .add(backdrop)
  127810. .add(wrapper);
  127811. };
  127812. return LoadingPopOut;
  127813. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127814. var LoadingMdPopIn = (function (_super) {
  127815. __extends(LoadingMdPopIn, _super);
  127816. function LoadingMdPopIn() {
  127817. return _super !== null && _super.apply(this, arguments) || this;
  127818. }
  127819. LoadingMdPopIn.prototype.init = function () {
  127820. var ele = this.enteringView.pageRef().nativeElement;
  127821. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127822. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.loading-wrapper'));
  127823. wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
  127824. backdrop.fromTo('opacity', 0.01, 0.5);
  127825. this
  127826. .easing('ease-in-out')
  127827. .duration(200)
  127828. .add(backdrop)
  127829. .add(wrapper);
  127830. };
  127831. return LoadingMdPopIn;
  127832. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127833. var LoadingMdPopOut = (function (_super) {
  127834. __extends(LoadingMdPopOut, _super);
  127835. function LoadingMdPopOut() {
  127836. return _super !== null && _super.apply(this, arguments) || this;
  127837. }
  127838. LoadingMdPopOut.prototype.init = function () {
  127839. var ele = this.leavingView.pageRef().nativeElement;
  127840. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127841. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.loading-wrapper'));
  127842. wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
  127843. backdrop.fromTo('opacity', 0.5, 0);
  127844. this
  127845. .easing('ease-in-out')
  127846. .duration(200)
  127847. .add(backdrop)
  127848. .add(wrapper);
  127849. };
  127850. return LoadingMdPopOut;
  127851. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127852. var LoadingWpPopIn = (function (_super) {
  127853. __extends(LoadingWpPopIn, _super);
  127854. function LoadingWpPopIn() {
  127855. return _super !== null && _super.apply(this, arguments) || this;
  127856. }
  127857. LoadingWpPopIn.prototype.init = function () {
  127858. var ele = this.enteringView.pageRef().nativeElement;
  127859. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127860. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.loading-wrapper'));
  127861. wrapper.fromTo('opacity', 0.01, 1).fromTo('scale', 1.3, 1);
  127862. backdrop.fromTo('opacity', 0.01, 0.16);
  127863. this
  127864. .easing('cubic-bezier(0,0,0.05,1)')
  127865. .duration(200)
  127866. .add(backdrop)
  127867. .add(wrapper);
  127868. };
  127869. return LoadingWpPopIn;
  127870. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127871. var LoadingWpPopOut = (function (_super) {
  127872. __extends(LoadingWpPopOut, _super);
  127873. function LoadingWpPopOut() {
  127874. return _super !== null && _super.apply(this, arguments) || this;
  127875. }
  127876. LoadingWpPopOut.prototype.init = function () {
  127877. var ele = this.leavingView.pageRef().nativeElement;
  127878. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  127879. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.loading-wrapper'));
  127880. wrapper.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 1.3);
  127881. backdrop.fromTo('opacity', 0.16, 0);
  127882. this
  127883. .easing('ease-out')
  127884. .duration(150)
  127885. .add(backdrop)
  127886. .add(wrapper);
  127887. };
  127888. return LoadingWpPopOut;
  127889. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  127890. //# sourceMappingURL=loading-transitions.js.map
  127891. /***/ }),
  127892. /* 372 */
  127893. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127894. "use strict";
  127895. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MenuContentGesture; });
  127896. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__ = __webpack_require__(13);
  127897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__gestures_slide_edge_gesture__ = __webpack_require__(92);
  127898. var __extends = (this && this.__extends) || (function () {
  127899. var extendStatics = Object.setPrototypeOf ||
  127900. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  127901. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  127902. return function (d, b) {
  127903. extendStatics(d, b);
  127904. function __() { this.constructor = d; }
  127905. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  127906. };
  127907. })();
  127908. /**
  127909. * Gesture attached to the content which the menu is assigned to
  127910. */
  127911. var MenuContentGesture = (function (_super) {
  127912. __extends(MenuContentGesture, _super);
  127913. function MenuContentGesture(plt, menu, gestureCtrl, domCtrl) {
  127914. var _this = _super.call(this, plt, plt.doc().body, {
  127915. direction: 'x',
  127916. edge: menu.side,
  127917. threshold: 5,
  127918. maxEdgeStart: menu.maxEdgeStart || 50,
  127919. zone: false,
  127920. passive: true,
  127921. domController: domCtrl,
  127922. gesture: gestureCtrl.createGesture({
  127923. name: __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__["d" /* GESTURE_MENU_SWIPE */],
  127924. priority: __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__["f" /* GESTURE_PRIORITY_MENU_SWIPE */],
  127925. disableScroll: true
  127926. })
  127927. }) || this;
  127928. _this.menu = menu;
  127929. return _this;
  127930. }
  127931. MenuContentGesture.prototype.canStart = function (ev) {
  127932. var menu = this.menu;
  127933. if (!menu.canSwipe()) {
  127934. return false;
  127935. }
  127936. if (menu.isOpen) {
  127937. return true;
  127938. }
  127939. else if (menu.getMenuController().getOpen()) {
  127940. return false;
  127941. }
  127942. return _super.prototype.canStart.call(this, ev);
  127943. };
  127944. // Set CSS, then wait one frame for it to apply before sliding starts
  127945. MenuContentGesture.prototype.onSlideBeforeStart = function () {
  127946. (void 0) /* console.debug */;
  127947. this.menu._swipeBeforeStart();
  127948. };
  127949. MenuContentGesture.prototype.onSlideStart = function () {
  127950. (void 0) /* console.debug */;
  127951. this.menu._swipeStart();
  127952. };
  127953. MenuContentGesture.prototype.onSlide = function (slide) {
  127954. var z = (this.menu.isRightSide !== this.plt.isRTL ? slide.min : slide.max);
  127955. var stepValue = (slide.distance / z);
  127956. this.menu._swipeProgress(stepValue);
  127957. };
  127958. MenuContentGesture.prototype.onSlideEnd = function (slide) {
  127959. var z = (this.menu.isRightSide !== this.plt.isRTL ? slide.min : slide.max);
  127960. var currentStepValue = (slide.distance / z);
  127961. var velocity = slide.velocity;
  127962. z = Math.abs(z * 0.5);
  127963. var shouldCompleteRight = (velocity >= 0)
  127964. && (velocity > 0.2 || slide.delta > z);
  127965. var shouldCompleteLeft = (velocity <= 0)
  127966. && (velocity < -0.2 || slide.delta < -z);
  127967. (void 0) /* console.debug */;
  127968. this.menu._swipeEnd(shouldCompleteLeft, shouldCompleteRight, currentStepValue, velocity);
  127969. };
  127970. MenuContentGesture.prototype.getElementStartPos = function (slide) {
  127971. var menu = this.menu;
  127972. if (menu.isRightSide !== this.plt.isRTL) {
  127973. return menu.isOpen ? slide.min : slide.max;
  127974. }
  127975. // left menu
  127976. return menu.isOpen ? slide.max : slide.min;
  127977. };
  127978. MenuContentGesture.prototype.getSlideBoundaries = function () {
  127979. var menu = this.menu;
  127980. if (menu.isRightSide !== this.plt.isRTL) {
  127981. return {
  127982. min: -menu.width(),
  127983. max: 0
  127984. };
  127985. }
  127986. // left menu
  127987. return {
  127988. min: 0,
  127989. max: menu.width()
  127990. };
  127991. };
  127992. return MenuContentGesture;
  127993. }(__WEBPACK_IMPORTED_MODULE_1__gestures_slide_edge_gesture__["a" /* SlideEdgeGesture */]));
  127994. //# sourceMappingURL=menu-gestures.js.map
  127995. /***/ }),
  127996. /* 373 */
  127997. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  127998. "use strict";
  127999. /* unused harmony export MenuType */
  128000. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  128001. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_menu_controller__ = __webpack_require__(41);
  128002. var __extends = (this && this.__extends) || (function () {
  128003. var extendStatics = Object.setPrototypeOf ||
  128004. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  128005. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  128006. return function (d, b) {
  128007. extendStatics(d, b);
  128008. function __() { this.constructor = d; }
  128009. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  128010. };
  128011. })();
  128012. /**
  128013. * @hidden
  128014. * Menu Type
  128015. * Base class which is extended by the various types. Each
  128016. * type will provide their own animations for open and close
  128017. * and registers itself with Menu.
  128018. */
  128019. var MenuType = (function () {
  128020. function MenuType(plt) {
  128021. this.ani = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt);
  128022. this.ani
  128023. .easing('cubic-bezier(0.0, 0.0, 0.2, 1)')
  128024. .easingReverse('cubic-bezier(0.4, 0.0, 0.6, 1)')
  128025. .duration(280);
  128026. }
  128027. MenuType.prototype.setOpen = function (shouldOpen, animated, done) {
  128028. var ani = this.ani
  128029. .onFinish(done, true, true)
  128030. .reverse(!shouldOpen);
  128031. if (animated) {
  128032. ani.play();
  128033. }
  128034. else {
  128035. ani.syncPlay();
  128036. }
  128037. };
  128038. MenuType.prototype.setProgressStart = function (isOpen) {
  128039. this.isOpening = !isOpen;
  128040. // the cloned animation should not use an easing curve during seek
  128041. this.ani
  128042. .reverse(isOpen)
  128043. .progressStart();
  128044. };
  128045. MenuType.prototype.setProgessStep = function (stepValue) {
  128046. // adjust progress value depending if it opening or closing
  128047. this.ani.progressStep(stepValue);
  128048. };
  128049. MenuType.prototype.setProgressEnd = function (shouldComplete, currentStepValue, velocity, done) {
  128050. var _this = this;
  128051. var isOpen = (this.isOpening && shouldComplete);
  128052. if (!this.isOpening && !shouldComplete) {
  128053. isOpen = true;
  128054. }
  128055. var ani = this.ani;
  128056. ani.onFinish(function () {
  128057. _this.isOpening = false;
  128058. done(isOpen);
  128059. }, true);
  128060. var factor = 1 - Math.min(Math.abs(velocity) / 4, 0.7);
  128061. var dur = ani.getDuration() * factor;
  128062. ani.progressEnd(shouldComplete, currentStepValue, dur);
  128063. };
  128064. MenuType.prototype.destroy = function () {
  128065. this.ani.destroy();
  128066. this.ani = null;
  128067. };
  128068. return MenuType;
  128069. }());
  128070. /**
  128071. * @hidden
  128072. * Menu Reveal Type
  128073. * The content slides over to reveal the menu underneath.
  128074. * The menu itself, which is under the content, does not move.
  128075. */
  128076. var MenuRevealType = (function (_super) {
  128077. __extends(MenuRevealType, _super);
  128078. function MenuRevealType(menu, plt) {
  128079. var _this = _super.call(this, plt) || this;
  128080. var openedX = (menu.width() * (menu.isRightSide ? -1 : 1)) + 'px';
  128081. var contentOpen = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, menu.getContentElement());
  128082. contentOpen.fromTo('translateX', '0px', openedX);
  128083. _this.ani.add(contentOpen);
  128084. return _this;
  128085. }
  128086. return MenuRevealType;
  128087. }(MenuType));
  128088. __WEBPACK_IMPORTED_MODULE_1__app_menu_controller__["a" /* MenuController */].registerType('reveal', MenuRevealType);
  128089. /**
  128090. * @hidden
  128091. * Menu Push Type
  128092. * The content slides over to reveal the menu underneath.
  128093. * The menu itself also slides over to reveal its bad self.
  128094. */
  128095. var MenuPushType = (function (_super) {
  128096. __extends(MenuPushType, _super);
  128097. function MenuPushType(menu, plt) {
  128098. var _this = _super.call(this, plt) || this;
  128099. var contentOpenedX, menuClosedX, menuOpenedX;
  128100. var width = menu.width();
  128101. if (menu.isRightSide) {
  128102. // right side
  128103. contentOpenedX = -width + 'px';
  128104. menuClosedX = width + 'px';
  128105. menuOpenedX = '0px';
  128106. }
  128107. else {
  128108. contentOpenedX = width + 'px';
  128109. menuOpenedX = '0px';
  128110. menuClosedX = -width + 'px';
  128111. }
  128112. var menuAni = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, menu.getMenuElement());
  128113. menuAni.fromTo('translateX', menuClosedX, menuOpenedX);
  128114. _this.ani.add(menuAni);
  128115. var contentApi = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, menu.getContentElement());
  128116. contentApi.fromTo('translateX', '0px', contentOpenedX);
  128117. _this.ani.add(contentApi);
  128118. return _this;
  128119. }
  128120. return MenuPushType;
  128121. }(MenuType));
  128122. __WEBPACK_IMPORTED_MODULE_1__app_menu_controller__["a" /* MenuController */].registerType('push', MenuPushType);
  128123. /**
  128124. * @hidden
  128125. * Menu Overlay Type
  128126. * The menu slides over the content. The content
  128127. * itself, which is under the menu, does not move.
  128128. */
  128129. var MenuOverlayType = (function (_super) {
  128130. __extends(MenuOverlayType, _super);
  128131. function MenuOverlayType(menu, plt) {
  128132. var _this = _super.call(this, plt) || this;
  128133. var closedX, openedX;
  128134. var width = menu.width();
  128135. if (menu.isRightSide) {
  128136. // right side
  128137. closedX = 8 + width + 'px';
  128138. openedX = '0px';
  128139. }
  128140. else {
  128141. // left side
  128142. closedX = -(8 + width) + 'px';
  128143. openedX = '0px';
  128144. }
  128145. var menuAni = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, menu.getMenuElement());
  128146. menuAni.fromTo('translateX', closedX, openedX);
  128147. _this.ani.add(menuAni);
  128148. var backdropApi = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](plt, menu.getBackdropElement());
  128149. backdropApi.fromTo('opacity', 0.01, 0.35);
  128150. _this.ani.add(backdropApi);
  128151. return _this;
  128152. }
  128153. return MenuOverlayType;
  128154. }(MenuType));
  128155. __WEBPACK_IMPORTED_MODULE_1__app_menu_controller__["a" /* MenuController */].registerType('overlay', MenuOverlayType);
  128156. //# sourceMappingURL=menu-types.js.map
  128157. /***/ }),
  128158. /* 374 */
  128159. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  128160. "use strict";
  128161. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ModalImpl; });
  128162. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  128163. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app_constants__ = __webpack_require__(47);
  128164. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__modal_component__ = __webpack_require__(112);
  128165. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__modal_transitions__ = __webpack_require__(658);
  128166. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__ = __webpack_require__(9);
  128167. var __extends = (this && this.__extends) || (function () {
  128168. var extendStatics = Object.setPrototypeOf ||
  128169. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  128170. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  128171. return function (d, b) {
  128172. extendStatics(d, b);
  128173. function __() { this.constructor = d; }
  128174. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  128175. };
  128176. })();
  128177. /**
  128178. * @hidden
  128179. */
  128180. var ModalImpl = (function (_super) {
  128181. __extends(ModalImpl, _super);
  128182. function ModalImpl(app, component, data, opts, config) {
  128183. if (opts === void 0) { opts = {}; }
  128184. var _this = this;
  128185. data = data || {};
  128186. data.component = component;
  128187. opts.showBackdrop = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.showBackdrop) ? !!opts.showBackdrop : true;
  128188. opts.enableBackdropDismiss = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : true;
  128189. data.opts = opts;
  128190. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_2__modal_component__["a" /* ModalCmp */], data, null) || this;
  128191. _this._app = app;
  128192. _this._enterAnimation = opts.enterAnimation;
  128193. _this._leaveAnimation = opts.leaveAnimation;
  128194. _this.isOverlay = true;
  128195. config.setTransition('modal-slide-in', __WEBPACK_IMPORTED_MODULE_3__modal_transitions__["c" /* ModalSlideIn */]);
  128196. config.setTransition('modal-slide-out', __WEBPACK_IMPORTED_MODULE_3__modal_transitions__["d" /* ModalSlideOut */]);
  128197. config.setTransition('modal-md-slide-in', __WEBPACK_IMPORTED_MODULE_3__modal_transitions__["a" /* ModalMDSlideIn */]);
  128198. config.setTransition('modal-md-slide-out', __WEBPACK_IMPORTED_MODULE_3__modal_transitions__["b" /* ModalMDSlideOut */]);
  128199. return _this;
  128200. }
  128201. /**
  128202. * @hidden
  128203. */
  128204. ModalImpl.prototype.getTransitionName = function (direction) {
  128205. var key;
  128206. if (direction === 'back') {
  128207. if (this._leaveAnimation) {
  128208. return this._leaveAnimation;
  128209. }
  128210. key = 'modalLeave';
  128211. }
  128212. else {
  128213. if (this._enterAnimation) {
  128214. return this._enterAnimation;
  128215. }
  128216. key = 'modalEnter';
  128217. }
  128218. return this._nav && this._nav.config.get(key);
  128219. };
  128220. /**
  128221. * Present the action sheet instance.
  128222. *
  128223. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  128224. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  128225. */
  128226. ModalImpl.prototype.present = function (navOptions) {
  128227. if (navOptions === void 0) { navOptions = {}; }
  128228. navOptions.minClickBlockDuration = navOptions.minClickBlockDuration || 400;
  128229. return this._app.present(this, navOptions, __WEBPACK_IMPORTED_MODULE_1__app_app_constants__["c" /* PORTAL_MODAL */]);
  128230. };
  128231. return ModalImpl;
  128232. }(__WEBPACK_IMPORTED_MODULE_4__navigation_view_controller__["a" /* ViewController */]));
  128233. //# sourceMappingURL=modal-impl.js.map
  128234. /***/ }),
  128235. /* 375 */
  128236. /***/ (function(module, exports, __webpack_require__) {
  128237. "use strict";
  128238. /* tslint:disable:no-unused-variable */
  128239. // Subject imported before Observable to bypass circular dependency issue since
  128240. // Subject extends Observable and Observable references Subject in it's
  128241. // definition
  128242. var Subject_1 = __webpack_require__(12);
  128243. exports.Subject = Subject_1.Subject;
  128244. exports.AnonymousSubject = Subject_1.AnonymousSubject;
  128245. /* tslint:enable:no-unused-variable */
  128246. var Observable_1 = __webpack_require__(0);
  128247. exports.Observable = Observable_1.Observable;
  128248. // statics
  128249. /* tslint:disable:no-use-before-declare */
  128250. __webpack_require__(376);
  128251. __webpack_require__(379);
  128252. __webpack_require__(382);
  128253. __webpack_require__(384);
  128254. __webpack_require__(387);
  128255. __webpack_require__(390);
  128256. __webpack_require__(392);
  128257. __webpack_require__(393);
  128258. __webpack_require__(394);
  128259. __webpack_require__(396);
  128260. __webpack_require__(399);
  128261. __webpack_require__(400);
  128262. __webpack_require__(403);
  128263. __webpack_require__(406);
  128264. __webpack_require__(411);
  128265. __webpack_require__(412);
  128266. __webpack_require__(413);
  128267. __webpack_require__(416);
  128268. __webpack_require__(417);
  128269. __webpack_require__(419);
  128270. __webpack_require__(422);
  128271. __webpack_require__(425);
  128272. __webpack_require__(428);
  128273. __webpack_require__(430);
  128274. __webpack_require__(432);
  128275. //dom
  128276. __webpack_require__(434);
  128277. __webpack_require__(436);
  128278. //operators
  128279. __webpack_require__(442);
  128280. __webpack_require__(444);
  128281. __webpack_require__(446);
  128282. __webpack_require__(448);
  128283. __webpack_require__(450);
  128284. __webpack_require__(224);
  128285. __webpack_require__(453);
  128286. __webpack_require__(455);
  128287. __webpack_require__(457);
  128288. __webpack_require__(459);
  128289. __webpack_require__(461);
  128290. __webpack_require__(463);
  128291. __webpack_require__(465);
  128292. __webpack_require__(467);
  128293. __webpack_require__(469);
  128294. __webpack_require__(471);
  128295. __webpack_require__(473);
  128296. __webpack_require__(475);
  128297. __webpack_require__(477);
  128298. __webpack_require__(479);
  128299. __webpack_require__(482);
  128300. __webpack_require__(484);
  128301. __webpack_require__(486);
  128302. __webpack_require__(488);
  128303. __webpack_require__(490);
  128304. __webpack_require__(492);
  128305. __webpack_require__(494);
  128306. __webpack_require__(496);
  128307. __webpack_require__(498);
  128308. __webpack_require__(500);
  128309. __webpack_require__(502);
  128310. __webpack_require__(504);
  128311. __webpack_require__(506);
  128312. __webpack_require__(511);
  128313. __webpack_require__(513);
  128314. __webpack_require__(515);
  128315. __webpack_require__(517);
  128316. __webpack_require__(519);
  128317. __webpack_require__(521);
  128318. __webpack_require__(523);
  128319. __webpack_require__(251);
  128320. __webpack_require__(525);
  128321. __webpack_require__(527);
  128322. __webpack_require__(529);
  128323. __webpack_require__(531);
  128324. __webpack_require__(533);
  128325. __webpack_require__(535);
  128326. __webpack_require__(537);
  128327. __webpack_require__(539);
  128328. __webpack_require__(541);
  128329. __webpack_require__(543);
  128330. __webpack_require__(545);
  128331. __webpack_require__(547);
  128332. __webpack_require__(549);
  128333. __webpack_require__(551);
  128334. __webpack_require__(554);
  128335. __webpack_require__(556);
  128336. __webpack_require__(558);
  128337. __webpack_require__(560);
  128338. __webpack_require__(562);
  128339. __webpack_require__(564);
  128340. __webpack_require__(566);
  128341. __webpack_require__(568);
  128342. __webpack_require__(570);
  128343. __webpack_require__(572);
  128344. __webpack_require__(574);
  128345. __webpack_require__(576);
  128346. __webpack_require__(578);
  128347. __webpack_require__(580);
  128348. __webpack_require__(582);
  128349. __webpack_require__(584);
  128350. __webpack_require__(585);
  128351. __webpack_require__(587);
  128352. __webpack_require__(589);
  128353. __webpack_require__(591);
  128354. __webpack_require__(593);
  128355. __webpack_require__(595);
  128356. __webpack_require__(597);
  128357. __webpack_require__(599);
  128358. __webpack_require__(608);
  128359. __webpack_require__(610);
  128360. __webpack_require__(612);
  128361. __webpack_require__(614);
  128362. __webpack_require__(616);
  128363. __webpack_require__(106);
  128364. __webpack_require__(618);
  128365. __webpack_require__(620);
  128366. __webpack_require__(622);
  128367. __webpack_require__(624);
  128368. __webpack_require__(625);
  128369. __webpack_require__(627);
  128370. __webpack_require__(629);
  128371. __webpack_require__(631);
  128372. __webpack_require__(633);
  128373. __webpack_require__(634);
  128374. __webpack_require__(636);
  128375. __webpack_require__(638);
  128376. __webpack_require__(640);
  128377. __webpack_require__(642);
  128378. __webpack_require__(644);
  128379. __webpack_require__(646);
  128380. __webpack_require__(648);
  128381. /* tslint:disable:no-unused-variable */
  128382. var Subscription_1 = __webpack_require__(14);
  128383. exports.Subscription = Subscription_1.Subscription;
  128384. var Subscriber_1 = __webpack_require__(4);
  128385. exports.Subscriber = Subscriber_1.Subscriber;
  128386. var AsyncSubject_1 = __webpack_require__(73);
  128387. exports.AsyncSubject = AsyncSubject_1.AsyncSubject;
  128388. var ReplaySubject_1 = __webpack_require__(78);
  128389. exports.ReplaySubject = ReplaySubject_1.ReplaySubject;
  128390. var BehaviorSubject_1 = __webpack_require__(264);
  128391. exports.BehaviorSubject = BehaviorSubject_1.BehaviorSubject;
  128392. var ConnectableObservable_1 = __webpack_require__(162);
  128393. exports.ConnectableObservable = ConnectableObservable_1.ConnectableObservable;
  128394. var Notification_1 = __webpack_require__(55);
  128395. exports.Notification = Notification_1.Notification;
  128396. var EmptyError_1 = __webpack_require__(79);
  128397. exports.EmptyError = EmptyError_1.EmptyError;
  128398. var ArgumentOutOfRangeError_1 = __webpack_require__(59);
  128399. exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;
  128400. var ObjectUnsubscribedError_1 = __webpack_require__(66);
  128401. exports.ObjectUnsubscribedError = ObjectUnsubscribedError_1.ObjectUnsubscribedError;
  128402. var TimeoutError_1 = __webpack_require__(292);
  128403. exports.TimeoutError = TimeoutError_1.TimeoutError;
  128404. var UnsubscriptionError_1 = __webpack_require__(155);
  128405. exports.UnsubscriptionError = UnsubscriptionError_1.UnsubscriptionError;
  128406. var timeInterval_1 = __webpack_require__(289);
  128407. exports.TimeInterval = timeInterval_1.TimeInterval;
  128408. var timestamp_1 = __webpack_require__(126);
  128409. exports.Timestamp = timestamp_1.Timestamp;
  128410. var TestScheduler_1 = __webpack_require__(650);
  128411. exports.TestScheduler = TestScheduler_1.TestScheduler;
  128412. var VirtualTimeScheduler_1 = __webpack_require__(305);
  128413. exports.VirtualTimeScheduler = VirtualTimeScheduler_1.VirtualTimeScheduler;
  128414. var AjaxObservable_1 = __webpack_require__(217);
  128415. exports.AjaxResponse = AjaxObservable_1.AjaxResponse;
  128416. exports.AjaxError = AjaxObservable_1.AjaxError;
  128417. exports.AjaxTimeoutError = AjaxObservable_1.AjaxTimeoutError;
  128418. var pipe_1 = __webpack_require__(87);
  128419. exports.pipe = pipe_1.pipe;
  128420. var asap_1 = __webpack_require__(282);
  128421. var async_1 = __webpack_require__(10);
  128422. var queue_1 = __webpack_require__(218);
  128423. var animationFrame_1 = __webpack_require__(653);
  128424. var rxSubscriber_1 = __webpack_require__(63);
  128425. var iterator_1 = __webpack_require__(46);
  128426. var observable_1 = __webpack_require__(64);
  128427. var _operators = __webpack_require__(657);
  128428. exports.operators = _operators;
  128429. /* tslint:enable:no-unused-variable */
  128430. /**
  128431. * @typedef {Object} Rx.Scheduler
  128432. * @property {Scheduler} queue Schedules on a queue in the current event frame
  128433. * (trampoline scheduler). Use this for iteration operations.
  128434. * @property {Scheduler} asap Schedules on the micro task queue, which uses the
  128435. * fastest transport mechanism available, either Node.js' `process.nextTick()`
  128436. * or Web Worker MessageChannel or setTimeout or others. Use this for
  128437. * asynchronous conversions.
  128438. * @property {Scheduler} async Schedules work with `setInterval`. Use this for
  128439. * time-based operations.
  128440. * @property {Scheduler} animationFrame Schedules work with `requestAnimationFrame`.
  128441. * Use this for synchronizing with the platform's painting
  128442. */
  128443. var Scheduler = {
  128444. asap: asap_1.asap,
  128445. queue: queue_1.queue,
  128446. animationFrame: animationFrame_1.animationFrame,
  128447. async: async_1.async
  128448. };
  128449. exports.Scheduler = Scheduler;
  128450. /**
  128451. * @typedef {Object} Rx.Symbol
  128452. * @property {Symbol|string} rxSubscriber A symbol to use as a property name to
  128453. * retrieve an "Rx safe" Observer from an object. "Rx safety" can be defined as
  128454. * an object that has all of the traits of an Rx Subscriber, including the
  128455. * ability to add and remove subscriptions to the subscription chain and
  128456. * guarantees involving event triggering (can't "next" after unsubscription,
  128457. * etc).
  128458. * @property {Symbol|string} observable A symbol to use as a property name to
  128459. * retrieve an Observable as defined by the [ECMAScript "Observable" spec](https://github.com/zenparsing/es-observable).
  128460. * @property {Symbol|string} iterator The ES6 symbol to use as a property name
  128461. * to retrieve an iterator from an object.
  128462. */
  128463. var Symbol = {
  128464. rxSubscriber: rxSubscriber_1.rxSubscriber,
  128465. observable: observable_1.observable,
  128466. iterator: iterator_1.iterator
  128467. };
  128468. exports.Symbol = Symbol;
  128469. //# sourceMappingURL=Rx.js.map
  128470. /***/ }),
  128471. /* 376 */
  128472. /***/ (function(module, exports, __webpack_require__) {
  128473. "use strict";
  128474. var Observable_1 = __webpack_require__(0);
  128475. var bindCallback_1 = __webpack_require__(377);
  128476. Observable_1.Observable.bindCallback = bindCallback_1.bindCallback;
  128477. //# sourceMappingURL=bindCallback.js.map
  128478. /***/ }),
  128479. /* 377 */
  128480. /***/ (function(module, exports, __webpack_require__) {
  128481. "use strict";
  128482. var BoundCallbackObservable_1 = __webpack_require__(378);
  128483. exports.bindCallback = BoundCallbackObservable_1.BoundCallbackObservable.create;
  128484. //# sourceMappingURL=bindCallback.js.map
  128485. /***/ }),
  128486. /* 378 */
  128487. /***/ (function(module, exports, __webpack_require__) {
  128488. "use strict";
  128489. var __extends = (this && this.__extends) || function (d, b) {
  128490. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  128491. function __() { this.constructor = d; }
  128492. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  128493. };
  128494. var Observable_1 = __webpack_require__(0);
  128495. var tryCatch_1 = __webpack_require__(17);
  128496. var errorObject_1 = __webpack_require__(16);
  128497. var AsyncSubject_1 = __webpack_require__(73);
  128498. /**
  128499. * We need this JSDoc comment for affecting ESDoc.
  128500. * @extends {Ignored}
  128501. * @hide true
  128502. */
  128503. var BoundCallbackObservable = (function (_super) {
  128504. __extends(BoundCallbackObservable, _super);
  128505. function BoundCallbackObservable(callbackFunc, selector, args, context, scheduler) {
  128506. _super.call(this);
  128507. this.callbackFunc = callbackFunc;
  128508. this.selector = selector;
  128509. this.args = args;
  128510. this.context = context;
  128511. this.scheduler = scheduler;
  128512. }
  128513. /* tslint:enable:max-line-length */
  128514. /**
  128515. * Converts a callback API to a function that returns an Observable.
  128516. *
  128517. * <span class="informal">Give it a function `f` of type `f(x, callback)` and
  128518. * it will return a function `g` that when called as `g(x)` will output an
  128519. * Observable.</span>
  128520. *
  128521. * `bindCallback` is not an operator because its input and output are not
  128522. * Observables. The input is a function `func` with some parameters, the
  128523. * last parameter must be a callback function that `func` calls when it is
  128524. * done.
  128525. *
  128526. * The output of `bindCallback` is a function that takes the same parameters
  128527. * as `func`, except the last one (the callback). When the output function
  128528. * is called with arguments it will return an Observable. If function `func`
  128529. * calls its callback with one argument the Observable will emit that value.
  128530. * If on the other hand the callback is called with multiple values the resulting
  128531. * Observable will emit an array with said values as arguments.
  128532. *
  128533. * It is very important to remember that input function `func` is not called
  128534. * when the output function is, but rather when the Observable returned by the output
  128535. * function is subscribed. This means if `func` makes an AJAX request, that request
  128536. * will be made every time someone subscribes to the resulting Observable, but not before.
  128537. *
  128538. * Optionally, a selector function can be passed to `bindObservable`. The selector function
  128539. * takes the same arguments as the callback and returns the value that will be emitted by the Observable.
  128540. * Even though by default multiple arguments passed to callback appear in the stream as an array
  128541. * the selector function will be called with arguments directly, just as the callback would.
  128542. * This means you can imagine the default selector (when one is not provided explicitly)
  128543. * as a function that aggregates all its arguments into an array, or simply returns first argument
  128544. * if there is only one.
  128545. *
  128546. * The last optional parameter - {@link Scheduler} - can be used to control when the call
  128547. * to `func` happens after someone subscribes to Observable, as well as when results
  128548. * passed to callback will be emitted. By default, the subscription to an Observable calls `func`
  128549. * synchronously, but using `Scheduler.async` as the last parameter will defer the call to `func`,
  128550. * just like wrapping the call in `setTimeout` with a timeout of `0` would. If you use the async Scheduler
  128551. * and call `subscribe` on the output Observable all function calls that are currently executing
  128552. * will end before `func` is invoked.
  128553. *
  128554. * By default results passed to the callback are emitted immediately after `func` invokes the callback.
  128555. * In particular, if the callback is called synchronously the subscription of the resulting Observable
  128556. * will call the `next` function synchronously as well. If you want to defer that call,
  128557. * you may use `Scheduler.async` just as before. This means that by using `Scheduler.async` you can
  128558. * ensure that `func` always calls its callback asynchronously, thus avoiding terrifying Zalgo.
  128559. *
  128560. * Note that the Observable created by the output function will always emit a single value
  128561. * and then complete immediately. If `func` calls the callback multiple times, values from subsequent
  128562. * calls will not appear in the stream. If you need to listen for multiple calls,
  128563. * you probably want to use {@link fromEvent} or {@link fromEventPattern} instead.
  128564. *
  128565. * If `func` depends on some context (`this` property) and is not already bound the context of `func`
  128566. * will be the context that the output function has at call time. In particular, if `func`
  128567. * is called as a method of some objec and if `func` is not already bound, in order to preserve the context
  128568. * it is recommended that the context of the output function is set to that object as well.
  128569. *
  128570. * If the input function calls its callback in the "node style" (i.e. first argument to callback is
  128571. * optional error parameter signaling whether the call failed or not), {@link bindNodeCallback}
  128572. * provides convenient error handling and probably is a better choice.
  128573. * `bindCallback` will treat such functions the same as any other and error parameters
  128574. * (whether passed or not) will always be interpreted as regular callback argument.
  128575. *
  128576. *
  128577. * @example <caption>Convert jQuery's getJSON to an Observable API</caption>
  128578. * // Suppose we have jQuery.getJSON('/my/url', callback)
  128579. * var getJSONAsObservable = Rx.Observable.bindCallback(jQuery.getJSON);
  128580. * var result = getJSONAsObservable('/my/url');
  128581. * result.subscribe(x => console.log(x), e => console.error(e));
  128582. *
  128583. *
  128584. * @example <caption>Receive an array of arguments passed to a callback</caption>
  128585. * someFunction((a, b, c) => {
  128586. * console.log(a); // 5
  128587. * console.log(b); // 'some string'
  128588. * console.log(c); // {someProperty: 'someValue'}
  128589. * });
  128590. *
  128591. * const boundSomeFunction = Rx.Observable.bindCallback(someFunction);
  128592. * boundSomeFunction().subscribe(values => {
  128593. * console.log(values) // [5, 'some string', {someProperty: 'someValue'}]
  128594. * });
  128595. *
  128596. *
  128597. * @example <caption>Use bindCallback with a selector function</caption>
  128598. * someFunction((a, b, c) => {
  128599. * console.log(a); // 'a'
  128600. * console.log(b); // 'b'
  128601. * console.log(c); // 'c'
  128602. * });
  128603. *
  128604. * const boundSomeFunction = Rx.Observable.bindCallback(someFunction, (a, b, c) => a + b + c);
  128605. * boundSomeFunction().subscribe(value => {
  128606. * console.log(value) // 'abc'
  128607. * });
  128608. *
  128609. *
  128610. * @example <caption>Compare behaviour with and without async Scheduler</caption>
  128611. * function iCallMyCallbackSynchronously(cb) {
  128612. * cb();
  128613. * }
  128614. *
  128615. * const boundSyncFn = Rx.Observable.bindCallback(iCallMyCallbackSynchronously);
  128616. * const boundAsyncFn = Rx.Observable.bindCallback(iCallMyCallbackSynchronously, null, Rx.Scheduler.async);
  128617. *
  128618. * boundSyncFn().subscribe(() => console.log('I was sync!'));
  128619. * boundAsyncFn().subscribe(() => console.log('I was async!'));
  128620. * console.log('This happened...');
  128621. *
  128622. * // Logs:
  128623. * // I was sync!
  128624. * // This happened...
  128625. * // I was async!
  128626. *
  128627. *
  128628. * @example <caption>Use bindCallback on an object method</caption>
  128629. * const boundMethod = Rx.Observable.bindCallback(someObject.methodWithCallback);
  128630. * boundMethod.call(someObject) // make sure methodWithCallback has access to someObject
  128631. * .subscribe(subscriber);
  128632. *
  128633. *
  128634. * @see {@link bindNodeCallback}
  128635. * @see {@link from}
  128636. * @see {@link fromPromise}
  128637. *
  128638. * @param {function} func A function with a callback as the last parameter.
  128639. * @param {function} [selector] A function which takes the arguments from the
  128640. * callback and maps them to a value that is emitted on the output Observable.
  128641. * @param {Scheduler} [scheduler] The scheduler on which to schedule the
  128642. * callbacks.
  128643. * @return {function(...params: *): Observable} A function which returns the
  128644. * Observable that delivers the same values the callback would deliver.
  128645. * @static true
  128646. * @name bindCallback
  128647. * @owner Observable
  128648. */
  128649. BoundCallbackObservable.create = function (func, selector, scheduler) {
  128650. if (selector === void 0) { selector = undefined; }
  128651. return function () {
  128652. var args = [];
  128653. for (var _i = 0; _i < arguments.length; _i++) {
  128654. args[_i - 0] = arguments[_i];
  128655. }
  128656. return new BoundCallbackObservable(func, selector, args, this, scheduler);
  128657. };
  128658. };
  128659. /** @deprecated internal use only */ BoundCallbackObservable.prototype._subscribe = function (subscriber) {
  128660. var callbackFunc = this.callbackFunc;
  128661. var args = this.args;
  128662. var scheduler = this.scheduler;
  128663. var subject = this.subject;
  128664. if (!scheduler) {
  128665. if (!subject) {
  128666. subject = this.subject = new AsyncSubject_1.AsyncSubject();
  128667. var handler = function handlerFn() {
  128668. var innerArgs = [];
  128669. for (var _i = 0; _i < arguments.length; _i++) {
  128670. innerArgs[_i - 0] = arguments[_i];
  128671. }
  128672. var source = handlerFn.source;
  128673. var selector = source.selector, subject = source.subject;
  128674. if (selector) {
  128675. var result_1 = tryCatch_1.tryCatch(selector).apply(this, innerArgs);
  128676. if (result_1 === errorObject_1.errorObject) {
  128677. subject.error(errorObject_1.errorObject.e);
  128678. }
  128679. else {
  128680. subject.next(result_1);
  128681. subject.complete();
  128682. }
  128683. }
  128684. else {
  128685. subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
  128686. subject.complete();
  128687. }
  128688. };
  128689. // use named function instance to avoid closure.
  128690. handler.source = this;
  128691. var result = tryCatch_1.tryCatch(callbackFunc).apply(this.context, args.concat(handler));
  128692. if (result === errorObject_1.errorObject) {
  128693. subject.error(errorObject_1.errorObject.e);
  128694. }
  128695. }
  128696. return subject.subscribe(subscriber);
  128697. }
  128698. else {
  128699. return scheduler.schedule(BoundCallbackObservable.dispatch, 0, { source: this, subscriber: subscriber, context: this.context });
  128700. }
  128701. };
  128702. BoundCallbackObservable.dispatch = function (state) {
  128703. var self = this;
  128704. var source = state.source, subscriber = state.subscriber, context = state.context;
  128705. var callbackFunc = source.callbackFunc, args = source.args, scheduler = source.scheduler;
  128706. var subject = source.subject;
  128707. if (!subject) {
  128708. subject = source.subject = new AsyncSubject_1.AsyncSubject();
  128709. var handler = function handlerFn() {
  128710. var innerArgs = [];
  128711. for (var _i = 0; _i < arguments.length; _i++) {
  128712. innerArgs[_i - 0] = arguments[_i];
  128713. }
  128714. var source = handlerFn.source;
  128715. var selector = source.selector, subject = source.subject;
  128716. if (selector) {
  128717. var result_2 = tryCatch_1.tryCatch(selector).apply(this, innerArgs);
  128718. if (result_2 === errorObject_1.errorObject) {
  128719. self.add(scheduler.schedule(dispatchError, 0, { err: errorObject_1.errorObject.e, subject: subject }));
  128720. }
  128721. else {
  128722. self.add(scheduler.schedule(dispatchNext, 0, { value: result_2, subject: subject }));
  128723. }
  128724. }
  128725. else {
  128726. var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
  128727. self.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
  128728. }
  128729. };
  128730. // use named function to pass values in without closure
  128731. handler.source = source;
  128732. var result = tryCatch_1.tryCatch(callbackFunc).apply(context, args.concat(handler));
  128733. if (result === errorObject_1.errorObject) {
  128734. subject.error(errorObject_1.errorObject.e);
  128735. }
  128736. }
  128737. self.add(subject.subscribe(subscriber));
  128738. };
  128739. return BoundCallbackObservable;
  128740. }(Observable_1.Observable));
  128741. exports.BoundCallbackObservable = BoundCallbackObservable;
  128742. function dispatchNext(arg) {
  128743. var value = arg.value, subject = arg.subject;
  128744. subject.next(value);
  128745. subject.complete();
  128746. }
  128747. function dispatchError(arg) {
  128748. var err = arg.err, subject = arg.subject;
  128749. subject.error(err);
  128750. }
  128751. //# sourceMappingURL=BoundCallbackObservable.js.map
  128752. /***/ }),
  128753. /* 379 */
  128754. /***/ (function(module, exports, __webpack_require__) {
  128755. "use strict";
  128756. var Observable_1 = __webpack_require__(0);
  128757. var bindNodeCallback_1 = __webpack_require__(380);
  128758. Observable_1.Observable.bindNodeCallback = bindNodeCallback_1.bindNodeCallback;
  128759. //# sourceMappingURL=bindNodeCallback.js.map
  128760. /***/ }),
  128761. /* 380 */
  128762. /***/ (function(module, exports, __webpack_require__) {
  128763. "use strict";
  128764. var BoundNodeCallbackObservable_1 = __webpack_require__(381);
  128765. exports.bindNodeCallback = BoundNodeCallbackObservable_1.BoundNodeCallbackObservable.create;
  128766. //# sourceMappingURL=bindNodeCallback.js.map
  128767. /***/ }),
  128768. /* 381 */
  128769. /***/ (function(module, exports, __webpack_require__) {
  128770. "use strict";
  128771. var __extends = (this && this.__extends) || function (d, b) {
  128772. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  128773. function __() { this.constructor = d; }
  128774. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  128775. };
  128776. var Observable_1 = __webpack_require__(0);
  128777. var tryCatch_1 = __webpack_require__(17);
  128778. var errorObject_1 = __webpack_require__(16);
  128779. var AsyncSubject_1 = __webpack_require__(73);
  128780. /**
  128781. * We need this JSDoc comment for affecting ESDoc.
  128782. * @extends {Ignored}
  128783. * @hide true
  128784. */
  128785. var BoundNodeCallbackObservable = (function (_super) {
  128786. __extends(BoundNodeCallbackObservable, _super);
  128787. function BoundNodeCallbackObservable(callbackFunc, selector, args, context, scheduler) {
  128788. _super.call(this);
  128789. this.callbackFunc = callbackFunc;
  128790. this.selector = selector;
  128791. this.args = args;
  128792. this.context = context;
  128793. this.scheduler = scheduler;
  128794. }
  128795. /* tslint:enable:max-line-length */
  128796. /**
  128797. * Converts a Node.js-style callback API to a function that returns an
  128798. * Observable.
  128799. *
  128800. * <span class="informal">It's just like {@link bindCallback}, but the
  128801. * callback is expected to be of type `callback(error, result)`.</span>
  128802. *
  128803. * `bindNodeCallback` is not an operator because its input and output are not
  128804. * Observables. The input is a function `func` with some parameters, but the
  128805. * last parameter must be a callback function that `func` calls when it is
  128806. * done. The callback function is expected to follow Node.js conventions,
  128807. * where the first argument to the callback is an error object, signaling
  128808. * whether call was successful. If that object is passed to callback, it means
  128809. * something went wrong.
  128810. *
  128811. * The output of `bindNodeCallback` is a function that takes the same
  128812. * parameters as `func`, except the last one (the callback). When the output
  128813. * function is called with arguments, it will return an Observable.
  128814. * If `func` calls its callback with error parameter present, Observable will
  128815. * error with that value as well. If error parameter is not passed, Observable will emit
  128816. * second parameter. If there are more parameters (third and so on),
  128817. * Observable will emit an array with all arguments, except first error argument.
  128818. *
  128819. * Optionally `bindNodeCallback` accepts selector function, which allows you to
  128820. * make resulting Observable emit value computed by selector, instead of regular
  128821. * callback arguments. It works similarly to {@link bindCallback} selector, but
  128822. * Node.js-style error argument will never be passed to that function.
  128823. *
  128824. * Note that `func` will not be called at the same time output function is,
  128825. * but rather whenever resulting Observable is subscribed. By default call to
  128826. * `func` will happen synchronously after subscription, but that can be changed
  128827. * with proper {@link Scheduler} provided as optional third parameter. Scheduler
  128828. * can also control when values from callback will be emitted by Observable.
  128829. * To find out more, check out documentation for {@link bindCallback}, where
  128830. * Scheduler works exactly the same.
  128831. *
  128832. * As in {@link bindCallback}, context (`this` property) of input function will be set to context
  128833. * of returned function, when it is called.
  128834. *
  128835. * After Observable emits value, it will complete immediately. This means
  128836. * even if `func` calls callback again, values from second and consecutive
  128837. * calls will never appear on the stream. If you need to handle functions
  128838. * that call callbacks multiple times, check out {@link fromEvent} or
  128839. * {@link fromEventPattern} instead.
  128840. *
  128841. * Note that `bindNodeCallback` can be used in non-Node.js environments as well.
  128842. * "Node.js-style" callbacks are just a convention, so if you write for
  128843. * browsers or any other environment and API you use implements that callback style,
  128844. * `bindNodeCallback` can be safely used on that API functions as well.
  128845. *
  128846. * Remember that Error object passed to callback does not have to be an instance
  128847. * of JavaScript built-in `Error` object. In fact, it does not even have to an object.
  128848. * Error parameter of callback function is interpreted as "present", when value
  128849. * of that parameter is truthy. It could be, for example, non-zero number, non-empty
  128850. * string or boolean `true`. In all of these cases resulting Observable would error
  128851. * with that value. This means usually regular style callbacks will fail very often when
  128852. * `bindNodeCallback` is used. If your Observable errors much more often then you
  128853. * would expect, check if callback really is called in Node.js-style and, if not,
  128854. * switch to {@link bindCallback} instead.
  128855. *
  128856. * Note that even if error parameter is technically present in callback, but its value
  128857. * is falsy, it still won't appear in array emitted by Observable or in selector function.
  128858. *
  128859. *
  128860. * @example <caption>Read a file from the filesystem and get the data as an Observable</caption>
  128861. * import * as fs from 'fs';
  128862. * var readFileAsObservable = Rx.Observable.bindNodeCallback(fs.readFile);
  128863. * var result = readFileAsObservable('./roadNames.txt', 'utf8');
  128864. * result.subscribe(x => console.log(x), e => console.error(e));
  128865. *
  128866. *
  128867. * @example <caption>Use on function calling callback with multiple arguments</caption>
  128868. * someFunction((err, a, b) => {
  128869. * console.log(err); // null
  128870. * console.log(a); // 5
  128871. * console.log(b); // "some string"
  128872. * });
  128873. * var boundSomeFunction = Rx.Observable.bindNodeCallback(someFunction);
  128874. * boundSomeFunction()
  128875. * .subscribe(value => {
  128876. * console.log(value); // [5, "some string"]
  128877. * });
  128878. *
  128879. *
  128880. * @example <caption>Use with selector function</caption>
  128881. * someFunction((err, a, b) => {
  128882. * console.log(err); // undefined
  128883. * console.log(a); // "abc"
  128884. * console.log(b); // "DEF"
  128885. * });
  128886. * var boundSomeFunction = Rx.Observable.bindNodeCallback(someFunction, (a, b) => a + b);
  128887. * boundSomeFunction()
  128888. * .subscribe(value => {
  128889. * console.log(value); // "abcDEF"
  128890. * });
  128891. *
  128892. *
  128893. * @example <caption>Use on function calling callback in regular style</caption>
  128894. * someFunction(a => {
  128895. * console.log(a); // 5
  128896. * });
  128897. * var boundSomeFunction = Rx.Observable.bindNodeCallback(someFunction);
  128898. * boundSomeFunction()
  128899. * .subscribe(
  128900. * value => {} // never gets called
  128901. * err => console.log(err) // 5
  128902. *);
  128903. *
  128904. *
  128905. * @see {@link bindCallback}
  128906. * @see {@link from}
  128907. * @see {@link fromPromise}
  128908. *
  128909. * @param {function} func Function with a Node.js-style callback as the last parameter.
  128910. * @param {function} [selector] A function which takes the arguments from the
  128911. * callback and maps those to a value to emit on the output Observable.
  128912. * @param {Scheduler} [scheduler] The scheduler on which to schedule the
  128913. * callbacks.
  128914. * @return {function(...params: *): Observable} A function which returns the
  128915. * Observable that delivers the same values the Node.js callback would
  128916. * deliver.
  128917. * @static true
  128918. * @name bindNodeCallback
  128919. * @owner Observable
  128920. */
  128921. BoundNodeCallbackObservable.create = function (func, selector, scheduler) {
  128922. if (selector === void 0) { selector = undefined; }
  128923. return function () {
  128924. var args = [];
  128925. for (var _i = 0; _i < arguments.length; _i++) {
  128926. args[_i - 0] = arguments[_i];
  128927. }
  128928. return new BoundNodeCallbackObservable(func, selector, args, this, scheduler);
  128929. };
  128930. };
  128931. /** @deprecated internal use only */ BoundNodeCallbackObservable.prototype._subscribe = function (subscriber) {
  128932. var callbackFunc = this.callbackFunc;
  128933. var args = this.args;
  128934. var scheduler = this.scheduler;
  128935. var subject = this.subject;
  128936. if (!scheduler) {
  128937. if (!subject) {
  128938. subject = this.subject = new AsyncSubject_1.AsyncSubject();
  128939. var handler = function handlerFn() {
  128940. var innerArgs = [];
  128941. for (var _i = 0; _i < arguments.length; _i++) {
  128942. innerArgs[_i - 0] = arguments[_i];
  128943. }
  128944. var source = handlerFn.source;
  128945. var selector = source.selector, subject = source.subject;
  128946. var err = innerArgs.shift();
  128947. if (err) {
  128948. subject.error(err);
  128949. }
  128950. else if (selector) {
  128951. var result_1 = tryCatch_1.tryCatch(selector).apply(this, innerArgs);
  128952. if (result_1 === errorObject_1.errorObject) {
  128953. subject.error(errorObject_1.errorObject.e);
  128954. }
  128955. else {
  128956. subject.next(result_1);
  128957. subject.complete();
  128958. }
  128959. }
  128960. else {
  128961. subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
  128962. subject.complete();
  128963. }
  128964. };
  128965. // use named function instance to avoid closure.
  128966. handler.source = this;
  128967. var result = tryCatch_1.tryCatch(callbackFunc).apply(this.context, args.concat(handler));
  128968. if (result === errorObject_1.errorObject) {
  128969. subject.error(errorObject_1.errorObject.e);
  128970. }
  128971. }
  128972. return subject.subscribe(subscriber);
  128973. }
  128974. else {
  128975. return scheduler.schedule(dispatch, 0, { source: this, subscriber: subscriber, context: this.context });
  128976. }
  128977. };
  128978. return BoundNodeCallbackObservable;
  128979. }(Observable_1.Observable));
  128980. exports.BoundNodeCallbackObservable = BoundNodeCallbackObservable;
  128981. function dispatch(state) {
  128982. var self = this;
  128983. var source = state.source, subscriber = state.subscriber, context = state.context;
  128984. // XXX: cast to `any` to access to the private field in `source`.
  128985. var _a = source, callbackFunc = _a.callbackFunc, args = _a.args, scheduler = _a.scheduler;
  128986. var subject = source.subject;
  128987. if (!subject) {
  128988. subject = source.subject = new AsyncSubject_1.AsyncSubject();
  128989. var handler = function handlerFn() {
  128990. var innerArgs = [];
  128991. for (var _i = 0; _i < arguments.length; _i++) {
  128992. innerArgs[_i - 0] = arguments[_i];
  128993. }
  128994. var source = handlerFn.source;
  128995. var selector = source.selector, subject = source.subject;
  128996. var err = innerArgs.shift();
  128997. if (err) {
  128998. self.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
  128999. }
  129000. else if (selector) {
  129001. var result_2 = tryCatch_1.tryCatch(selector).apply(this, innerArgs);
  129002. if (result_2 === errorObject_1.errorObject) {
  129003. self.add(scheduler.schedule(dispatchError, 0, { err: errorObject_1.errorObject.e, subject: subject }));
  129004. }
  129005. else {
  129006. self.add(scheduler.schedule(dispatchNext, 0, { value: result_2, subject: subject }));
  129007. }
  129008. }
  129009. else {
  129010. var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
  129011. self.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
  129012. }
  129013. };
  129014. // use named function to pass values in without closure
  129015. handler.source = source;
  129016. var result = tryCatch_1.tryCatch(callbackFunc).apply(context, args.concat(handler));
  129017. if (result === errorObject_1.errorObject) {
  129018. self.add(scheduler.schedule(dispatchError, 0, { err: errorObject_1.errorObject.e, subject: subject }));
  129019. }
  129020. }
  129021. self.add(subject.subscribe(subscriber));
  129022. }
  129023. function dispatchNext(arg) {
  129024. var value = arg.value, subject = arg.subject;
  129025. subject.next(value);
  129026. subject.complete();
  129027. }
  129028. function dispatchError(arg) {
  129029. var err = arg.err, subject = arg.subject;
  129030. subject.error(err);
  129031. }
  129032. //# sourceMappingURL=BoundNodeCallbackObservable.js.map
  129033. /***/ }),
  129034. /* 382 */
  129035. /***/ (function(module, exports, __webpack_require__) {
  129036. "use strict";
  129037. var Observable_1 = __webpack_require__(0);
  129038. var combineLatest_1 = __webpack_require__(383);
  129039. Observable_1.Observable.combineLatest = combineLatest_1.combineLatest;
  129040. //# sourceMappingURL=combineLatest.js.map
  129041. /***/ }),
  129042. /* 383 */
  129043. /***/ (function(module, exports, __webpack_require__) {
  129044. "use strict";
  129045. var isScheduler_1 = __webpack_require__(22);
  129046. var isArray_1 = __webpack_require__(26);
  129047. var ArrayObservable_1 = __webpack_require__(32);
  129048. var combineLatest_1 = __webpack_require__(74);
  129049. /* tslint:enable:max-line-length */
  129050. /**
  129051. * Combines multiple Observables to create an Observable whose values are
  129052. * calculated from the latest values of each of its input Observables.
  129053. *
  129054. * <span class="informal">Whenever any input Observable emits a value, it
  129055. * computes a formula using the latest values from all the inputs, then emits
  129056. * the output of that formula.</span>
  129057. *
  129058. * <img src="./img/combineLatest.png" width="100%">
  129059. *
  129060. * `combineLatest` combines the values from all the Observables passed as
  129061. * arguments. This is done by subscribing to each Observable in order and,
  129062. * whenever any Observable emits, collecting an array of the most recent
  129063. * values from each Observable. So if you pass `n` Observables to operator,
  129064. * returned Observable will always emit an array of `n` values, in order
  129065. * corresponding to order of passed Observables (value from the first Observable
  129066. * on the first place and so on).
  129067. *
  129068. * Static version of `combineLatest` accepts either an array of Observables
  129069. * or each Observable can be put directly as an argument. Note that array of
  129070. * Observables is good choice, if you don't know beforehand how many Observables
  129071. * you will combine. Passing empty array will result in Observable that
  129072. * completes immediately.
  129073. *
  129074. * To ensure output array has always the same length, `combineLatest` will
  129075. * actually wait for all input Observables to emit at least once,
  129076. * before it starts emitting results. This means if some Observable emits
  129077. * values before other Observables started emitting, all that values but last
  129078. * will be lost. On the other hand, is some Observable does not emit value but
  129079. * completes, resulting Observable will complete at the same moment without
  129080. * emitting anything, since it will be now impossible to include value from
  129081. * completed Observable in resulting array. Also, if some input Observable does
  129082. * not emit any value and never completes, `combineLatest` will also never emit
  129083. * and never complete, since, again, it will wait for all streams to emit some
  129084. * value.
  129085. *
  129086. * If at least one Observable was passed to `combineLatest` and all passed Observables
  129087. * emitted something, resulting Observable will complete when all combined
  129088. * streams complete. So even if some Observable completes, result of
  129089. * `combineLatest` will still emit values when other Observables do. In case
  129090. * of completed Observable, its value from now on will always be the last
  129091. * emitted value. On the other hand, if any Observable errors, `combineLatest`
  129092. * will error immediately as well, and all other Observables will be unsubscribed.
  129093. *
  129094. * `combineLatest` accepts as optional parameter `project` function, which takes
  129095. * as arguments all values that would normally be emitted by resulting Observable.
  129096. * `project` can return any kind of value, which will be then emitted by Observable
  129097. * instead of default array. Note that `project` does not take as argument that array
  129098. * of values, but values themselves. That means default `project` can be imagined
  129099. * as function that takes all its arguments and puts them into an array.
  129100. *
  129101. *
  129102. * @example <caption>Combine two timer Observables</caption>
  129103. * const firstTimer = Rx.Observable.timer(0, 1000); // emit 0, 1, 2... after every second, starting from now
  129104. * const secondTimer = Rx.Observable.timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now
  129105. * const combinedTimers = Rx.Observable.combineLatest(firstTimer, secondTimer);
  129106. * combinedTimers.subscribe(value => console.log(value));
  129107. * // Logs
  129108. * // [0, 0] after 0.5s
  129109. * // [1, 0] after 1s
  129110. * // [1, 1] after 1.5s
  129111. * // [2, 1] after 2s
  129112. *
  129113. *
  129114. * @example <caption>Combine an array of Observables</caption>
  129115. * const observables = [1, 5, 10].map(
  129116. * n => Rx.Observable.of(n).delay(n * 1000).startWith(0) // emit 0 and then emit n after n seconds
  129117. * );
  129118. * const combined = Rx.Observable.combineLatest(observables);
  129119. * combined.subscribe(value => console.log(value));
  129120. * // Logs
  129121. * // [0, 0, 0] immediately
  129122. * // [1, 0, 0] after 1s
  129123. * // [1, 5, 0] after 5s
  129124. * // [1, 5, 10] after 10s
  129125. *
  129126. *
  129127. * @example <caption>Use project function to dynamically calculate the Body-Mass Index</caption>
  129128. * var weight = Rx.Observable.of(70, 72, 76, 79, 75);
  129129. * var height = Rx.Observable.of(1.76, 1.77, 1.78);
  129130. * var bmi = Rx.Observable.combineLatest(weight, height, (w, h) => w / (h * h));
  129131. * bmi.subscribe(x => console.log('BMI is ' + x));
  129132. *
  129133. * // With output to console:
  129134. * // BMI is 24.212293388429753
  129135. * // BMI is 23.93948099205209
  129136. * // BMI is 23.671253629592222
  129137. *
  129138. *
  129139. * @see {@link combineAll}
  129140. * @see {@link merge}
  129141. * @see {@link withLatestFrom}
  129142. *
  129143. * @param {ObservableInput} observable1 An input Observable to combine with other Observables.
  129144. * @param {ObservableInput} observable2 An input Observable to combine with other Observables.
  129145. * More than one input Observables may be given as arguments
  129146. * or an array of Observables may be given as the first argument.
  129147. * @param {function} [project] An optional function to project the values from
  129148. * the combined latest values into a new value on the output Observable.
  129149. * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to
  129150. * each input Observable.
  129151. * @return {Observable} An Observable of projected values from the most recent
  129152. * values from each input Observable, or an array of the most recent values from
  129153. * each input Observable.
  129154. * @static true
  129155. * @name combineLatest
  129156. * @owner Observable
  129157. */
  129158. function combineLatest() {
  129159. var observables = [];
  129160. for (var _i = 0; _i < arguments.length; _i++) {
  129161. observables[_i - 0] = arguments[_i];
  129162. }
  129163. var project = null;
  129164. var scheduler = null;
  129165. if (isScheduler_1.isScheduler(observables[observables.length - 1])) {
  129166. scheduler = observables.pop();
  129167. }
  129168. if (typeof observables[observables.length - 1] === 'function') {
  129169. project = observables.pop();
  129170. }
  129171. // if the first and only other argument besides the resultSelector is an array
  129172. // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
  129173. if (observables.length === 1 && isArray_1.isArray(observables[0])) {
  129174. observables = observables[0];
  129175. }
  129176. return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new combineLatest_1.CombineLatestOperator(project));
  129177. }
  129178. exports.combineLatest = combineLatest;
  129179. //# sourceMappingURL=combineLatest.js.map
  129180. /***/ }),
  129181. /* 384 */
  129182. /***/ (function(module, exports, __webpack_require__) {
  129183. "use strict";
  129184. var Observable_1 = __webpack_require__(0);
  129185. var concat_1 = __webpack_require__(54);
  129186. Observable_1.Observable.concat = concat_1.concat;
  129187. //# sourceMappingURL=concat.js.map
  129188. /***/ }),
  129189. /* 385 */
  129190. /***/ (function(module, exports, __webpack_require__) {
  129191. "use strict";
  129192. var __extends = (this && this.__extends) || function (d, b) {
  129193. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  129194. function __() { this.constructor = d; }
  129195. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  129196. };
  129197. var root_1 = __webpack_require__(19);
  129198. var Observable_1 = __webpack_require__(0);
  129199. var iterator_1 = __webpack_require__(46);
  129200. /**
  129201. * We need this JSDoc comment for affecting ESDoc.
  129202. * @extends {Ignored}
  129203. * @hide true
  129204. */
  129205. var IteratorObservable = (function (_super) {
  129206. __extends(IteratorObservable, _super);
  129207. function IteratorObservable(iterator, scheduler) {
  129208. _super.call(this);
  129209. this.scheduler = scheduler;
  129210. if (iterator == null) {
  129211. throw new Error('iterator cannot be null.');
  129212. }
  129213. this.iterator = getIterator(iterator);
  129214. }
  129215. IteratorObservable.create = function (iterator, scheduler) {
  129216. return new IteratorObservable(iterator, scheduler);
  129217. };
  129218. IteratorObservable.dispatch = function (state) {
  129219. var index = state.index, hasError = state.hasError, iterator = state.iterator, subscriber = state.subscriber;
  129220. if (hasError) {
  129221. subscriber.error(state.error);
  129222. return;
  129223. }
  129224. var result = iterator.next();
  129225. if (result.done) {
  129226. subscriber.complete();
  129227. return;
  129228. }
  129229. subscriber.next(result.value);
  129230. state.index = index + 1;
  129231. if (subscriber.closed) {
  129232. if (typeof iterator.return === 'function') {
  129233. iterator.return();
  129234. }
  129235. return;
  129236. }
  129237. this.schedule(state);
  129238. };
  129239. /** @deprecated internal use only */ IteratorObservable.prototype._subscribe = function (subscriber) {
  129240. var index = 0;
  129241. var _a = this, iterator = _a.iterator, scheduler = _a.scheduler;
  129242. if (scheduler) {
  129243. return scheduler.schedule(IteratorObservable.dispatch, 0, {
  129244. index: index, iterator: iterator, subscriber: subscriber
  129245. });
  129246. }
  129247. else {
  129248. do {
  129249. var result = iterator.next();
  129250. if (result.done) {
  129251. subscriber.complete();
  129252. break;
  129253. }
  129254. else {
  129255. subscriber.next(result.value);
  129256. }
  129257. if (subscriber.closed) {
  129258. if (typeof iterator.return === 'function') {
  129259. iterator.return();
  129260. }
  129261. break;
  129262. }
  129263. } while (true);
  129264. }
  129265. };
  129266. return IteratorObservable;
  129267. }(Observable_1.Observable));
  129268. exports.IteratorObservable = IteratorObservable;
  129269. var StringIterator = (function () {
  129270. function StringIterator(str, idx, len) {
  129271. if (idx === void 0) { idx = 0; }
  129272. if (len === void 0) { len = str.length; }
  129273. this.str = str;
  129274. this.idx = idx;
  129275. this.len = len;
  129276. }
  129277. StringIterator.prototype[iterator_1.iterator] = function () { return (this); };
  129278. StringIterator.prototype.next = function () {
  129279. return this.idx < this.len ? {
  129280. done: false,
  129281. value: this.str.charAt(this.idx++)
  129282. } : {
  129283. done: true,
  129284. value: undefined
  129285. };
  129286. };
  129287. return StringIterator;
  129288. }());
  129289. var ArrayIterator = (function () {
  129290. function ArrayIterator(arr, idx, len) {
  129291. if (idx === void 0) { idx = 0; }
  129292. if (len === void 0) { len = toLength(arr); }
  129293. this.arr = arr;
  129294. this.idx = idx;
  129295. this.len = len;
  129296. }
  129297. ArrayIterator.prototype[iterator_1.iterator] = function () { return this; };
  129298. ArrayIterator.prototype.next = function () {
  129299. return this.idx < this.len ? {
  129300. done: false,
  129301. value: this.arr[this.idx++]
  129302. } : {
  129303. done: true,
  129304. value: undefined
  129305. };
  129306. };
  129307. return ArrayIterator;
  129308. }());
  129309. function getIterator(obj) {
  129310. var i = obj[iterator_1.iterator];
  129311. if (!i && typeof obj === 'string') {
  129312. return new StringIterator(obj);
  129313. }
  129314. if (!i && obj.length !== undefined) {
  129315. return new ArrayIterator(obj);
  129316. }
  129317. if (!i) {
  129318. throw new TypeError('object is not iterable');
  129319. }
  129320. return obj[iterator_1.iterator]();
  129321. }
  129322. var maxSafeInteger = Math.pow(2, 53) - 1;
  129323. function toLength(o) {
  129324. var len = +o.length;
  129325. if (isNaN(len)) {
  129326. return 0;
  129327. }
  129328. if (len === 0 || !numberIsFinite(len)) {
  129329. return len;
  129330. }
  129331. len = sign(len) * Math.floor(Math.abs(len));
  129332. if (len <= 0) {
  129333. return 0;
  129334. }
  129335. if (len > maxSafeInteger) {
  129336. return maxSafeInteger;
  129337. }
  129338. return len;
  129339. }
  129340. function numberIsFinite(value) {
  129341. return typeof value === 'number' && root_1.root.isFinite(value);
  129342. }
  129343. function sign(value) {
  129344. var valueAsNumber = +value;
  129345. if (valueAsNumber === 0) {
  129346. return valueAsNumber;
  129347. }
  129348. if (isNaN(valueAsNumber)) {
  129349. return valueAsNumber;
  129350. }
  129351. return valueAsNumber < 0 ? -1 : 1;
  129352. }
  129353. //# sourceMappingURL=IteratorObservable.js.map
  129354. /***/ }),
  129355. /* 386 */
  129356. /***/ (function(module, exports, __webpack_require__) {
  129357. "use strict";
  129358. var __extends = (this && this.__extends) || function (d, b) {
  129359. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  129360. function __() { this.constructor = d; }
  129361. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  129362. };
  129363. var Observable_1 = __webpack_require__(0);
  129364. var ScalarObservable_1 = __webpack_require__(89);
  129365. var EmptyObservable_1 = __webpack_require__(33);
  129366. /**
  129367. * We need this JSDoc comment for affecting ESDoc.
  129368. * @extends {Ignored}
  129369. * @hide true
  129370. */
  129371. var ArrayLikeObservable = (function (_super) {
  129372. __extends(ArrayLikeObservable, _super);
  129373. function ArrayLikeObservable(arrayLike, scheduler) {
  129374. _super.call(this);
  129375. this.arrayLike = arrayLike;
  129376. this.scheduler = scheduler;
  129377. if (!scheduler && arrayLike.length === 1) {
  129378. this._isScalar = true;
  129379. this.value = arrayLike[0];
  129380. }
  129381. }
  129382. ArrayLikeObservable.create = function (arrayLike, scheduler) {
  129383. var length = arrayLike.length;
  129384. if (length === 0) {
  129385. return new EmptyObservable_1.EmptyObservable();
  129386. }
  129387. else if (length === 1) {
  129388. return new ScalarObservable_1.ScalarObservable(arrayLike[0], scheduler);
  129389. }
  129390. else {
  129391. return new ArrayLikeObservable(arrayLike, scheduler);
  129392. }
  129393. };
  129394. ArrayLikeObservable.dispatch = function (state) {
  129395. var arrayLike = state.arrayLike, index = state.index, length = state.length, subscriber = state.subscriber;
  129396. if (subscriber.closed) {
  129397. return;
  129398. }
  129399. if (index >= length) {
  129400. subscriber.complete();
  129401. return;
  129402. }
  129403. subscriber.next(arrayLike[index]);
  129404. state.index = index + 1;
  129405. this.schedule(state);
  129406. };
  129407. /** @deprecated internal use only */ ArrayLikeObservable.prototype._subscribe = function (subscriber) {
  129408. var index = 0;
  129409. var _a = this, arrayLike = _a.arrayLike, scheduler = _a.scheduler;
  129410. var length = arrayLike.length;
  129411. if (scheduler) {
  129412. return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {
  129413. arrayLike: arrayLike, index: index, length: length, subscriber: subscriber
  129414. });
  129415. }
  129416. else {
  129417. for (var i = 0; i < length && !subscriber.closed; i++) {
  129418. subscriber.next(arrayLike[i]);
  129419. }
  129420. subscriber.complete();
  129421. }
  129422. };
  129423. return ArrayLikeObservable;
  129424. }(Observable_1.Observable));
  129425. exports.ArrayLikeObservable = ArrayLikeObservable;
  129426. //# sourceMappingURL=ArrayLikeObservable.js.map
  129427. /***/ }),
  129428. /* 387 */
  129429. /***/ (function(module, exports, __webpack_require__) {
  129430. "use strict";
  129431. var Observable_1 = __webpack_require__(0);
  129432. var defer_1 = __webpack_require__(388);
  129433. Observable_1.Observable.defer = defer_1.defer;
  129434. //# sourceMappingURL=defer.js.map
  129435. /***/ }),
  129436. /* 388 */
  129437. /***/ (function(module, exports, __webpack_require__) {
  129438. "use strict";
  129439. var DeferObservable_1 = __webpack_require__(389);
  129440. exports.defer = DeferObservable_1.DeferObservable.create;
  129441. //# sourceMappingURL=defer.js.map
  129442. /***/ }),
  129443. /* 389 */
  129444. /***/ (function(module, exports, __webpack_require__) {
  129445. "use strict";
  129446. var __extends = (this && this.__extends) || function (d, b) {
  129447. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  129448. function __() { this.constructor = d; }
  129449. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  129450. };
  129451. var Observable_1 = __webpack_require__(0);
  129452. var subscribeToResult_1 = __webpack_require__(5);
  129453. var OuterSubscriber_1 = __webpack_require__(6);
  129454. /**
  129455. * We need this JSDoc comment for affecting ESDoc.
  129456. * @extends {Ignored}
  129457. * @hide true
  129458. */
  129459. var DeferObservable = (function (_super) {
  129460. __extends(DeferObservable, _super);
  129461. function DeferObservable(observableFactory) {
  129462. _super.call(this);
  129463. this.observableFactory = observableFactory;
  129464. }
  129465. /**
  129466. * Creates an Observable that, on subscribe, calls an Observable factory to
  129467. * make an Observable for each new Observer.
  129468. *
  129469. * <span class="informal">Creates the Observable lazily, that is, only when it
  129470. * is subscribed.
  129471. * </span>
  129472. *
  129473. * <img src="./img/defer.png" width="100%">
  129474. *
  129475. * `defer` allows you to create the Observable only when the Observer
  129476. * subscribes, and create a fresh Observable for each Observer. It waits until
  129477. * an Observer subscribes to it, and then it generates an Observable,
  129478. * typically with an Observable factory function. It does this afresh for each
  129479. * subscriber, so although each subscriber may think it is subscribing to the
  129480. * same Observable, in fact each subscriber gets its own individual
  129481. * Observable.
  129482. *
  129483. * @example <caption>Subscribe to either an Observable of clicks or an Observable of interval, at random</caption>
  129484. * var clicksOrInterval = Rx.Observable.defer(function () {
  129485. * if (Math.random() > 0.5) {
  129486. * return Rx.Observable.fromEvent(document, 'click');
  129487. * } else {
  129488. * return Rx.Observable.interval(1000);
  129489. * }
  129490. * });
  129491. * clicksOrInterval.subscribe(x => console.log(x));
  129492. *
  129493. * // Results in the following behavior:
  129494. * // If the result of Math.random() is greater than 0.5 it will listen
  129495. * // for clicks anywhere on the "document"; when document is clicked it
  129496. * // will log a MouseEvent object to the console. If the result is less
  129497. * // than 0.5 it will emit ascending numbers, one every second(1000ms).
  129498. *
  129499. * @see {@link create}
  129500. *
  129501. * @param {function(): SubscribableOrPromise} observableFactory The Observable
  129502. * factory function to invoke for each Observer that subscribes to the output
  129503. * Observable. May also return a Promise, which will be converted on the fly
  129504. * to an Observable.
  129505. * @return {Observable} An Observable whose Observers' subscriptions trigger
  129506. * an invocation of the given Observable factory function.
  129507. * @static true
  129508. * @name defer
  129509. * @owner Observable
  129510. */
  129511. DeferObservable.create = function (observableFactory) {
  129512. return new DeferObservable(observableFactory);
  129513. };
  129514. /** @deprecated internal use only */ DeferObservable.prototype._subscribe = function (subscriber) {
  129515. return new DeferSubscriber(subscriber, this.observableFactory);
  129516. };
  129517. return DeferObservable;
  129518. }(Observable_1.Observable));
  129519. exports.DeferObservable = DeferObservable;
  129520. var DeferSubscriber = (function (_super) {
  129521. __extends(DeferSubscriber, _super);
  129522. function DeferSubscriber(destination, factory) {
  129523. _super.call(this, destination);
  129524. this.factory = factory;
  129525. this.tryDefer();
  129526. }
  129527. DeferSubscriber.prototype.tryDefer = function () {
  129528. try {
  129529. this._callFactory();
  129530. }
  129531. catch (err) {
  129532. this._error(err);
  129533. }
  129534. };
  129535. DeferSubscriber.prototype._callFactory = function () {
  129536. var result = this.factory();
  129537. if (result) {
  129538. this.add(subscribeToResult_1.subscribeToResult(this, result));
  129539. }
  129540. };
  129541. return DeferSubscriber;
  129542. }(OuterSubscriber_1.OuterSubscriber));
  129543. //# sourceMappingURL=DeferObservable.js.map
  129544. /***/ }),
  129545. /* 390 */
  129546. /***/ (function(module, exports, __webpack_require__) {
  129547. "use strict";
  129548. var Observable_1 = __webpack_require__(0);
  129549. var empty_1 = __webpack_require__(391);
  129550. Observable_1.Observable.empty = empty_1.empty;
  129551. //# sourceMappingURL=empty.js.map
  129552. /***/ }),
  129553. /* 391 */
  129554. /***/ (function(module, exports, __webpack_require__) {
  129555. "use strict";
  129556. var EmptyObservable_1 = __webpack_require__(33);
  129557. exports.empty = EmptyObservable_1.EmptyObservable.create;
  129558. //# sourceMappingURL=empty.js.map
  129559. /***/ }),
  129560. /* 392 */
  129561. /***/ (function(module, exports, __webpack_require__) {
  129562. "use strict";
  129563. var Observable_1 = __webpack_require__(0);
  129564. var forkJoin_1 = __webpack_require__(177);
  129565. Observable_1.Observable.forkJoin = forkJoin_1.forkJoin;
  129566. //# sourceMappingURL=forkJoin.js.map
  129567. /***/ }),
  129568. /* 393 */
  129569. /***/ (function(module, exports, __webpack_require__) {
  129570. "use strict";
  129571. var Observable_1 = __webpack_require__(0);
  129572. var from_1 = __webpack_require__(212);
  129573. Observable_1.Observable.from = from_1.from;
  129574. //# sourceMappingURL=from.js.map
  129575. /***/ }),
  129576. /* 394 */
  129577. /***/ (function(module, exports, __webpack_require__) {
  129578. "use strict";
  129579. var Observable_1 = __webpack_require__(0);
  129580. var fromEvent_1 = __webpack_require__(214);
  129581. Observable_1.Observable.fromEvent = fromEvent_1.fromEvent;
  129582. //# sourceMappingURL=fromEvent.js.map
  129583. /***/ }),
  129584. /* 395 */
  129585. /***/ (function(module, exports, __webpack_require__) {
  129586. "use strict";
  129587. var __extends = (this && this.__extends) || function (d, b) {
  129588. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  129589. function __() { this.constructor = d; }
  129590. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  129591. };
  129592. var Observable_1 = __webpack_require__(0);
  129593. var tryCatch_1 = __webpack_require__(17);
  129594. var isFunction_1 = __webpack_require__(62);
  129595. var errorObject_1 = __webpack_require__(16);
  129596. var Subscription_1 = __webpack_require__(14);
  129597. var toString = Object.prototype.toString;
  129598. function isNodeStyleEventEmitter(sourceObj) {
  129599. return !!sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
  129600. }
  129601. function isJQueryStyleEventEmitter(sourceObj) {
  129602. return !!sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
  129603. }
  129604. function isNodeList(sourceObj) {
  129605. return !!sourceObj && toString.call(sourceObj) === '[object NodeList]';
  129606. }
  129607. function isHTMLCollection(sourceObj) {
  129608. return !!sourceObj && toString.call(sourceObj) === '[object HTMLCollection]';
  129609. }
  129610. function isEventTarget(sourceObj) {
  129611. return !!sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
  129612. }
  129613. /**
  129614. * We need this JSDoc comment for affecting ESDoc.
  129615. * @extends {Ignored}
  129616. * @hide true
  129617. */
  129618. var FromEventObservable = (function (_super) {
  129619. __extends(FromEventObservable, _super);
  129620. function FromEventObservable(sourceObj, eventName, selector, options) {
  129621. _super.call(this);
  129622. this.sourceObj = sourceObj;
  129623. this.eventName = eventName;
  129624. this.selector = selector;
  129625. this.options = options;
  129626. }
  129627. /* tslint:enable:max-line-length */
  129628. /**
  129629. * Creates an Observable that emits events of a specific type coming from the
  129630. * given event target.
  129631. *
  129632. * <span class="informal">Creates an Observable from DOM events, or Node.js
  129633. * EventEmitter events or others.</span>
  129634. *
  129635. * <img src="./img/fromEvent.png" width="100%">
  129636. *
  129637. * `fromEvent` accepts as a first argument event target, which is an object with methods
  129638. * for registering event handler functions. As a second argument it takes string that indicates
  129639. * type of event we want to listen for. `fromEvent` supports selected types of event targets,
  129640. * which are described in detail below. If your event target does not match any of the ones listed,
  129641. * you should use {@link fromEventPattern}, which can be used on arbitrary APIs.
  129642. * When it comes to APIs supported by `fromEvent`, their methods for adding and removing event
  129643. * handler functions have different names, but they all accept a string describing event type
  129644. * and function itself, which will be called whenever said event happens.
  129645. *
  129646. * Every time resulting Observable is subscribed, event handler function will be registered
  129647. * to event target on given event type. When that event fires, value
  129648. * passed as a first argument to registered function will be emitted by output Observable.
  129649. * When Observable is unsubscribed, function will be unregistered from event target.
  129650. *
  129651. * Note that if event target calls registered function with more than one argument, second
  129652. * and following arguments will not appear in resulting stream. In order to get access to them,
  129653. * you can pass to `fromEvent` optional project function, which will be called with all arguments
  129654. * passed to event handler. Output Observable will then emit value returned by project function,
  129655. * instead of the usual value.
  129656. *
  129657. * Remember that event targets listed below are checked via duck typing. It means that
  129658. * no matter what kind of object you have and no matter what environment you work in,
  129659. * you can safely use `fromEvent` on that object if it exposes described methods (provided
  129660. * of course they behave as was described above). So for example if Node.js library exposes
  129661. * event target which has the same method names as DOM EventTarget, `fromEvent` is still
  129662. * a good choice.
  129663. *
  129664. * If the API you use is more callback then event handler oriented (subscribed
  129665. * callback function fires only once and thus there is no need to manually
  129666. * unregister it), you should use {@link bindCallback} or {@link bindNodeCallback}
  129667. * instead.
  129668. *
  129669. * `fromEvent` supports following types of event targets:
  129670. *
  129671. * **DOM EventTarget**
  129672. *
  129673. * This is an object with `addEventListener` and `removeEventListener` methods.
  129674. *
  129675. * In the browser, `addEventListener` accepts - apart from event type string and event
  129676. * handler function arguments - optional third parameter, which is either an object or boolean,
  129677. * both used for additional configuration how and when passed function will be called. When
  129678. * `fromEvent` is used with event target of that type, you can provide this values
  129679. * as third parameter as well.
  129680. *
  129681. * **Node.js EventEmitter**
  129682. *
  129683. * An object with `addListener` and `removeListener` methods.
  129684. *
  129685. * **JQuery-style event target**
  129686. *
  129687. * An object with `on` and `off` methods
  129688. *
  129689. * **DOM NodeList**
  129690. *
  129691. * List of DOM Nodes, returned for example by `document.querySelectorAll` or `Node.childNodes`.
  129692. *
  129693. * Although this collection is not event target in itself, `fromEvent` will iterate over all Nodes
  129694. * it contains and install event handler function in every of them. When returned Observable
  129695. * is unsubscribed, function will be removed from all Nodes.
  129696. *
  129697. * **DOM HtmlCollection**
  129698. *
  129699. * Just as in case of NodeList it is a collection of DOM nodes. Here as well event handler function is
  129700. * installed and removed in each of elements.
  129701. *
  129702. *
  129703. * @example <caption>Emits clicks happening on the DOM document</caption>
  129704. * var clicks = Rx.Observable.fromEvent(document, 'click');
  129705. * clicks.subscribe(x => console.log(x));
  129706. *
  129707. * // Results in:
  129708. * // MouseEvent object logged to console every time a click
  129709. * // occurs on the document.
  129710. *
  129711. *
  129712. * @example <caption>Use addEventListener with capture option</caption>
  129713. * var clicksInDocument = Rx.Observable.fromEvent(document, 'click', true); // note optional configuration parameter
  129714. * // which will be passed to addEventListener
  129715. * var clicksInDiv = Rx.Observable.fromEvent(someDivInDocument, 'click');
  129716. *
  129717. * clicksInDocument.subscribe(() => console.log('document'));
  129718. * clicksInDiv.subscribe(() => console.log('div'));
  129719. *
  129720. * // By default events bubble UP in DOM tree, so normally
  129721. * // when we would click on div in document
  129722. * // "div" would be logged first and then "document".
  129723. * // Since we specified optional `capture` option, document
  129724. * // will catch event when it goes DOWN DOM tree, so console
  129725. * // will log "document" and then "div".
  129726. *
  129727. * @see {@link bindCallback}
  129728. * @see {@link bindNodeCallback}
  129729. * @see {@link fromEventPattern}
  129730. *
  129731. * @param {EventTargetLike} target The DOM EventTarget, Node.js
  129732. * EventEmitter, JQuery-like event target, NodeList or HTMLCollection to attach the event handler to.
  129733. * @param {string} eventName The event name of interest, being emitted by the
  129734. * `target`.
  129735. * @param {EventListenerOptions} [options] Options to pass through to addEventListener
  129736. * @param {SelectorMethodSignature<T>} [selector] An optional function to
  129737. * post-process results. It takes the arguments from the event handler and
  129738. * should return a single value.
  129739. * @return {Observable<T>}
  129740. * @static true
  129741. * @name fromEvent
  129742. * @owner Observable
  129743. */
  129744. FromEventObservable.create = function (target, eventName, options, selector) {
  129745. if (isFunction_1.isFunction(options)) {
  129746. selector = options;
  129747. options = undefined;
  129748. }
  129749. return new FromEventObservable(target, eventName, selector, options);
  129750. };
  129751. FromEventObservable.setupSubscription = function (sourceObj, eventName, handler, subscriber, options) {
  129752. var unsubscribe;
  129753. if (isNodeList(sourceObj) || isHTMLCollection(sourceObj)) {
  129754. for (var i = 0, len = sourceObj.length; i < len; i++) {
  129755. FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
  129756. }
  129757. }
  129758. else if (isEventTarget(sourceObj)) {
  129759. var source_1 = sourceObj;
  129760. sourceObj.addEventListener(eventName, handler, options);
  129761. unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
  129762. }
  129763. else if (isJQueryStyleEventEmitter(sourceObj)) {
  129764. var source_2 = sourceObj;
  129765. sourceObj.on(eventName, handler);
  129766. unsubscribe = function () { return source_2.off(eventName, handler); };
  129767. }
  129768. else if (isNodeStyleEventEmitter(sourceObj)) {
  129769. var source_3 = sourceObj;
  129770. sourceObj.addListener(eventName, handler);
  129771. unsubscribe = function () { return source_3.removeListener(eventName, handler); };
  129772. }
  129773. else {
  129774. throw new TypeError('Invalid event target');
  129775. }
  129776. subscriber.add(new Subscription_1.Subscription(unsubscribe));
  129777. };
  129778. /** @deprecated internal use only */ FromEventObservable.prototype._subscribe = function (subscriber) {
  129779. var sourceObj = this.sourceObj;
  129780. var eventName = this.eventName;
  129781. var options = this.options;
  129782. var selector = this.selector;
  129783. var handler = selector ? function () {
  129784. var args = [];
  129785. for (var _i = 0; _i < arguments.length; _i++) {
  129786. args[_i - 0] = arguments[_i];
  129787. }
  129788. var result = tryCatch_1.tryCatch(selector).apply(void 0, args);
  129789. if (result === errorObject_1.errorObject) {
  129790. subscriber.error(errorObject_1.errorObject.e);
  129791. }
  129792. else {
  129793. subscriber.next(result);
  129794. }
  129795. } : function (e) { return subscriber.next(e); };
  129796. FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber, options);
  129797. };
  129798. return FromEventObservable;
  129799. }(Observable_1.Observable));
  129800. exports.FromEventObservable = FromEventObservable;
  129801. //# sourceMappingURL=FromEventObservable.js.map
  129802. /***/ }),
  129803. /* 396 */
  129804. /***/ (function(module, exports, __webpack_require__) {
  129805. "use strict";
  129806. var Observable_1 = __webpack_require__(0);
  129807. var fromEventPattern_1 = __webpack_require__(397);
  129808. Observable_1.Observable.fromEventPattern = fromEventPattern_1.fromEventPattern;
  129809. //# sourceMappingURL=fromEventPattern.js.map
  129810. /***/ }),
  129811. /* 397 */
  129812. /***/ (function(module, exports, __webpack_require__) {
  129813. "use strict";
  129814. var FromEventPatternObservable_1 = __webpack_require__(398);
  129815. exports.fromEventPattern = FromEventPatternObservable_1.FromEventPatternObservable.create;
  129816. //# sourceMappingURL=fromEventPattern.js.map
  129817. /***/ }),
  129818. /* 398 */
  129819. /***/ (function(module, exports, __webpack_require__) {
  129820. "use strict";
  129821. var __extends = (this && this.__extends) || function (d, b) {
  129822. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  129823. function __() { this.constructor = d; }
  129824. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  129825. };
  129826. var isFunction_1 = __webpack_require__(62);
  129827. var Observable_1 = __webpack_require__(0);
  129828. var Subscription_1 = __webpack_require__(14);
  129829. /**
  129830. * We need this JSDoc comment for affecting ESDoc.
  129831. * @extends {Ignored}
  129832. * @hide true
  129833. */
  129834. var FromEventPatternObservable = (function (_super) {
  129835. __extends(FromEventPatternObservable, _super);
  129836. function FromEventPatternObservable(addHandler, removeHandler, selector) {
  129837. _super.call(this);
  129838. this.addHandler = addHandler;
  129839. this.removeHandler = removeHandler;
  129840. this.selector = selector;
  129841. }
  129842. /**
  129843. * Creates an Observable from an API based on addHandler/removeHandler
  129844. * functions.
  129845. *
  129846. * <span class="informal">Converts any addHandler/removeHandler API to an
  129847. * Observable.</span>
  129848. *
  129849. * <img src="./img/fromEventPattern.png" width="100%">
  129850. *
  129851. * Creates an Observable by using the `addHandler` and `removeHandler`
  129852. * functions to add and remove the handlers, with an optional selector
  129853. * function to project the event arguments to a result. The `addHandler` is
  129854. * called when the output Observable is subscribed, and `removeHandler` is
  129855. * called when the Subscription is unsubscribed.
  129856. *
  129857. * @example <caption>Emits clicks happening on the DOM document</caption>
  129858. * function addClickHandler(handler) {
  129859. * document.addEventListener('click', handler);
  129860. * }
  129861. *
  129862. * function removeClickHandler(handler) {
  129863. * document.removeEventListener('click', handler);
  129864. * }
  129865. *
  129866. * var clicks = Rx.Observable.fromEventPattern(
  129867. * addClickHandler,
  129868. * removeClickHandler
  129869. * );
  129870. * clicks.subscribe(x => console.log(x));
  129871. *
  129872. * @see {@link from}
  129873. * @see {@link fromEvent}
  129874. *
  129875. * @param {function(handler: Function): any} addHandler A function that takes
  129876. * a `handler` function as argument and attaches it somehow to the actual
  129877. * source of events.
  129878. * @param {function(handler: Function, signal?: any): void} [removeHandler] An optional function that
  129879. * takes a `handler` function as argument and removes it in case it was
  129880. * previously attached using `addHandler`. if addHandler returns signal to teardown when remove,
  129881. * removeHandler function will forward it.
  129882. * @param {function(...args: any): T} [selector] An optional function to
  129883. * post-process results. It takes the arguments from the event handler and
  129884. * should return a single value.
  129885. * @return {Observable<T>}
  129886. * @static true
  129887. * @name fromEventPattern
  129888. * @owner Observable
  129889. */
  129890. FromEventPatternObservable.create = function (addHandler, removeHandler, selector) {
  129891. return new FromEventPatternObservable(addHandler, removeHandler, selector);
  129892. };
  129893. /** @deprecated internal use only */ FromEventPatternObservable.prototype._subscribe = function (subscriber) {
  129894. var _this = this;
  129895. var removeHandler = this.removeHandler;
  129896. var handler = !!this.selector ? function () {
  129897. var args = [];
  129898. for (var _i = 0; _i < arguments.length; _i++) {
  129899. args[_i - 0] = arguments[_i];
  129900. }
  129901. _this._callSelector(subscriber, args);
  129902. } : function (e) { subscriber.next(e); };
  129903. var retValue = this._callAddHandler(handler, subscriber);
  129904. if (!isFunction_1.isFunction(removeHandler)) {
  129905. return;
  129906. }
  129907. subscriber.add(new Subscription_1.Subscription(function () {
  129908. //TODO: determine whether or not to forward to error handler
  129909. removeHandler(handler, retValue);
  129910. }));
  129911. };
  129912. FromEventPatternObservable.prototype._callSelector = function (subscriber, args) {
  129913. try {
  129914. var result = this.selector.apply(this, args);
  129915. subscriber.next(result);
  129916. }
  129917. catch (e) {
  129918. subscriber.error(e);
  129919. }
  129920. };
  129921. FromEventPatternObservable.prototype._callAddHandler = function (handler, errorSubscriber) {
  129922. try {
  129923. return this.addHandler(handler) || null;
  129924. }
  129925. catch (e) {
  129926. errorSubscriber.error(e);
  129927. }
  129928. };
  129929. return FromEventPatternObservable;
  129930. }(Observable_1.Observable));
  129931. exports.FromEventPatternObservable = FromEventPatternObservable;
  129932. //# sourceMappingURL=FromEventPatternObservable.js.map
  129933. /***/ }),
  129934. /* 399 */
  129935. /***/ (function(module, exports, __webpack_require__) {
  129936. "use strict";
  129937. var Observable_1 = __webpack_require__(0);
  129938. var fromPromise_1 = __webpack_require__(178);
  129939. Observable_1.Observable.fromPromise = fromPromise_1.fromPromise;
  129940. //# sourceMappingURL=fromPromise.js.map
  129941. /***/ }),
  129942. /* 400 */
  129943. /***/ (function(module, exports, __webpack_require__) {
  129944. "use strict";
  129945. var Observable_1 = __webpack_require__(0);
  129946. var generate_1 = __webpack_require__(401);
  129947. Observable_1.Observable.generate = generate_1.generate;
  129948. //# sourceMappingURL=generate.js.map
  129949. /***/ }),
  129950. /* 401 */
  129951. /***/ (function(module, exports, __webpack_require__) {
  129952. "use strict";
  129953. var GenerateObservable_1 = __webpack_require__(402);
  129954. exports.generate = GenerateObservable_1.GenerateObservable.create;
  129955. //# sourceMappingURL=generate.js.map
  129956. /***/ }),
  129957. /* 402 */
  129958. /***/ (function(module, exports, __webpack_require__) {
  129959. "use strict";
  129960. var __extends = (this && this.__extends) || function (d, b) {
  129961. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  129962. function __() { this.constructor = d; }
  129963. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  129964. };
  129965. var Observable_1 = __webpack_require__(0);
  129966. var isScheduler_1 = __webpack_require__(22);
  129967. var selfSelector = function (value) { return value; };
  129968. /**
  129969. * We need this JSDoc comment for affecting ESDoc.
  129970. * @extends {Ignored}
  129971. * @hide true
  129972. */
  129973. var GenerateObservable = (function (_super) {
  129974. __extends(GenerateObservable, _super);
  129975. function GenerateObservable(initialState, condition, iterate, resultSelector, scheduler) {
  129976. _super.call(this);
  129977. this.initialState = initialState;
  129978. this.condition = condition;
  129979. this.iterate = iterate;
  129980. this.resultSelector = resultSelector;
  129981. this.scheduler = scheduler;
  129982. }
  129983. GenerateObservable.create = function (initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
  129984. if (arguments.length == 1) {
  129985. return new GenerateObservable(initialStateOrOptions.initialState, initialStateOrOptions.condition, initialStateOrOptions.iterate, initialStateOrOptions.resultSelector || selfSelector, initialStateOrOptions.scheduler);
  129986. }
  129987. if (resultSelectorOrObservable === undefined || isScheduler_1.isScheduler(resultSelectorOrObservable)) {
  129988. return new GenerateObservable(initialStateOrOptions, condition, iterate, selfSelector, resultSelectorOrObservable);
  129989. }
  129990. return new GenerateObservable(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler);
  129991. };
  129992. /** @deprecated internal use only */ GenerateObservable.prototype._subscribe = function (subscriber) {
  129993. var state = this.initialState;
  129994. if (this.scheduler) {
  129995. return this.scheduler.schedule(GenerateObservable.dispatch, 0, {
  129996. subscriber: subscriber,
  129997. iterate: this.iterate,
  129998. condition: this.condition,
  129999. resultSelector: this.resultSelector,
  130000. state: state });
  130001. }
  130002. var _a = this, condition = _a.condition, resultSelector = _a.resultSelector, iterate = _a.iterate;
  130003. do {
  130004. if (condition) {
  130005. var conditionResult = void 0;
  130006. try {
  130007. conditionResult = condition(state);
  130008. }
  130009. catch (err) {
  130010. subscriber.error(err);
  130011. return;
  130012. }
  130013. if (!conditionResult) {
  130014. subscriber.complete();
  130015. break;
  130016. }
  130017. }
  130018. var value = void 0;
  130019. try {
  130020. value = resultSelector(state);
  130021. }
  130022. catch (err) {
  130023. subscriber.error(err);
  130024. return;
  130025. }
  130026. subscriber.next(value);
  130027. if (subscriber.closed) {
  130028. break;
  130029. }
  130030. try {
  130031. state = iterate(state);
  130032. }
  130033. catch (err) {
  130034. subscriber.error(err);
  130035. return;
  130036. }
  130037. } while (true);
  130038. };
  130039. GenerateObservable.dispatch = function (state) {
  130040. var subscriber = state.subscriber, condition = state.condition;
  130041. if (subscriber.closed) {
  130042. return;
  130043. }
  130044. if (state.needIterate) {
  130045. try {
  130046. state.state = state.iterate(state.state);
  130047. }
  130048. catch (err) {
  130049. subscriber.error(err);
  130050. return;
  130051. }
  130052. }
  130053. else {
  130054. state.needIterate = true;
  130055. }
  130056. if (condition) {
  130057. var conditionResult = void 0;
  130058. try {
  130059. conditionResult = condition(state.state);
  130060. }
  130061. catch (err) {
  130062. subscriber.error(err);
  130063. return;
  130064. }
  130065. if (!conditionResult) {
  130066. subscriber.complete();
  130067. return;
  130068. }
  130069. if (subscriber.closed) {
  130070. return;
  130071. }
  130072. }
  130073. var value;
  130074. try {
  130075. value = state.resultSelector(state.state);
  130076. }
  130077. catch (err) {
  130078. subscriber.error(err);
  130079. return;
  130080. }
  130081. if (subscriber.closed) {
  130082. return;
  130083. }
  130084. subscriber.next(value);
  130085. if (subscriber.closed) {
  130086. return;
  130087. }
  130088. return this.schedule(state);
  130089. };
  130090. return GenerateObservable;
  130091. }(Observable_1.Observable));
  130092. exports.GenerateObservable = GenerateObservable;
  130093. //# sourceMappingURL=GenerateObservable.js.map
  130094. /***/ }),
  130095. /* 403 */
  130096. /***/ (function(module, exports, __webpack_require__) {
  130097. "use strict";
  130098. var Observable_1 = __webpack_require__(0);
  130099. var if_1 = __webpack_require__(404);
  130100. Observable_1.Observable.if = if_1._if;
  130101. //# sourceMappingURL=if.js.map
  130102. /***/ }),
  130103. /* 404 */
  130104. /***/ (function(module, exports, __webpack_require__) {
  130105. "use strict";
  130106. var IfObservable_1 = __webpack_require__(405);
  130107. exports._if = IfObservable_1.IfObservable.create;
  130108. //# sourceMappingURL=if.js.map
  130109. /***/ }),
  130110. /* 405 */
  130111. /***/ (function(module, exports, __webpack_require__) {
  130112. "use strict";
  130113. var __extends = (this && this.__extends) || function (d, b) {
  130114. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130115. function __() { this.constructor = d; }
  130116. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130117. };
  130118. var Observable_1 = __webpack_require__(0);
  130119. var subscribeToResult_1 = __webpack_require__(5);
  130120. var OuterSubscriber_1 = __webpack_require__(6);
  130121. /**
  130122. * We need this JSDoc comment for affecting ESDoc.
  130123. * @extends {Ignored}
  130124. * @hide true
  130125. */
  130126. var IfObservable = (function (_super) {
  130127. __extends(IfObservable, _super);
  130128. function IfObservable(condition, thenSource, elseSource) {
  130129. _super.call(this);
  130130. this.condition = condition;
  130131. this.thenSource = thenSource;
  130132. this.elseSource = elseSource;
  130133. }
  130134. IfObservable.create = function (condition, thenSource, elseSource) {
  130135. return new IfObservable(condition, thenSource, elseSource);
  130136. };
  130137. /** @deprecated internal use only */ IfObservable.prototype._subscribe = function (subscriber) {
  130138. var _a = this, condition = _a.condition, thenSource = _a.thenSource, elseSource = _a.elseSource;
  130139. return new IfSubscriber(subscriber, condition, thenSource, elseSource);
  130140. };
  130141. return IfObservable;
  130142. }(Observable_1.Observable));
  130143. exports.IfObservable = IfObservable;
  130144. var IfSubscriber = (function (_super) {
  130145. __extends(IfSubscriber, _super);
  130146. function IfSubscriber(destination, condition, thenSource, elseSource) {
  130147. _super.call(this, destination);
  130148. this.condition = condition;
  130149. this.thenSource = thenSource;
  130150. this.elseSource = elseSource;
  130151. this.tryIf();
  130152. }
  130153. IfSubscriber.prototype.tryIf = function () {
  130154. var _a = this, condition = _a.condition, thenSource = _a.thenSource, elseSource = _a.elseSource;
  130155. var result;
  130156. try {
  130157. result = condition();
  130158. var source = result ? thenSource : elseSource;
  130159. if (source) {
  130160. this.add(subscribeToResult_1.subscribeToResult(this, source));
  130161. }
  130162. else {
  130163. this._complete();
  130164. }
  130165. }
  130166. catch (err) {
  130167. this._error(err);
  130168. }
  130169. };
  130170. return IfSubscriber;
  130171. }(OuterSubscriber_1.OuterSubscriber));
  130172. //# sourceMappingURL=IfObservable.js.map
  130173. /***/ }),
  130174. /* 406 */
  130175. /***/ (function(module, exports, __webpack_require__) {
  130176. "use strict";
  130177. var Observable_1 = __webpack_require__(0);
  130178. var interval_1 = __webpack_require__(407);
  130179. Observable_1.Observable.interval = interval_1.interval;
  130180. //# sourceMappingURL=interval.js.map
  130181. /***/ }),
  130182. /* 407 */
  130183. /***/ (function(module, exports, __webpack_require__) {
  130184. "use strict";
  130185. var IntervalObservable_1 = __webpack_require__(408);
  130186. exports.interval = IntervalObservable_1.IntervalObservable.create;
  130187. //# sourceMappingURL=interval.js.map
  130188. /***/ }),
  130189. /* 408 */
  130190. /***/ (function(module, exports, __webpack_require__) {
  130191. "use strict";
  130192. var __extends = (this && this.__extends) || function (d, b) {
  130193. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130194. function __() { this.constructor = d; }
  130195. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130196. };
  130197. var isNumeric_1 = __webpack_require__(56);
  130198. var Observable_1 = __webpack_require__(0);
  130199. var async_1 = __webpack_require__(10);
  130200. /**
  130201. * We need this JSDoc comment for affecting ESDoc.
  130202. * @extends {Ignored}
  130203. * @hide true
  130204. */
  130205. var IntervalObservable = (function (_super) {
  130206. __extends(IntervalObservable, _super);
  130207. function IntervalObservable(period, scheduler) {
  130208. if (period === void 0) { period = 0; }
  130209. if (scheduler === void 0) { scheduler = async_1.async; }
  130210. _super.call(this);
  130211. this.period = period;
  130212. this.scheduler = scheduler;
  130213. if (!isNumeric_1.isNumeric(period) || period < 0) {
  130214. this.period = 0;
  130215. }
  130216. if (!scheduler || typeof scheduler.schedule !== 'function') {
  130217. this.scheduler = async_1.async;
  130218. }
  130219. }
  130220. /**
  130221. * Creates an Observable that emits sequential numbers every specified
  130222. * interval of time, on a specified IScheduler.
  130223. *
  130224. * <span class="informal">Emits incremental numbers periodically in time.
  130225. * </span>
  130226. *
  130227. * <img src="./img/interval.png" width="100%">
  130228. *
  130229. * `interval` returns an Observable that emits an infinite sequence of
  130230. * ascending integers, with a constant interval of time of your choosing
  130231. * between those emissions. The first emission is not sent immediately, but
  130232. * only after the first period has passed. By default, this operator uses the
  130233. * `async` IScheduler to provide a notion of time, but you may pass any
  130234. * IScheduler to it.
  130235. *
  130236. * @example <caption>Emits ascending numbers, one every second (1000ms)</caption>
  130237. * var numbers = Rx.Observable.interval(1000);
  130238. * numbers.subscribe(x => console.log(x));
  130239. *
  130240. * @see {@link timer}
  130241. * @see {@link delay}
  130242. *
  130243. * @param {number} [period=0] The interval size in milliseconds (by default)
  130244. * or the time unit determined by the scheduler's clock.
  130245. * @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling
  130246. * the emission of values, and providing a notion of "time".
  130247. * @return {Observable} An Observable that emits a sequential number each time
  130248. * interval.
  130249. * @static true
  130250. * @name interval
  130251. * @owner Observable
  130252. */
  130253. IntervalObservable.create = function (period, scheduler) {
  130254. if (period === void 0) { period = 0; }
  130255. if (scheduler === void 0) { scheduler = async_1.async; }
  130256. return new IntervalObservable(period, scheduler);
  130257. };
  130258. IntervalObservable.dispatch = function (state) {
  130259. var index = state.index, subscriber = state.subscriber, period = state.period;
  130260. subscriber.next(index);
  130261. if (subscriber.closed) {
  130262. return;
  130263. }
  130264. state.index += 1;
  130265. this.schedule(state, period);
  130266. };
  130267. /** @deprecated internal use only */ IntervalObservable.prototype._subscribe = function (subscriber) {
  130268. var index = 0;
  130269. var period = this.period;
  130270. var scheduler = this.scheduler;
  130271. subscriber.add(scheduler.schedule(IntervalObservable.dispatch, period, {
  130272. index: index, subscriber: subscriber, period: period
  130273. }));
  130274. };
  130275. return IntervalObservable;
  130276. }(Observable_1.Observable));
  130277. exports.IntervalObservable = IntervalObservable;
  130278. //# sourceMappingURL=IntervalObservable.js.map
  130279. /***/ }),
  130280. /* 409 */
  130281. /***/ (function(module, exports, __webpack_require__) {
  130282. "use strict";
  130283. var __extends = (this && this.__extends) || function (d, b) {
  130284. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130285. function __() { this.constructor = d; }
  130286. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130287. };
  130288. var Subscription_1 = __webpack_require__(14);
  130289. /**
  130290. * A unit of work to be executed in a {@link Scheduler}. An action is typically
  130291. * created from within a Scheduler and an RxJS user does not need to concern
  130292. * themselves about creating and manipulating an Action.
  130293. *
  130294. * ```ts
  130295. * class Action<T> extends Subscription {
  130296. * new (scheduler: Scheduler, work: (state?: T) => void);
  130297. * schedule(state?: T, delay: number = 0): Subscription;
  130298. * }
  130299. * ```
  130300. *
  130301. * @class Action<T>
  130302. */
  130303. var Action = (function (_super) {
  130304. __extends(Action, _super);
  130305. function Action(scheduler, work) {
  130306. _super.call(this);
  130307. }
  130308. /**
  130309. * Schedules this action on its parent Scheduler for execution. May be passed
  130310. * some context object, `state`. May happen at some point in the future,
  130311. * according to the `delay` parameter, if specified.
  130312. * @param {T} [state] Some contextual data that the `work` function uses when
  130313. * called by the Scheduler.
  130314. * @param {number} [delay] Time to wait before executing the work, where the
  130315. * time unit is implicit and defined by the Scheduler.
  130316. * @return {void}
  130317. */
  130318. Action.prototype.schedule = function (state, delay) {
  130319. if (delay === void 0) { delay = 0; }
  130320. return this;
  130321. };
  130322. return Action;
  130323. }(Subscription_1.Subscription));
  130324. exports.Action = Action;
  130325. //# sourceMappingURL=Action.js.map
  130326. /***/ }),
  130327. /* 410 */
  130328. /***/ (function(module, exports, __webpack_require__) {
  130329. "use strict";
  130330. /**
  130331. * An execution context and a data structure to order tasks and schedule their
  130332. * execution. Provides a notion of (potentially virtual) time, through the
  130333. * `now()` getter method.
  130334. *
  130335. * Each unit of work in a Scheduler is called an {@link Action}.
  130336. *
  130337. * ```ts
  130338. * class Scheduler {
  130339. * now(): number;
  130340. * schedule(work, delay?, state?): Subscription;
  130341. * }
  130342. * ```
  130343. *
  130344. * @class Scheduler
  130345. */
  130346. var Scheduler = (function () {
  130347. function Scheduler(SchedulerAction, now) {
  130348. if (now === void 0) { now = Scheduler.now; }
  130349. this.SchedulerAction = SchedulerAction;
  130350. this.now = now;
  130351. }
  130352. /**
  130353. * Schedules a function, `work`, for execution. May happen at some point in
  130354. * the future, according to the `delay` parameter, if specified. May be passed
  130355. * some context object, `state`, which will be passed to the `work` function.
  130356. *
  130357. * The given arguments will be processed an stored as an Action object in a
  130358. * queue of actions.
  130359. *
  130360. * @param {function(state: ?T): ?Subscription} work A function representing a
  130361. * task, or some unit of work to be executed by the Scheduler.
  130362. * @param {number} [delay] Time to wait before executing the work, where the
  130363. * time unit is implicit and defined by the Scheduler itself.
  130364. * @param {T} [state] Some contextual data that the `work` function uses when
  130365. * called by the Scheduler.
  130366. * @return {Subscription} A subscription in order to be able to unsubscribe
  130367. * the scheduled work.
  130368. */
  130369. Scheduler.prototype.schedule = function (work, delay, state) {
  130370. if (delay === void 0) { delay = 0; }
  130371. return new this.SchedulerAction(this, work).schedule(state, delay);
  130372. };
  130373. Scheduler.now = Date.now ? Date.now : function () { return +new Date(); };
  130374. return Scheduler;
  130375. }());
  130376. exports.Scheduler = Scheduler;
  130377. //# sourceMappingURL=Scheduler.js.map
  130378. /***/ }),
  130379. /* 411 */
  130380. /***/ (function(module, exports, __webpack_require__) {
  130381. "use strict";
  130382. var Observable_1 = __webpack_require__(0);
  130383. var merge_1 = __webpack_require__(44);
  130384. Observable_1.Observable.merge = merge_1.merge;
  130385. //# sourceMappingURL=merge.js.map
  130386. /***/ }),
  130387. /* 412 */
  130388. /***/ (function(module, exports, __webpack_require__) {
  130389. "use strict";
  130390. var Observable_1 = __webpack_require__(0);
  130391. var race_1 = __webpack_require__(115);
  130392. Observable_1.Observable.race = race_1.race;
  130393. //# sourceMappingURL=race.js.map
  130394. /***/ }),
  130395. /* 413 */
  130396. /***/ (function(module, exports, __webpack_require__) {
  130397. "use strict";
  130398. var Observable_1 = __webpack_require__(0);
  130399. var never_1 = __webpack_require__(414);
  130400. Observable_1.Observable.never = never_1.never;
  130401. //# sourceMappingURL=never.js.map
  130402. /***/ }),
  130403. /* 414 */
  130404. /***/ (function(module, exports, __webpack_require__) {
  130405. "use strict";
  130406. var NeverObservable_1 = __webpack_require__(415);
  130407. exports.never = NeverObservable_1.NeverObservable.create;
  130408. //# sourceMappingURL=never.js.map
  130409. /***/ }),
  130410. /* 415 */
  130411. /***/ (function(module, exports, __webpack_require__) {
  130412. "use strict";
  130413. var __extends = (this && this.__extends) || function (d, b) {
  130414. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130415. function __() { this.constructor = d; }
  130416. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130417. };
  130418. var Observable_1 = __webpack_require__(0);
  130419. var noop_1 = __webpack_require__(88);
  130420. /**
  130421. * We need this JSDoc comment for affecting ESDoc.
  130422. * @extends {Ignored}
  130423. * @hide true
  130424. */
  130425. var NeverObservable = (function (_super) {
  130426. __extends(NeverObservable, _super);
  130427. function NeverObservable() {
  130428. _super.call(this);
  130429. }
  130430. /**
  130431. * Creates an Observable that emits no items to the Observer.
  130432. *
  130433. * <span class="informal">An Observable that never emits anything.</span>
  130434. *
  130435. * <img src="./img/never.png" width="100%">
  130436. *
  130437. * This static operator is useful for creating a simple Observable that emits
  130438. * neither values nor errors nor the completion notification. It can be used
  130439. * for testing purposes or for composing with other Observables. Please note
  130440. * that by never emitting a complete notification, this Observable keeps the
  130441. * subscription from being disposed automatically. Subscriptions need to be
  130442. * manually disposed.
  130443. *
  130444. * @example <caption>Emit the number 7, then never emit anything else (not even complete).</caption>
  130445. * function info() {
  130446. * console.log('Will not be called');
  130447. * }
  130448. * var result = Rx.Observable.never().startWith(7);
  130449. * result.subscribe(x => console.log(x), info, info);
  130450. *
  130451. * @see {@link create}
  130452. * @see {@link empty}
  130453. * @see {@link of}
  130454. * @see {@link throw}
  130455. *
  130456. * @return {Observable} A "never" Observable: never emits anything.
  130457. * @static true
  130458. * @name never
  130459. * @owner Observable
  130460. */
  130461. NeverObservable.create = function () {
  130462. return new NeverObservable();
  130463. };
  130464. /** @deprecated internal use only */ NeverObservable.prototype._subscribe = function (subscriber) {
  130465. noop_1.noop();
  130466. };
  130467. return NeverObservable;
  130468. }(Observable_1.Observable));
  130469. exports.NeverObservable = NeverObservable;
  130470. //# sourceMappingURL=NeverObservable.js.map
  130471. /***/ }),
  130472. /* 416 */
  130473. /***/ (function(module, exports, __webpack_require__) {
  130474. "use strict";
  130475. var Observable_1 = __webpack_require__(0);
  130476. var of_1 = __webpack_require__(211);
  130477. Observable_1.Observable.of = of_1.of;
  130478. //# sourceMappingURL=of.js.map
  130479. /***/ }),
  130480. /* 417 */
  130481. /***/ (function(module, exports, __webpack_require__) {
  130482. "use strict";
  130483. var Observable_1 = __webpack_require__(0);
  130484. var onErrorResumeNext_1 = __webpack_require__(418);
  130485. Observable_1.Observable.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNext;
  130486. //# sourceMappingURL=onErrorResumeNext.js.map
  130487. /***/ }),
  130488. /* 418 */
  130489. /***/ (function(module, exports, __webpack_require__) {
  130490. "use strict";
  130491. var onErrorResumeNext_1 = __webpack_require__(116);
  130492. exports.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNextStatic;
  130493. //# sourceMappingURL=onErrorResumeNext.js.map
  130494. /***/ }),
  130495. /* 419 */
  130496. /***/ (function(module, exports, __webpack_require__) {
  130497. "use strict";
  130498. var Observable_1 = __webpack_require__(0);
  130499. var pairs_1 = __webpack_require__(420);
  130500. Observable_1.Observable.pairs = pairs_1.pairs;
  130501. //# sourceMappingURL=pairs.js.map
  130502. /***/ }),
  130503. /* 420 */
  130504. /***/ (function(module, exports, __webpack_require__) {
  130505. "use strict";
  130506. var PairsObservable_1 = __webpack_require__(421);
  130507. exports.pairs = PairsObservable_1.PairsObservable.create;
  130508. //# sourceMappingURL=pairs.js.map
  130509. /***/ }),
  130510. /* 421 */
  130511. /***/ (function(module, exports, __webpack_require__) {
  130512. "use strict";
  130513. var __extends = (this && this.__extends) || function (d, b) {
  130514. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130515. function __() { this.constructor = d; }
  130516. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130517. };
  130518. var Observable_1 = __webpack_require__(0);
  130519. function dispatch(state) {
  130520. var obj = state.obj, keys = state.keys, length = state.length, index = state.index, subscriber = state.subscriber;
  130521. if (index === length) {
  130522. subscriber.complete();
  130523. return;
  130524. }
  130525. var key = keys[index];
  130526. subscriber.next([key, obj[key]]);
  130527. state.index = index + 1;
  130528. this.schedule(state);
  130529. }
  130530. /**
  130531. * We need this JSDoc comment for affecting ESDoc.
  130532. * @extends {Ignored}
  130533. * @hide true
  130534. */
  130535. var PairsObservable = (function (_super) {
  130536. __extends(PairsObservable, _super);
  130537. function PairsObservable(obj, scheduler) {
  130538. _super.call(this);
  130539. this.obj = obj;
  130540. this.scheduler = scheduler;
  130541. this.keys = Object.keys(obj);
  130542. }
  130543. /**
  130544. * Convert an object into an observable sequence of [key, value] pairs
  130545. * using an optional IScheduler to enumerate the object.
  130546. *
  130547. * @example <caption>Converts a javascript object to an Observable</caption>
  130548. * var obj = {
  130549. * foo: 42,
  130550. * bar: 56,
  130551. * baz: 78
  130552. * };
  130553. *
  130554. * var source = Rx.Observable.pairs(obj);
  130555. *
  130556. * var subscription = source.subscribe(
  130557. * function (x) {
  130558. * console.log('Next: %s', x);
  130559. * },
  130560. * function (err) {
  130561. * console.log('Error: %s', err);
  130562. * },
  130563. * function () {
  130564. * console.log('Completed');
  130565. * });
  130566. *
  130567. * @param {Object} obj The object to inspect and turn into an
  130568. * Observable sequence.
  130569. * @param {Scheduler} [scheduler] An optional IScheduler to run the
  130570. * enumeration of the input sequence on.
  130571. * @returns {(Observable<Array<string | T>>)} An observable sequence of
  130572. * [key, value] pairs from the object.
  130573. */
  130574. PairsObservable.create = function (obj, scheduler) {
  130575. return new PairsObservable(obj, scheduler);
  130576. };
  130577. /** @deprecated internal use only */ PairsObservable.prototype._subscribe = function (subscriber) {
  130578. var _a = this, keys = _a.keys, scheduler = _a.scheduler;
  130579. var length = keys.length;
  130580. if (scheduler) {
  130581. return scheduler.schedule(dispatch, 0, {
  130582. obj: this.obj, keys: keys, length: length, index: 0, subscriber: subscriber
  130583. });
  130584. }
  130585. else {
  130586. for (var idx = 0; idx < length; idx++) {
  130587. var key = keys[idx];
  130588. subscriber.next([key, this.obj[key]]);
  130589. }
  130590. subscriber.complete();
  130591. }
  130592. };
  130593. return PairsObservable;
  130594. }(Observable_1.Observable));
  130595. exports.PairsObservable = PairsObservable;
  130596. //# sourceMappingURL=PairsObservable.js.map
  130597. /***/ }),
  130598. /* 422 */
  130599. /***/ (function(module, exports, __webpack_require__) {
  130600. "use strict";
  130601. var Observable_1 = __webpack_require__(0);
  130602. var range_1 = __webpack_require__(423);
  130603. Observable_1.Observable.range = range_1.range;
  130604. //# sourceMappingURL=range.js.map
  130605. /***/ }),
  130606. /* 423 */
  130607. /***/ (function(module, exports, __webpack_require__) {
  130608. "use strict";
  130609. var RangeObservable_1 = __webpack_require__(424);
  130610. exports.range = RangeObservable_1.RangeObservable.create;
  130611. //# sourceMappingURL=range.js.map
  130612. /***/ }),
  130613. /* 424 */
  130614. /***/ (function(module, exports, __webpack_require__) {
  130615. "use strict";
  130616. var __extends = (this && this.__extends) || function (d, b) {
  130617. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130618. function __() { this.constructor = d; }
  130619. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130620. };
  130621. var Observable_1 = __webpack_require__(0);
  130622. /**
  130623. * We need this JSDoc comment for affecting ESDoc.
  130624. * @extends {Ignored}
  130625. * @hide true
  130626. */
  130627. var RangeObservable = (function (_super) {
  130628. __extends(RangeObservable, _super);
  130629. function RangeObservable(start, count, scheduler) {
  130630. _super.call(this);
  130631. this.start = start;
  130632. this._count = count;
  130633. this.scheduler = scheduler;
  130634. }
  130635. /**
  130636. * Creates an Observable that emits a sequence of numbers within a specified
  130637. * range.
  130638. *
  130639. * <span class="informal">Emits a sequence of numbers in a range.</span>
  130640. *
  130641. * <img src="./img/range.png" width="100%">
  130642. *
  130643. * `range` operator emits a range of sequential integers, in order, where you
  130644. * select the `start` of the range and its `length`. By default, uses no
  130645. * IScheduler and just delivers the notifications synchronously, but may use
  130646. * an optional IScheduler to regulate those deliveries.
  130647. *
  130648. * @example <caption>Emits the numbers 1 to 10</caption>
  130649. * var numbers = Rx.Observable.range(1, 10);
  130650. * numbers.subscribe(x => console.log(x));
  130651. *
  130652. * @see {@link timer}
  130653. * @see {@link interval}
  130654. *
  130655. * @param {number} [start=0] The value of the first integer in the sequence.
  130656. * @param {number} [count=0] The number of sequential integers to generate.
  130657. * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
  130658. * the emissions of the notifications.
  130659. * @return {Observable} An Observable of numbers that emits a finite range of
  130660. * sequential integers.
  130661. * @static true
  130662. * @name range
  130663. * @owner Observable
  130664. */
  130665. RangeObservable.create = function (start, count, scheduler) {
  130666. if (start === void 0) { start = 0; }
  130667. if (count === void 0) { count = 0; }
  130668. return new RangeObservable(start, count, scheduler);
  130669. };
  130670. RangeObservable.dispatch = function (state) {
  130671. var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
  130672. if (index >= count) {
  130673. subscriber.complete();
  130674. return;
  130675. }
  130676. subscriber.next(start);
  130677. if (subscriber.closed) {
  130678. return;
  130679. }
  130680. state.index = index + 1;
  130681. state.start = start + 1;
  130682. this.schedule(state);
  130683. };
  130684. /** @deprecated internal use only */ RangeObservable.prototype._subscribe = function (subscriber) {
  130685. var index = 0;
  130686. var start = this.start;
  130687. var count = this._count;
  130688. var scheduler = this.scheduler;
  130689. if (scheduler) {
  130690. return scheduler.schedule(RangeObservable.dispatch, 0, {
  130691. index: index, count: count, start: start, subscriber: subscriber
  130692. });
  130693. }
  130694. else {
  130695. do {
  130696. if (index++ >= count) {
  130697. subscriber.complete();
  130698. break;
  130699. }
  130700. subscriber.next(start++);
  130701. if (subscriber.closed) {
  130702. break;
  130703. }
  130704. } while (true);
  130705. }
  130706. };
  130707. return RangeObservable;
  130708. }(Observable_1.Observable));
  130709. exports.RangeObservable = RangeObservable;
  130710. //# sourceMappingURL=RangeObservable.js.map
  130711. /***/ }),
  130712. /* 425 */
  130713. /***/ (function(module, exports, __webpack_require__) {
  130714. "use strict";
  130715. var Observable_1 = __webpack_require__(0);
  130716. var using_1 = __webpack_require__(426);
  130717. Observable_1.Observable.using = using_1.using;
  130718. //# sourceMappingURL=using.js.map
  130719. /***/ }),
  130720. /* 426 */
  130721. /***/ (function(module, exports, __webpack_require__) {
  130722. "use strict";
  130723. var UsingObservable_1 = __webpack_require__(427);
  130724. exports.using = UsingObservable_1.UsingObservable.create;
  130725. //# sourceMappingURL=using.js.map
  130726. /***/ }),
  130727. /* 427 */
  130728. /***/ (function(module, exports, __webpack_require__) {
  130729. "use strict";
  130730. var __extends = (this && this.__extends) || function (d, b) {
  130731. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130732. function __() { this.constructor = d; }
  130733. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130734. };
  130735. var Observable_1 = __webpack_require__(0);
  130736. var subscribeToResult_1 = __webpack_require__(5);
  130737. var OuterSubscriber_1 = __webpack_require__(6);
  130738. /**
  130739. * We need this JSDoc comment for affecting ESDoc.
  130740. * @extends {Ignored}
  130741. * @hide true
  130742. */
  130743. var UsingObservable = (function (_super) {
  130744. __extends(UsingObservable, _super);
  130745. function UsingObservable(resourceFactory, observableFactory) {
  130746. _super.call(this);
  130747. this.resourceFactory = resourceFactory;
  130748. this.observableFactory = observableFactory;
  130749. }
  130750. UsingObservable.create = function (resourceFactory, observableFactory) {
  130751. return new UsingObservable(resourceFactory, observableFactory);
  130752. };
  130753. /** @deprecated internal use only */ UsingObservable.prototype._subscribe = function (subscriber) {
  130754. var _a = this, resourceFactory = _a.resourceFactory, observableFactory = _a.observableFactory;
  130755. var resource;
  130756. try {
  130757. resource = resourceFactory();
  130758. return new UsingSubscriber(subscriber, resource, observableFactory);
  130759. }
  130760. catch (err) {
  130761. subscriber.error(err);
  130762. }
  130763. };
  130764. return UsingObservable;
  130765. }(Observable_1.Observable));
  130766. exports.UsingObservable = UsingObservable;
  130767. var UsingSubscriber = (function (_super) {
  130768. __extends(UsingSubscriber, _super);
  130769. function UsingSubscriber(destination, resource, observableFactory) {
  130770. _super.call(this, destination);
  130771. this.resource = resource;
  130772. this.observableFactory = observableFactory;
  130773. destination.add(resource);
  130774. this.tryUse();
  130775. }
  130776. UsingSubscriber.prototype.tryUse = function () {
  130777. try {
  130778. var source = this.observableFactory.call(this, this.resource);
  130779. if (source) {
  130780. this.add(subscribeToResult_1.subscribeToResult(this, source));
  130781. }
  130782. }
  130783. catch (err) {
  130784. this._error(err);
  130785. }
  130786. };
  130787. return UsingSubscriber;
  130788. }(OuterSubscriber_1.OuterSubscriber));
  130789. //# sourceMappingURL=UsingObservable.js.map
  130790. /***/ }),
  130791. /* 428 */
  130792. /***/ (function(module, exports, __webpack_require__) {
  130793. "use strict";
  130794. var Observable_1 = __webpack_require__(0);
  130795. var throw_1 = __webpack_require__(215);
  130796. Observable_1.Observable.throw = throw_1._throw;
  130797. //# sourceMappingURL=throw.js.map
  130798. /***/ }),
  130799. /* 429 */
  130800. /***/ (function(module, exports, __webpack_require__) {
  130801. "use strict";
  130802. var __extends = (this && this.__extends) || function (d, b) {
  130803. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130804. function __() { this.constructor = d; }
  130805. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130806. };
  130807. var Observable_1 = __webpack_require__(0);
  130808. /**
  130809. * We need this JSDoc comment for affecting ESDoc.
  130810. * @extends {Ignored}
  130811. * @hide true
  130812. */
  130813. var ErrorObservable = (function (_super) {
  130814. __extends(ErrorObservable, _super);
  130815. function ErrorObservable(error, scheduler) {
  130816. _super.call(this);
  130817. this.error = error;
  130818. this.scheduler = scheduler;
  130819. }
  130820. /**
  130821. * Creates an Observable that emits no items to the Observer and immediately
  130822. * emits an error notification.
  130823. *
  130824. * <span class="informal">Just emits 'error', and nothing else.
  130825. * </span>
  130826. *
  130827. * <img src="./img/throw.png" width="100%">
  130828. *
  130829. * This static operator is useful for creating a simple Observable that only
  130830. * emits the error notification. It can be used for composing with other
  130831. * Observables, such as in a {@link mergeMap}.
  130832. *
  130833. * @example <caption>Emit the number 7, then emit an error.</caption>
  130834. * var result = Rx.Observable.throw(new Error('oops!')).startWith(7);
  130835. * result.subscribe(x => console.log(x), e => console.error(e));
  130836. *
  130837. * @example <caption>Map and flatten numbers to the sequence 'a', 'b', 'c', but throw an error for 13</caption>
  130838. * var interval = Rx.Observable.interval(1000);
  130839. * var result = interval.mergeMap(x =>
  130840. * x === 13 ?
  130841. * Rx.Observable.throw('Thirteens are bad') :
  130842. * Rx.Observable.of('a', 'b', 'c')
  130843. * );
  130844. * result.subscribe(x => console.log(x), e => console.error(e));
  130845. *
  130846. * @see {@link create}
  130847. * @see {@link empty}
  130848. * @see {@link never}
  130849. * @see {@link of}
  130850. *
  130851. * @param {any} error The particular Error to pass to the error notification.
  130852. * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
  130853. * the emission of the error notification.
  130854. * @return {Observable} An error Observable: emits only the error notification
  130855. * using the given error argument.
  130856. * @static true
  130857. * @name throw
  130858. * @owner Observable
  130859. */
  130860. ErrorObservable.create = function (error, scheduler) {
  130861. return new ErrorObservable(error, scheduler);
  130862. };
  130863. ErrorObservable.dispatch = function (arg) {
  130864. var error = arg.error, subscriber = arg.subscriber;
  130865. subscriber.error(error);
  130866. };
  130867. /** @deprecated internal use only */ ErrorObservable.prototype._subscribe = function (subscriber) {
  130868. var error = this.error;
  130869. var scheduler = this.scheduler;
  130870. subscriber.syncErrorThrowable = true;
  130871. if (scheduler) {
  130872. return scheduler.schedule(ErrorObservable.dispatch, 0, {
  130873. error: error, subscriber: subscriber
  130874. });
  130875. }
  130876. else {
  130877. subscriber.error(error);
  130878. }
  130879. };
  130880. return ErrorObservable;
  130881. }(Observable_1.Observable));
  130882. exports.ErrorObservable = ErrorObservable;
  130883. //# sourceMappingURL=ErrorObservable.js.map
  130884. /***/ }),
  130885. /* 430 */
  130886. /***/ (function(module, exports, __webpack_require__) {
  130887. "use strict";
  130888. var Observable_1 = __webpack_require__(0);
  130889. var timer_1 = __webpack_require__(216);
  130890. Observable_1.Observable.timer = timer_1.timer;
  130891. //# sourceMappingURL=timer.js.map
  130892. /***/ }),
  130893. /* 431 */
  130894. /***/ (function(module, exports, __webpack_require__) {
  130895. "use strict";
  130896. var __extends = (this && this.__extends) || function (d, b) {
  130897. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  130898. function __() { this.constructor = d; }
  130899. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  130900. };
  130901. var isNumeric_1 = __webpack_require__(56);
  130902. var Observable_1 = __webpack_require__(0);
  130903. var async_1 = __webpack_require__(10);
  130904. var isScheduler_1 = __webpack_require__(22);
  130905. var isDate_1 = __webpack_require__(76);
  130906. /**
  130907. * We need this JSDoc comment for affecting ESDoc.
  130908. * @extends {Ignored}
  130909. * @hide true
  130910. */
  130911. var TimerObservable = (function (_super) {
  130912. __extends(TimerObservable, _super);
  130913. function TimerObservable(dueTime, period, scheduler) {
  130914. if (dueTime === void 0) { dueTime = 0; }
  130915. _super.call(this);
  130916. this.period = -1;
  130917. this.dueTime = 0;
  130918. if (isNumeric_1.isNumeric(period)) {
  130919. this.period = Number(period) < 1 && 1 || Number(period);
  130920. }
  130921. else if (isScheduler_1.isScheduler(period)) {
  130922. scheduler = period;
  130923. }
  130924. if (!isScheduler_1.isScheduler(scheduler)) {
  130925. scheduler = async_1.async;
  130926. }
  130927. this.scheduler = scheduler;
  130928. this.dueTime = isDate_1.isDate(dueTime) ?
  130929. (+dueTime - this.scheduler.now()) :
  130930. dueTime;
  130931. }
  130932. /**
  130933. * Creates an Observable that starts emitting after an `initialDelay` and
  130934. * emits ever increasing numbers after each `period` of time thereafter.
  130935. *
  130936. * <span class="informal">Its like {@link interval}, but you can specify when
  130937. * should the emissions start.</span>
  130938. *
  130939. * <img src="./img/timer.png" width="100%">
  130940. *
  130941. * `timer` returns an Observable that emits an infinite sequence of ascending
  130942. * integers, with a constant interval of time, `period` of your choosing
  130943. * between those emissions. The first emission happens after the specified
  130944. * `initialDelay`. The initial delay may be a {@link Date}. By default, this
  130945. * operator uses the `async` IScheduler to provide a notion of time, but you
  130946. * may pass any IScheduler to it. If `period` is not specified, the output
  130947. * Observable emits only one value, `0`. Otherwise, it emits an infinite
  130948. * sequence.
  130949. *
  130950. * @example <caption>Emits ascending numbers, one every second (1000ms), starting after 3 seconds</caption>
  130951. * var numbers = Rx.Observable.timer(3000, 1000);
  130952. * numbers.subscribe(x => console.log(x));
  130953. *
  130954. * @example <caption>Emits one number after five seconds</caption>
  130955. * var numbers = Rx.Observable.timer(5000);
  130956. * numbers.subscribe(x => console.log(x));
  130957. *
  130958. * @see {@link interval}
  130959. * @see {@link delay}
  130960. *
  130961. * @param {number|Date} initialDelay The initial delay time to wait before
  130962. * emitting the first value of `0`.
  130963. * @param {number} [period] The period of time between emissions of the
  130964. * subsequent numbers.
  130965. * @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling
  130966. * the emission of values, and providing a notion of "time".
  130967. * @return {Observable} An Observable that emits a `0` after the
  130968. * `initialDelay` and ever increasing numbers after each `period` of time
  130969. * thereafter.
  130970. * @static true
  130971. * @name timer
  130972. * @owner Observable
  130973. */
  130974. TimerObservable.create = function (initialDelay, period, scheduler) {
  130975. if (initialDelay === void 0) { initialDelay = 0; }
  130976. return new TimerObservable(initialDelay, period, scheduler);
  130977. };
  130978. TimerObservable.dispatch = function (state) {
  130979. var index = state.index, period = state.period, subscriber = state.subscriber;
  130980. var action = this;
  130981. subscriber.next(index);
  130982. if (subscriber.closed) {
  130983. return;
  130984. }
  130985. else if (period === -1) {
  130986. return subscriber.complete();
  130987. }
  130988. state.index = index + 1;
  130989. action.schedule(state, period);
  130990. };
  130991. /** @deprecated internal use only */ TimerObservable.prototype._subscribe = function (subscriber) {
  130992. var index = 0;
  130993. var _a = this, period = _a.period, dueTime = _a.dueTime, scheduler = _a.scheduler;
  130994. return scheduler.schedule(TimerObservable.dispatch, dueTime, {
  130995. index: index, period: period, subscriber: subscriber
  130996. });
  130997. };
  130998. return TimerObservable;
  130999. }(Observable_1.Observable));
  131000. exports.TimerObservable = TimerObservable;
  131001. //# sourceMappingURL=TimerObservable.js.map
  131002. /***/ }),
  131003. /* 432 */
  131004. /***/ (function(module, exports, __webpack_require__) {
  131005. "use strict";
  131006. var Observable_1 = __webpack_require__(0);
  131007. var zip_1 = __webpack_require__(433);
  131008. Observable_1.Observable.zip = zip_1.zip;
  131009. //# sourceMappingURL=zip.js.map
  131010. /***/ }),
  131011. /* 433 */
  131012. /***/ (function(module, exports, __webpack_require__) {
  131013. "use strict";
  131014. var zip_1 = __webpack_require__(77);
  131015. exports.zip = zip_1.zipStatic;
  131016. //# sourceMappingURL=zip.js.map
  131017. /***/ }),
  131018. /* 434 */
  131019. /***/ (function(module, exports, __webpack_require__) {
  131020. "use strict";
  131021. var Observable_1 = __webpack_require__(0);
  131022. var ajax_1 = __webpack_require__(435);
  131023. Observable_1.Observable.ajax = ajax_1.ajax;
  131024. //# sourceMappingURL=ajax.js.map
  131025. /***/ }),
  131026. /* 435 */
  131027. /***/ (function(module, exports, __webpack_require__) {
  131028. "use strict";
  131029. var AjaxObservable_1 = __webpack_require__(217);
  131030. exports.ajax = AjaxObservable_1.AjaxObservable.create;
  131031. //# sourceMappingURL=ajax.js.map
  131032. /***/ }),
  131033. /* 436 */
  131034. /***/ (function(module, exports, __webpack_require__) {
  131035. "use strict";
  131036. var Observable_1 = __webpack_require__(0);
  131037. var webSocket_1 = __webpack_require__(437);
  131038. Observable_1.Observable.webSocket = webSocket_1.webSocket;
  131039. //# sourceMappingURL=webSocket.js.map
  131040. /***/ }),
  131041. /* 437 */
  131042. /***/ (function(module, exports, __webpack_require__) {
  131043. "use strict";
  131044. var WebSocketSubject_1 = __webpack_require__(438);
  131045. exports.webSocket = WebSocketSubject_1.WebSocketSubject.create;
  131046. //# sourceMappingURL=webSocket.js.map
  131047. /***/ }),
  131048. /* 438 */
  131049. /***/ (function(module, exports, __webpack_require__) {
  131050. "use strict";
  131051. var __extends = (this && this.__extends) || function (d, b) {
  131052. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  131053. function __() { this.constructor = d; }
  131054. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  131055. };
  131056. var Subject_1 = __webpack_require__(12);
  131057. var Subscriber_1 = __webpack_require__(4);
  131058. var Observable_1 = __webpack_require__(0);
  131059. var Subscription_1 = __webpack_require__(14);
  131060. var root_1 = __webpack_require__(19);
  131061. var ReplaySubject_1 = __webpack_require__(78);
  131062. var tryCatch_1 = __webpack_require__(17);
  131063. var errorObject_1 = __webpack_require__(16);
  131064. var assign_1 = __webpack_require__(441);
  131065. /**
  131066. * We need this JSDoc comment for affecting ESDoc.
  131067. * @extends {Ignored}
  131068. * @hide true
  131069. */
  131070. var WebSocketSubject = (function (_super) {
  131071. __extends(WebSocketSubject, _super);
  131072. function WebSocketSubject(urlConfigOrSource, destination) {
  131073. if (urlConfigOrSource instanceof Observable_1.Observable) {
  131074. _super.call(this, destination, urlConfigOrSource);
  131075. }
  131076. else {
  131077. _super.call(this);
  131078. this.WebSocketCtor = root_1.root.WebSocket;
  131079. this._output = new Subject_1.Subject();
  131080. if (typeof urlConfigOrSource === 'string') {
  131081. this.url = urlConfigOrSource;
  131082. }
  131083. else {
  131084. // WARNING: config object could override important members here.
  131085. assign_1.assign(this, urlConfigOrSource);
  131086. }
  131087. if (!this.WebSocketCtor) {
  131088. throw new Error('no WebSocket constructor can be found');
  131089. }
  131090. this.destination = new ReplaySubject_1.ReplaySubject();
  131091. }
  131092. }
  131093. WebSocketSubject.prototype.resultSelector = function (e) {
  131094. return JSON.parse(e.data);
  131095. };
  131096. /**
  131097. * Wrapper around the w3c-compatible WebSocket object provided by the browser.
  131098. *
  131099. * @example <caption>Wraps browser WebSocket</caption>
  131100. *
  131101. * let socket$ = Observable.webSocket('ws://localhost:8081');
  131102. *
  131103. * socket$.subscribe(
  131104. * (msg) => console.log('message received: ' + msg),
  131105. * (err) => console.log(err),
  131106. * () => console.log('complete')
  131107. * );
  131108. *
  131109. * socket$.next(JSON.stringify({ op: 'hello' }));
  131110. *
  131111. * @example <caption>Wraps WebSocket from nodejs-websocket (using node.js)</caption>
  131112. *
  131113. * import { w3cwebsocket } from 'websocket';
  131114. *
  131115. * let socket$ = Observable.webSocket({
  131116. * url: 'ws://localhost:8081',
  131117. * WebSocketCtor: w3cwebsocket
  131118. * });
  131119. *
  131120. * socket$.subscribe(
  131121. * (msg) => console.log('message received: ' + msg),
  131122. * (err) => console.log(err),
  131123. * () => console.log('complete')
  131124. * );
  131125. *
  131126. * socket$.next(JSON.stringify({ op: 'hello' }));
  131127. *
  131128. * @param {string | WebSocketSubjectConfig} urlConfigOrSource the source of the websocket as an url or a structure defining the websocket object
  131129. * @return {WebSocketSubject}
  131130. * @static true
  131131. * @name webSocket
  131132. * @owner Observable
  131133. */
  131134. WebSocketSubject.create = function (urlConfigOrSource) {
  131135. return new WebSocketSubject(urlConfigOrSource);
  131136. };
  131137. WebSocketSubject.prototype.lift = function (operator) {
  131138. var sock = new WebSocketSubject(this, this.destination);
  131139. sock.operator = operator;
  131140. return sock;
  131141. };
  131142. WebSocketSubject.prototype._resetState = function () {
  131143. this.socket = null;
  131144. if (!this.source) {
  131145. this.destination = new ReplaySubject_1.ReplaySubject();
  131146. }
  131147. this._output = new Subject_1.Subject();
  131148. };
  131149. // TODO: factor this out to be a proper Operator/Subscriber implementation and eliminate closures
  131150. WebSocketSubject.prototype.multiplex = function (subMsg, unsubMsg, messageFilter) {
  131151. var self = this;
  131152. return new Observable_1.Observable(function (observer) {
  131153. var result = tryCatch_1.tryCatch(subMsg)();
  131154. if (result === errorObject_1.errorObject) {
  131155. observer.error(errorObject_1.errorObject.e);
  131156. }
  131157. else {
  131158. self.next(result);
  131159. }
  131160. var subscription = self.subscribe(function (x) {
  131161. var result = tryCatch_1.tryCatch(messageFilter)(x);
  131162. if (result === errorObject_1.errorObject) {
  131163. observer.error(errorObject_1.errorObject.e);
  131164. }
  131165. else if (result) {
  131166. observer.next(x);
  131167. }
  131168. }, function (err) { return observer.error(err); }, function () { return observer.complete(); });
  131169. return function () {
  131170. var result = tryCatch_1.tryCatch(unsubMsg)();
  131171. if (result === errorObject_1.errorObject) {
  131172. observer.error(errorObject_1.errorObject.e);
  131173. }
  131174. else {
  131175. self.next(result);
  131176. }
  131177. subscription.unsubscribe();
  131178. };
  131179. });
  131180. };
  131181. WebSocketSubject.prototype._connectSocket = function () {
  131182. var _this = this;
  131183. var WebSocketCtor = this.WebSocketCtor;
  131184. var observer = this._output;
  131185. var socket = null;
  131186. try {
  131187. socket = this.protocol ?
  131188. new WebSocketCtor(this.url, this.protocol) :
  131189. new WebSocketCtor(this.url);
  131190. this.socket = socket;
  131191. if (this.binaryType) {
  131192. this.socket.binaryType = this.binaryType;
  131193. }
  131194. }
  131195. catch (e) {
  131196. observer.error(e);
  131197. return;
  131198. }
  131199. var subscription = new Subscription_1.Subscription(function () {
  131200. _this.socket = null;
  131201. if (socket && socket.readyState === 1) {
  131202. socket.close();
  131203. }
  131204. });
  131205. socket.onopen = function (e) {
  131206. var openObserver = _this.openObserver;
  131207. if (openObserver) {
  131208. openObserver.next(e);
  131209. }
  131210. var queue = _this.destination;
  131211. _this.destination = Subscriber_1.Subscriber.create(function (x) { return socket.readyState === 1 && socket.send(x); }, function (e) {
  131212. var closingObserver = _this.closingObserver;
  131213. if (closingObserver) {
  131214. closingObserver.next(undefined);
  131215. }
  131216. if (e && e.code) {
  131217. socket.close(e.code, e.reason);
  131218. }
  131219. else {
  131220. observer.error(new TypeError('WebSocketSubject.error must be called with an object with an error code, ' +
  131221. 'and an optional reason: { code: number, reason: string }'));
  131222. }
  131223. _this._resetState();
  131224. }, function () {
  131225. var closingObserver = _this.closingObserver;
  131226. if (closingObserver) {
  131227. closingObserver.next(undefined);
  131228. }
  131229. socket.close();
  131230. _this._resetState();
  131231. });
  131232. if (queue && queue instanceof ReplaySubject_1.ReplaySubject) {
  131233. subscription.add(queue.subscribe(_this.destination));
  131234. }
  131235. };
  131236. socket.onerror = function (e) {
  131237. _this._resetState();
  131238. observer.error(e);
  131239. };
  131240. socket.onclose = function (e) {
  131241. _this._resetState();
  131242. var closeObserver = _this.closeObserver;
  131243. if (closeObserver) {
  131244. closeObserver.next(e);
  131245. }
  131246. if (e.wasClean) {
  131247. observer.complete();
  131248. }
  131249. else {
  131250. observer.error(e);
  131251. }
  131252. };
  131253. socket.onmessage = function (e) {
  131254. var result = tryCatch_1.tryCatch(_this.resultSelector)(e);
  131255. if (result === errorObject_1.errorObject) {
  131256. observer.error(errorObject_1.errorObject.e);
  131257. }
  131258. else {
  131259. observer.next(result);
  131260. }
  131261. };
  131262. };
  131263. /** @deprecated internal use only */ WebSocketSubject.prototype._subscribe = function (subscriber) {
  131264. var _this = this;
  131265. var source = this.source;
  131266. if (source) {
  131267. return source.subscribe(subscriber);
  131268. }
  131269. if (!this.socket) {
  131270. this._connectSocket();
  131271. }
  131272. var subscription = new Subscription_1.Subscription();
  131273. subscription.add(this._output.subscribe(subscriber));
  131274. subscription.add(function () {
  131275. var socket = _this.socket;
  131276. if (_this._output.observers.length === 0) {
  131277. if (socket && socket.readyState === 1) {
  131278. socket.close();
  131279. }
  131280. _this._resetState();
  131281. }
  131282. });
  131283. return subscription;
  131284. };
  131285. WebSocketSubject.prototype.unsubscribe = function () {
  131286. var _a = this, source = _a.source, socket = _a.socket;
  131287. if (socket && socket.readyState === 1) {
  131288. socket.close();
  131289. this._resetState();
  131290. }
  131291. _super.prototype.unsubscribe.call(this);
  131292. if (!source) {
  131293. this.destination = new ReplaySubject_1.ReplaySubject();
  131294. }
  131295. };
  131296. return WebSocketSubject;
  131297. }(Subject_1.AnonymousSubject));
  131298. exports.WebSocketSubject = WebSocketSubject;
  131299. //# sourceMappingURL=WebSocketSubject.js.map
  131300. /***/ }),
  131301. /* 439 */
  131302. /***/ (function(module, exports, __webpack_require__) {
  131303. "use strict";
  131304. var __extends = (this && this.__extends) || function (d, b) {
  131305. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  131306. function __() { this.constructor = d; }
  131307. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  131308. };
  131309. var AsyncAction_1 = __webpack_require__(57);
  131310. /**
  131311. * We need this JSDoc comment for affecting ESDoc.
  131312. * @ignore
  131313. * @extends {Ignored}
  131314. */
  131315. var QueueAction = (function (_super) {
  131316. __extends(QueueAction, _super);
  131317. function QueueAction(scheduler, work) {
  131318. _super.call(this, scheduler, work);
  131319. this.scheduler = scheduler;
  131320. this.work = work;
  131321. }
  131322. QueueAction.prototype.schedule = function (state, delay) {
  131323. if (delay === void 0) { delay = 0; }
  131324. if (delay > 0) {
  131325. return _super.prototype.schedule.call(this, state, delay);
  131326. }
  131327. this.delay = delay;
  131328. this.state = state;
  131329. this.scheduler.flush(this);
  131330. return this;
  131331. };
  131332. QueueAction.prototype.execute = function (state, delay) {
  131333. return (delay > 0 || this.closed) ?
  131334. _super.prototype.execute.call(this, state, delay) :
  131335. this._execute(state, delay);
  131336. };
  131337. QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
  131338. if (delay === void 0) { delay = 0; }
  131339. // If delay exists and is greater than 0, or if the delay is null (the
  131340. // action wasn't rescheduled) but was originally scheduled as an async
  131341. // action, then recycle as an async action.
  131342. if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
  131343. return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
  131344. }
  131345. // Otherwise flush the scheduler starting with this action.
  131346. return scheduler.flush(this);
  131347. };
  131348. return QueueAction;
  131349. }(AsyncAction_1.AsyncAction));
  131350. exports.QueueAction = QueueAction;
  131351. //# sourceMappingURL=QueueAction.js.map
  131352. /***/ }),
  131353. /* 440 */
  131354. /***/ (function(module, exports, __webpack_require__) {
  131355. "use strict";
  131356. var __extends = (this && this.__extends) || function (d, b) {
  131357. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  131358. function __() { this.constructor = d; }
  131359. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  131360. };
  131361. var AsyncScheduler_1 = __webpack_require__(58);
  131362. var QueueScheduler = (function (_super) {
  131363. __extends(QueueScheduler, _super);
  131364. function QueueScheduler() {
  131365. _super.apply(this, arguments);
  131366. }
  131367. return QueueScheduler;
  131368. }(AsyncScheduler_1.AsyncScheduler));
  131369. exports.QueueScheduler = QueueScheduler;
  131370. //# sourceMappingURL=QueueScheduler.js.map
  131371. /***/ }),
  131372. /* 441 */
  131373. /***/ (function(module, exports, __webpack_require__) {
  131374. "use strict";
  131375. var root_1 = __webpack_require__(19);
  131376. function assignImpl(target) {
  131377. var sources = [];
  131378. for (var _i = 1; _i < arguments.length; _i++) {
  131379. sources[_i - 1] = arguments[_i];
  131380. }
  131381. var len = sources.length;
  131382. for (var i = 0; i < len; i++) {
  131383. var source = sources[i];
  131384. for (var k in source) {
  131385. if (source.hasOwnProperty(k)) {
  131386. target[k] = source[k];
  131387. }
  131388. }
  131389. }
  131390. return target;
  131391. }
  131392. exports.assignImpl = assignImpl;
  131393. ;
  131394. function getAssign(root) {
  131395. return root.Object.assign || assignImpl;
  131396. }
  131397. exports.getAssign = getAssign;
  131398. exports.assign = getAssign(root_1.root);
  131399. //# sourceMappingURL=assign.js.map
  131400. /***/ }),
  131401. /* 442 */
  131402. /***/ (function(module, exports, __webpack_require__) {
  131403. "use strict";
  131404. var Observable_1 = __webpack_require__(0);
  131405. var buffer_1 = __webpack_require__(443);
  131406. Observable_1.Observable.prototype.buffer = buffer_1.buffer;
  131407. //# sourceMappingURL=buffer.js.map
  131408. /***/ }),
  131409. /* 443 */
  131410. /***/ (function(module, exports, __webpack_require__) {
  131411. "use strict";
  131412. var buffer_1 = __webpack_require__(219);
  131413. /**
  131414. * Buffers the source Observable values until `closingNotifier` emits.
  131415. *
  131416. * <span class="informal">Collects values from the past as an array, and emits
  131417. * that array only when another Observable emits.</span>
  131418. *
  131419. * <img src="./img/buffer.png" width="100%">
  131420. *
  131421. * Buffers the incoming Observable values until the given `closingNotifier`
  131422. * Observable emits a value, at which point it emits the buffer on the output
  131423. * Observable and starts a new buffer internally, awaiting the next time
  131424. * `closingNotifier` emits.
  131425. *
  131426. * @example <caption>On every click, emit array of most recent interval events</caption>
  131427. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131428. * var interval = Rx.Observable.interval(1000);
  131429. * var buffered = interval.buffer(clicks);
  131430. * buffered.subscribe(x => console.log(x));
  131431. *
  131432. * @see {@link bufferCount}
  131433. * @see {@link bufferTime}
  131434. * @see {@link bufferToggle}
  131435. * @see {@link bufferWhen}
  131436. * @see {@link window}
  131437. *
  131438. * @param {Observable<any>} closingNotifier An Observable that signals the
  131439. * buffer to be emitted on the output Observable.
  131440. * @return {Observable<T[]>} An Observable of buffers, which are arrays of
  131441. * values.
  131442. * @method buffer
  131443. * @owner Observable
  131444. */
  131445. function buffer(closingNotifier) {
  131446. return buffer_1.buffer(closingNotifier)(this);
  131447. }
  131448. exports.buffer = buffer;
  131449. //# sourceMappingURL=buffer.js.map
  131450. /***/ }),
  131451. /* 444 */
  131452. /***/ (function(module, exports, __webpack_require__) {
  131453. "use strict";
  131454. var Observable_1 = __webpack_require__(0);
  131455. var bufferCount_1 = __webpack_require__(445);
  131456. Observable_1.Observable.prototype.bufferCount = bufferCount_1.bufferCount;
  131457. //# sourceMappingURL=bufferCount.js.map
  131458. /***/ }),
  131459. /* 445 */
  131460. /***/ (function(module, exports, __webpack_require__) {
  131461. "use strict";
  131462. var bufferCount_1 = __webpack_require__(220);
  131463. /**
  131464. * Buffers the source Observable values until the size hits the maximum
  131465. * `bufferSize` given.
  131466. *
  131467. * <span class="informal">Collects values from the past as an array, and emits
  131468. * that array only when its size reaches `bufferSize`.</span>
  131469. *
  131470. * <img src="./img/bufferCount.png" width="100%">
  131471. *
  131472. * Buffers a number of values from the source Observable by `bufferSize` then
  131473. * emits the buffer and clears it, and starts a new buffer each
  131474. * `startBufferEvery` values. If `startBufferEvery` is not provided or is
  131475. * `null`, then new buffers are started immediately at the start of the source
  131476. * and when each buffer closes and is emitted.
  131477. *
  131478. * @example <caption>Emit the last two click events as an array</caption>
  131479. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131480. * var buffered = clicks.bufferCount(2);
  131481. * buffered.subscribe(x => console.log(x));
  131482. *
  131483. * @example <caption>On every click, emit the last two click events as an array</caption>
  131484. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131485. * var buffered = clicks.bufferCount(2, 1);
  131486. * buffered.subscribe(x => console.log(x));
  131487. *
  131488. * @see {@link buffer}
  131489. * @see {@link bufferTime}
  131490. * @see {@link bufferToggle}
  131491. * @see {@link bufferWhen}
  131492. * @see {@link pairwise}
  131493. * @see {@link windowCount}
  131494. *
  131495. * @param {number} bufferSize The maximum size of the buffer emitted.
  131496. * @param {number} [startBufferEvery] Interval at which to start a new buffer.
  131497. * For example if `startBufferEvery` is `2`, then a new buffer will be started
  131498. * on every other value from the source. A new buffer is started at the
  131499. * beginning of the source by default.
  131500. * @return {Observable<T[]>} An Observable of arrays of buffered values.
  131501. * @method bufferCount
  131502. * @owner Observable
  131503. */
  131504. function bufferCount(bufferSize, startBufferEvery) {
  131505. if (startBufferEvery === void 0) { startBufferEvery = null; }
  131506. return bufferCount_1.bufferCount(bufferSize, startBufferEvery)(this);
  131507. }
  131508. exports.bufferCount = bufferCount;
  131509. //# sourceMappingURL=bufferCount.js.map
  131510. /***/ }),
  131511. /* 446 */
  131512. /***/ (function(module, exports, __webpack_require__) {
  131513. "use strict";
  131514. var Observable_1 = __webpack_require__(0);
  131515. var bufferTime_1 = __webpack_require__(447);
  131516. Observable_1.Observable.prototype.bufferTime = bufferTime_1.bufferTime;
  131517. //# sourceMappingURL=bufferTime.js.map
  131518. /***/ }),
  131519. /* 447 */
  131520. /***/ (function(module, exports, __webpack_require__) {
  131521. "use strict";
  131522. var async_1 = __webpack_require__(10);
  131523. var isScheduler_1 = __webpack_require__(22);
  131524. var bufferTime_1 = __webpack_require__(221);
  131525. /* tslint:enable:max-line-length */
  131526. /**
  131527. * Buffers the source Observable values for a specific time period.
  131528. *
  131529. * <span class="informal">Collects values from the past as an array, and emits
  131530. * those arrays periodically in time.</span>
  131531. *
  131532. * <img src="./img/bufferTime.png" width="100%">
  131533. *
  131534. * Buffers values from the source for a specific time duration `bufferTimeSpan`.
  131535. * Unless the optional argument `bufferCreationInterval` is given, it emits and
  131536. * resets the buffer every `bufferTimeSpan` milliseconds. If
  131537. * `bufferCreationInterval` is given, this operator opens the buffer every
  131538. * `bufferCreationInterval` milliseconds and closes (emits and resets) the
  131539. * buffer every `bufferTimeSpan` milliseconds. When the optional argument
  131540. * `maxBufferSize` is specified, the buffer will be closed either after
  131541. * `bufferTimeSpan` milliseconds or when it contains `maxBufferSize` elements.
  131542. *
  131543. * @example <caption>Every second, emit an array of the recent click events</caption>
  131544. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131545. * var buffered = clicks.bufferTime(1000);
  131546. * buffered.subscribe(x => console.log(x));
  131547. *
  131548. * @example <caption>Every 5 seconds, emit the click events from the next 2 seconds</caption>
  131549. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131550. * var buffered = clicks.bufferTime(2000, 5000);
  131551. * buffered.subscribe(x => console.log(x));
  131552. *
  131553. * @see {@link buffer}
  131554. * @see {@link bufferCount}
  131555. * @see {@link bufferToggle}
  131556. * @see {@link bufferWhen}
  131557. * @see {@link windowTime}
  131558. *
  131559. * @param {number} bufferTimeSpan The amount of time to fill each buffer array.
  131560. * @param {number} [bufferCreationInterval] The interval at which to start new
  131561. * buffers.
  131562. * @param {number} [maxBufferSize] The maximum buffer size.
  131563. * @param {Scheduler} [scheduler=async] The scheduler on which to schedule the
  131564. * intervals that determine buffer boundaries.
  131565. * @return {Observable<T[]>} An observable of arrays of buffered values.
  131566. * @method bufferTime
  131567. * @owner Observable
  131568. */
  131569. function bufferTime(bufferTimeSpan) {
  131570. var length = arguments.length;
  131571. var scheduler = async_1.async;
  131572. if (isScheduler_1.isScheduler(arguments[arguments.length - 1])) {
  131573. scheduler = arguments[arguments.length - 1];
  131574. length--;
  131575. }
  131576. var bufferCreationInterval = null;
  131577. if (length >= 2) {
  131578. bufferCreationInterval = arguments[1];
  131579. }
  131580. var maxBufferSize = Number.POSITIVE_INFINITY;
  131581. if (length >= 3) {
  131582. maxBufferSize = arguments[2];
  131583. }
  131584. return bufferTime_1.bufferTime(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler)(this);
  131585. }
  131586. exports.bufferTime = bufferTime;
  131587. //# sourceMappingURL=bufferTime.js.map
  131588. /***/ }),
  131589. /* 448 */
  131590. /***/ (function(module, exports, __webpack_require__) {
  131591. "use strict";
  131592. var Observable_1 = __webpack_require__(0);
  131593. var bufferToggle_1 = __webpack_require__(449);
  131594. Observable_1.Observable.prototype.bufferToggle = bufferToggle_1.bufferToggle;
  131595. //# sourceMappingURL=bufferToggle.js.map
  131596. /***/ }),
  131597. /* 449 */
  131598. /***/ (function(module, exports, __webpack_require__) {
  131599. "use strict";
  131600. var bufferToggle_1 = __webpack_require__(222);
  131601. /**
  131602. * Buffers the source Observable values starting from an emission from
  131603. * `openings` and ending when the output of `closingSelector` emits.
  131604. *
  131605. * <span class="informal">Collects values from the past as an array. Starts
  131606. * collecting only when `opening` emits, and calls the `closingSelector`
  131607. * function to get an Observable that tells when to close the buffer.</span>
  131608. *
  131609. * <img src="./img/bufferToggle.png" width="100%">
  131610. *
  131611. * Buffers values from the source by opening the buffer via signals from an
  131612. * Observable provided to `openings`, and closing and sending the buffers when
  131613. * a Subscribable or Promise returned by the `closingSelector` function emits.
  131614. *
  131615. * @example <caption>Every other second, emit the click events from the next 500ms</caption>
  131616. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131617. * var openings = Rx.Observable.interval(1000);
  131618. * var buffered = clicks.bufferToggle(openings, i =>
  131619. * i % 2 ? Rx.Observable.interval(500) : Rx.Observable.empty()
  131620. * );
  131621. * buffered.subscribe(x => console.log(x));
  131622. *
  131623. * @see {@link buffer}
  131624. * @see {@link bufferCount}
  131625. * @see {@link bufferTime}
  131626. * @see {@link bufferWhen}
  131627. * @see {@link windowToggle}
  131628. *
  131629. * @param {SubscribableOrPromise<O>} openings A Subscribable or Promise of notifications to start new
  131630. * buffers.
  131631. * @param {function(value: O): SubscribableOrPromise} closingSelector A function that takes
  131632. * the value emitted by the `openings` observable and returns a Subscribable or Promise,
  131633. * which, when it emits, signals that the associated buffer should be emitted
  131634. * and cleared.
  131635. * @return {Observable<T[]>} An observable of arrays of buffered values.
  131636. * @method bufferToggle
  131637. * @owner Observable
  131638. */
  131639. function bufferToggle(openings, closingSelector) {
  131640. return bufferToggle_1.bufferToggle(openings, closingSelector)(this);
  131641. }
  131642. exports.bufferToggle = bufferToggle;
  131643. //# sourceMappingURL=bufferToggle.js.map
  131644. /***/ }),
  131645. /* 450 */
  131646. /***/ (function(module, exports, __webpack_require__) {
  131647. "use strict";
  131648. var Observable_1 = __webpack_require__(0);
  131649. var bufferWhen_1 = __webpack_require__(451);
  131650. Observable_1.Observable.prototype.bufferWhen = bufferWhen_1.bufferWhen;
  131651. //# sourceMappingURL=bufferWhen.js.map
  131652. /***/ }),
  131653. /* 451 */
  131654. /***/ (function(module, exports, __webpack_require__) {
  131655. "use strict";
  131656. var bufferWhen_1 = __webpack_require__(223);
  131657. /**
  131658. * Buffers the source Observable values, using a factory function of closing
  131659. * Observables to determine when to close, emit, and reset the buffer.
  131660. *
  131661. * <span class="informal">Collects values from the past as an array. When it
  131662. * starts collecting values, it calls a function that returns an Observable that
  131663. * tells when to close the buffer and restart collecting.</span>
  131664. *
  131665. * <img src="./img/bufferWhen.png" width="100%">
  131666. *
  131667. * Opens a buffer immediately, then closes the buffer when the observable
  131668. * returned by calling `closingSelector` function emits a value. When it closes
  131669. * the buffer, it immediately opens a new buffer and repeats the process.
  131670. *
  131671. * @example <caption>Emit an array of the last clicks every [1-5] random seconds</caption>
  131672. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131673. * var buffered = clicks.bufferWhen(() =>
  131674. * Rx.Observable.interval(1000 + Math.random() * 4000)
  131675. * );
  131676. * buffered.subscribe(x => console.log(x));
  131677. *
  131678. * @see {@link buffer}
  131679. * @see {@link bufferCount}
  131680. * @see {@link bufferTime}
  131681. * @see {@link bufferToggle}
  131682. * @see {@link windowWhen}
  131683. *
  131684. * @param {function(): Observable} closingSelector A function that takes no
  131685. * arguments and returns an Observable that signals buffer closure.
  131686. * @return {Observable<T[]>} An observable of arrays of buffered values.
  131687. * @method bufferWhen
  131688. * @owner Observable
  131689. */
  131690. function bufferWhen(closingSelector) {
  131691. return bufferWhen_1.bufferWhen(closingSelector)(this);
  131692. }
  131693. exports.bufferWhen = bufferWhen;
  131694. //# sourceMappingURL=bufferWhen.js.map
  131695. /***/ }),
  131696. /* 452 */
  131697. /***/ (function(module, exports, __webpack_require__) {
  131698. "use strict";
  131699. var catchError_1 = __webpack_require__(225);
  131700. /**
  131701. * Catches errors on the observable to be handled by returning a new observable or throwing an error.
  131702. *
  131703. * <img src="./img/catch.png" width="100%">
  131704. *
  131705. * @example <caption>Continues with a different Observable when there's an error</caption>
  131706. *
  131707. * Observable.of(1, 2, 3, 4, 5)
  131708. * .map(n => {
  131709. * if (n == 4) {
  131710. * throw 'four!';
  131711. * }
  131712. * return n;
  131713. * })
  131714. * .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))
  131715. * .subscribe(x => console.log(x));
  131716. * // 1, 2, 3, I, II, III, IV, V
  131717. *
  131718. * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>
  131719. *
  131720. * Observable.of(1, 2, 3, 4, 5)
  131721. * .map(n => {
  131722. * if (n === 4) {
  131723. * throw 'four!';
  131724. * }
  131725. * return n;
  131726. * })
  131727. * .catch((err, caught) => caught)
  131728. * .take(30)
  131729. * .subscribe(x => console.log(x));
  131730. * // 1, 2, 3, 1, 2, 3, ...
  131731. *
  131732. * @example <caption>Throws a new error when the source Observable throws an error</caption>
  131733. *
  131734. * Observable.of(1, 2, 3, 4, 5)
  131735. * .map(n => {
  131736. * if (n == 4) {
  131737. * throw 'four!';
  131738. * }
  131739. * return n;
  131740. * })
  131741. * .catch(err => {
  131742. * throw 'error in source. Details: ' + err;
  131743. * })
  131744. * .subscribe(
  131745. * x => console.log(x),
  131746. * err => console.log(err)
  131747. * );
  131748. * // 1, 2, 3, error in source. Details: four!
  131749. *
  131750. * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which
  131751. * is the source observable, in case you'd like to "retry" that observable by returning it again. Whatever observable
  131752. * is returned by the `selector` will be used to continue the observable chain.
  131753. * @return {Observable} An observable that originates from either the source or the observable returned by the
  131754. * catch `selector` function.
  131755. * @method catch
  131756. * @name catch
  131757. * @owner Observable
  131758. */
  131759. function _catch(selector) {
  131760. return catchError_1.catchError(selector)(this);
  131761. }
  131762. exports._catch = _catch;
  131763. //# sourceMappingURL=catch.js.map
  131764. /***/ }),
  131765. /* 453 */
  131766. /***/ (function(module, exports, __webpack_require__) {
  131767. "use strict";
  131768. var Observable_1 = __webpack_require__(0);
  131769. var combineAll_1 = __webpack_require__(454);
  131770. Observable_1.Observable.prototype.combineAll = combineAll_1.combineAll;
  131771. //# sourceMappingURL=combineAll.js.map
  131772. /***/ }),
  131773. /* 454 */
  131774. /***/ (function(module, exports, __webpack_require__) {
  131775. "use strict";
  131776. var combineAll_1 = __webpack_require__(226);
  131777. /**
  131778. * Converts a higher-order Observable into a first-order Observable by waiting
  131779. * for the outer Observable to complete, then applying {@link combineLatest}.
  131780. *
  131781. * <span class="informal">Flattens an Observable-of-Observables by applying
  131782. * {@link combineLatest} when the Observable-of-Observables completes.</span>
  131783. *
  131784. * <img src="./img/combineAll.png" width="100%">
  131785. *
  131786. * Takes an Observable of Observables, and collects all Observables from it.
  131787. * Once the outer Observable completes, it subscribes to all collected
  131788. * Observables and combines their values using the {@link combineLatest}
  131789. * strategy, such that:
  131790. * - Every time an inner Observable emits, the output Observable emits.
  131791. * - When the returned observable emits, it emits all of the latest values by:
  131792. * - If a `project` function is provided, it is called with each recent value
  131793. * from each inner Observable in whatever order they arrived, and the result
  131794. * of the `project` function is what is emitted by the output Observable.
  131795. * - If there is no `project` function, an array of all of the most recent
  131796. * values is emitted by the output Observable.
  131797. *
  131798. * @example <caption>Map two click events to a finite interval Observable, then apply combineAll</caption>
  131799. * var clicks = Rx.Observable.fromEvent(document, 'click');
  131800. * var higherOrder = clicks.map(ev =>
  131801. * Rx.Observable.interval(Math.random()*2000).take(3)
  131802. * ).take(2);
  131803. * var result = higherOrder.combineAll();
  131804. * result.subscribe(x => console.log(x));
  131805. *
  131806. * @see {@link combineLatest}
  131807. * @see {@link mergeAll}
  131808. *
  131809. * @param {function} [project] An optional function to map the most recent
  131810. * values from each inner Observable into a new result. Takes each of the most
  131811. * recent values from each collected inner Observable as arguments, in order.
  131812. * @return {Observable} An Observable of projected results or arrays of recent
  131813. * values.
  131814. * @method combineAll
  131815. * @owner Observable
  131816. */
  131817. function combineAll(project) {
  131818. return combineAll_1.combineAll(project)(this);
  131819. }
  131820. exports.combineAll = combineAll;
  131821. //# sourceMappingURL=combineAll.js.map
  131822. /***/ }),
  131823. /* 455 */
  131824. /***/ (function(module, exports, __webpack_require__) {
  131825. "use strict";
  131826. var Observable_1 = __webpack_require__(0);
  131827. var combineLatest_1 = __webpack_require__(456);
  131828. Observable_1.Observable.prototype.combineLatest = combineLatest_1.combineLatest;
  131829. //# sourceMappingURL=combineLatest.js.map
  131830. /***/ }),
  131831. /* 456 */
  131832. /***/ (function(module, exports, __webpack_require__) {
  131833. "use strict";
  131834. var combineLatest_1 = __webpack_require__(74);
  131835. /* tslint:enable:max-line-length */
  131836. /**
  131837. * Combines multiple Observables to create an Observable whose values are
  131838. * calculated from the latest values of each of its input Observables.
  131839. *
  131840. * <span class="informal">Whenever any input Observable emits a value, it
  131841. * computes a formula using the latest values from all the inputs, then emits
  131842. * the output of that formula.</span>
  131843. *
  131844. * <img src="./img/combineLatest.png" width="100%">
  131845. *
  131846. * `combineLatest` combines the values from this Observable with values from
  131847. * Observables passed as arguments. This is done by subscribing to each
  131848. * Observable, in order, and collecting an array of each of the most recent
  131849. * values any time any of the input Observables emits, then either taking that
  131850. * array and passing it as arguments to an optional `project` function and
  131851. * emitting the return value of that, or just emitting the array of recent
  131852. * values directly if there is no `project` function.
  131853. *
  131854. * @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>
  131855. * var weight = Rx.Observable.of(70, 72, 76, 79, 75);
  131856. * var height = Rx.Observable.of(1.76, 1.77, 1.78);
  131857. * var bmi = weight.combineLatest(height, (w, h) => w / (h * h));
  131858. * bmi.subscribe(x => console.log('BMI is ' + x));
  131859. *
  131860. * // With output to console:
  131861. * // BMI is 24.212293388429753
  131862. * // BMI is 23.93948099205209
  131863. * // BMI is 23.671253629592222
  131864. *
  131865. * @see {@link combineAll}
  131866. * @see {@link merge}
  131867. * @see {@link withLatestFrom}
  131868. *
  131869. * @param {ObservableInput} other An input Observable to combine with the source
  131870. * Observable. More than one input Observables may be given as argument.
  131871. * @param {function} [project] An optional function to project the values from
  131872. * the combined latest values into a new value on the output Observable.
  131873. * @return {Observable} An Observable of projected values from the most recent
  131874. * values from each input Observable, or an array of the most recent values from
  131875. * each input Observable.
  131876. * @method combineLatest
  131877. * @owner Observable
  131878. */
  131879. function combineLatest() {
  131880. var observables = [];
  131881. for (var _i = 0; _i < arguments.length; _i++) {
  131882. observables[_i - 0] = arguments[_i];
  131883. }
  131884. return combineLatest_1.combineLatest.apply(void 0, observables)(this);
  131885. }
  131886. exports.combineLatest = combineLatest;
  131887. //# sourceMappingURL=combineLatest.js.map
  131888. /***/ }),
  131889. /* 457 */
  131890. /***/ (function(module, exports, __webpack_require__) {
  131891. "use strict";
  131892. var Observable_1 = __webpack_require__(0);
  131893. var concat_1 = __webpack_require__(458);
  131894. Observable_1.Observable.prototype.concat = concat_1.concat;
  131895. //# sourceMappingURL=concat.js.map
  131896. /***/ }),
  131897. /* 458 */
  131898. /***/ (function(module, exports, __webpack_require__) {
  131899. "use strict";
  131900. var concat_1 = __webpack_require__(227);
  131901. var concat_2 = __webpack_require__(54);
  131902. exports.concatStatic = concat_2.concat;
  131903. /* tslint:enable:max-line-length */
  131904. /**
  131905. * Creates an output Observable which sequentially emits all values from every
  131906. * given input Observable after the current Observable.
  131907. *
  131908. * <span class="informal">Concatenates multiple Observables together by
  131909. * sequentially emitting their values, one Observable after the other.</span>
  131910. *
  131911. * <img src="./img/concat.png" width="100%">
  131912. *
  131913. * Joins this Observable with multiple other Observables by subscribing to them
  131914. * one at a time, starting with the source, and merging their results into the
  131915. * output Observable. Will wait for each Observable to complete before moving
  131916. * on to the next.
  131917. *
  131918. * @example <caption>Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10</caption>
  131919. * var timer = Rx.Observable.interval(1000).take(4);
  131920. * var sequence = Rx.Observable.range(1, 10);
  131921. * var result = timer.concat(sequence);
  131922. * result.subscribe(x => console.log(x));
  131923. *
  131924. * // results in:
  131925. * // 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
  131926. *
  131927. * @example <caption>Concatenate 3 Observables</caption>
  131928. * var timer1 = Rx.Observable.interval(1000).take(10);
  131929. * var timer2 = Rx.Observable.interval(2000).take(6);
  131930. * var timer3 = Rx.Observable.interval(500).take(10);
  131931. * var result = timer1.concat(timer2, timer3);
  131932. * result.subscribe(x => console.log(x));
  131933. *
  131934. * // results in the following:
  131935. * // (Prints to console sequentially)
  131936. * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
  131937. * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
  131938. * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9
  131939. *
  131940. * @see {@link concatAll}
  131941. * @see {@link concatMap}
  131942. * @see {@link concatMapTo}
  131943. *
  131944. * @param {ObservableInput} other An input Observable to concatenate after the source
  131945. * Observable. More than one input Observables may be given as argument.
  131946. * @param {Scheduler} [scheduler=null] An optional IScheduler to schedule each
  131947. * Observable subscription on.
  131948. * @return {Observable} All values of each passed Observable merged into a
  131949. * single Observable, in order, in serial fashion.
  131950. * @method concat
  131951. * @owner Observable
  131952. */
  131953. function concat() {
  131954. var observables = [];
  131955. for (var _i = 0; _i < arguments.length; _i++) {
  131956. observables[_i - 0] = arguments[_i];
  131957. }
  131958. return concat_1.concat.apply(void 0, observables)(this);
  131959. }
  131960. exports.concat = concat;
  131961. //# sourceMappingURL=concat.js.map
  131962. /***/ }),
  131963. /* 459 */
  131964. /***/ (function(module, exports, __webpack_require__) {
  131965. "use strict";
  131966. var Observable_1 = __webpack_require__(0);
  131967. var concatAll_1 = __webpack_require__(460);
  131968. Observable_1.Observable.prototype.concatAll = concatAll_1.concatAll;
  131969. //# sourceMappingURL=concatAll.js.map
  131970. /***/ }),
  131971. /* 460 */
  131972. /***/ (function(module, exports, __webpack_require__) {
  131973. "use strict";
  131974. var concatAll_1 = __webpack_require__(114);
  131975. /* tslint:enable:max-line-length */
  131976. /**
  131977. * Converts a higher-order Observable into a first-order Observable by
  131978. * concatenating the inner Observables in order.
  131979. *
  131980. * <span class="informal">Flattens an Observable-of-Observables by putting one
  131981. * inner Observable after the other.</span>
  131982. *
  131983. * <img src="./img/concatAll.png" width="100%">
  131984. *
  131985. * Joins every Observable emitted by the source (a higher-order Observable), in
  131986. * a serial fashion. It subscribes to each inner Observable only after the
  131987. * previous inner Observable has completed, and merges all of their values into
  131988. * the returned observable.
  131989. *
  131990. * __Warning:__ If the source Observable emits Observables quickly and
  131991. * endlessly, and the inner Observables it emits generally complete slower than
  131992. * the source emits, you can run into memory issues as the incoming Observables
  131993. * collect in an unbounded buffer.
  131994. *
  131995. * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set
  131996. * to `1`.
  131997. *
  131998. * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
  131999. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132000. * var higherOrder = clicks.map(ev => Rx.Observable.interval(1000).take(4));
  132001. * var firstOrder = higherOrder.concatAll();
  132002. * firstOrder.subscribe(x => console.log(x));
  132003. *
  132004. * // Results in the following:
  132005. * // (results are not concurrent)
  132006. * // For every click on the "document" it will emit values 0 to 3 spaced
  132007. * // on a 1000ms interval
  132008. * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
  132009. *
  132010. * @see {@link combineAll}
  132011. * @see {@link concat}
  132012. * @see {@link concatMap}
  132013. * @see {@link concatMapTo}
  132014. * @see {@link exhaust}
  132015. * @see {@link mergeAll}
  132016. * @see {@link switch}
  132017. * @see {@link zipAll}
  132018. *
  132019. * @return {Observable} An Observable emitting values from all the inner
  132020. * Observables concatenated.
  132021. * @method concatAll
  132022. * @owner Observable
  132023. */
  132024. function concatAll() {
  132025. return concatAll_1.concatAll()(this);
  132026. }
  132027. exports.concatAll = concatAll;
  132028. //# sourceMappingURL=concatAll.js.map
  132029. /***/ }),
  132030. /* 461 */
  132031. /***/ (function(module, exports, __webpack_require__) {
  132032. "use strict";
  132033. var Observable_1 = __webpack_require__(0);
  132034. var concatMap_1 = __webpack_require__(462);
  132035. Observable_1.Observable.prototype.concatMap = concatMap_1.concatMap;
  132036. //# sourceMappingURL=concatMap.js.map
  132037. /***/ }),
  132038. /* 462 */
  132039. /***/ (function(module, exports, __webpack_require__) {
  132040. "use strict";
  132041. var concatMap_1 = __webpack_require__(117);
  132042. /* tslint:enable:max-line-length */
  132043. /**
  132044. * Projects each source value to an Observable which is merged in the output
  132045. * Observable, in a serialized fashion waiting for each one to complete before
  132046. * merging the next.
  132047. *
  132048. * <span class="informal">Maps each value to an Observable, then flattens all of
  132049. * these inner Observables using {@link concatAll}.</span>
  132050. *
  132051. * <img src="./img/concatMap.png" width="100%">
  132052. *
  132053. * Returns an Observable that emits items based on applying a function that you
  132054. * supply to each item emitted by the source Observable, where that function
  132055. * returns an (so-called "inner") Observable. Each new inner Observable is
  132056. * concatenated with the previous inner Observable.
  132057. *
  132058. * __Warning:__ if source values arrive endlessly and faster than their
  132059. * corresponding inner Observables can complete, it will result in memory issues
  132060. * as inner Observables amass in an unbounded buffer waiting for their turn to
  132061. * be subscribed to.
  132062. *
  132063. * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set
  132064. * to `1`.
  132065. *
  132066. * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
  132067. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132068. * var result = clicks.concatMap(ev => Rx.Observable.interval(1000).take(4));
  132069. * result.subscribe(x => console.log(x));
  132070. *
  132071. * // Results in the following:
  132072. * // (results are not concurrent)
  132073. * // For every click on the "document" it will emit values 0 to 3 spaced
  132074. * // on a 1000ms interval
  132075. * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
  132076. *
  132077. * @see {@link concat}
  132078. * @see {@link concatAll}
  132079. * @see {@link concatMapTo}
  132080. * @see {@link exhaustMap}
  132081. * @see {@link mergeMap}
  132082. * @see {@link switchMap}
  132083. *
  132084. * @param {function(value: T, ?index: number): ObservableInput} project A function
  132085. * that, when applied to an item emitted by the source Observable, returns an
  132086. * Observable.
  132087. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  132088. * A function to produce the value on the output Observable based on the values
  132089. * and the indices of the source (outer) emission and the inner Observable
  132090. * emission. The arguments passed to this function are:
  132091. * - `outerValue`: the value that came from the source
  132092. * - `innerValue`: the value that came from the projected Observable
  132093. * - `outerIndex`: the "index" of the value that came from the source
  132094. * - `innerIndex`: the "index" of the value from the projected Observable
  132095. * @return {Observable} An Observable that emits the result of applying the
  132096. * projection function (and the optional `resultSelector`) to each item emitted
  132097. * by the source Observable and taking values from each projected inner
  132098. * Observable sequentially.
  132099. * @method concatMap
  132100. * @owner Observable
  132101. */
  132102. function concatMap(project, resultSelector) {
  132103. return concatMap_1.concatMap(project, resultSelector)(this);
  132104. }
  132105. exports.concatMap = concatMap;
  132106. //# sourceMappingURL=concatMap.js.map
  132107. /***/ }),
  132108. /* 463 */
  132109. /***/ (function(module, exports, __webpack_require__) {
  132110. "use strict";
  132111. var Observable_1 = __webpack_require__(0);
  132112. var concatMapTo_1 = __webpack_require__(464);
  132113. Observable_1.Observable.prototype.concatMapTo = concatMapTo_1.concatMapTo;
  132114. //# sourceMappingURL=concatMapTo.js.map
  132115. /***/ }),
  132116. /* 464 */
  132117. /***/ (function(module, exports, __webpack_require__) {
  132118. "use strict";
  132119. var concatMapTo_1 = __webpack_require__(228);
  132120. /* tslint:enable:max-line-length */
  132121. /**
  132122. * Projects each source value to the same Observable which is merged multiple
  132123. * times in a serialized fashion on the output Observable.
  132124. *
  132125. * <span class="informal">It's like {@link concatMap}, but maps each value
  132126. * always to the same inner Observable.</span>
  132127. *
  132128. * <img src="./img/concatMapTo.png" width="100%">
  132129. *
  132130. * Maps each source value to the given Observable `innerObservable` regardless
  132131. * of the source value, and then flattens those resulting Observables into one
  132132. * single Observable, which is the output Observable. Each new `innerObservable`
  132133. * instance emitted on the output Observable is concatenated with the previous
  132134. * `innerObservable` instance.
  132135. *
  132136. * __Warning:__ if source values arrive endlessly and faster than their
  132137. * corresponding inner Observables can complete, it will result in memory issues
  132138. * as inner Observables amass in an unbounded buffer waiting for their turn to
  132139. * be subscribed to.
  132140. *
  132141. * Note: `concatMapTo` is equivalent to `mergeMapTo` with concurrency parameter
  132142. * set to `1`.
  132143. *
  132144. * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
  132145. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132146. * var result = clicks.concatMapTo(Rx.Observable.interval(1000).take(4));
  132147. * result.subscribe(x => console.log(x));
  132148. *
  132149. * // Results in the following:
  132150. * // (results are not concurrent)
  132151. * // For every click on the "document" it will emit values 0 to 3 spaced
  132152. * // on a 1000ms interval
  132153. * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
  132154. *
  132155. * @see {@link concat}
  132156. * @see {@link concatAll}
  132157. * @see {@link concatMap}
  132158. * @see {@link mergeMapTo}
  132159. * @see {@link switchMapTo}
  132160. *
  132161. * @param {ObservableInput} innerObservable An Observable to replace each value from
  132162. * the source Observable.
  132163. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  132164. * A function to produce the value on the output Observable based on the values
  132165. * and the indices of the source (outer) emission and the inner Observable
  132166. * emission. The arguments passed to this function are:
  132167. * - `outerValue`: the value that came from the source
  132168. * - `innerValue`: the value that came from the projected Observable
  132169. * - `outerIndex`: the "index" of the value that came from the source
  132170. * - `innerIndex`: the "index" of the value from the projected Observable
  132171. * @return {Observable} An observable of values merged together by joining the
  132172. * passed observable with itself, one after the other, for each value emitted
  132173. * from the source.
  132174. * @method concatMapTo
  132175. * @owner Observable
  132176. */
  132177. function concatMapTo(innerObservable, resultSelector) {
  132178. return concatMapTo_1.concatMapTo(innerObservable, resultSelector)(this);
  132179. }
  132180. exports.concatMapTo = concatMapTo;
  132181. //# sourceMappingURL=concatMapTo.js.map
  132182. /***/ }),
  132183. /* 465 */
  132184. /***/ (function(module, exports, __webpack_require__) {
  132185. "use strict";
  132186. var Observable_1 = __webpack_require__(0);
  132187. var count_1 = __webpack_require__(466);
  132188. Observable_1.Observable.prototype.count = count_1.count;
  132189. //# sourceMappingURL=count.js.map
  132190. /***/ }),
  132191. /* 466 */
  132192. /***/ (function(module, exports, __webpack_require__) {
  132193. "use strict";
  132194. var count_1 = __webpack_require__(229);
  132195. /**
  132196. * Counts the number of emissions on the source and emits that number when the
  132197. * source completes.
  132198. *
  132199. * <span class="informal">Tells how many values were emitted, when the source
  132200. * completes.</span>
  132201. *
  132202. * <img src="./img/count.png" width="100%">
  132203. *
  132204. * `count` transforms an Observable that emits values into an Observable that
  132205. * emits a single value that represents the number of values emitted by the
  132206. * source Observable. If the source Observable terminates with an error, `count`
  132207. * will pass this error notification along without emitting a value first. If
  132208. * the source Observable does not terminate at all, `count` will neither emit
  132209. * a value nor terminate. This operator takes an optional `predicate` function
  132210. * as argument, in which case the output emission will represent the number of
  132211. * source values that matched `true` with the `predicate`.
  132212. *
  132213. * @example <caption>Counts how many seconds have passed before the first click happened</caption>
  132214. * var seconds = Rx.Observable.interval(1000);
  132215. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132216. * var secondsBeforeClick = seconds.takeUntil(clicks);
  132217. * var result = secondsBeforeClick.count();
  132218. * result.subscribe(x => console.log(x));
  132219. *
  132220. * @example <caption>Counts how many odd numbers are there between 1 and 7</caption>
  132221. * var numbers = Rx.Observable.range(1, 7);
  132222. * var result = numbers.count(i => i % 2 === 1);
  132223. * result.subscribe(x => console.log(x));
  132224. *
  132225. * // Results in:
  132226. * // 4
  132227. *
  132228. * @see {@link max}
  132229. * @see {@link min}
  132230. * @see {@link reduce}
  132231. *
  132232. * @param {function(value: T, i: number, source: Observable<T>): boolean} [predicate] A
  132233. * boolean function to select what values are to be counted. It is provided with
  132234. * arguments of:
  132235. * - `value`: the value from the source Observable.
  132236. * - `index`: the (zero-based) "index" of the value from the source Observable.
  132237. * - `source`: the source Observable instance itself.
  132238. * @return {Observable} An Observable of one number that represents the count as
  132239. * described above.
  132240. * @method count
  132241. * @owner Observable
  132242. */
  132243. function count(predicate) {
  132244. return count_1.count(predicate)(this);
  132245. }
  132246. exports.count = count;
  132247. //# sourceMappingURL=count.js.map
  132248. /***/ }),
  132249. /* 467 */
  132250. /***/ (function(module, exports, __webpack_require__) {
  132251. "use strict";
  132252. var Observable_1 = __webpack_require__(0);
  132253. var dematerialize_1 = __webpack_require__(468);
  132254. Observable_1.Observable.prototype.dematerialize = dematerialize_1.dematerialize;
  132255. //# sourceMappingURL=dematerialize.js.map
  132256. /***/ }),
  132257. /* 468 */
  132258. /***/ (function(module, exports, __webpack_require__) {
  132259. "use strict";
  132260. var dematerialize_1 = __webpack_require__(230);
  132261. /**
  132262. * Converts an Observable of {@link Notification} objects into the emissions
  132263. * that they represent.
  132264. *
  132265. * <span class="informal">Unwraps {@link Notification} objects as actual `next`,
  132266. * `error` and `complete` emissions. The opposite of {@link materialize}.</span>
  132267. *
  132268. * <img src="./img/dematerialize.png" width="100%">
  132269. *
  132270. * `dematerialize` is assumed to operate an Observable that only emits
  132271. * {@link Notification} objects as `next` emissions, and does not emit any
  132272. * `error`. Such Observable is the output of a `materialize` operation. Those
  132273. * notifications are then unwrapped using the metadata they contain, and emitted
  132274. * as `next`, `error`, and `complete` on the output Observable.
  132275. *
  132276. * Use this operator in conjunction with {@link materialize}.
  132277. *
  132278. * @example <caption>Convert an Observable of Notifications to an actual Observable</caption>
  132279. * var notifA = new Rx.Notification('N', 'A');
  132280. * var notifB = new Rx.Notification('N', 'B');
  132281. * var notifE = new Rx.Notification('E', void 0,
  132282. * new TypeError('x.toUpperCase is not a function')
  132283. * );
  132284. * var materialized = Rx.Observable.of(notifA, notifB, notifE);
  132285. * var upperCase = materialized.dematerialize();
  132286. * upperCase.subscribe(x => console.log(x), e => console.error(e));
  132287. *
  132288. * // Results in:
  132289. * // A
  132290. * // B
  132291. * // TypeError: x.toUpperCase is not a function
  132292. *
  132293. * @see {@link Notification}
  132294. * @see {@link materialize}
  132295. *
  132296. * @return {Observable} An Observable that emits items and notifications
  132297. * embedded in Notification objects emitted by the source Observable.
  132298. * @method dematerialize
  132299. * @owner Observable
  132300. */
  132301. function dematerialize() {
  132302. return dematerialize_1.dematerialize()(this);
  132303. }
  132304. exports.dematerialize = dematerialize;
  132305. //# sourceMappingURL=dematerialize.js.map
  132306. /***/ }),
  132307. /* 469 */
  132308. /***/ (function(module, exports, __webpack_require__) {
  132309. "use strict";
  132310. var Observable_1 = __webpack_require__(0);
  132311. var debounce_1 = __webpack_require__(470);
  132312. Observable_1.Observable.prototype.debounce = debounce_1.debounce;
  132313. //# sourceMappingURL=debounce.js.map
  132314. /***/ }),
  132315. /* 470 */
  132316. /***/ (function(module, exports, __webpack_require__) {
  132317. "use strict";
  132318. var debounce_1 = __webpack_require__(231);
  132319. /**
  132320. * Emits a value from the source Observable only after a particular time span
  132321. * determined by another Observable has passed without another source emission.
  132322. *
  132323. * <span class="informal">It's like {@link debounceTime}, but the time span of
  132324. * emission silence is determined by a second Observable.</span>
  132325. *
  132326. * <img src="./img/debounce.png" width="100%">
  132327. *
  132328. * `debounce` delays values emitted by the source Observable, but drops previous
  132329. * pending delayed emissions if a new value arrives on the source Observable.
  132330. * This operator keeps track of the most recent value from the source
  132331. * Observable, and spawns a duration Observable by calling the
  132332. * `durationSelector` function. The value is emitted only when the duration
  132333. * Observable emits a value or completes, and if no other value was emitted on
  132334. * the source Observable since the duration Observable was spawned. If a new
  132335. * value appears before the duration Observable emits, the previous value will
  132336. * be dropped and will not be emitted on the output Observable.
  132337. *
  132338. * Like {@link debounceTime}, this is a rate-limiting operator, and also a
  132339. * delay-like operator since output emissions do not necessarily occur at the
  132340. * same time as they did on the source Observable.
  132341. *
  132342. * @example <caption>Emit the most recent click after a burst of clicks</caption>
  132343. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132344. * var result = clicks.debounce(() => Rx.Observable.interval(1000));
  132345. * result.subscribe(x => console.log(x));
  132346. *
  132347. * @see {@link audit}
  132348. * @see {@link debounceTime}
  132349. * @see {@link delayWhen}
  132350. * @see {@link throttle}
  132351. *
  132352. * @param {function(value: T): SubscribableOrPromise} durationSelector A function
  132353. * that receives a value from the source Observable, for computing the timeout
  132354. * duration for each source value, returned as an Observable or a Promise.
  132355. * @return {Observable} An Observable that delays the emissions of the source
  132356. * Observable by the specified duration Observable returned by
  132357. * `durationSelector`, and may drop some values if they occur too frequently.
  132358. * @method debounce
  132359. * @owner Observable
  132360. */
  132361. function debounce(durationSelector) {
  132362. return debounce_1.debounce(durationSelector)(this);
  132363. }
  132364. exports.debounce = debounce;
  132365. //# sourceMappingURL=debounce.js.map
  132366. /***/ }),
  132367. /* 471 */
  132368. /***/ (function(module, exports, __webpack_require__) {
  132369. "use strict";
  132370. var Observable_1 = __webpack_require__(0);
  132371. var debounceTime_1 = __webpack_require__(472);
  132372. Observable_1.Observable.prototype.debounceTime = debounceTime_1.debounceTime;
  132373. //# sourceMappingURL=debounceTime.js.map
  132374. /***/ }),
  132375. /* 472 */
  132376. /***/ (function(module, exports, __webpack_require__) {
  132377. "use strict";
  132378. var async_1 = __webpack_require__(10);
  132379. var debounceTime_1 = __webpack_require__(232);
  132380. /**
  132381. * Emits a value from the source Observable only after a particular time span
  132382. * has passed without another source emission.
  132383. *
  132384. * <span class="informal">It's like {@link delay}, but passes only the most
  132385. * recent value from each burst of emissions.</span>
  132386. *
  132387. * <img src="./img/debounceTime.png" width="100%">
  132388. *
  132389. * `debounceTime` delays values emitted by the source Observable, but drops
  132390. * previous pending delayed emissions if a new value arrives on the source
  132391. * Observable. This operator keeps track of the most recent value from the
  132392. * source Observable, and emits that only when `dueTime` enough time has passed
  132393. * without any other value appearing on the source Observable. If a new value
  132394. * appears before `dueTime` silence occurs, the previous value will be dropped
  132395. * and will not be emitted on the output Observable.
  132396. *
  132397. * This is a rate-limiting operator, because it is impossible for more than one
  132398. * value to be emitted in any time window of duration `dueTime`, but it is also
  132399. * a delay-like operator since output emissions do not occur at the same time as
  132400. * they did on the source Observable. Optionally takes a {@link IScheduler} for
  132401. * managing timers.
  132402. *
  132403. * @example <caption>Emit the most recent click after a burst of clicks</caption>
  132404. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132405. * var result = clicks.debounceTime(1000);
  132406. * result.subscribe(x => console.log(x));
  132407. *
  132408. * @see {@link auditTime}
  132409. * @see {@link debounce}
  132410. * @see {@link delay}
  132411. * @see {@link sampleTime}
  132412. * @see {@link throttleTime}
  132413. *
  132414. * @param {number} dueTime The timeout duration in milliseconds (or the time
  132415. * unit determined internally by the optional `scheduler`) for the window of
  132416. * time required to wait for emission silence before emitting the most recent
  132417. * source value.
  132418. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  132419. * managing the timers that handle the timeout for each value.
  132420. * @return {Observable} An Observable that delays the emissions of the source
  132421. * Observable by the specified `dueTime`, and may drop some values if they occur
  132422. * too frequently.
  132423. * @method debounceTime
  132424. * @owner Observable
  132425. */
  132426. function debounceTime(dueTime, scheduler) {
  132427. if (scheduler === void 0) { scheduler = async_1.async; }
  132428. return debounceTime_1.debounceTime(dueTime, scheduler)(this);
  132429. }
  132430. exports.debounceTime = debounceTime;
  132431. //# sourceMappingURL=debounceTime.js.map
  132432. /***/ }),
  132433. /* 473 */
  132434. /***/ (function(module, exports, __webpack_require__) {
  132435. "use strict";
  132436. var Observable_1 = __webpack_require__(0);
  132437. var defaultIfEmpty_1 = __webpack_require__(474);
  132438. Observable_1.Observable.prototype.defaultIfEmpty = defaultIfEmpty_1.defaultIfEmpty;
  132439. //# sourceMappingURL=defaultIfEmpty.js.map
  132440. /***/ }),
  132441. /* 474 */
  132442. /***/ (function(module, exports, __webpack_require__) {
  132443. "use strict";
  132444. var defaultIfEmpty_1 = __webpack_require__(118);
  132445. /* tslint:enable:max-line-length */
  132446. /**
  132447. * Emits a given value if the source Observable completes without emitting any
  132448. * `next` value, otherwise mirrors the source Observable.
  132449. *
  132450. * <span class="informal">If the source Observable turns out to be empty, then
  132451. * this operator will emit a default value.</span>
  132452. *
  132453. * <img src="./img/defaultIfEmpty.png" width="100%">
  132454. *
  132455. * `defaultIfEmpty` emits the values emitted by the source Observable or a
  132456. * specified default value if the source Observable is empty (completes without
  132457. * having emitted any `next` value).
  132458. *
  132459. * @example <caption>If no clicks happen in 5 seconds, then emit "no clicks"</caption>
  132460. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132461. * var clicksBeforeFive = clicks.takeUntil(Rx.Observable.interval(5000));
  132462. * var result = clicksBeforeFive.defaultIfEmpty('no clicks');
  132463. * result.subscribe(x => console.log(x));
  132464. *
  132465. * @see {@link empty}
  132466. * @see {@link last}
  132467. *
  132468. * @param {any} [defaultValue=null] The default value used if the source
  132469. * Observable is empty.
  132470. * @return {Observable} An Observable that emits either the specified
  132471. * `defaultValue` if the source Observable emits no items, or the values emitted
  132472. * by the source Observable.
  132473. * @method defaultIfEmpty
  132474. * @owner Observable
  132475. */
  132476. function defaultIfEmpty(defaultValue) {
  132477. if (defaultValue === void 0) { defaultValue = null; }
  132478. return defaultIfEmpty_1.defaultIfEmpty(defaultValue)(this);
  132479. }
  132480. exports.defaultIfEmpty = defaultIfEmpty;
  132481. //# sourceMappingURL=defaultIfEmpty.js.map
  132482. /***/ }),
  132483. /* 475 */
  132484. /***/ (function(module, exports, __webpack_require__) {
  132485. "use strict";
  132486. var Observable_1 = __webpack_require__(0);
  132487. var delay_1 = __webpack_require__(476);
  132488. Observable_1.Observable.prototype.delay = delay_1.delay;
  132489. //# sourceMappingURL=delay.js.map
  132490. /***/ }),
  132491. /* 476 */
  132492. /***/ (function(module, exports, __webpack_require__) {
  132493. "use strict";
  132494. var async_1 = __webpack_require__(10);
  132495. var delay_1 = __webpack_require__(233);
  132496. /**
  132497. * Delays the emission of items from the source Observable by a given timeout or
  132498. * until a given Date.
  132499. *
  132500. * <span class="informal">Time shifts each item by some specified amount of
  132501. * milliseconds.</span>
  132502. *
  132503. * <img src="./img/delay.png" width="100%">
  132504. *
  132505. * If the delay argument is a Number, this operator time shifts the source
  132506. * Observable by that amount of time expressed in milliseconds. The relative
  132507. * time intervals between the values are preserved.
  132508. *
  132509. * If the delay argument is a Date, this operator time shifts the start of the
  132510. * Observable execution until the given date occurs.
  132511. *
  132512. * @example <caption>Delay each click by one second</caption>
  132513. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132514. * var delayedClicks = clicks.delay(1000); // each click emitted after 1 second
  132515. * delayedClicks.subscribe(x => console.log(x));
  132516. *
  132517. * @example <caption>Delay all clicks until a future date happens</caption>
  132518. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132519. * var date = new Date('March 15, 2050 12:00:00'); // in the future
  132520. * var delayedClicks = clicks.delay(date); // click emitted only after that date
  132521. * delayedClicks.subscribe(x => console.log(x));
  132522. *
  132523. * @see {@link debounceTime}
  132524. * @see {@link delayWhen}
  132525. *
  132526. * @param {number|Date} delay The delay duration in milliseconds (a `number`) or
  132527. * a `Date` until which the emission of the source items is delayed.
  132528. * @param {Scheduler} [scheduler=async] The IScheduler to use for
  132529. * managing the timers that handle the time-shift for each item.
  132530. * @return {Observable} An Observable that delays the emissions of the source
  132531. * Observable by the specified timeout or Date.
  132532. * @method delay
  132533. * @owner Observable
  132534. */
  132535. function delay(delay, scheduler) {
  132536. if (scheduler === void 0) { scheduler = async_1.async; }
  132537. return delay_1.delay(delay, scheduler)(this);
  132538. }
  132539. exports.delay = delay;
  132540. //# sourceMappingURL=delay.js.map
  132541. /***/ }),
  132542. /* 477 */
  132543. /***/ (function(module, exports, __webpack_require__) {
  132544. "use strict";
  132545. var Observable_1 = __webpack_require__(0);
  132546. var delayWhen_1 = __webpack_require__(478);
  132547. Observable_1.Observable.prototype.delayWhen = delayWhen_1.delayWhen;
  132548. //# sourceMappingURL=delayWhen.js.map
  132549. /***/ }),
  132550. /* 478 */
  132551. /***/ (function(module, exports, __webpack_require__) {
  132552. "use strict";
  132553. var delayWhen_1 = __webpack_require__(234);
  132554. /**
  132555. * Delays the emission of items from the source Observable by a given time span
  132556. * determined by the emissions of another Observable.
  132557. *
  132558. * <span class="informal">It's like {@link delay}, but the time span of the
  132559. * delay duration is determined by a second Observable.</span>
  132560. *
  132561. * <img src="./img/delayWhen.png" width="100%">
  132562. *
  132563. * `delayWhen` time shifts each emitted value from the source Observable by a
  132564. * time span determined by another Observable. When the source emits a value,
  132565. * the `delayDurationSelector` function is called with the source value as
  132566. * argument, and should return an Observable, called the "duration" Observable.
  132567. * The source value is emitted on the output Observable only when the duration
  132568. * Observable emits a value or completes.
  132569. *
  132570. * Optionally, `delayWhen` takes a second argument, `subscriptionDelay`, which
  132571. * is an Observable. When `subscriptionDelay` emits its first value or
  132572. * completes, the source Observable is subscribed to and starts behaving like
  132573. * described in the previous paragraph. If `subscriptionDelay` is not provided,
  132574. * `delayWhen` will subscribe to the source Observable as soon as the output
  132575. * Observable is subscribed.
  132576. *
  132577. * @example <caption>Delay each click by a random amount of time, between 0 and 5 seconds</caption>
  132578. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132579. * var delayedClicks = clicks.delayWhen(event =>
  132580. * Rx.Observable.interval(Math.random() * 5000)
  132581. * );
  132582. * delayedClicks.subscribe(x => console.log(x));
  132583. *
  132584. * @see {@link debounce}
  132585. * @see {@link delay}
  132586. *
  132587. * @param {function(value: T): Observable} delayDurationSelector A function that
  132588. * returns an Observable for each value emitted by the source Observable, which
  132589. * is then used to delay the emission of that item on the output Observable
  132590. * until the Observable returned from this function emits a value.
  132591. * @param {Observable} subscriptionDelay An Observable that triggers the
  132592. * subscription to the source Observable once it emits any value.
  132593. * @return {Observable} An Observable that delays the emissions of the source
  132594. * Observable by an amount of time specified by the Observable returned by
  132595. * `delayDurationSelector`.
  132596. * @method delayWhen
  132597. * @owner Observable
  132598. */
  132599. function delayWhen(delayDurationSelector, subscriptionDelay) {
  132600. return delayWhen_1.delayWhen(delayDurationSelector, subscriptionDelay)(this);
  132601. }
  132602. exports.delayWhen = delayWhen;
  132603. //# sourceMappingURL=delayWhen.js.map
  132604. /***/ }),
  132605. /* 479 */
  132606. /***/ (function(module, exports, __webpack_require__) {
  132607. "use strict";
  132608. var Observable_1 = __webpack_require__(0);
  132609. var distinct_1 = __webpack_require__(480);
  132610. Observable_1.Observable.prototype.distinct = distinct_1.distinct;
  132611. //# sourceMappingURL=distinct.js.map
  132612. /***/ }),
  132613. /* 480 */
  132614. /***/ (function(module, exports, __webpack_require__) {
  132615. "use strict";
  132616. var distinct_1 = __webpack_require__(235);
  132617. /**
  132618. * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.
  132619. *
  132620. * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will
  132621. * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the
  132622. * source observable directly with an equality check against previous values.
  132623. *
  132624. * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.
  132625. *
  132626. * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the
  132627. * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`
  132628. * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so
  132629. * that the internal `Set` can be "flushed", basically clearing it of values.
  132630. *
  132631. * @example <caption>A simple example with numbers</caption>
  132632. * Observable.of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)
  132633. * .distinct()
  132634. * .subscribe(x => console.log(x)); // 1, 2, 3, 4
  132635. *
  132636. * @example <caption>An example using a keySelector function</caption>
  132637. * interface Person {
  132638. * age: number,
  132639. * name: string
  132640. * }
  132641. *
  132642. * Observable.of<Person>(
  132643. * { age: 4, name: 'Foo'},
  132644. * { age: 7, name: 'Bar'},
  132645. * { age: 5, name: 'Foo'})
  132646. * .distinct((p: Person) => p.name)
  132647. * .subscribe(x => console.log(x));
  132648. *
  132649. * // displays:
  132650. * // { age: 4, name: 'Foo' }
  132651. * // { age: 7, name: 'Bar' }
  132652. *
  132653. * @see {@link distinctUntilChanged}
  132654. * @see {@link distinctUntilKeyChanged}
  132655. *
  132656. * @param {function} [keySelector] Optional function to select which value you want to check as distinct.
  132657. * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.
  132658. * @return {Observable} An Observable that emits items from the source Observable with distinct values.
  132659. * @method distinct
  132660. * @owner Observable
  132661. */
  132662. function distinct(keySelector, flushes) {
  132663. return distinct_1.distinct(keySelector, flushes)(this);
  132664. }
  132665. exports.distinct = distinct;
  132666. //# sourceMappingURL=distinct.js.map
  132667. /***/ }),
  132668. /* 481 */
  132669. /***/ (function(module, exports, __webpack_require__) {
  132670. "use strict";
  132671. var root_1 = __webpack_require__(19);
  132672. function minimalSetImpl() {
  132673. // THIS IS NOT a full impl of Set, this is just the minimum
  132674. // bits of functionality we need for this library.
  132675. return (function () {
  132676. function MinimalSet() {
  132677. this._values = [];
  132678. }
  132679. MinimalSet.prototype.add = function (value) {
  132680. if (!this.has(value)) {
  132681. this._values.push(value);
  132682. }
  132683. };
  132684. MinimalSet.prototype.has = function (value) {
  132685. return this._values.indexOf(value) !== -1;
  132686. };
  132687. Object.defineProperty(MinimalSet.prototype, "size", {
  132688. get: function () {
  132689. return this._values.length;
  132690. },
  132691. enumerable: true,
  132692. configurable: true
  132693. });
  132694. MinimalSet.prototype.clear = function () {
  132695. this._values.length = 0;
  132696. };
  132697. return MinimalSet;
  132698. }());
  132699. }
  132700. exports.minimalSetImpl = minimalSetImpl;
  132701. exports.Set = root_1.root.Set || minimalSetImpl();
  132702. //# sourceMappingURL=Set.js.map
  132703. /***/ }),
  132704. /* 482 */
  132705. /***/ (function(module, exports, __webpack_require__) {
  132706. "use strict";
  132707. var Observable_1 = __webpack_require__(0);
  132708. var distinctUntilChanged_1 = __webpack_require__(483);
  132709. Observable_1.Observable.prototype.distinctUntilChanged = distinctUntilChanged_1.distinctUntilChanged;
  132710. //# sourceMappingURL=distinctUntilChanged.js.map
  132711. /***/ }),
  132712. /* 483 */
  132713. /***/ (function(module, exports, __webpack_require__) {
  132714. "use strict";
  132715. var distinctUntilChanged_1 = __webpack_require__(119);
  132716. /* tslint:enable:max-line-length */
  132717. /**
  132718. * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.
  132719. *
  132720. * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
  132721. *
  132722. * If a comparator function is not provided, an equality check is used by default.
  132723. *
  132724. * @example <caption>A simple example with numbers</caption>
  132725. * Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)
  132726. * .distinctUntilChanged()
  132727. * .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4
  132728. *
  132729. * @example <caption>An example using a compare function</caption>
  132730. * interface Person {
  132731. * age: number,
  132732. * name: string
  132733. * }
  132734. *
  132735. * Observable.of<Person>(
  132736. * { age: 4, name: 'Foo'},
  132737. * { age: 7, name: 'Bar'},
  132738. * { age: 5, name: 'Foo'})
  132739. * { age: 6, name: 'Foo'})
  132740. * .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)
  132741. * .subscribe(x => console.log(x));
  132742. *
  132743. * // displays:
  132744. * // { age: 4, name: 'Foo' }
  132745. * // { age: 7, name: 'Bar' }
  132746. * // { age: 5, name: 'Foo' }
  132747. *
  132748. * @see {@link distinct}
  132749. * @see {@link distinctUntilKeyChanged}
  132750. *
  132751. * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
  132752. * @return {Observable} An Observable that emits items from the source Observable with distinct values.
  132753. * @method distinctUntilChanged
  132754. * @owner Observable
  132755. */
  132756. function distinctUntilChanged(compare, keySelector) {
  132757. return distinctUntilChanged_1.distinctUntilChanged(compare, keySelector)(this);
  132758. }
  132759. exports.distinctUntilChanged = distinctUntilChanged;
  132760. //# sourceMappingURL=distinctUntilChanged.js.map
  132761. /***/ }),
  132762. /* 484 */
  132763. /***/ (function(module, exports, __webpack_require__) {
  132764. "use strict";
  132765. var Observable_1 = __webpack_require__(0);
  132766. var distinctUntilKeyChanged_1 = __webpack_require__(485);
  132767. Observable_1.Observable.prototype.distinctUntilKeyChanged = distinctUntilKeyChanged_1.distinctUntilKeyChanged;
  132768. //# sourceMappingURL=distinctUntilKeyChanged.js.map
  132769. /***/ }),
  132770. /* 485 */
  132771. /***/ (function(module, exports, __webpack_require__) {
  132772. "use strict";
  132773. var distinctUntilKeyChanged_1 = __webpack_require__(236);
  132774. /* tslint:enable:max-line-length */
  132775. /**
  132776. * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item,
  132777. * using a property accessed by using the key provided to check if the two items are distinct.
  132778. *
  132779. * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
  132780. *
  132781. * If a comparator function is not provided, an equality check is used by default.
  132782. *
  132783. * @example <caption>An example comparing the name of persons</caption>
  132784. *
  132785. * interface Person {
  132786. * age: number,
  132787. * name: string
  132788. * }
  132789. *
  132790. * Observable.of<Person>(
  132791. * { age: 4, name: 'Foo'},
  132792. * { age: 7, name: 'Bar'},
  132793. * { age: 5, name: 'Foo'},
  132794. * { age: 6, name: 'Foo'})
  132795. * .distinctUntilKeyChanged('name')
  132796. * .subscribe(x => console.log(x));
  132797. *
  132798. * // displays:
  132799. * // { age: 4, name: 'Foo' }
  132800. * // { age: 7, name: 'Bar' }
  132801. * // { age: 5, name: 'Foo' }
  132802. *
  132803. * @example <caption>An example comparing the first letters of the name</caption>
  132804. *
  132805. * interface Person {
  132806. * age: number,
  132807. * name: string
  132808. * }
  132809. *
  132810. * Observable.of<Person>(
  132811. * { age: 4, name: 'Foo1'},
  132812. * { age: 7, name: 'Bar'},
  132813. * { age: 5, name: 'Foo2'},
  132814. * { age: 6, name: 'Foo3'})
  132815. * .distinctUntilKeyChanged('name', (x: string, y: string) => x.substring(0, 3) === y.substring(0, 3))
  132816. * .subscribe(x => console.log(x));
  132817. *
  132818. * // displays:
  132819. * // { age: 4, name: 'Foo1' }
  132820. * // { age: 7, name: 'Bar' }
  132821. * // { age: 5, name: 'Foo2' }
  132822. *
  132823. * @see {@link distinct}
  132824. * @see {@link distinctUntilChanged}
  132825. *
  132826. * @param {string} key String key for object property lookup on each item.
  132827. * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
  132828. * @return {Observable} An Observable that emits items from the source Observable with distinct values based on the key specified.
  132829. * @method distinctUntilKeyChanged
  132830. * @owner Observable
  132831. */
  132832. function distinctUntilKeyChanged(key, compare) {
  132833. return distinctUntilKeyChanged_1.distinctUntilKeyChanged(key, compare)(this);
  132834. }
  132835. exports.distinctUntilKeyChanged = distinctUntilKeyChanged;
  132836. //# sourceMappingURL=distinctUntilKeyChanged.js.map
  132837. /***/ }),
  132838. /* 486 */
  132839. /***/ (function(module, exports, __webpack_require__) {
  132840. "use strict";
  132841. var Observable_1 = __webpack_require__(0);
  132842. var do_1 = __webpack_require__(487);
  132843. Observable_1.Observable.prototype.do = do_1._do;
  132844. Observable_1.Observable.prototype._do = do_1._do;
  132845. //# sourceMappingURL=do.js.map
  132846. /***/ }),
  132847. /* 487 */
  132848. /***/ (function(module, exports, __webpack_require__) {
  132849. "use strict";
  132850. var tap_1 = __webpack_require__(237);
  132851. /* tslint:enable:max-line-length */
  132852. /**
  132853. * Perform a side effect for every emission on the source Observable, but return
  132854. * an Observable that is identical to the source.
  132855. *
  132856. * <span class="informal">Intercepts each emission on the source and runs a
  132857. * function, but returns an output which is identical to the source as long as errors don't occur.</span>
  132858. *
  132859. * <img src="./img/do.png" width="100%">
  132860. *
  132861. * Returns a mirrored Observable of the source Observable, but modified so that
  132862. * the provided Observer is called to perform a side effect for every value,
  132863. * error, and completion emitted by the source. Any errors that are thrown in
  132864. * the aforementioned Observer or handlers are safely sent down the error path
  132865. * of the output Observable.
  132866. *
  132867. * This operator is useful for debugging your Observables for the correct values
  132868. * or performing other side effects.
  132869. *
  132870. * Note: this is different to a `subscribe` on the Observable. If the Observable
  132871. * returned by `do` is not subscribed, the side effects specified by the
  132872. * Observer will never happen. `do` therefore simply spies on existing
  132873. * execution, it does not trigger an execution to happen like `subscribe` does.
  132874. *
  132875. * @example <caption>Map every click to the clientX position of that click, while also logging the click event</caption>
  132876. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132877. * var positions = clicks
  132878. * .do(ev => console.log(ev))
  132879. * .map(ev => ev.clientX);
  132880. * positions.subscribe(x => console.log(x));
  132881. *
  132882. * @see {@link map}
  132883. * @see {@link subscribe}
  132884. *
  132885. * @param {Observer|function} [nextOrObserver] A normal Observer object or a
  132886. * callback for `next`.
  132887. * @param {function} [error] Callback for errors in the source.
  132888. * @param {function} [complete] Callback for the completion of the source.
  132889. * @return {Observable} An Observable identical to the source, but runs the
  132890. * specified Observer or callback(s) for each item.
  132891. * @method do
  132892. * @name do
  132893. * @owner Observable
  132894. */
  132895. function _do(nextOrObserver, error, complete) {
  132896. return tap_1.tap(nextOrObserver, error, complete)(this);
  132897. }
  132898. exports._do = _do;
  132899. //# sourceMappingURL=do.js.map
  132900. /***/ }),
  132901. /* 488 */
  132902. /***/ (function(module, exports, __webpack_require__) {
  132903. "use strict";
  132904. var Observable_1 = __webpack_require__(0);
  132905. var exhaust_1 = __webpack_require__(489);
  132906. Observable_1.Observable.prototype.exhaust = exhaust_1.exhaust;
  132907. //# sourceMappingURL=exhaust.js.map
  132908. /***/ }),
  132909. /* 489 */
  132910. /***/ (function(module, exports, __webpack_require__) {
  132911. "use strict";
  132912. var exhaust_1 = __webpack_require__(238);
  132913. /**
  132914. * Converts a higher-order Observable into a first-order Observable by dropping
  132915. * inner Observables while the previous inner Observable has not yet completed.
  132916. *
  132917. * <span class="informal">Flattens an Observable-of-Observables by dropping the
  132918. * next inner Observables while the current inner is still executing.</span>
  132919. *
  132920. * <img src="./img/exhaust.png" width="100%">
  132921. *
  132922. * `exhaust` subscribes to an Observable that emits Observables, also known as a
  132923. * higher-order Observable. Each time it observes one of these emitted inner
  132924. * Observables, the output Observable begins emitting the items emitted by that
  132925. * inner Observable. So far, it behaves like {@link mergeAll}. However,
  132926. * `exhaust` ignores every new inner Observable if the previous Observable has
  132927. * not yet completed. Once that one completes, it will accept and flatten the
  132928. * next inner Observable and repeat this process.
  132929. *
  132930. * @example <caption>Run a finite timer for each click, only if there is no currently active timer</caption>
  132931. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132932. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(5));
  132933. * var result = higherOrder.exhaust();
  132934. * result.subscribe(x => console.log(x));
  132935. *
  132936. * @see {@link combineAll}
  132937. * @see {@link concatAll}
  132938. * @see {@link switch}
  132939. * @see {@link mergeAll}
  132940. * @see {@link exhaustMap}
  132941. * @see {@link zipAll}
  132942. *
  132943. * @return {Observable} An Observable that takes a source of Observables and propagates the first observable
  132944. * exclusively until it completes before subscribing to the next.
  132945. * @method exhaust
  132946. * @owner Observable
  132947. */
  132948. function exhaust() {
  132949. return exhaust_1.exhaust()(this);
  132950. }
  132951. exports.exhaust = exhaust;
  132952. //# sourceMappingURL=exhaust.js.map
  132953. /***/ }),
  132954. /* 490 */
  132955. /***/ (function(module, exports, __webpack_require__) {
  132956. "use strict";
  132957. var Observable_1 = __webpack_require__(0);
  132958. var exhaustMap_1 = __webpack_require__(491);
  132959. Observable_1.Observable.prototype.exhaustMap = exhaustMap_1.exhaustMap;
  132960. //# sourceMappingURL=exhaustMap.js.map
  132961. /***/ }),
  132962. /* 491 */
  132963. /***/ (function(module, exports, __webpack_require__) {
  132964. "use strict";
  132965. var exhaustMap_1 = __webpack_require__(239);
  132966. /* tslint:enable:max-line-length */
  132967. /**
  132968. * Projects each source value to an Observable which is merged in the output
  132969. * Observable only if the previous projected Observable has completed.
  132970. *
  132971. * <span class="informal">Maps each value to an Observable, then flattens all of
  132972. * these inner Observables using {@link exhaust}.</span>
  132973. *
  132974. * <img src="./img/exhaustMap.png" width="100%">
  132975. *
  132976. * Returns an Observable that emits items based on applying a function that you
  132977. * supply to each item emitted by the source Observable, where that function
  132978. * returns an (so-called "inner") Observable. When it projects a source value to
  132979. * an Observable, the output Observable begins emitting the items emitted by
  132980. * that projected Observable. However, `exhaustMap` ignores every new projected
  132981. * Observable if the previous projected Observable has not yet completed. Once
  132982. * that one completes, it will accept and flatten the next projected Observable
  132983. * and repeat this process.
  132984. *
  132985. * @example <caption>Run a finite timer for each click, only if there is no currently active timer</caption>
  132986. * var clicks = Rx.Observable.fromEvent(document, 'click');
  132987. * var result = clicks.exhaustMap((ev) => Rx.Observable.interval(1000).take(5));
  132988. * result.subscribe(x => console.log(x));
  132989. *
  132990. * @see {@link concatMap}
  132991. * @see {@link exhaust}
  132992. * @see {@link mergeMap}
  132993. * @see {@link switchMap}
  132994. *
  132995. * @param {function(value: T, ?index: number): ObservableInput} project A function
  132996. * that, when applied to an item emitted by the source Observable, returns an
  132997. * Observable.
  132998. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  132999. * A function to produce the value on the output Observable based on the values
  133000. * and the indices of the source (outer) emission and the inner Observable
  133001. * emission. The arguments passed to this function are:
  133002. * - `outerValue`: the value that came from the source
  133003. * - `innerValue`: the value that came from the projected Observable
  133004. * - `outerIndex`: the "index" of the value that came from the source
  133005. * - `innerIndex`: the "index" of the value from the projected Observable
  133006. * @return {Observable} An Observable containing projected Observables
  133007. * of each item of the source, ignoring projected Observables that start before
  133008. * their preceding Observable has completed.
  133009. * @method exhaustMap
  133010. * @owner Observable
  133011. */
  133012. function exhaustMap(project, resultSelector) {
  133013. return exhaustMap_1.exhaustMap(project, resultSelector)(this);
  133014. }
  133015. exports.exhaustMap = exhaustMap;
  133016. //# sourceMappingURL=exhaustMap.js.map
  133017. /***/ }),
  133018. /* 492 */
  133019. /***/ (function(module, exports, __webpack_require__) {
  133020. "use strict";
  133021. var Observable_1 = __webpack_require__(0);
  133022. var expand_1 = __webpack_require__(493);
  133023. Observable_1.Observable.prototype.expand = expand_1.expand;
  133024. //# sourceMappingURL=expand.js.map
  133025. /***/ }),
  133026. /* 493 */
  133027. /***/ (function(module, exports, __webpack_require__) {
  133028. "use strict";
  133029. var expand_1 = __webpack_require__(240);
  133030. /* tslint:enable:max-line-length */
  133031. /**
  133032. * Recursively projects each source value to an Observable which is merged in
  133033. * the output Observable.
  133034. *
  133035. * <span class="informal">It's similar to {@link mergeMap}, but applies the
  133036. * projection function to every source value as well as every output value.
  133037. * It's recursive.</span>
  133038. *
  133039. * <img src="./img/expand.png" width="100%">
  133040. *
  133041. * Returns an Observable that emits items based on applying a function that you
  133042. * supply to each item emitted by the source Observable, where that function
  133043. * returns an Observable, and then merging those resulting Observables and
  133044. * emitting the results of this merger. *Expand* will re-emit on the output
  133045. * Observable every source value. Then, each output value is given to the
  133046. * `project` function which returns an inner Observable to be merged on the
  133047. * output Observable. Those output values resulting from the projection are also
  133048. * given to the `project` function to produce new output values. This is how
  133049. * *expand* behaves recursively.
  133050. *
  133051. * @example <caption>Start emitting the powers of two on every click, at most 10 of them</caption>
  133052. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133053. * var powersOfTwo = clicks
  133054. * .mapTo(1)
  133055. * .expand(x => Rx.Observable.of(2 * x).delay(1000))
  133056. * .take(10);
  133057. * powersOfTwo.subscribe(x => console.log(x));
  133058. *
  133059. * @see {@link mergeMap}
  133060. * @see {@link mergeScan}
  133061. *
  133062. * @param {function(value: T, index: number) => Observable} project A function
  133063. * that, when applied to an item emitted by the source or the output Observable,
  133064. * returns an Observable.
  133065. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  133066. * Observables being subscribed to concurrently.
  133067. * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to
  133068. * each projected inner Observable.
  133069. * @return {Observable} An Observable that emits the source values and also
  133070. * result of applying the projection function to each value emitted on the
  133071. * output Observable and and merging the results of the Observables obtained
  133072. * from this transformation.
  133073. * @method expand
  133074. * @owner Observable
  133075. */
  133076. function expand(project, concurrent, scheduler) {
  133077. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  133078. if (scheduler === void 0) { scheduler = undefined; }
  133079. concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
  133080. return expand_1.expand(project, concurrent, scheduler)(this);
  133081. }
  133082. exports.expand = expand;
  133083. //# sourceMappingURL=expand.js.map
  133084. /***/ }),
  133085. /* 494 */
  133086. /***/ (function(module, exports, __webpack_require__) {
  133087. "use strict";
  133088. var Observable_1 = __webpack_require__(0);
  133089. var elementAt_1 = __webpack_require__(495);
  133090. Observable_1.Observable.prototype.elementAt = elementAt_1.elementAt;
  133091. //# sourceMappingURL=elementAt.js.map
  133092. /***/ }),
  133093. /* 495 */
  133094. /***/ (function(module, exports, __webpack_require__) {
  133095. "use strict";
  133096. var elementAt_1 = __webpack_require__(241);
  133097. /**
  133098. * Emits the single value at the specified `index` in a sequence of emissions
  133099. * from the source Observable.
  133100. *
  133101. * <span class="informal">Emits only the i-th value, then completes.</span>
  133102. *
  133103. * <img src="./img/elementAt.png" width="100%">
  133104. *
  133105. * `elementAt` returns an Observable that emits the item at the specified
  133106. * `index` in the source Observable, or a default value if that `index` is out
  133107. * of range and the `default` argument is provided. If the `default` argument is
  133108. * not given and the `index` is out of range, the output Observable will emit an
  133109. * `ArgumentOutOfRangeError` error.
  133110. *
  133111. * @example <caption>Emit only the third click event</caption>
  133112. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133113. * var result = clicks.elementAt(2);
  133114. * result.subscribe(x => console.log(x));
  133115. *
  133116. * // Results in:
  133117. * // click 1 = nothing
  133118. * // click 2 = nothing
  133119. * // click 3 = MouseEvent object logged to console
  133120. *
  133121. * @see {@link first}
  133122. * @see {@link last}
  133123. * @see {@link skip}
  133124. * @see {@link single}
  133125. * @see {@link take}
  133126. *
  133127. * @throws {ArgumentOutOfRangeError} When using `elementAt(i)`, it delivers an
  133128. * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0` or the
  133129. * Observable has completed before emitting the i-th `next` notification.
  133130. *
  133131. * @param {number} index Is the number `i` for the i-th source emission that has
  133132. * happened since the subscription, starting from the number `0`.
  133133. * @param {T} [defaultValue] The default value returned for missing indices.
  133134. * @return {Observable} An Observable that emits a single item, if it is found.
  133135. * Otherwise, will emit the default value if given. If not, then emits an error.
  133136. * @method elementAt
  133137. * @owner Observable
  133138. */
  133139. function elementAt(index, defaultValue) {
  133140. return elementAt_1.elementAt(index, defaultValue)(this);
  133141. }
  133142. exports.elementAt = elementAt;
  133143. //# sourceMappingURL=elementAt.js.map
  133144. /***/ }),
  133145. /* 496 */
  133146. /***/ (function(module, exports, __webpack_require__) {
  133147. "use strict";
  133148. var Observable_1 = __webpack_require__(0);
  133149. var filter_1 = __webpack_require__(497);
  133150. Observable_1.Observable.prototype.filter = filter_1.filter;
  133151. //# sourceMappingURL=filter.js.map
  133152. /***/ }),
  133153. /* 497 */
  133154. /***/ (function(module, exports, __webpack_require__) {
  133155. "use strict";
  133156. var filter_1 = __webpack_require__(120);
  133157. /* tslint:enable:max-line-length */
  133158. /**
  133159. * Filter items emitted by the source Observable by only emitting those that
  133160. * satisfy a specified predicate.
  133161. *
  133162. * <span class="informal">Like
  133163. * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),
  133164. * it only emits a value from the source if it passes a criterion function.</span>
  133165. *
  133166. * <img src="./img/filter.png" width="100%">
  133167. *
  133168. * Similar to the well-known `Array.prototype.filter` method, this operator
  133169. * takes values from the source Observable, passes them through a `predicate`
  133170. * function and only emits those values that yielded `true`.
  133171. *
  133172. * @example <caption>Emit only click events whose target was a DIV element</caption>
  133173. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133174. * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');
  133175. * clicksOnDivs.subscribe(x => console.log(x));
  133176. *
  133177. * @see {@link distinct}
  133178. * @see {@link distinctUntilChanged}
  133179. * @see {@link distinctUntilKeyChanged}
  133180. * @see {@link ignoreElements}
  133181. * @see {@link partition}
  133182. * @see {@link skip}
  133183. *
  133184. * @param {function(value: T, index: number): boolean} predicate A function that
  133185. * evaluates each value emitted by the source Observable. If it returns `true`,
  133186. * the value is emitted, if `false` the value is not passed to the output
  133187. * Observable. The `index` parameter is the number `i` for the i-th source
  133188. * emission that has happened since the subscription, starting from the number
  133189. * `0`.
  133190. * @param {any} [thisArg] An optional argument to determine the value of `this`
  133191. * in the `predicate` function.
  133192. * @return {Observable} An Observable of values from the source that were
  133193. * allowed by the `predicate` function.
  133194. * @method filter
  133195. * @owner Observable
  133196. */
  133197. function filter(predicate, thisArg) {
  133198. return filter_1.filter(predicate, thisArg)(this);
  133199. }
  133200. exports.filter = filter;
  133201. //# sourceMappingURL=filter.js.map
  133202. /***/ }),
  133203. /* 498 */
  133204. /***/ (function(module, exports, __webpack_require__) {
  133205. "use strict";
  133206. var Observable_1 = __webpack_require__(0);
  133207. var finally_1 = __webpack_require__(499);
  133208. Observable_1.Observable.prototype.finally = finally_1._finally;
  133209. Observable_1.Observable.prototype._finally = finally_1._finally;
  133210. //# sourceMappingURL=finally.js.map
  133211. /***/ }),
  133212. /* 499 */
  133213. /***/ (function(module, exports, __webpack_require__) {
  133214. "use strict";
  133215. var finalize_1 = __webpack_require__(242);
  133216. /**
  133217. * Returns an Observable that mirrors the source Observable, but will call a specified function when
  133218. * the source terminates on complete or error.
  133219. * @param {function} callback Function to be called when source terminates.
  133220. * @return {Observable} An Observable that mirrors the source, but will call the specified function on termination.
  133221. * @method finally
  133222. * @owner Observable
  133223. */
  133224. function _finally(callback) {
  133225. return finalize_1.finalize(callback)(this);
  133226. }
  133227. exports._finally = _finally;
  133228. //# sourceMappingURL=finally.js.map
  133229. /***/ }),
  133230. /* 500 */
  133231. /***/ (function(module, exports, __webpack_require__) {
  133232. "use strict";
  133233. var Observable_1 = __webpack_require__(0);
  133234. var find_1 = __webpack_require__(501);
  133235. Observable_1.Observable.prototype.find = find_1.find;
  133236. //# sourceMappingURL=find.js.map
  133237. /***/ }),
  133238. /* 501 */
  133239. /***/ (function(module, exports, __webpack_require__) {
  133240. "use strict";
  133241. var find_1 = __webpack_require__(121);
  133242. /* tslint:enable:max-line-length */
  133243. /**
  133244. * Emits only the first value emitted by the source Observable that meets some
  133245. * condition.
  133246. *
  133247. * <span class="informal">Finds the first value that passes some test and emits
  133248. * that.</span>
  133249. *
  133250. * <img src="./img/find.png" width="100%">
  133251. *
  133252. * `find` searches for the first item in the source Observable that matches the
  133253. * specified condition embodied by the `predicate`, and returns the first
  133254. * occurrence in the source. Unlike {@link first}, the `predicate` is required
  133255. * in `find`, and does not emit an error if a valid value is not found.
  133256. *
  133257. * @example <caption>Find and emit the first click that happens on a DIV element</caption>
  133258. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133259. * var result = clicks.find(ev => ev.target.tagName === 'DIV');
  133260. * result.subscribe(x => console.log(x));
  133261. *
  133262. * @see {@link filter}
  133263. * @see {@link first}
  133264. * @see {@link findIndex}
  133265. * @see {@link take}
  133266. *
  133267. * @param {function(value: T, index: number, source: Observable<T>): boolean} predicate
  133268. * A function called with each item to test for condition matching.
  133269. * @param {any} [thisArg] An optional argument to determine the value of `this`
  133270. * in the `predicate` function.
  133271. * @return {Observable<T>} An Observable of the first item that matches the
  133272. * condition.
  133273. * @method find
  133274. * @owner Observable
  133275. */
  133276. function find(predicate, thisArg) {
  133277. return find_1.find(predicate, thisArg)(this);
  133278. }
  133279. exports.find = find;
  133280. //# sourceMappingURL=find.js.map
  133281. /***/ }),
  133282. /* 502 */
  133283. /***/ (function(module, exports, __webpack_require__) {
  133284. "use strict";
  133285. var Observable_1 = __webpack_require__(0);
  133286. var findIndex_1 = __webpack_require__(503);
  133287. Observable_1.Observable.prototype.findIndex = findIndex_1.findIndex;
  133288. //# sourceMappingURL=findIndex.js.map
  133289. /***/ }),
  133290. /* 503 */
  133291. /***/ (function(module, exports, __webpack_require__) {
  133292. "use strict";
  133293. var findIndex_1 = __webpack_require__(243);
  133294. /**
  133295. * Emits only the index of the first value emitted by the source Observable that
  133296. * meets some condition.
  133297. *
  133298. * <span class="informal">It's like {@link find}, but emits the index of the
  133299. * found value, not the value itself.</span>
  133300. *
  133301. * <img src="./img/findIndex.png" width="100%">
  133302. *
  133303. * `findIndex` searches for the first item in the source Observable that matches
  133304. * the specified condition embodied by the `predicate`, and returns the
  133305. * (zero-based) index of the first occurrence in the source. Unlike
  133306. * {@link first}, the `predicate` is required in `findIndex`, and does not emit
  133307. * an error if a valid value is not found.
  133308. *
  133309. * @example <caption>Emit the index of first click that happens on a DIV element</caption>
  133310. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133311. * var result = clicks.findIndex(ev => ev.target.tagName === 'DIV');
  133312. * result.subscribe(x => console.log(x));
  133313. *
  133314. * @see {@link filter}
  133315. * @see {@link find}
  133316. * @see {@link first}
  133317. * @see {@link take}
  133318. *
  133319. * @param {function(value: T, index: number, source: Observable<T>): boolean} predicate
  133320. * A function called with each item to test for condition matching.
  133321. * @param {any} [thisArg] An optional argument to determine the value of `this`
  133322. * in the `predicate` function.
  133323. * @return {Observable} An Observable of the index of the first item that
  133324. * matches the condition.
  133325. * @method find
  133326. * @owner Observable
  133327. */
  133328. function findIndex(predicate, thisArg) {
  133329. return findIndex_1.findIndex(predicate, thisArg)(this);
  133330. }
  133331. exports.findIndex = findIndex;
  133332. //# sourceMappingURL=findIndex.js.map
  133333. /***/ }),
  133334. /* 504 */
  133335. /***/ (function(module, exports, __webpack_require__) {
  133336. "use strict";
  133337. var Observable_1 = __webpack_require__(0);
  133338. var first_1 = __webpack_require__(505);
  133339. Observable_1.Observable.prototype.first = first_1.first;
  133340. //# sourceMappingURL=first.js.map
  133341. /***/ }),
  133342. /* 505 */
  133343. /***/ (function(module, exports, __webpack_require__) {
  133344. "use strict";
  133345. var first_1 = __webpack_require__(244);
  133346. /**
  133347. * Emits only the first value (or the first value that meets some condition)
  133348. * emitted by the source Observable.
  133349. *
  133350. * <span class="informal">Emits only the first value. Or emits only the first
  133351. * value that passes some test.</span>
  133352. *
  133353. * <img src="./img/first.png" width="100%">
  133354. *
  133355. * If called with no arguments, `first` emits the first value of the source
  133356. * Observable, then completes. If called with a `predicate` function, `first`
  133357. * emits the first value of the source that matches the specified condition. It
  133358. * may also take a `resultSelector` function to produce the output value from
  133359. * the input value, and a `defaultValue` to emit in case the source completes
  133360. * before it is able to emit a valid value. Throws an error if `defaultValue`
  133361. * was not provided and a matching element is not found.
  133362. *
  133363. * @example <caption>Emit only the first click that happens on the DOM</caption>
  133364. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133365. * var result = clicks.first();
  133366. * result.subscribe(x => console.log(x));
  133367. *
  133368. * @example <caption>Emits the first click that happens on a DIV</caption>
  133369. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133370. * var result = clicks.first(ev => ev.target.tagName === 'DIV');
  133371. * result.subscribe(x => console.log(x));
  133372. *
  133373. * @see {@link filter}
  133374. * @see {@link find}
  133375. * @see {@link take}
  133376. *
  133377. * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
  133378. * callback if the Observable completes before any `next` notification was sent.
  133379. *
  133380. * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]
  133381. * An optional function called with each item to test for condition matching.
  133382. * @param {function(value: T, index: number): R} [resultSelector] A function to
  133383. * produce the value on the output Observable based on the values
  133384. * and the indices of the source Observable. The arguments passed to this
  133385. * function are:
  133386. * - `value`: the value that was emitted on the source.
  133387. * - `index`: the "index" of the value from the source.
  133388. * @param {R} [defaultValue] The default value emitted in case no valid value
  133389. * was found on the source.
  133390. * @return {Observable<T|R>} An Observable of the first item that matches the
  133391. * condition.
  133392. * @method first
  133393. * @owner Observable
  133394. */
  133395. function first(predicate, resultSelector, defaultValue) {
  133396. return first_1.first(predicate, resultSelector, defaultValue)(this);
  133397. }
  133398. exports.first = first;
  133399. //# sourceMappingURL=first.js.map
  133400. /***/ }),
  133401. /* 506 */
  133402. /***/ (function(module, exports, __webpack_require__) {
  133403. "use strict";
  133404. var Observable_1 = __webpack_require__(0);
  133405. var groupBy_1 = __webpack_require__(507);
  133406. Observable_1.Observable.prototype.groupBy = groupBy_1.groupBy;
  133407. //# sourceMappingURL=groupBy.js.map
  133408. /***/ }),
  133409. /* 507 */
  133410. /***/ (function(module, exports, __webpack_require__) {
  133411. "use strict";
  133412. var groupBy_1 = __webpack_require__(245);
  133413. exports.GroupedObservable = groupBy_1.GroupedObservable;
  133414. /* tslint:enable:max-line-length */
  133415. /**
  133416. * Groups the items emitted by an Observable according to a specified criterion,
  133417. * and emits these grouped items as `GroupedObservables`, one
  133418. * {@link GroupedObservable} per group.
  133419. *
  133420. * <img src="./img/groupBy.png" width="100%">
  133421. *
  133422. * @example <caption>Group objects by id and return as array</caption>
  133423. * Observable.of<Obj>({id: 1, name: 'aze1'},
  133424. * {id: 2, name: 'sf2'},
  133425. * {id: 2, name: 'dg2'},
  133426. * {id: 1, name: 'erg1'},
  133427. * {id: 1, name: 'df1'},
  133428. * {id: 2, name: 'sfqfb2'},
  133429. * {id: 3, name: 'qfs3'},
  133430. * {id: 2, name: 'qsgqsfg2'}
  133431. * )
  133432. * .groupBy(p => p.id)
  133433. * .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], []))
  133434. * .subscribe(p => console.log(p));
  133435. *
  133436. * // displays:
  133437. * // [ { id: 1, name: 'aze1' },
  133438. * // { id: 1, name: 'erg1' },
  133439. * // { id: 1, name: 'df1' } ]
  133440. * //
  133441. * // [ { id: 2, name: 'sf2' },
  133442. * // { id: 2, name: 'dg2' },
  133443. * // { id: 2, name: 'sfqfb2' },
  133444. * // { id: 2, name: 'qsgqsfg2' } ]
  133445. * //
  133446. * // [ { id: 3, name: 'qfs3' } ]
  133447. *
  133448. * @example <caption>Pivot data on the id field</caption>
  133449. * Observable.of<Obj>({id: 1, name: 'aze1'},
  133450. * {id: 2, name: 'sf2'},
  133451. * {id: 2, name: 'dg2'},
  133452. * {id: 1, name: 'erg1'},
  133453. * {id: 1, name: 'df1'},
  133454. * {id: 2, name: 'sfqfb2'},
  133455. * {id: 3, name: 'qfs1'},
  133456. * {id: 2, name: 'qsgqsfg2'}
  133457. * )
  133458. * .groupBy(p => p.id, p => p.name)
  133459. * .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], ["" + group$.key]))
  133460. * .map(arr => ({'id': parseInt(arr[0]), 'values': arr.slice(1)}))
  133461. * .subscribe(p => console.log(p));
  133462. *
  133463. * // displays:
  133464. * // { id: 1, values: [ 'aze1', 'erg1', 'df1' ] }
  133465. * // { id: 2, values: [ 'sf2', 'dg2', 'sfqfb2', 'qsgqsfg2' ] }
  133466. * // { id: 3, values: [ 'qfs1' ] }
  133467. *
  133468. * @param {function(value: T): K} keySelector A function that extracts the key
  133469. * for each item.
  133470. * @param {function(value: T): R} [elementSelector] A function that extracts the
  133471. * return element for each item.
  133472. * @param {function(grouped: GroupedObservable<K,R>): Observable<any>} [durationSelector]
  133473. * A function that returns an Observable to determine how long each group should
  133474. * exist.
  133475. * @return {Observable<GroupedObservable<K,R>>} An Observable that emits
  133476. * GroupedObservables, each of which corresponds to a unique key value and each
  133477. * of which emits those items from the source Observable that share that key
  133478. * value.
  133479. * @method groupBy
  133480. * @owner Observable
  133481. */
  133482. function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
  133483. return groupBy_1.groupBy(keySelector, elementSelector, durationSelector, subjectSelector)(this);
  133484. }
  133485. exports.groupBy = groupBy;
  133486. //# sourceMappingURL=groupBy.js.map
  133487. /***/ }),
  133488. /* 508 */
  133489. /***/ (function(module, exports, __webpack_require__) {
  133490. "use strict";
  133491. var root_1 = __webpack_require__(19);
  133492. var MapPolyfill_1 = __webpack_require__(509);
  133493. exports.Map = root_1.root.Map || (function () { return MapPolyfill_1.MapPolyfill; })();
  133494. //# sourceMappingURL=Map.js.map
  133495. /***/ }),
  133496. /* 509 */
  133497. /***/ (function(module, exports, __webpack_require__) {
  133498. "use strict";
  133499. var MapPolyfill = (function () {
  133500. function MapPolyfill() {
  133501. this.size = 0;
  133502. this._values = [];
  133503. this._keys = [];
  133504. }
  133505. MapPolyfill.prototype.get = function (key) {
  133506. var i = this._keys.indexOf(key);
  133507. return i === -1 ? undefined : this._values[i];
  133508. };
  133509. MapPolyfill.prototype.set = function (key, value) {
  133510. var i = this._keys.indexOf(key);
  133511. if (i === -1) {
  133512. this._keys.push(key);
  133513. this._values.push(value);
  133514. this.size++;
  133515. }
  133516. else {
  133517. this._values[i] = value;
  133518. }
  133519. return this;
  133520. };
  133521. MapPolyfill.prototype.delete = function (key) {
  133522. var i = this._keys.indexOf(key);
  133523. if (i === -1) {
  133524. return false;
  133525. }
  133526. this._values.splice(i, 1);
  133527. this._keys.splice(i, 1);
  133528. this.size--;
  133529. return true;
  133530. };
  133531. MapPolyfill.prototype.clear = function () {
  133532. this._keys.length = 0;
  133533. this._values.length = 0;
  133534. this.size = 0;
  133535. };
  133536. MapPolyfill.prototype.forEach = function (cb, thisArg) {
  133537. for (var i = 0; i < this.size; i++) {
  133538. cb.call(thisArg, this._values[i], this._keys[i]);
  133539. }
  133540. };
  133541. return MapPolyfill;
  133542. }());
  133543. exports.MapPolyfill = MapPolyfill;
  133544. //# sourceMappingURL=MapPolyfill.js.map
  133545. /***/ }),
  133546. /* 510 */
  133547. /***/ (function(module, exports, __webpack_require__) {
  133548. "use strict";
  133549. var FastMap = (function () {
  133550. function FastMap() {
  133551. this.values = {};
  133552. }
  133553. FastMap.prototype.delete = function (key) {
  133554. this.values[key] = null;
  133555. return true;
  133556. };
  133557. FastMap.prototype.set = function (key, value) {
  133558. this.values[key] = value;
  133559. return this;
  133560. };
  133561. FastMap.prototype.get = function (key) {
  133562. return this.values[key];
  133563. };
  133564. FastMap.prototype.forEach = function (cb, thisArg) {
  133565. var values = this.values;
  133566. for (var key in values) {
  133567. if (values.hasOwnProperty(key) && values[key] !== null) {
  133568. cb.call(thisArg, values[key], key);
  133569. }
  133570. }
  133571. };
  133572. FastMap.prototype.clear = function () {
  133573. this.values = {};
  133574. };
  133575. return FastMap;
  133576. }());
  133577. exports.FastMap = FastMap;
  133578. //# sourceMappingURL=FastMap.js.map
  133579. /***/ }),
  133580. /* 511 */
  133581. /***/ (function(module, exports, __webpack_require__) {
  133582. "use strict";
  133583. var Observable_1 = __webpack_require__(0);
  133584. var ignoreElements_1 = __webpack_require__(512);
  133585. Observable_1.Observable.prototype.ignoreElements = ignoreElements_1.ignoreElements;
  133586. //# sourceMappingURL=ignoreElements.js.map
  133587. /***/ }),
  133588. /* 512 */
  133589. /***/ (function(module, exports, __webpack_require__) {
  133590. "use strict";
  133591. var ignoreElements_1 = __webpack_require__(246);
  133592. /**
  133593. * Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.
  133594. *
  133595. * <img src="./img/ignoreElements.png" width="100%">
  133596. *
  133597. * @return {Observable} An empty Observable that only calls `complete`
  133598. * or `error`, based on which one is called by the source Observable.
  133599. * @method ignoreElements
  133600. * @owner Observable
  133601. */
  133602. function ignoreElements() {
  133603. return ignoreElements_1.ignoreElements()(this);
  133604. }
  133605. exports.ignoreElements = ignoreElements;
  133606. ;
  133607. //# sourceMappingURL=ignoreElements.js.map
  133608. /***/ }),
  133609. /* 513 */
  133610. /***/ (function(module, exports, __webpack_require__) {
  133611. "use strict";
  133612. var Observable_1 = __webpack_require__(0);
  133613. var isEmpty_1 = __webpack_require__(514);
  133614. Observable_1.Observable.prototype.isEmpty = isEmpty_1.isEmpty;
  133615. //# sourceMappingURL=isEmpty.js.map
  133616. /***/ }),
  133617. /* 514 */
  133618. /***/ (function(module, exports, __webpack_require__) {
  133619. "use strict";
  133620. var isEmpty_1 = __webpack_require__(247);
  133621. /**
  133622. * If the source Observable is empty it returns an Observable that emits true, otherwise it emits false.
  133623. *
  133624. * <img src="./img/isEmpty.png" width="100%">
  133625. *
  133626. * @return {Observable} An Observable that emits a Boolean.
  133627. * @method isEmpty
  133628. * @owner Observable
  133629. */
  133630. function isEmpty() {
  133631. return isEmpty_1.isEmpty()(this);
  133632. }
  133633. exports.isEmpty = isEmpty;
  133634. //# sourceMappingURL=isEmpty.js.map
  133635. /***/ }),
  133636. /* 515 */
  133637. /***/ (function(module, exports, __webpack_require__) {
  133638. "use strict";
  133639. var Observable_1 = __webpack_require__(0);
  133640. var audit_1 = __webpack_require__(516);
  133641. Observable_1.Observable.prototype.audit = audit_1.audit;
  133642. //# sourceMappingURL=audit.js.map
  133643. /***/ }),
  133644. /* 516 */
  133645. /***/ (function(module, exports, __webpack_require__) {
  133646. "use strict";
  133647. var audit_1 = __webpack_require__(122);
  133648. /**
  133649. * Ignores source values for a duration determined by another Observable, then
  133650. * emits the most recent value from the source Observable, then repeats this
  133651. * process.
  133652. *
  133653. * <span class="informal">It's like {@link auditTime}, but the silencing
  133654. * duration is determined by a second Observable.</span>
  133655. *
  133656. * <img src="./img/audit.png" width="100%">
  133657. *
  133658. * `audit` is similar to `throttle`, but emits the last value from the silenced
  133659. * time window, instead of the first value. `audit` emits the most recent value
  133660. * from the source Observable on the output Observable as soon as its internal
  133661. * timer becomes disabled, and ignores source values while the timer is enabled.
  133662. * Initially, the timer is disabled. As soon as the first source value arrives,
  133663. * the timer is enabled by calling the `durationSelector` function with the
  133664. * source value, which returns the "duration" Observable. When the duration
  133665. * Observable emits a value or completes, the timer is disabled, then the most
  133666. * recent source value is emitted on the output Observable, and this process
  133667. * repeats for the next source value.
  133668. *
  133669. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  133670. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133671. * var result = clicks.audit(ev => Rx.Observable.interval(1000));
  133672. * result.subscribe(x => console.log(x));
  133673. *
  133674. * @see {@link auditTime}
  133675. * @see {@link debounce}
  133676. * @see {@link delayWhen}
  133677. * @see {@link sample}
  133678. * @see {@link throttle}
  133679. *
  133680. * @param {function(value: T): SubscribableOrPromise} durationSelector A function
  133681. * that receives a value from the source Observable, for computing the silencing
  133682. * duration, returned as an Observable or a Promise.
  133683. * @return {Observable<T>} An Observable that performs rate-limiting of
  133684. * emissions from the source Observable.
  133685. * @method audit
  133686. * @owner Observable
  133687. */
  133688. function audit(durationSelector) {
  133689. return audit_1.audit(durationSelector)(this);
  133690. }
  133691. exports.audit = audit;
  133692. //# sourceMappingURL=audit.js.map
  133693. /***/ }),
  133694. /* 517 */
  133695. /***/ (function(module, exports, __webpack_require__) {
  133696. "use strict";
  133697. var Observable_1 = __webpack_require__(0);
  133698. var auditTime_1 = __webpack_require__(518);
  133699. Observable_1.Observable.prototype.auditTime = auditTime_1.auditTime;
  133700. //# sourceMappingURL=auditTime.js.map
  133701. /***/ }),
  133702. /* 518 */
  133703. /***/ (function(module, exports, __webpack_require__) {
  133704. "use strict";
  133705. var async_1 = __webpack_require__(10);
  133706. var auditTime_1 = __webpack_require__(248);
  133707. /**
  133708. * Ignores source values for `duration` milliseconds, then emits the most recent
  133709. * value from the source Observable, then repeats this process.
  133710. *
  133711. * <span class="informal">When it sees a source values, it ignores that plus
  133712. * the next ones for `duration` milliseconds, and then it emits the most recent
  133713. * value from the source.</span>
  133714. *
  133715. * <img src="./img/auditTime.png" width="100%">
  133716. *
  133717. * `auditTime` is similar to `throttleTime`, but emits the last value from the
  133718. * silenced time window, instead of the first value. `auditTime` emits the most
  133719. * recent value from the source Observable on the output Observable as soon as
  133720. * its internal timer becomes disabled, and ignores source values while the
  133721. * timer is enabled. Initially, the timer is disabled. As soon as the first
  133722. * source value arrives, the timer is enabled. After `duration` milliseconds (or
  133723. * the time unit determined internally by the optional `scheduler`) has passed,
  133724. * the timer is disabled, then the most recent source value is emitted on the
  133725. * output Observable, and this process repeats for the next source value.
  133726. * Optionally takes a {@link IScheduler} for managing timers.
  133727. *
  133728. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  133729. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133730. * var result = clicks.auditTime(1000);
  133731. * result.subscribe(x => console.log(x));
  133732. *
  133733. * @see {@link audit}
  133734. * @see {@link debounceTime}
  133735. * @see {@link delay}
  133736. * @see {@link sampleTime}
  133737. * @see {@link throttleTime}
  133738. *
  133739. * @param {number} duration Time to wait before emitting the most recent source
  133740. * value, measured in milliseconds or the time unit determined internally
  133741. * by the optional `scheduler`.
  133742. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  133743. * managing the timers that handle the rate-limiting behavior.
  133744. * @return {Observable<T>} An Observable that performs rate-limiting of
  133745. * emissions from the source Observable.
  133746. * @method auditTime
  133747. * @owner Observable
  133748. */
  133749. function auditTime(duration, scheduler) {
  133750. if (scheduler === void 0) { scheduler = async_1.async; }
  133751. return auditTime_1.auditTime(duration, scheduler)(this);
  133752. }
  133753. exports.auditTime = auditTime;
  133754. //# sourceMappingURL=auditTime.js.map
  133755. /***/ }),
  133756. /* 519 */
  133757. /***/ (function(module, exports, __webpack_require__) {
  133758. "use strict";
  133759. var Observable_1 = __webpack_require__(0);
  133760. var last_1 = __webpack_require__(520);
  133761. Observable_1.Observable.prototype.last = last_1.last;
  133762. //# sourceMappingURL=last.js.map
  133763. /***/ }),
  133764. /* 520 */
  133765. /***/ (function(module, exports, __webpack_require__) {
  133766. "use strict";
  133767. var last_1 = __webpack_require__(249);
  133768. /* tslint:enable:max-line-length */
  133769. /**
  133770. * Returns an Observable that emits only the last item emitted by the source Observable.
  133771. * It optionally takes a predicate function as a parameter, in which case, rather than emitting
  133772. * the last item from the source Observable, the resulting Observable will emit the last item
  133773. * from the source Observable that satisfies the predicate.
  133774. *
  133775. * <img src="./img/last.png" width="100%">
  133776. *
  133777. * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
  133778. * callback if the Observable completes before any `next` notification was sent.
  133779. * @param {function} predicate - The condition any source emitted item has to satisfy.
  133780. * @return {Observable} An Observable that emits only the last item satisfying the given condition
  133781. * from the source, or an NoSuchElementException if no such items are emitted.
  133782. * @throws - Throws if no items that match the predicate are emitted by the source Observable.
  133783. * @method last
  133784. * @owner Observable
  133785. */
  133786. function last(predicate, resultSelector, defaultValue) {
  133787. return last_1.last(predicate, resultSelector, defaultValue)(this);
  133788. }
  133789. exports.last = last;
  133790. //# sourceMappingURL=last.js.map
  133791. /***/ }),
  133792. /* 521 */
  133793. /***/ (function(module, exports, __webpack_require__) {
  133794. "use strict";
  133795. var Observable_1 = __webpack_require__(0);
  133796. var let_1 = __webpack_require__(522);
  133797. Observable_1.Observable.prototype.let = let_1.letProto;
  133798. Observable_1.Observable.prototype.letBind = let_1.letProto;
  133799. //# sourceMappingURL=let.js.map
  133800. /***/ }),
  133801. /* 522 */
  133802. /***/ (function(module, exports, __webpack_require__) {
  133803. "use strict";
  133804. /**
  133805. * @param func
  133806. * @return {Observable<R>}
  133807. * @method let
  133808. * @owner Observable
  133809. */
  133810. function letProto(func) {
  133811. return func(this);
  133812. }
  133813. exports.letProto = letProto;
  133814. //# sourceMappingURL=let.js.map
  133815. /***/ }),
  133816. /* 523 */
  133817. /***/ (function(module, exports, __webpack_require__) {
  133818. "use strict";
  133819. var Observable_1 = __webpack_require__(0);
  133820. var every_1 = __webpack_require__(524);
  133821. Observable_1.Observable.prototype.every = every_1.every;
  133822. //# sourceMappingURL=every.js.map
  133823. /***/ }),
  133824. /* 524 */
  133825. /***/ (function(module, exports, __webpack_require__) {
  133826. "use strict";
  133827. var every_1 = __webpack_require__(250);
  133828. /**
  133829. * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.
  133830. *
  133831. * @example <caption>A simple example emitting true if all elements are less than 5, false otherwise</caption>
  133832. * Observable.of(1, 2, 3, 4, 5, 6)
  133833. * .every(x => x < 5)
  133834. * .subscribe(x => console.log(x)); // -> false
  133835. *
  133836. * @param {function} predicate A function for determining if an item meets a specified condition.
  133837. * @param {any} [thisArg] Optional object to use for `this` in the callback.
  133838. * @return {Observable} An Observable of booleans that determines if all items of the source Observable meet the condition specified.
  133839. * @method every
  133840. * @owner Observable
  133841. */
  133842. function every(predicate, thisArg) {
  133843. return every_1.every(predicate, thisArg)(this);
  133844. }
  133845. exports.every = every;
  133846. //# sourceMappingURL=every.js.map
  133847. /***/ }),
  133848. /* 525 */
  133849. /***/ (function(module, exports, __webpack_require__) {
  133850. "use strict";
  133851. var Observable_1 = __webpack_require__(0);
  133852. var mapTo_1 = __webpack_require__(526);
  133853. Observable_1.Observable.prototype.mapTo = mapTo_1.mapTo;
  133854. //# sourceMappingURL=mapTo.js.map
  133855. /***/ }),
  133856. /* 526 */
  133857. /***/ (function(module, exports, __webpack_require__) {
  133858. "use strict";
  133859. var mapTo_1 = __webpack_require__(252);
  133860. /**
  133861. * Emits the given constant value on the output Observable every time the source
  133862. * Observable emits a value.
  133863. *
  133864. * <span class="informal">Like {@link map}, but it maps every source value to
  133865. * the same output value every time.</span>
  133866. *
  133867. * <img src="./img/mapTo.png" width="100%">
  133868. *
  133869. * Takes a constant `value` as argument, and emits that whenever the source
  133870. * Observable emits a value. In other words, ignores the actual source value,
  133871. * and simply uses the emission moment to know when to emit the given `value`.
  133872. *
  133873. * @example <caption>Map every click to the string 'Hi'</caption>
  133874. * var clicks = Rx.Observable.fromEvent(document, 'click');
  133875. * var greetings = clicks.mapTo('Hi');
  133876. * greetings.subscribe(x => console.log(x));
  133877. *
  133878. * @see {@link map}
  133879. *
  133880. * @param {any} value The value to map each source value to.
  133881. * @return {Observable} An Observable that emits the given `value` every time
  133882. * the source Observable emits something.
  133883. * @method mapTo
  133884. * @owner Observable
  133885. */
  133886. function mapTo(value) {
  133887. return mapTo_1.mapTo(value)(this);
  133888. }
  133889. exports.mapTo = mapTo;
  133890. //# sourceMappingURL=mapTo.js.map
  133891. /***/ }),
  133892. /* 527 */
  133893. /***/ (function(module, exports, __webpack_require__) {
  133894. "use strict";
  133895. var Observable_1 = __webpack_require__(0);
  133896. var materialize_1 = __webpack_require__(528);
  133897. Observable_1.Observable.prototype.materialize = materialize_1.materialize;
  133898. //# sourceMappingURL=materialize.js.map
  133899. /***/ }),
  133900. /* 528 */
  133901. /***/ (function(module, exports, __webpack_require__) {
  133902. "use strict";
  133903. var materialize_1 = __webpack_require__(253);
  133904. /**
  133905. * Represents all of the notifications from the source Observable as `next`
  133906. * emissions marked with their original types within {@link Notification}
  133907. * objects.
  133908. *
  133909. * <span class="informal">Wraps `next`, `error` and `complete` emissions in
  133910. * {@link Notification} objects, emitted as `next` on the output Observable.
  133911. * </span>
  133912. *
  133913. * <img src="./img/materialize.png" width="100%">
  133914. *
  133915. * `materialize` returns an Observable that emits a `next` notification for each
  133916. * `next`, `error`, or `complete` emission of the source Observable. When the
  133917. * source Observable emits `complete`, the output Observable will emit `next` as
  133918. * a Notification of type "complete", and then it will emit `complete` as well.
  133919. * When the source Observable emits `error`, the output will emit `next` as a
  133920. * Notification of type "error", and then `complete`.
  133921. *
  133922. * This operator is useful for producing metadata of the source Observable, to
  133923. * be consumed as `next` emissions. Use it in conjunction with
  133924. * {@link dematerialize}.
  133925. *
  133926. * @example <caption>Convert a faulty Observable to an Observable of Notifications</caption>
  133927. * var letters = Rx.Observable.of('a', 'b', 13, 'd');
  133928. * var upperCase = letters.map(x => x.toUpperCase());
  133929. * var materialized = upperCase.materialize();
  133930. * materialized.subscribe(x => console.log(x));
  133931. *
  133932. * // Results in the following:
  133933. * // - Notification {kind: "N", value: "A", error: undefined, hasValue: true}
  133934. * // - Notification {kind: "N", value: "B", error: undefined, hasValue: true}
  133935. * // - Notification {kind: "E", value: undefined, error: TypeError:
  133936. * // x.toUpperCase is not a function at MapSubscriber.letters.map.x
  133937. * // [as project] (http://1…, hasValue: false}
  133938. *
  133939. * @see {@link Notification}
  133940. * @see {@link dematerialize}
  133941. *
  133942. * @return {Observable<Notification<T>>} An Observable that emits
  133943. * {@link Notification} objects that wrap the original emissions from the source
  133944. * Observable with metadata.
  133945. * @method materialize
  133946. * @owner Observable
  133947. */
  133948. function materialize() {
  133949. return materialize_1.materialize()(this);
  133950. }
  133951. exports.materialize = materialize;
  133952. //# sourceMappingURL=materialize.js.map
  133953. /***/ }),
  133954. /* 529 */
  133955. /***/ (function(module, exports, __webpack_require__) {
  133956. "use strict";
  133957. var Observable_1 = __webpack_require__(0);
  133958. var max_1 = __webpack_require__(530);
  133959. Observable_1.Observable.prototype.max = max_1.max;
  133960. //# sourceMappingURL=max.js.map
  133961. /***/ }),
  133962. /* 530 */
  133963. /***/ (function(module, exports, __webpack_require__) {
  133964. "use strict";
  133965. var max_1 = __webpack_require__(254);
  133966. /**
  133967. * The Max operator operates on an Observable that emits numbers (or items that can be compared with a provided function),
  133968. * and when source Observable completes it emits a single item: the item with the largest value.
  133969. *
  133970. * <img src="./img/max.png" width="100%">
  133971. *
  133972. * @example <caption>Get the maximal value of a series of numbers</caption>
  133973. * Rx.Observable.of(5, 4, 7, 2, 8)
  133974. * .max()
  133975. * .subscribe(x => console.log(x)); // -> 8
  133976. *
  133977. * @example <caption>Use a comparer function to get the maximal item</caption>
  133978. * interface Person {
  133979. * age: number,
  133980. * name: string
  133981. * }
  133982. * Observable.of<Person>({age: 7, name: 'Foo'},
  133983. * {age: 5, name: 'Bar'},
  133984. * {age: 9, name: 'Beer'})
  133985. * .max<Person>((a: Person, b: Person) => a.age < b.age ? -1 : 1)
  133986. * .subscribe((x: Person) => console.log(x.name)); // -> 'Beer'
  133987. * }
  133988. *
  133989. * @see {@link min}
  133990. *
  133991. * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the
  133992. * value of two items.
  133993. * @return {Observable} An Observable that emits item with the largest value.
  133994. * @method max
  133995. * @owner Observable
  133996. */
  133997. function max(comparer) {
  133998. return max_1.max(comparer)(this);
  133999. }
  134000. exports.max = max;
  134001. //# sourceMappingURL=max.js.map
  134002. /***/ }),
  134003. /* 531 */
  134004. /***/ (function(module, exports, __webpack_require__) {
  134005. "use strict";
  134006. var Observable_1 = __webpack_require__(0);
  134007. var merge_1 = __webpack_require__(532);
  134008. Observable_1.Observable.prototype.merge = merge_1.merge;
  134009. //# sourceMappingURL=merge.js.map
  134010. /***/ }),
  134011. /* 532 */
  134012. /***/ (function(module, exports, __webpack_require__) {
  134013. "use strict";
  134014. var merge_1 = __webpack_require__(255);
  134015. var merge_2 = __webpack_require__(44);
  134016. exports.mergeStatic = merge_2.merge;
  134017. /* tslint:enable:max-line-length */
  134018. /**
  134019. * Creates an output Observable which concurrently emits all values from every
  134020. * given input Observable.
  134021. *
  134022. * <span class="informal">Flattens multiple Observables together by blending
  134023. * their values into one Observable.</span>
  134024. *
  134025. * <img src="./img/merge.png" width="100%">
  134026. *
  134027. * `merge` subscribes to each given input Observable (either the source or an
  134028. * Observable given as argument), and simply forwards (without doing any
  134029. * transformation) all the values from all the input Observables to the output
  134030. * Observable. The output Observable only completes once all input Observables
  134031. * have completed. Any error delivered by an input Observable will be immediately
  134032. * emitted on the output Observable.
  134033. *
  134034. * @example <caption>Merge together two Observables: 1s interval and clicks</caption>
  134035. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134036. * var timer = Rx.Observable.interval(1000);
  134037. * var clicksOrTimer = clicks.merge(timer);
  134038. * clicksOrTimer.subscribe(x => console.log(x));
  134039. *
  134040. * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>
  134041. * var timer1 = Rx.Observable.interval(1000).take(10);
  134042. * var timer2 = Rx.Observable.interval(2000).take(6);
  134043. * var timer3 = Rx.Observable.interval(500).take(10);
  134044. * var concurrent = 2; // the argument
  134045. * var merged = timer1.merge(timer2, timer3, concurrent);
  134046. * merged.subscribe(x => console.log(x));
  134047. *
  134048. * @see {@link mergeAll}
  134049. * @see {@link mergeMap}
  134050. * @see {@link mergeMapTo}
  134051. * @see {@link mergeScan}
  134052. *
  134053. * @param {ObservableInput} other An input Observable to merge with the source
  134054. * Observable. More than one input Observables may be given as argument.
  134055. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  134056. * Observables being subscribed to concurrently.
  134057. * @param {Scheduler} [scheduler=null] The IScheduler to use for managing
  134058. * concurrency of input Observables.
  134059. * @return {Observable} An Observable that emits items that are the result of
  134060. * every input Observable.
  134061. * @method merge
  134062. * @owner Observable
  134063. */
  134064. function merge() {
  134065. var observables = [];
  134066. for (var _i = 0; _i < arguments.length; _i++) {
  134067. observables[_i - 0] = arguments[_i];
  134068. }
  134069. return merge_1.merge.apply(void 0, observables)(this);
  134070. }
  134071. exports.merge = merge;
  134072. //# sourceMappingURL=merge.js.map
  134073. /***/ }),
  134074. /* 533 */
  134075. /***/ (function(module, exports, __webpack_require__) {
  134076. "use strict";
  134077. var Observable_1 = __webpack_require__(0);
  134078. var mergeAll_1 = __webpack_require__(534);
  134079. Observable_1.Observable.prototype.mergeAll = mergeAll_1.mergeAll;
  134080. //# sourceMappingURL=mergeAll.js.map
  134081. /***/ }),
  134082. /* 534 */
  134083. /***/ (function(module, exports, __webpack_require__) {
  134084. "use strict";
  134085. var mergeAll_1 = __webpack_require__(65);
  134086. /**
  134087. * Converts a higher-order Observable into a first-order Observable which
  134088. * concurrently delivers all values that are emitted on the inner Observables.
  134089. *
  134090. * <span class="informal">Flattens an Observable-of-Observables.</span>
  134091. *
  134092. * <img src="./img/mergeAll.png" width="100%">
  134093. *
  134094. * `mergeAll` subscribes to an Observable that emits Observables, also known as
  134095. * a higher-order Observable. Each time it observes one of these emitted inner
  134096. * Observables, it subscribes to that and delivers all the values from the
  134097. * inner Observable on the output Observable. The output Observable only
  134098. * completes once all inner Observables have completed. Any error delivered by
  134099. * a inner Observable will be immediately emitted on the output Observable.
  134100. *
  134101. * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>
  134102. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134103. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));
  134104. * var firstOrder = higherOrder.mergeAll();
  134105. * firstOrder.subscribe(x => console.log(x));
  134106. *
  134107. * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>
  134108. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134109. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));
  134110. * var firstOrder = higherOrder.mergeAll(2);
  134111. * firstOrder.subscribe(x => console.log(x));
  134112. *
  134113. * @see {@link combineAll}
  134114. * @see {@link concatAll}
  134115. * @see {@link exhaust}
  134116. * @see {@link merge}
  134117. * @see {@link mergeMap}
  134118. * @see {@link mergeMapTo}
  134119. * @see {@link mergeScan}
  134120. * @see {@link switch}
  134121. * @see {@link zipAll}
  134122. *
  134123. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner
  134124. * Observables being subscribed to concurrently.
  134125. * @return {Observable} An Observable that emits values coming from all the
  134126. * inner Observables emitted by the source Observable.
  134127. * @method mergeAll
  134128. * @owner Observable
  134129. */
  134130. function mergeAll(concurrent) {
  134131. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  134132. return mergeAll_1.mergeAll(concurrent)(this);
  134133. }
  134134. exports.mergeAll = mergeAll;
  134135. //# sourceMappingURL=mergeAll.js.map
  134136. /***/ }),
  134137. /* 535 */
  134138. /***/ (function(module, exports, __webpack_require__) {
  134139. "use strict";
  134140. var Observable_1 = __webpack_require__(0);
  134141. var mergeMap_1 = __webpack_require__(536);
  134142. Observable_1.Observable.prototype.mergeMap = mergeMap_1.mergeMap;
  134143. Observable_1.Observable.prototype.flatMap = mergeMap_1.mergeMap;
  134144. //# sourceMappingURL=mergeMap.js.map
  134145. /***/ }),
  134146. /* 536 */
  134147. /***/ (function(module, exports, __webpack_require__) {
  134148. "use strict";
  134149. var mergeMap_1 = __webpack_require__(45);
  134150. /* tslint:enable:max-line-length */
  134151. /**
  134152. * Projects each source value to an Observable which is merged in the output
  134153. * Observable.
  134154. *
  134155. * <span class="informal">Maps each value to an Observable, then flattens all of
  134156. * these inner Observables using {@link mergeAll}.</span>
  134157. *
  134158. * <img src="./img/mergeMap.png" width="100%">
  134159. *
  134160. * Returns an Observable that emits items based on applying a function that you
  134161. * supply to each item emitted by the source Observable, where that function
  134162. * returns an Observable, and then merging those resulting Observables and
  134163. * emitting the results of this merger.
  134164. *
  134165. * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>
  134166. * var letters = Rx.Observable.of('a', 'b', 'c');
  134167. * var result = letters.mergeMap(x =>
  134168. * Rx.Observable.interval(1000).map(i => x+i)
  134169. * );
  134170. * result.subscribe(x => console.log(x));
  134171. *
  134172. * // Results in the following:
  134173. * // a0
  134174. * // b0
  134175. * // c0
  134176. * // a1
  134177. * // b1
  134178. * // c1
  134179. * // continues to list a,b,c with respective ascending integers
  134180. *
  134181. * @see {@link concatMap}
  134182. * @see {@link exhaustMap}
  134183. * @see {@link merge}
  134184. * @see {@link mergeAll}
  134185. * @see {@link mergeMapTo}
  134186. * @see {@link mergeScan}
  134187. * @see {@link switchMap}
  134188. *
  134189. * @param {function(value: T, ?index: number): ObservableInput} project A function
  134190. * that, when applied to an item emitted by the source Observable, returns an
  134191. * Observable.
  134192. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  134193. * A function to produce the value on the output Observable based on the values
  134194. * and the indices of the source (outer) emission and the inner Observable
  134195. * emission. The arguments passed to this function are:
  134196. * - `outerValue`: the value that came from the source
  134197. * - `innerValue`: the value that came from the projected Observable
  134198. * - `outerIndex`: the "index" of the value that came from the source
  134199. * - `innerIndex`: the "index" of the value from the projected Observable
  134200. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  134201. * Observables being subscribed to concurrently.
  134202. * @return {Observable} An Observable that emits the result of applying the
  134203. * projection function (and the optional `resultSelector`) to each item emitted
  134204. * by the source Observable and merging the results of the Observables obtained
  134205. * from this transformation.
  134206. * @method mergeMap
  134207. * @owner Observable
  134208. */
  134209. function mergeMap(project, resultSelector, concurrent) {
  134210. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  134211. return mergeMap_1.mergeMap(project, resultSelector, concurrent)(this);
  134212. }
  134213. exports.mergeMap = mergeMap;
  134214. //# sourceMappingURL=mergeMap.js.map
  134215. /***/ }),
  134216. /* 537 */
  134217. /***/ (function(module, exports, __webpack_require__) {
  134218. "use strict";
  134219. var Observable_1 = __webpack_require__(0);
  134220. var mergeMapTo_1 = __webpack_require__(538);
  134221. Observable_1.Observable.prototype.flatMapTo = mergeMapTo_1.mergeMapTo;
  134222. Observable_1.Observable.prototype.mergeMapTo = mergeMapTo_1.mergeMapTo;
  134223. //# sourceMappingURL=mergeMapTo.js.map
  134224. /***/ }),
  134225. /* 538 */
  134226. /***/ (function(module, exports, __webpack_require__) {
  134227. "use strict";
  134228. var mergeMapTo_1 = __webpack_require__(256);
  134229. /* tslint:enable:max-line-length */
  134230. /**
  134231. * Projects each source value to the same Observable which is merged multiple
  134232. * times in the output Observable.
  134233. *
  134234. * <span class="informal">It's like {@link mergeMap}, but maps each value always
  134235. * to the same inner Observable.</span>
  134236. *
  134237. * <img src="./img/mergeMapTo.png" width="100%">
  134238. *
  134239. * Maps each source value to the given Observable `innerObservable` regardless
  134240. * of the source value, and then merges those resulting Observables into one
  134241. * single Observable, which is the output Observable.
  134242. *
  134243. * @example <caption>For each click event, start an interval Observable ticking every 1 second</caption>
  134244. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134245. * var result = clicks.mergeMapTo(Rx.Observable.interval(1000));
  134246. * result.subscribe(x => console.log(x));
  134247. *
  134248. * @see {@link concatMapTo}
  134249. * @see {@link merge}
  134250. * @see {@link mergeAll}
  134251. * @see {@link mergeMap}
  134252. * @see {@link mergeScan}
  134253. * @see {@link switchMapTo}
  134254. *
  134255. * @param {ObservableInput} innerObservable An Observable to replace each value from
  134256. * the source Observable.
  134257. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  134258. * A function to produce the value on the output Observable based on the values
  134259. * and the indices of the source (outer) emission and the inner Observable
  134260. * emission. The arguments passed to this function are:
  134261. * - `outerValue`: the value that came from the source
  134262. * - `innerValue`: the value that came from the projected Observable
  134263. * - `outerIndex`: the "index" of the value that came from the source
  134264. * - `innerIndex`: the "index" of the value from the projected Observable
  134265. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  134266. * Observables being subscribed to concurrently.
  134267. * @return {Observable} An Observable that emits items from the given
  134268. * `innerObservable` (and optionally transformed through `resultSelector`) every
  134269. * time a value is emitted on the source Observable.
  134270. * @method mergeMapTo
  134271. * @owner Observable
  134272. */
  134273. function mergeMapTo(innerObservable, resultSelector, concurrent) {
  134274. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  134275. return mergeMapTo_1.mergeMapTo(innerObservable, resultSelector, concurrent)(this);
  134276. }
  134277. exports.mergeMapTo = mergeMapTo;
  134278. //# sourceMappingURL=mergeMapTo.js.map
  134279. /***/ }),
  134280. /* 539 */
  134281. /***/ (function(module, exports, __webpack_require__) {
  134282. "use strict";
  134283. var Observable_1 = __webpack_require__(0);
  134284. var mergeScan_1 = __webpack_require__(540);
  134285. Observable_1.Observable.prototype.mergeScan = mergeScan_1.mergeScan;
  134286. //# sourceMappingURL=mergeScan.js.map
  134287. /***/ }),
  134288. /* 540 */
  134289. /***/ (function(module, exports, __webpack_require__) {
  134290. "use strict";
  134291. var mergeScan_1 = __webpack_require__(257);
  134292. /**
  134293. * Applies an accumulator function over the source Observable where the
  134294. * accumulator function itself returns an Observable, then each intermediate
  134295. * Observable returned is merged into the output Observable.
  134296. *
  134297. * <span class="informal">It's like {@link scan}, but the Observables returned
  134298. * by the accumulator are merged into the outer Observable.</span>
  134299. *
  134300. * @example <caption>Count the number of click events</caption>
  134301. * const click$ = Rx.Observable.fromEvent(document, 'click');
  134302. * const one$ = click$.mapTo(1);
  134303. * const seed = 0;
  134304. * const count$ = one$.mergeScan((acc, one) => Rx.Observable.of(acc + one), seed);
  134305. * count$.subscribe(x => console.log(x));
  134306. *
  134307. * // Results:
  134308. * 1
  134309. * 2
  134310. * 3
  134311. * 4
  134312. * // ...and so on for each click
  134313. *
  134314. * @param {function(acc: R, value: T): Observable<R>} accumulator
  134315. * The accumulator function called on each source value.
  134316. * @param seed The initial accumulation value.
  134317. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of
  134318. * input Observables being subscribed to concurrently.
  134319. * @return {Observable<R>} An observable of the accumulated values.
  134320. * @method mergeScan
  134321. * @owner Observable
  134322. */
  134323. function mergeScan(accumulator, seed, concurrent) {
  134324. if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
  134325. return mergeScan_1.mergeScan(accumulator, seed, concurrent)(this);
  134326. }
  134327. exports.mergeScan = mergeScan;
  134328. //# sourceMappingURL=mergeScan.js.map
  134329. /***/ }),
  134330. /* 541 */
  134331. /***/ (function(module, exports, __webpack_require__) {
  134332. "use strict";
  134333. var Observable_1 = __webpack_require__(0);
  134334. var min_1 = __webpack_require__(542);
  134335. Observable_1.Observable.prototype.min = min_1.min;
  134336. //# sourceMappingURL=min.js.map
  134337. /***/ }),
  134338. /* 542 */
  134339. /***/ (function(module, exports, __webpack_require__) {
  134340. "use strict";
  134341. var min_1 = __webpack_require__(258);
  134342. /**
  134343. * The Min operator operates on an Observable that emits numbers (or items that can be compared with a provided function),
  134344. * and when source Observable completes it emits a single item: the item with the smallest value.
  134345. *
  134346. * <img src="./img/min.png" width="100%">
  134347. *
  134348. * @example <caption>Get the minimal value of a series of numbers</caption>
  134349. * Rx.Observable.of(5, 4, 7, 2, 8)
  134350. * .min()
  134351. * .subscribe(x => console.log(x)); // -> 2
  134352. *
  134353. * @example <caption>Use a comparer function to get the minimal item</caption>
  134354. * interface Person {
  134355. * age: number,
  134356. * name: string
  134357. * }
  134358. * Observable.of<Person>({age: 7, name: 'Foo'},
  134359. * {age: 5, name: 'Bar'},
  134360. * {age: 9, name: 'Beer'})
  134361. * .min<Person>( (a: Person, b: Person) => a.age < b.age ? -1 : 1)
  134362. * .subscribe((x: Person) => console.log(x.name)); // -> 'Bar'
  134363. * }
  134364. *
  134365. * @see {@link max}
  134366. *
  134367. * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the
  134368. * value of two items.
  134369. * @return {Observable<R>} An Observable that emits item with the smallest value.
  134370. * @method min
  134371. * @owner Observable
  134372. */
  134373. function min(comparer) {
  134374. return min_1.min(comparer)(this);
  134375. }
  134376. exports.min = min;
  134377. //# sourceMappingURL=min.js.map
  134378. /***/ }),
  134379. /* 543 */
  134380. /***/ (function(module, exports, __webpack_require__) {
  134381. "use strict";
  134382. var Observable_1 = __webpack_require__(0);
  134383. var multicast_1 = __webpack_require__(544);
  134384. Observable_1.Observable.prototype.multicast = multicast_1.multicast;
  134385. //# sourceMappingURL=multicast.js.map
  134386. /***/ }),
  134387. /* 544 */
  134388. /***/ (function(module, exports, __webpack_require__) {
  134389. "use strict";
  134390. var multicast_1 = __webpack_require__(39);
  134391. /* tslint:enable:max-line-length */
  134392. /**
  134393. * Allows source Observable to be subscribed only once with a Subject of choice,
  134394. * while still sharing its values between multiple subscribers.
  134395. *
  134396. * <span class="informal">Subscribe to Observable once, but send its values to multiple subscribers.</span>
  134397. *
  134398. * <img src="./img/multicast.png" width="100%">
  134399. *
  134400. * `multicast` is an operator that works in two modes.
  134401. *
  134402. * In the first mode you provide a single argument to it, which can be either an initialized Subject or a Subject
  134403. * factory. As a result you will get a special kind of an Observable - a {@link ConnectableObservable}. It can be
  134404. * subscribed multiple times, just as regular Observable, but it won't subscribe to the source Observable at that
  134405. * moment. It will do it only if you call its `connect` method. This means you can essentially control by hand, when
  134406. * source Observable will be actually subscribed. What is more, ConnectableObservable will share this one subscription
  134407. * between all of its subscribers. This means that, for example, `ajax` Observable will only send a request once,
  134408. * even though usually it would send a request per every subscriber. Since it sends a request at the moment of
  134409. * subscription, here request would be sent when the `connect` method of a ConnectableObservable is called.
  134410. *
  134411. * The most common pattern of using ConnectableObservable is calling `connect` when the first consumer subscribes,
  134412. * keeping the subscription alive while several consumers come and go and finally unsubscribing from the source
  134413. * Observable, when the last consumer unsubscribes. To not implement that logic over and over again,
  134414. * ConnectableObservable has a special operator, `refCount`. When called, it returns an Observable, which will count
  134415. * the number of consumers subscribed to it and keep ConnectableObservable connected as long as there is at least
  134416. * one consumer. So if you don't actually need to decide yourself when to connect and disconnect a
  134417. * ConnectableObservable, use `refCount`.
  134418. *
  134419. * The second mode is invoked by calling `multicast` with an additional, second argument - selector function.
  134420. * This function accepts an Observable - which basically mirrors the source Observable - and returns Observable
  134421. * as well, which should be the input stream modified by any operators you want. Note that in this
  134422. * mode you cannot provide initialized Subject as a first argument - it has to be a Subject factory. If
  134423. * you provide selector function, `multicast` returns just a regular Observable, instead of ConnectableObservable.
  134424. * Thus, as usual, each subscription to this stream triggers subscription to the source Observable. However,
  134425. * if inside the selector function you subscribe to the input Observable multiple times, actual source stream
  134426. * will be subscribed only once. So if you have a chain of operators that use some Observable many times,
  134427. * but you want to subscribe to that Observable only once, this is the mode you would use.
  134428. *
  134429. * Subject provided as a first parameter of `multicast` is used as a proxy for the single subscription to the
  134430. * source Observable. It means that all values from the source stream go through that Subject. Thus, if a Subject
  134431. * has some special properties, Observable returned by `multicast` will have them as well. If you want to use
  134432. * `multicast` with a Subject that is one of the ones included in RxJS by default - {@link Subject},
  134433. * {@link AsyncSubject}, {@link BehaviorSubject}, or {@link ReplaySubject} - simply use {@link publish},
  134434. * {@link publishLast}, {@link publishBehavior} or {@link publishReplay} respectively. These are actually
  134435. * just wrappers around `multicast`, with a specific Subject hardcoded inside.
  134436. *
  134437. * Also, if you use {@link publish} or {@link publishReplay} with a ConnectableObservables `refCount` operator,
  134438. * you can simply use {@link share} and {@link shareReplay} respectively, which chain these two.
  134439. *
  134440. * @example <caption>Use ConnectableObservable</caption>
  134441. * const seconds = Rx.Observable.interval(1000);
  134442. * const connectableSeconds = seconds.multicast(new Subject());
  134443. *
  134444. * connectableSeconds.subscribe(value => console.log('first: ' + value));
  134445. * connectableSeconds.subscribe(value => console.log('second: ' + value));
  134446. *
  134447. * // At this point still nothing happens, even though we subscribed twice.
  134448. *
  134449. * connectableSeconds.connect();
  134450. *
  134451. * // From now on `seconds` are being logged to the console,
  134452. * // twice per every second. `seconds` Observable was however only subscribed once,
  134453. * // so under the hood Observable.interval had only one clock started.
  134454. *
  134455. * @example <caption>Use selector</caption>
  134456. * const seconds = Rx.Observable.interval(1000);
  134457. *
  134458. * seconds
  134459. * .multicast(
  134460. * () => new Subject(),
  134461. * seconds => seconds.zip(seconds) // Usually zip would subscribe to `seconds` twice.
  134462. * // Because we are inside selector, `seconds` is subscribed once,
  134463. * ) // thus starting only one clock used internally by Observable.interval.
  134464. * .subscribe();
  134465. *
  134466. * @see {@link publish}
  134467. * @see {@link publishLast}
  134468. * @see {@link publishBehavior}
  134469. * @see {@link publishReplay}
  134470. * @see {@link share}
  134471. * @see {@link shareReplay}
  134472. *
  134473. * @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate Subject through
  134474. * which the source sequence's elements will be multicast to the selector function input Observable or
  134475. * ConnectableObservable returned by the operator.
  134476. * @param {Function} [selector] - Optional selector function that can use the input stream
  134477. * as many times as needed, without causing multiple subscriptions to the source stream.
  134478. * Subscribers to the input source will receive all notifications of the source from the
  134479. * time of the subscription forward.
  134480. * @return {Observable<T>|ConnectableObservable<T>} An Observable that emits the results of invoking the selector
  134481. * on the source stream or a special {@link ConnectableObservable}, if selector was not provided.
  134482. *
  134483. * @method multicast
  134484. * @owner Observable
  134485. */
  134486. function multicast(subjectOrSubjectFactory, selector) {
  134487. return multicast_1.multicast(subjectOrSubjectFactory, selector)(this);
  134488. }
  134489. exports.multicast = multicast;
  134490. //# sourceMappingURL=multicast.js.map
  134491. /***/ }),
  134492. /* 545 */
  134493. /***/ (function(module, exports, __webpack_require__) {
  134494. "use strict";
  134495. var Observable_1 = __webpack_require__(0);
  134496. var observeOn_1 = __webpack_require__(546);
  134497. Observable_1.Observable.prototype.observeOn = observeOn_1.observeOn;
  134498. //# sourceMappingURL=observeOn.js.map
  134499. /***/ }),
  134500. /* 546 */
  134501. /***/ (function(module, exports, __webpack_require__) {
  134502. "use strict";
  134503. var observeOn_1 = __webpack_require__(75);
  134504. /**
  134505. *
  134506. * Re-emits all notifications from source Observable with specified scheduler.
  134507. *
  134508. * <span class="informal">Ensure a specific scheduler is used, from outside of an Observable.</span>
  134509. *
  134510. * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule
  134511. * notifications emitted by the source Observable. It might be useful, if you do not have control over
  134512. * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.
  134513. *
  134514. * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,
  134515. * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal
  134516. * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits
  134517. * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.
  134518. * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split
  134519. * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source
  134520. * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a
  134521. * little bit more, to ensure that they are emitted at expected moments.
  134522. *
  134523. * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications
  134524. * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`
  134525. * will delay all notifications - including error notifications - while `delay` will pass through error
  134526. * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator
  134527. * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used
  134528. * for notification emissions in general.
  134529. *
  134530. * @example <caption>Ensure values in subscribe are called just before browser repaint.</caption>
  134531. * const intervals = Rx.Observable.interval(10); // Intervals are scheduled
  134532. * // with async scheduler by default...
  134533. *
  134534. * intervals
  134535. * .observeOn(Rx.Scheduler.animationFrame) // ...but we will observe on animationFrame
  134536. * .subscribe(val => { // scheduler to ensure smooth animation.
  134537. * someDiv.style.height = val + 'px';
  134538. * });
  134539. *
  134540. * @see {@link delay}
  134541. *
  134542. * @param {IScheduler} scheduler Scheduler that will be used to reschedule notifications from source Observable.
  134543. * @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.
  134544. * @return {Observable<T>} Observable that emits the same notifications as the source Observable,
  134545. * but with provided scheduler.
  134546. *
  134547. * @method observeOn
  134548. * @owner Observable
  134549. */
  134550. function observeOn(scheduler, delay) {
  134551. if (delay === void 0) { delay = 0; }
  134552. return observeOn_1.observeOn(scheduler, delay)(this);
  134553. }
  134554. exports.observeOn = observeOn;
  134555. //# sourceMappingURL=observeOn.js.map
  134556. /***/ }),
  134557. /* 547 */
  134558. /***/ (function(module, exports, __webpack_require__) {
  134559. "use strict";
  134560. var Observable_1 = __webpack_require__(0);
  134561. var onErrorResumeNext_1 = __webpack_require__(548);
  134562. Observable_1.Observable.prototype.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNext;
  134563. //# sourceMappingURL=onErrorResumeNext.js.map
  134564. /***/ }),
  134565. /* 548 */
  134566. /***/ (function(module, exports, __webpack_require__) {
  134567. "use strict";
  134568. var onErrorResumeNext_1 = __webpack_require__(116);
  134569. /* tslint:enable:max-line-length */
  134570. /**
  134571. * When any of the provided Observable emits an complete or error notification, it immediately subscribes to the next one
  134572. * that was passed.
  134573. *
  134574. * <span class="informal">Execute series of Observables no matter what, even if it means swallowing errors.</span>
  134575. *
  134576. * <img src="./img/onErrorResumeNext.png" width="100%">
  134577. *
  134578. * `onErrorResumeNext` is an operator that accepts a series of Observables, provided either directly as
  134579. * arguments or as an array. If no single Observable is provided, returned Observable will simply behave the same
  134580. * as the source.
  134581. *
  134582. * `onErrorResumeNext` returns an Observable that starts by subscribing and re-emitting values from the source Observable.
  134583. * When its stream of values ends - no matter if Observable completed or emitted an error - `onErrorResumeNext`
  134584. * will subscribe to the first Observable that was passed as an argument to the method. It will start re-emitting
  134585. * its values as well and - again - when that stream ends, `onErrorResumeNext` will proceed to subscribing yet another
  134586. * Observable in provided series, no matter if previous Observable completed or ended with an error. This will
  134587. * be happening until there is no more Observables left in the series, at which point returned Observable will
  134588. * complete - even if the last subscribed stream ended with an error.
  134589. *
  134590. * `onErrorResumeNext` can be therefore thought of as version of {@link concat} operator, which is more permissive
  134591. * when it comes to the errors emitted by its input Observables. While `concat` subscribes to the next Observable
  134592. * in series only if previous one successfully completed, `onErrorResumeNext` subscribes even if it ended with
  134593. * an error.
  134594. *
  134595. * Note that you do not get any access to errors emitted by the Observables. In particular do not
  134596. * expect these errors to appear in error callback passed to {@link subscribe}. If you want to take
  134597. * specific actions based on what error was emitted by an Observable, you should try out {@link catch} instead.
  134598. *
  134599. *
  134600. * @example <caption>Subscribe to the next Observable after map fails</caption>
  134601. * Rx.Observable.of(1, 2, 3, 0)
  134602. * .map(x => {
  134603. * if (x === 0) { throw Error(); }
  134604. return 10 / x;
  134605. * })
  134606. * .onErrorResumeNext(Rx.Observable.of(1, 2, 3))
  134607. * .subscribe(
  134608. * val => console.log(val),
  134609. * err => console.log(err), // Will never be called.
  134610. * () => console.log('that\'s it!')
  134611. * );
  134612. *
  134613. * // Logs:
  134614. * // 10
  134615. * // 5
  134616. * // 3.3333333333333335
  134617. * // 1
  134618. * // 2
  134619. * // 3
  134620. * // "that's it!"
  134621. *
  134622. * @see {@link concat}
  134623. * @see {@link catch}
  134624. *
  134625. * @param {...ObservableInput} observables Observables passed either directly or as an array.
  134626. * @return {Observable} An Observable that emits values from source Observable, but - if it errors - subscribes
  134627. * to the next passed Observable and so on, until it completes or runs out of Observables.
  134628. * @method onErrorResumeNext
  134629. * @owner Observable
  134630. */
  134631. function onErrorResumeNext() {
  134632. var nextSources = [];
  134633. for (var _i = 0; _i < arguments.length; _i++) {
  134634. nextSources[_i - 0] = arguments[_i];
  134635. }
  134636. return onErrorResumeNext_1.onErrorResumeNext.apply(void 0, nextSources)(this);
  134637. }
  134638. exports.onErrorResumeNext = onErrorResumeNext;
  134639. //# sourceMappingURL=onErrorResumeNext.js.map
  134640. /***/ }),
  134641. /* 549 */
  134642. /***/ (function(module, exports, __webpack_require__) {
  134643. "use strict";
  134644. var Observable_1 = __webpack_require__(0);
  134645. var pairwise_1 = __webpack_require__(550);
  134646. Observable_1.Observable.prototype.pairwise = pairwise_1.pairwise;
  134647. //# sourceMappingURL=pairwise.js.map
  134648. /***/ }),
  134649. /* 550 */
  134650. /***/ (function(module, exports, __webpack_require__) {
  134651. "use strict";
  134652. var pairwise_1 = __webpack_require__(259);
  134653. /**
  134654. * Groups pairs of consecutive emissions together and emits them as an array of
  134655. * two values.
  134656. *
  134657. * <span class="informal">Puts the current value and previous value together as
  134658. * an array, and emits that.</span>
  134659. *
  134660. * <img src="./img/pairwise.png" width="100%">
  134661. *
  134662. * The Nth emission from the source Observable will cause the output Observable
  134663. * to emit an array [(N-1)th, Nth] of the previous and the current value, as a
  134664. * pair. For this reason, `pairwise` emits on the second and subsequent
  134665. * emissions from the source Observable, but not on the first emission, because
  134666. * there is no previous value in that case.
  134667. *
  134668. * @example <caption>On every click (starting from the second), emit the relative distance to the previous click</caption>
  134669. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134670. * var pairs = clicks.pairwise();
  134671. * var distance = pairs.map(pair => {
  134672. * var x0 = pair[0].clientX;
  134673. * var y0 = pair[0].clientY;
  134674. * var x1 = pair[1].clientX;
  134675. * var y1 = pair[1].clientY;
  134676. * return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));
  134677. * });
  134678. * distance.subscribe(x => console.log(x));
  134679. *
  134680. * @see {@link buffer}
  134681. * @see {@link bufferCount}
  134682. *
  134683. * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of
  134684. * consecutive values from the source Observable.
  134685. * @method pairwise
  134686. * @owner Observable
  134687. */
  134688. function pairwise() {
  134689. return pairwise_1.pairwise()(this);
  134690. }
  134691. exports.pairwise = pairwise;
  134692. //# sourceMappingURL=pairwise.js.map
  134693. /***/ }),
  134694. /* 551 */
  134695. /***/ (function(module, exports, __webpack_require__) {
  134696. "use strict";
  134697. var Observable_1 = __webpack_require__(0);
  134698. var partition_1 = __webpack_require__(552);
  134699. Observable_1.Observable.prototype.partition = partition_1.partition;
  134700. //# sourceMappingURL=partition.js.map
  134701. /***/ }),
  134702. /* 552 */
  134703. /***/ (function(module, exports, __webpack_require__) {
  134704. "use strict";
  134705. var partition_1 = __webpack_require__(260);
  134706. /**
  134707. * Splits the source Observable into two, one with values that satisfy a
  134708. * predicate, and another with values that don't satisfy the predicate.
  134709. *
  134710. * <span class="informal">It's like {@link filter}, but returns two Observables:
  134711. * one like the output of {@link filter}, and the other with values that did not
  134712. * pass the condition.</span>
  134713. *
  134714. * <img src="./img/partition.png" width="100%">
  134715. *
  134716. * `partition` outputs an array with two Observables that partition the values
  134717. * from the source Observable through the given `predicate` function. The first
  134718. * Observable in that array emits source values for which the predicate argument
  134719. * returns true. The second Observable emits source values for which the
  134720. * predicate returns false. The first behaves like {@link filter} and the second
  134721. * behaves like {@link filter} with the predicate negated.
  134722. *
  134723. * @example <caption>Partition click events into those on DIV elements and those elsewhere</caption>
  134724. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134725. * var parts = clicks.partition(ev => ev.target.tagName === 'DIV');
  134726. * var clicksOnDivs = parts[0];
  134727. * var clicksElsewhere = parts[1];
  134728. * clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));
  134729. * clicksElsewhere.subscribe(x => console.log('Other clicked: ', x));
  134730. *
  134731. * @see {@link filter}
  134732. *
  134733. * @param {function(value: T, index: number): boolean} predicate A function that
  134734. * evaluates each value emitted by the source Observable. If it returns `true`,
  134735. * the value is emitted on the first Observable in the returned array, if
  134736. * `false` the value is emitted on the second Observable in the array. The
  134737. * `index` parameter is the number `i` for the i-th source emission that has
  134738. * happened since the subscription, starting from the number `0`.
  134739. * @param {any} [thisArg] An optional argument to determine the value of `this`
  134740. * in the `predicate` function.
  134741. * @return {[Observable<T>, Observable<T>]} An array with two Observables: one
  134742. * with values that passed the predicate, and another with values that did not
  134743. * pass the predicate.
  134744. * @method partition
  134745. * @owner Observable
  134746. */
  134747. function partition(predicate, thisArg) {
  134748. return partition_1.partition(predicate, thisArg)(this);
  134749. }
  134750. exports.partition = partition;
  134751. //# sourceMappingURL=partition.js.map
  134752. /***/ }),
  134753. /* 553 */
  134754. /***/ (function(module, exports, __webpack_require__) {
  134755. "use strict";
  134756. function not(pred, thisArg) {
  134757. function notPred() {
  134758. return !(notPred.pred.apply(notPred.thisArg, arguments));
  134759. }
  134760. notPred.pred = pred;
  134761. notPred.thisArg = thisArg;
  134762. return notPred;
  134763. }
  134764. exports.not = not;
  134765. //# sourceMappingURL=not.js.map
  134766. /***/ }),
  134767. /* 554 */
  134768. /***/ (function(module, exports, __webpack_require__) {
  134769. "use strict";
  134770. var Observable_1 = __webpack_require__(0);
  134771. var pluck_1 = __webpack_require__(555);
  134772. Observable_1.Observable.prototype.pluck = pluck_1.pluck;
  134773. //# sourceMappingURL=pluck.js.map
  134774. /***/ }),
  134775. /* 555 */
  134776. /***/ (function(module, exports, __webpack_require__) {
  134777. "use strict";
  134778. var pluck_1 = __webpack_require__(261);
  134779. /**
  134780. * Maps each source value (an object) to its specified nested property.
  134781. *
  134782. * <span class="informal">Like {@link map}, but meant only for picking one of
  134783. * the nested properties of every emitted object.</span>
  134784. *
  134785. * <img src="./img/pluck.png" width="100%">
  134786. *
  134787. * Given a list of strings describing a path to an object property, retrieves
  134788. * the value of a specified nested property from all values in the source
  134789. * Observable. If a property can't be resolved, it will return `undefined` for
  134790. * that value.
  134791. *
  134792. * @example <caption>Map every click to the tagName of the clicked target element</caption>
  134793. * var clicks = Rx.Observable.fromEvent(document, 'click');
  134794. * var tagNames = clicks.pluck('target', 'tagName');
  134795. * tagNames.subscribe(x => console.log(x));
  134796. *
  134797. * @see {@link map}
  134798. *
  134799. * @param {...string} properties The nested properties to pluck from each source
  134800. * value (an object).
  134801. * @return {Observable} A new Observable of property values from the source values.
  134802. * @method pluck
  134803. * @owner Observable
  134804. */
  134805. function pluck() {
  134806. var properties = [];
  134807. for (var _i = 0; _i < arguments.length; _i++) {
  134808. properties[_i - 0] = arguments[_i];
  134809. }
  134810. return pluck_1.pluck.apply(void 0, properties)(this);
  134811. }
  134812. exports.pluck = pluck;
  134813. //# sourceMappingURL=pluck.js.map
  134814. /***/ }),
  134815. /* 556 */
  134816. /***/ (function(module, exports, __webpack_require__) {
  134817. "use strict";
  134818. var Observable_1 = __webpack_require__(0);
  134819. var publish_1 = __webpack_require__(557);
  134820. Observable_1.Observable.prototype.publish = publish_1.publish;
  134821. //# sourceMappingURL=publish.js.map
  134822. /***/ }),
  134823. /* 557 */
  134824. /***/ (function(module, exports, __webpack_require__) {
  134825. "use strict";
  134826. var publish_1 = __webpack_require__(262);
  134827. /* tslint:enable:max-line-length */
  134828. /**
  134829. * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called
  134830. * before it begins emitting items to those Observers that have subscribed to it.
  134831. *
  134832. * <img src="./img/publish.png" width="100%">
  134833. *
  134834. * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times
  134835. * as needed, without causing multiple subscriptions to the source sequence.
  134836. * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.
  134837. * @return A ConnectableObservable that upon connection causes the source Observable to emit items to its Observers.
  134838. * @method publish
  134839. * @owner Observable
  134840. */
  134841. function publish(selector) {
  134842. return publish_1.publish(selector)(this);
  134843. }
  134844. exports.publish = publish;
  134845. //# sourceMappingURL=publish.js.map
  134846. /***/ }),
  134847. /* 558 */
  134848. /***/ (function(module, exports, __webpack_require__) {
  134849. "use strict";
  134850. var Observable_1 = __webpack_require__(0);
  134851. var publishBehavior_1 = __webpack_require__(559);
  134852. Observable_1.Observable.prototype.publishBehavior = publishBehavior_1.publishBehavior;
  134853. //# sourceMappingURL=publishBehavior.js.map
  134854. /***/ }),
  134855. /* 559 */
  134856. /***/ (function(module, exports, __webpack_require__) {
  134857. "use strict";
  134858. var publishBehavior_1 = __webpack_require__(263);
  134859. /**
  134860. * @param value
  134861. * @return {ConnectableObservable<T>}
  134862. * @method publishBehavior
  134863. * @owner Observable
  134864. */
  134865. function publishBehavior(value) {
  134866. return publishBehavior_1.publishBehavior(value)(this);
  134867. }
  134868. exports.publishBehavior = publishBehavior;
  134869. //# sourceMappingURL=publishBehavior.js.map
  134870. /***/ }),
  134871. /* 560 */
  134872. /***/ (function(module, exports, __webpack_require__) {
  134873. "use strict";
  134874. var Observable_1 = __webpack_require__(0);
  134875. var publishReplay_1 = __webpack_require__(561);
  134876. Observable_1.Observable.prototype.publishReplay = publishReplay_1.publishReplay;
  134877. //# sourceMappingURL=publishReplay.js.map
  134878. /***/ }),
  134879. /* 561 */
  134880. /***/ (function(module, exports, __webpack_require__) {
  134881. "use strict";
  134882. var publishReplay_1 = __webpack_require__(265);
  134883. /* tslint:enable:max-line-length */
  134884. /**
  134885. * @param bufferSize
  134886. * @param windowTime
  134887. * @param selectorOrScheduler
  134888. * @param scheduler
  134889. * @return {Observable<T> | ConnectableObservable<T>}
  134890. * @method publishReplay
  134891. * @owner Observable
  134892. */
  134893. function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
  134894. return publishReplay_1.publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler)(this);
  134895. }
  134896. exports.publishReplay = publishReplay;
  134897. //# sourceMappingURL=publishReplay.js.map
  134898. /***/ }),
  134899. /* 562 */
  134900. /***/ (function(module, exports, __webpack_require__) {
  134901. "use strict";
  134902. var Observable_1 = __webpack_require__(0);
  134903. var publishLast_1 = __webpack_require__(563);
  134904. Observable_1.Observable.prototype.publishLast = publishLast_1.publishLast;
  134905. //# sourceMappingURL=publishLast.js.map
  134906. /***/ }),
  134907. /* 563 */
  134908. /***/ (function(module, exports, __webpack_require__) {
  134909. "use strict";
  134910. var publishLast_1 = __webpack_require__(266);
  134911. /**
  134912. * @return {ConnectableObservable<T>}
  134913. * @method publishLast
  134914. * @owner Observable
  134915. */
  134916. function publishLast() {
  134917. //TODO(benlesh): correct type-flow through here.
  134918. return publishLast_1.publishLast()(this);
  134919. }
  134920. exports.publishLast = publishLast;
  134921. //# sourceMappingURL=publishLast.js.map
  134922. /***/ }),
  134923. /* 564 */
  134924. /***/ (function(module, exports, __webpack_require__) {
  134925. "use strict";
  134926. var Observable_1 = __webpack_require__(0);
  134927. var race_1 = __webpack_require__(565);
  134928. Observable_1.Observable.prototype.race = race_1.race;
  134929. //# sourceMappingURL=race.js.map
  134930. /***/ }),
  134931. /* 565 */
  134932. /***/ (function(module, exports, __webpack_require__) {
  134933. "use strict";
  134934. var race_1 = __webpack_require__(267);
  134935. // NOTE: to support backwards compatability with 5.4.* and lower
  134936. var race_2 = __webpack_require__(115);
  134937. exports.raceStatic = race_2.race;
  134938. /* tslint:enable:max-line-length */
  134939. /**
  134940. * Returns an Observable that mirrors the first source Observable to emit an item
  134941. * from the combination of this Observable and supplied Observables.
  134942. * @param {...Observables} ...observables Sources used to race for which Observable emits first.
  134943. * @return {Observable} An Observable that mirrors the output of the first Observable to emit an item.
  134944. * @method race
  134945. * @owner Observable
  134946. */
  134947. function race() {
  134948. var observables = [];
  134949. for (var _i = 0; _i < arguments.length; _i++) {
  134950. observables[_i - 0] = arguments[_i];
  134951. }
  134952. return race_1.race.apply(void 0, observables)(this);
  134953. }
  134954. exports.race = race;
  134955. //# sourceMappingURL=race.js.map
  134956. /***/ }),
  134957. /* 566 */
  134958. /***/ (function(module, exports, __webpack_require__) {
  134959. "use strict";
  134960. var Observable_1 = __webpack_require__(0);
  134961. var reduce_1 = __webpack_require__(567);
  134962. Observable_1.Observable.prototype.reduce = reduce_1.reduce;
  134963. //# sourceMappingURL=reduce.js.map
  134964. /***/ }),
  134965. /* 567 */
  134966. /***/ (function(module, exports, __webpack_require__) {
  134967. "use strict";
  134968. var reduce_1 = __webpack_require__(60);
  134969. /* tslint:enable:max-line-length */
  134970. /**
  134971. * Applies an accumulator function over the source Observable, and returns the
  134972. * accumulated result when the source completes, given an optional seed value.
  134973. *
  134974. * <span class="informal">Combines together all values emitted on the source,
  134975. * using an accumulator function that knows how to join a new source value into
  134976. * the accumulation from the past.</span>
  134977. *
  134978. * <img src="./img/reduce.png" width="100%">
  134979. *
  134980. * Like
  134981. * [Array.prototype.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce),
  134982. * `reduce` applies an `accumulator` function against an accumulation and each
  134983. * value of the source Observable (from the past) to reduce it to a single
  134984. * value, emitted on the output Observable. Note that `reduce` will only emit
  134985. * one value, only when the source Observable completes. It is equivalent to
  134986. * applying operator {@link scan} followed by operator {@link last}.
  134987. *
  134988. * Returns an Observable that applies a specified `accumulator` function to each
  134989. * item emitted by the source Observable. If a `seed` value is specified, then
  134990. * that value will be used as the initial value for the accumulator. If no seed
  134991. * value is specified, the first item of the source is used as the seed.
  134992. *
  134993. * @example <caption>Count the number of click events that happened in 5 seconds</caption>
  134994. * var clicksInFiveSeconds = Rx.Observable.fromEvent(document, 'click')
  134995. * .takeUntil(Rx.Observable.interval(5000));
  134996. * var ones = clicksInFiveSeconds.mapTo(1);
  134997. * var seed = 0;
  134998. * var count = ones.reduce((acc, one) => acc + one, seed);
  134999. * count.subscribe(x => console.log(x));
  135000. *
  135001. * @see {@link count}
  135002. * @see {@link expand}
  135003. * @see {@link mergeScan}
  135004. * @see {@link scan}
  135005. *
  135006. * @param {function(acc: R, value: T, index: number): R} accumulator The accumulator function
  135007. * called on each source value.
  135008. * @param {R} [seed] The initial accumulation value.
  135009. * @return {Observable<R>} An Observable that emits a single value that is the
  135010. * result of accumulating the values emitted by the source Observable.
  135011. * @method reduce
  135012. * @owner Observable
  135013. */
  135014. function reduce(accumulator, seed) {
  135015. // providing a seed of `undefined` *should* be valid and trigger
  135016. // hasSeed! so don't use `seed !== undefined` checks!
  135017. // For this reason, we have to check it here at the original call site
  135018. // otherwise inside Operator/Subscriber we won't know if `undefined`
  135019. // means they didn't provide anything or if they literally provided `undefined`
  135020. if (arguments.length >= 2) {
  135021. return reduce_1.reduce(accumulator, seed)(this);
  135022. }
  135023. return reduce_1.reduce(accumulator)(this);
  135024. }
  135025. exports.reduce = reduce;
  135026. //# sourceMappingURL=reduce.js.map
  135027. /***/ }),
  135028. /* 568 */
  135029. /***/ (function(module, exports, __webpack_require__) {
  135030. "use strict";
  135031. var Observable_1 = __webpack_require__(0);
  135032. var repeat_1 = __webpack_require__(569);
  135033. Observable_1.Observable.prototype.repeat = repeat_1.repeat;
  135034. //# sourceMappingURL=repeat.js.map
  135035. /***/ }),
  135036. /* 569 */
  135037. /***/ (function(module, exports, __webpack_require__) {
  135038. "use strict";
  135039. var repeat_1 = __webpack_require__(268);
  135040. /**
  135041. * Returns an Observable that repeats the stream of items emitted by the source Observable at most count times.
  135042. *
  135043. * <img src="./img/repeat.png" width="100%">
  135044. *
  135045. * @param {number} [count] The number of times the source Observable items are repeated, a count of 0 will yield
  135046. * an empty Observable.
  135047. * @return {Observable} An Observable that repeats the stream of items emitted by the source Observable at most
  135048. * count times.
  135049. * @method repeat
  135050. * @owner Observable
  135051. */
  135052. function repeat(count) {
  135053. if (count === void 0) { count = -1; }
  135054. return repeat_1.repeat(count)(this);
  135055. }
  135056. exports.repeat = repeat;
  135057. //# sourceMappingURL=repeat.js.map
  135058. /***/ }),
  135059. /* 570 */
  135060. /***/ (function(module, exports, __webpack_require__) {
  135061. "use strict";
  135062. var Observable_1 = __webpack_require__(0);
  135063. var repeatWhen_1 = __webpack_require__(571);
  135064. Observable_1.Observable.prototype.repeatWhen = repeatWhen_1.repeatWhen;
  135065. //# sourceMappingURL=repeatWhen.js.map
  135066. /***/ }),
  135067. /* 571 */
  135068. /***/ (function(module, exports, __webpack_require__) {
  135069. "use strict";
  135070. var repeatWhen_1 = __webpack_require__(269);
  135071. /**
  135072. * Returns an Observable that mirrors the source Observable with the exception of a `complete`. If the source
  135073. * Observable calls `complete`, this method will emit to the Observable returned from `notifier`. If that Observable
  135074. * calls `complete` or `error`, then this method will call `complete` or `error` on the child subscription. Otherwise
  135075. * this method will resubscribe to the source Observable.
  135076. *
  135077. * <img src="./img/repeatWhen.png" width="100%">
  135078. *
  135079. * @param {function(notifications: Observable): Observable} notifier - Receives an Observable of notifications with
  135080. * which a user can `complete` or `error`, aborting the repetition.
  135081. * @return {Observable} The source Observable modified with repeat logic.
  135082. * @method repeatWhen
  135083. * @owner Observable
  135084. */
  135085. function repeatWhen(notifier) {
  135086. return repeatWhen_1.repeatWhen(notifier)(this);
  135087. }
  135088. exports.repeatWhen = repeatWhen;
  135089. //# sourceMappingURL=repeatWhen.js.map
  135090. /***/ }),
  135091. /* 572 */
  135092. /***/ (function(module, exports, __webpack_require__) {
  135093. "use strict";
  135094. var Observable_1 = __webpack_require__(0);
  135095. var retry_1 = __webpack_require__(573);
  135096. Observable_1.Observable.prototype.retry = retry_1.retry;
  135097. //# sourceMappingURL=retry.js.map
  135098. /***/ }),
  135099. /* 573 */
  135100. /***/ (function(module, exports, __webpack_require__) {
  135101. "use strict";
  135102. var retry_1 = __webpack_require__(270);
  135103. /**
  135104. * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable
  135105. * calls `error`, this method will resubscribe to the source Observable for a maximum of `count` resubscriptions (given
  135106. * as a number parameter) rather than propagating the `error` call.
  135107. *
  135108. * <img src="./img/retry.png" width="100%">
  135109. *
  135110. * Any and all items emitted by the source Observable will be emitted by the resulting Observable, even those emitted
  135111. * during failed subscriptions. For example, if an Observable fails at first but emits [1, 2] then succeeds the second
  135112. * time and emits: [1, 2, 3, 4, 5] then the complete stream of emissions and notifications
  135113. * would be: [1, 2, 1, 2, 3, 4, 5, `complete`].
  135114. * @param {number} count - Number of retry attempts before failing.
  135115. * @return {Observable} The source Observable modified with the retry logic.
  135116. * @method retry
  135117. * @owner Observable
  135118. */
  135119. function retry(count) {
  135120. if (count === void 0) { count = -1; }
  135121. return retry_1.retry(count)(this);
  135122. }
  135123. exports.retry = retry;
  135124. //# sourceMappingURL=retry.js.map
  135125. /***/ }),
  135126. /* 574 */
  135127. /***/ (function(module, exports, __webpack_require__) {
  135128. "use strict";
  135129. var Observable_1 = __webpack_require__(0);
  135130. var retryWhen_1 = __webpack_require__(575);
  135131. Observable_1.Observable.prototype.retryWhen = retryWhen_1.retryWhen;
  135132. //# sourceMappingURL=retryWhen.js.map
  135133. /***/ }),
  135134. /* 575 */
  135135. /***/ (function(module, exports, __webpack_require__) {
  135136. "use strict";
  135137. var retryWhen_1 = __webpack_require__(271);
  135138. /**
  135139. * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable
  135140. * calls `error`, this method will emit the Throwable that caused the error to the Observable returned from `notifier`.
  135141. * If that Observable calls `complete` or `error` then this method will call `complete` or `error` on the child
  135142. * subscription. Otherwise this method will resubscribe to the source Observable.
  135143. *
  135144. * <img src="./img/retryWhen.png" width="100%">
  135145. *
  135146. * @param {function(errors: Observable): Observable} notifier - Receives an Observable of notifications with which a
  135147. * user can `complete` or `error`, aborting the retry.
  135148. * @return {Observable} The source Observable modified with retry logic.
  135149. * @method retryWhen
  135150. * @owner Observable
  135151. */
  135152. function retryWhen(notifier) {
  135153. return retryWhen_1.retryWhen(notifier)(this);
  135154. }
  135155. exports.retryWhen = retryWhen;
  135156. //# sourceMappingURL=retryWhen.js.map
  135157. /***/ }),
  135158. /* 576 */
  135159. /***/ (function(module, exports, __webpack_require__) {
  135160. "use strict";
  135161. var Observable_1 = __webpack_require__(0);
  135162. var sample_1 = __webpack_require__(577);
  135163. Observable_1.Observable.prototype.sample = sample_1.sample;
  135164. //# sourceMappingURL=sample.js.map
  135165. /***/ }),
  135166. /* 577 */
  135167. /***/ (function(module, exports, __webpack_require__) {
  135168. "use strict";
  135169. var sample_1 = __webpack_require__(272);
  135170. /**
  135171. * Emits the most recently emitted value from the source Observable whenever
  135172. * another Observable, the `notifier`, emits.
  135173. *
  135174. * <span class="informal">It's like {@link sampleTime}, but samples whenever
  135175. * the `notifier` Observable emits something.</span>
  135176. *
  135177. * <img src="./img/sample.png" width="100%">
  135178. *
  135179. * Whenever the `notifier` Observable emits a value or completes, `sample`
  135180. * looks at the source Observable and emits whichever value it has most recently
  135181. * emitted since the previous sampling, unless the source has not emitted
  135182. * anything since the previous sampling. The `notifier` is subscribed to as soon
  135183. * as the output Observable is subscribed.
  135184. *
  135185. * @example <caption>On every click, sample the most recent "seconds" timer</caption>
  135186. * var seconds = Rx.Observable.interval(1000);
  135187. * var clicks = Rx.Observable.fromEvent(document, 'click');
  135188. * var result = seconds.sample(clicks);
  135189. * result.subscribe(x => console.log(x));
  135190. *
  135191. * @see {@link audit}
  135192. * @see {@link debounce}
  135193. * @see {@link sampleTime}
  135194. * @see {@link throttle}
  135195. *
  135196. * @param {Observable<any>} notifier The Observable to use for sampling the
  135197. * source Observable.
  135198. * @return {Observable<T>} An Observable that emits the results of sampling the
  135199. * values emitted by the source Observable whenever the notifier Observable
  135200. * emits value or completes.
  135201. * @method sample
  135202. * @owner Observable
  135203. */
  135204. function sample(notifier) {
  135205. return sample_1.sample(notifier)(this);
  135206. }
  135207. exports.sample = sample;
  135208. //# sourceMappingURL=sample.js.map
  135209. /***/ }),
  135210. /* 578 */
  135211. /***/ (function(module, exports, __webpack_require__) {
  135212. "use strict";
  135213. var Observable_1 = __webpack_require__(0);
  135214. var sampleTime_1 = __webpack_require__(579);
  135215. Observable_1.Observable.prototype.sampleTime = sampleTime_1.sampleTime;
  135216. //# sourceMappingURL=sampleTime.js.map
  135217. /***/ }),
  135218. /* 579 */
  135219. /***/ (function(module, exports, __webpack_require__) {
  135220. "use strict";
  135221. var async_1 = __webpack_require__(10);
  135222. var sampleTime_1 = __webpack_require__(273);
  135223. /**
  135224. * Emits the most recently emitted value from the source Observable within
  135225. * periodic time intervals.
  135226. *
  135227. * <span class="informal">Samples the source Observable at periodic time
  135228. * intervals, emitting what it samples.</span>
  135229. *
  135230. * <img src="./img/sampleTime.png" width="100%">
  135231. *
  135232. * `sampleTime` periodically looks at the source Observable and emits whichever
  135233. * value it has most recently emitted since the previous sampling, unless the
  135234. * source has not emitted anything since the previous sampling. The sampling
  135235. * happens periodically in time every `period` milliseconds (or the time unit
  135236. * defined by the optional `scheduler` argument). The sampling starts as soon as
  135237. * the output Observable is subscribed.
  135238. *
  135239. * @example <caption>Every second, emit the most recent click at most once</caption>
  135240. * var clicks = Rx.Observable.fromEvent(document, 'click');
  135241. * var result = clicks.sampleTime(1000);
  135242. * result.subscribe(x => console.log(x));
  135243. *
  135244. * @see {@link auditTime}
  135245. * @see {@link debounceTime}
  135246. * @see {@link delay}
  135247. * @see {@link sample}
  135248. * @see {@link throttleTime}
  135249. *
  135250. * @param {number} period The sampling period expressed in milliseconds or the
  135251. * time unit determined internally by the optional `scheduler`.
  135252. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  135253. * managing the timers that handle the sampling.
  135254. * @return {Observable<T>} An Observable that emits the results of sampling the
  135255. * values emitted by the source Observable at the specified time interval.
  135256. * @method sampleTime
  135257. * @owner Observable
  135258. */
  135259. function sampleTime(period, scheduler) {
  135260. if (scheduler === void 0) { scheduler = async_1.async; }
  135261. return sampleTime_1.sampleTime(period, scheduler)(this);
  135262. }
  135263. exports.sampleTime = sampleTime;
  135264. //# sourceMappingURL=sampleTime.js.map
  135265. /***/ }),
  135266. /* 580 */
  135267. /***/ (function(module, exports, __webpack_require__) {
  135268. "use strict";
  135269. var Observable_1 = __webpack_require__(0);
  135270. var scan_1 = __webpack_require__(581);
  135271. Observable_1.Observable.prototype.scan = scan_1.scan;
  135272. //# sourceMappingURL=scan.js.map
  135273. /***/ }),
  135274. /* 581 */
  135275. /***/ (function(module, exports, __webpack_require__) {
  135276. "use strict";
  135277. var scan_1 = __webpack_require__(123);
  135278. /* tslint:enable:max-line-length */
  135279. /**
  135280. * Applies an accumulator function over the source Observable, and returns each
  135281. * intermediate result, with an optional seed value.
  135282. *
  135283. * <span class="informal">It's like {@link reduce}, but emits the current
  135284. * accumulation whenever the source emits a value.</span>
  135285. *
  135286. * <img src="./img/scan.png" width="100%">
  135287. *
  135288. * Combines together all values emitted on the source, using an accumulator
  135289. * function that knows how to join a new source value into the accumulation from
  135290. * the past. Is similar to {@link reduce}, but emits the intermediate
  135291. * accumulations.
  135292. *
  135293. * Returns an Observable that applies a specified `accumulator` function to each
  135294. * item emitted by the source Observable. If a `seed` value is specified, then
  135295. * that value will be used as the initial value for the accumulator. If no seed
  135296. * value is specified, the first item of the source is used as the seed.
  135297. *
  135298. * @example <caption>Count the number of click events</caption>
  135299. * var clicks = Rx.Observable.fromEvent(document, 'click');
  135300. * var ones = clicks.mapTo(1);
  135301. * var seed = 0;
  135302. * var count = ones.scan((acc, one) => acc + one, seed);
  135303. * count.subscribe(x => console.log(x));
  135304. *
  135305. * @see {@link expand}
  135306. * @see {@link mergeScan}
  135307. * @see {@link reduce}
  135308. *
  135309. * @param {function(acc: R, value: T, index: number): R} accumulator
  135310. * The accumulator function called on each source value.
  135311. * @param {T|R} [seed] The initial accumulation value.
  135312. * @return {Observable<R>} An observable of the accumulated values.
  135313. * @method scan
  135314. * @owner Observable
  135315. */
  135316. function scan(accumulator, seed) {
  135317. if (arguments.length >= 2) {
  135318. return scan_1.scan(accumulator, seed)(this);
  135319. }
  135320. return scan_1.scan(accumulator)(this);
  135321. }
  135322. exports.scan = scan;
  135323. //# sourceMappingURL=scan.js.map
  135324. /***/ }),
  135325. /* 582 */
  135326. /***/ (function(module, exports, __webpack_require__) {
  135327. "use strict";
  135328. var Observable_1 = __webpack_require__(0);
  135329. var sequenceEqual_1 = __webpack_require__(583);
  135330. Observable_1.Observable.prototype.sequenceEqual = sequenceEqual_1.sequenceEqual;
  135331. //# sourceMappingURL=sequenceEqual.js.map
  135332. /***/ }),
  135333. /* 583 */
  135334. /***/ (function(module, exports, __webpack_require__) {
  135335. "use strict";
  135336. var sequenceEqual_1 = __webpack_require__(274);
  135337. /**
  135338. * Compares all values of two observables in sequence using an optional comparor function
  135339. * and returns an observable of a single boolean value representing whether or not the two sequences
  135340. * are equal.
  135341. *
  135342. * <span class="informal">Checks to see of all values emitted by both observables are equal, in order.</span>
  135343. *
  135344. * <img src="./img/sequenceEqual.png" width="100%">
  135345. *
  135346. * `sequenceEqual` subscribes to two observables and buffers incoming values from each observable. Whenever either
  135347. * observable emits a value, the value is buffered and the buffers are shifted and compared from the bottom
  135348. * up; If any value pair doesn't match, the returned observable will emit `false` and complete. If one of the
  135349. * observables completes, the operator will wait for the other observable to complete; If the other
  135350. * observable emits before completing, the returned observable will emit `false` and complete. If one observable never
  135351. * completes or emits after the other complets, the returned observable will never complete.
  135352. *
  135353. * @example <caption>figure out if the Konami code matches</caption>
  135354. * var code = Rx.Observable.from([
  135355. * "ArrowUp",
  135356. * "ArrowUp",
  135357. * "ArrowDown",
  135358. * "ArrowDown",
  135359. * "ArrowLeft",
  135360. * "ArrowRight",
  135361. * "ArrowLeft",
  135362. * "ArrowRight",
  135363. * "KeyB",
  135364. * "KeyA",
  135365. * "Enter" // no start key, clearly.
  135366. * ]);
  135367. *
  135368. * var keys = Rx.Observable.fromEvent(document, 'keyup')
  135369. * .map(e => e.code);
  135370. * var matches = keys.bufferCount(11, 1)
  135371. * .mergeMap(
  135372. * last11 =>
  135373. * Rx.Observable.from(last11)
  135374. * .sequenceEqual(code)
  135375. * );
  135376. * matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));
  135377. *
  135378. * @see {@link combineLatest}
  135379. * @see {@link zip}
  135380. * @see {@link withLatestFrom}
  135381. *
  135382. * @param {Observable} compareTo The observable sequence to compare the source sequence to.
  135383. * @param {function} [comparor] An optional function to compare each value pair
  135384. * @return {Observable} An Observable of a single boolean value representing whether or not
  135385. * the values emitted by both observables were equal in sequence.
  135386. * @method sequenceEqual
  135387. * @owner Observable
  135388. */
  135389. function sequenceEqual(compareTo, comparor) {
  135390. return sequenceEqual_1.sequenceEqual(compareTo, comparor)(this);
  135391. }
  135392. exports.sequenceEqual = sequenceEqual;
  135393. //# sourceMappingURL=sequenceEqual.js.map
  135394. /***/ }),
  135395. /* 584 */
  135396. /***/ (function(module, exports, __webpack_require__) {
  135397. "use strict";
  135398. var Observable_1 = __webpack_require__(0);
  135399. var share_1 = __webpack_require__(160);
  135400. Observable_1.Observable.prototype.share = share_1.share;
  135401. //# sourceMappingURL=share.js.map
  135402. /***/ }),
  135403. /* 585 */
  135404. /***/ (function(module, exports, __webpack_require__) {
  135405. "use strict";
  135406. var Observable_1 = __webpack_require__(0);
  135407. var shareReplay_1 = __webpack_require__(586);
  135408. Observable_1.Observable.prototype.shareReplay = shareReplay_1.shareReplay;
  135409. //# sourceMappingURL=shareReplay.js.map
  135410. /***/ }),
  135411. /* 586 */
  135412. /***/ (function(module, exports, __webpack_require__) {
  135413. "use strict";
  135414. var shareReplay_1 = __webpack_require__(275);
  135415. /**
  135416. * @method shareReplay
  135417. * @owner Observable
  135418. */
  135419. function shareReplay(bufferSize, windowTime, scheduler) {
  135420. return shareReplay_1.shareReplay(bufferSize, windowTime, scheduler)(this);
  135421. }
  135422. exports.shareReplay = shareReplay;
  135423. ;
  135424. //# sourceMappingURL=shareReplay.js.map
  135425. /***/ }),
  135426. /* 587 */
  135427. /***/ (function(module, exports, __webpack_require__) {
  135428. "use strict";
  135429. var Observable_1 = __webpack_require__(0);
  135430. var single_1 = __webpack_require__(588);
  135431. Observable_1.Observable.prototype.single = single_1.single;
  135432. //# sourceMappingURL=single.js.map
  135433. /***/ }),
  135434. /* 588 */
  135435. /***/ (function(module, exports, __webpack_require__) {
  135436. "use strict";
  135437. var single_1 = __webpack_require__(276);
  135438. /**
  135439. * Returns an Observable that emits the single item emitted by the source Observable that matches a specified
  135440. * predicate, if that Observable emits one such item. If the source Observable emits more than one such item or no
  135441. * such items, notify of an IllegalArgumentException or NoSuchElementException respectively.
  135442. *
  135443. * <img src="./img/single.png" width="100%">
  135444. *
  135445. * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`
  135446. * callback if the Observable completes before any `next` notification was sent.
  135447. * @param {Function} predicate - A predicate function to evaluate items emitted by the source Observable.
  135448. * @return {Observable<T>} An Observable that emits the single item emitted by the source Observable that matches
  135449. * the predicate.
  135450. .
  135451. * @method single
  135452. * @owner Observable
  135453. */
  135454. function single(predicate) {
  135455. return single_1.single(predicate)(this);
  135456. }
  135457. exports.single = single;
  135458. //# sourceMappingURL=single.js.map
  135459. /***/ }),
  135460. /* 589 */
  135461. /***/ (function(module, exports, __webpack_require__) {
  135462. "use strict";
  135463. var Observable_1 = __webpack_require__(0);
  135464. var skip_1 = __webpack_require__(590);
  135465. Observable_1.Observable.prototype.skip = skip_1.skip;
  135466. //# sourceMappingURL=skip.js.map
  135467. /***/ }),
  135468. /* 590 */
  135469. /***/ (function(module, exports, __webpack_require__) {
  135470. "use strict";
  135471. var skip_1 = __webpack_require__(277);
  135472. /**
  135473. * Returns an Observable that skips the first `count` items emitted by the source Observable.
  135474. *
  135475. * <img src="./img/skip.png" width="100%">
  135476. *
  135477. * @param {Number} count - The number of times, items emitted by source Observable should be skipped.
  135478. * @return {Observable} An Observable that skips values emitted by the source Observable.
  135479. *
  135480. * @method skip
  135481. * @owner Observable
  135482. */
  135483. function skip(count) {
  135484. return skip_1.skip(count)(this);
  135485. }
  135486. exports.skip = skip;
  135487. //# sourceMappingURL=skip.js.map
  135488. /***/ }),
  135489. /* 591 */
  135490. /***/ (function(module, exports, __webpack_require__) {
  135491. "use strict";
  135492. var Observable_1 = __webpack_require__(0);
  135493. var skipLast_1 = __webpack_require__(592);
  135494. Observable_1.Observable.prototype.skipLast = skipLast_1.skipLast;
  135495. //# sourceMappingURL=skipLast.js.map
  135496. /***/ }),
  135497. /* 592 */
  135498. /***/ (function(module, exports, __webpack_require__) {
  135499. "use strict";
  135500. var skipLast_1 = __webpack_require__(278);
  135501. /**
  135502. * Skip the last `count` values emitted by the source Observable.
  135503. *
  135504. * <img src="./img/skipLast.png" width="100%">
  135505. *
  135506. * `skipLast` returns an Observable that accumulates a queue with a length
  135507. * enough to store the first `count` values. As more values are received,
  135508. * values are taken from the front of the queue and produced on the result
  135509. * sequence. This causes values to be delayed.
  135510. *
  135511. * @example <caption>Skip the last 2 values of an Observable with many values</caption>
  135512. * var many = Rx.Observable.range(1, 5);
  135513. * var skipLastTwo = many.skipLast(2);
  135514. * skipLastTwo.subscribe(x => console.log(x));
  135515. *
  135516. * // Results in:
  135517. * // 1 2 3
  135518. *
  135519. * @see {@link skip}
  135520. * @see {@link skipUntil}
  135521. * @see {@link skipWhile}
  135522. * @see {@link take}
  135523. *
  135524. * @throws {ArgumentOutOfRangeError} When using `skipLast(i)`, it throws
  135525. * ArgumentOutOrRangeError if `i < 0`.
  135526. *
  135527. * @param {number} count Number of elements to skip from the end of the source Observable.
  135528. * @returns {Observable<T>} An Observable that skips the last count values
  135529. * emitted by the source Observable.
  135530. * @method skipLast
  135531. * @owner Observable
  135532. */
  135533. function skipLast(count) {
  135534. return skipLast_1.skipLast(count)(this);
  135535. }
  135536. exports.skipLast = skipLast;
  135537. //# sourceMappingURL=skipLast.js.map
  135538. /***/ }),
  135539. /* 593 */
  135540. /***/ (function(module, exports, __webpack_require__) {
  135541. "use strict";
  135542. var Observable_1 = __webpack_require__(0);
  135543. var skipUntil_1 = __webpack_require__(594);
  135544. Observable_1.Observable.prototype.skipUntil = skipUntil_1.skipUntil;
  135545. //# sourceMappingURL=skipUntil.js.map
  135546. /***/ }),
  135547. /* 594 */
  135548. /***/ (function(module, exports, __webpack_require__) {
  135549. "use strict";
  135550. var skipUntil_1 = __webpack_require__(279);
  135551. /**
  135552. * Returns an Observable that skips items emitted by the source Observable until a second Observable emits an item.
  135553. *
  135554. * <img src="./img/skipUntil.png" width="100%">
  135555. *
  135556. * @param {Observable} notifier - The second Observable that has to emit an item before the source Observable's elements begin to
  135557. * be mirrored by the resulting Observable.
  135558. * @return {Observable<T>} An Observable that skips items from the source Observable until the second Observable emits
  135559. * an item, then emits the remaining items.
  135560. * @method skipUntil
  135561. * @owner Observable
  135562. */
  135563. function skipUntil(notifier) {
  135564. return skipUntil_1.skipUntil(notifier)(this);
  135565. }
  135566. exports.skipUntil = skipUntil;
  135567. //# sourceMappingURL=skipUntil.js.map
  135568. /***/ }),
  135569. /* 595 */
  135570. /***/ (function(module, exports, __webpack_require__) {
  135571. "use strict";
  135572. var Observable_1 = __webpack_require__(0);
  135573. var skipWhile_1 = __webpack_require__(596);
  135574. Observable_1.Observable.prototype.skipWhile = skipWhile_1.skipWhile;
  135575. //# sourceMappingURL=skipWhile.js.map
  135576. /***/ }),
  135577. /* 596 */
  135578. /***/ (function(module, exports, __webpack_require__) {
  135579. "use strict";
  135580. var skipWhile_1 = __webpack_require__(280);
  135581. /**
  135582. * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds
  135583. * true, but emits all further source items as soon as the condition becomes false.
  135584. *
  135585. * <img src="./img/skipWhile.png" width="100%">
  135586. *
  135587. * @param {Function} predicate - A function to test each item emitted from the source Observable.
  135588. * @return {Observable<T>} An Observable that begins emitting items emitted by the source Observable when the
  135589. * specified predicate becomes false.
  135590. * @method skipWhile
  135591. * @owner Observable
  135592. */
  135593. function skipWhile(predicate) {
  135594. return skipWhile_1.skipWhile(predicate)(this);
  135595. }
  135596. exports.skipWhile = skipWhile;
  135597. //# sourceMappingURL=skipWhile.js.map
  135598. /***/ }),
  135599. /* 597 */
  135600. /***/ (function(module, exports, __webpack_require__) {
  135601. "use strict";
  135602. var Observable_1 = __webpack_require__(0);
  135603. var startWith_1 = __webpack_require__(598);
  135604. Observable_1.Observable.prototype.startWith = startWith_1.startWith;
  135605. //# sourceMappingURL=startWith.js.map
  135606. /***/ }),
  135607. /* 598 */
  135608. /***/ (function(module, exports, __webpack_require__) {
  135609. "use strict";
  135610. var startWith_1 = __webpack_require__(281);
  135611. /* tslint:enable:max-line-length */
  135612. /**
  135613. * Returns an Observable that emits the items you specify as arguments before it begins to emit
  135614. * items emitted by the source Observable.
  135615. *
  135616. * <img src="./img/startWith.png" width="100%">
  135617. *
  135618. * @param {...T} values - Items you want the modified Observable to emit first.
  135619. * @param {Scheduler} [scheduler] - A {@link IScheduler} to use for scheduling
  135620. * the emissions of the `next` notifications.
  135621. * @return {Observable} An Observable that emits the items in the specified Iterable and then emits the items
  135622. * emitted by the source Observable.
  135623. * @method startWith
  135624. * @owner Observable
  135625. */
  135626. function startWith() {
  135627. var array = [];
  135628. for (var _i = 0; _i < arguments.length; _i++) {
  135629. array[_i - 0] = arguments[_i];
  135630. }
  135631. return startWith_1.startWith.apply(void 0, array)(this);
  135632. }
  135633. exports.startWith = startWith;
  135634. //# sourceMappingURL=startWith.js.map
  135635. /***/ }),
  135636. /* 599 */
  135637. /***/ (function(module, exports, __webpack_require__) {
  135638. "use strict";
  135639. var Observable_1 = __webpack_require__(0);
  135640. var subscribeOn_1 = __webpack_require__(600);
  135641. Observable_1.Observable.prototype.subscribeOn = subscribeOn_1.subscribeOn;
  135642. //# sourceMappingURL=subscribeOn.js.map
  135643. /***/ }),
  135644. /* 600 */
  135645. /***/ (function(module, exports, __webpack_require__) {
  135646. "use strict";
  135647. var subscribeOn_1 = __webpack_require__(601);
  135648. /**
  135649. * Asynchronously subscribes Observers to this Observable on the specified IScheduler.
  135650. *
  135651. * <img src="./img/subscribeOn.png" width="100%">
  135652. *
  135653. * @param {Scheduler} scheduler - The IScheduler to perform subscription actions on.
  135654. * @return {Observable<T>} The source Observable modified so that its subscriptions happen on the specified IScheduler.
  135655. .
  135656. * @method subscribeOn
  135657. * @owner Observable
  135658. */
  135659. function subscribeOn(scheduler, delay) {
  135660. if (delay === void 0) { delay = 0; }
  135661. return subscribeOn_1.subscribeOn(scheduler, delay)(this);
  135662. }
  135663. exports.subscribeOn = subscribeOn;
  135664. //# sourceMappingURL=subscribeOn.js.map
  135665. /***/ }),
  135666. /* 601 */
  135667. /***/ (function(module, exports, __webpack_require__) {
  135668. "use strict";
  135669. var SubscribeOnObservable_1 = __webpack_require__(602);
  135670. /**
  135671. * Asynchronously subscribes Observers to this Observable on the specified IScheduler.
  135672. *
  135673. * <img src="./img/subscribeOn.png" width="100%">
  135674. *
  135675. * @param {Scheduler} scheduler - The IScheduler to perform subscription actions on.
  135676. * @return {Observable<T>} The source Observable modified so that its subscriptions happen on the specified IScheduler.
  135677. .
  135678. * @method subscribeOn
  135679. * @owner Observable
  135680. */
  135681. function subscribeOn(scheduler, delay) {
  135682. if (delay === void 0) { delay = 0; }
  135683. return function subscribeOnOperatorFunction(source) {
  135684. return source.lift(new SubscribeOnOperator(scheduler, delay));
  135685. };
  135686. }
  135687. exports.subscribeOn = subscribeOn;
  135688. var SubscribeOnOperator = (function () {
  135689. function SubscribeOnOperator(scheduler, delay) {
  135690. this.scheduler = scheduler;
  135691. this.delay = delay;
  135692. }
  135693. SubscribeOnOperator.prototype.call = function (subscriber, source) {
  135694. return new SubscribeOnObservable_1.SubscribeOnObservable(source, this.delay, this.scheduler).subscribe(subscriber);
  135695. };
  135696. return SubscribeOnOperator;
  135697. }());
  135698. //# sourceMappingURL=subscribeOn.js.map
  135699. /***/ }),
  135700. /* 602 */
  135701. /***/ (function(module, exports, __webpack_require__) {
  135702. "use strict";
  135703. var __extends = (this && this.__extends) || function (d, b) {
  135704. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  135705. function __() { this.constructor = d; }
  135706. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  135707. };
  135708. var Observable_1 = __webpack_require__(0);
  135709. var asap_1 = __webpack_require__(282);
  135710. var isNumeric_1 = __webpack_require__(56);
  135711. /**
  135712. * We need this JSDoc comment for affecting ESDoc.
  135713. * @extends {Ignored}
  135714. * @hide true
  135715. */
  135716. var SubscribeOnObservable = (function (_super) {
  135717. __extends(SubscribeOnObservable, _super);
  135718. function SubscribeOnObservable(source, delayTime, scheduler) {
  135719. if (delayTime === void 0) { delayTime = 0; }
  135720. if (scheduler === void 0) { scheduler = asap_1.asap; }
  135721. _super.call(this);
  135722. this.source = source;
  135723. this.delayTime = delayTime;
  135724. this.scheduler = scheduler;
  135725. if (!isNumeric_1.isNumeric(delayTime) || delayTime < 0) {
  135726. this.delayTime = 0;
  135727. }
  135728. if (!scheduler || typeof scheduler.schedule !== 'function') {
  135729. this.scheduler = asap_1.asap;
  135730. }
  135731. }
  135732. SubscribeOnObservable.create = function (source, delay, scheduler) {
  135733. if (delay === void 0) { delay = 0; }
  135734. if (scheduler === void 0) { scheduler = asap_1.asap; }
  135735. return new SubscribeOnObservable(source, delay, scheduler);
  135736. };
  135737. SubscribeOnObservable.dispatch = function (arg) {
  135738. var source = arg.source, subscriber = arg.subscriber;
  135739. return this.add(source.subscribe(subscriber));
  135740. };
  135741. /** @deprecated internal use only */ SubscribeOnObservable.prototype._subscribe = function (subscriber) {
  135742. var delay = this.delayTime;
  135743. var source = this.source;
  135744. var scheduler = this.scheduler;
  135745. return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
  135746. source: source, subscriber: subscriber
  135747. });
  135748. };
  135749. return SubscribeOnObservable;
  135750. }(Observable_1.Observable));
  135751. exports.SubscribeOnObservable = SubscribeOnObservable;
  135752. //# sourceMappingURL=SubscribeOnObservable.js.map
  135753. /***/ }),
  135754. /* 603 */
  135755. /***/ (function(module, exports, __webpack_require__) {
  135756. "use strict";
  135757. var __extends = (this && this.__extends) || function (d, b) {
  135758. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  135759. function __() { this.constructor = d; }
  135760. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  135761. };
  135762. var Immediate_1 = __webpack_require__(604);
  135763. var AsyncAction_1 = __webpack_require__(57);
  135764. /**
  135765. * We need this JSDoc comment for affecting ESDoc.
  135766. * @ignore
  135767. * @extends {Ignored}
  135768. */
  135769. var AsapAction = (function (_super) {
  135770. __extends(AsapAction, _super);
  135771. function AsapAction(scheduler, work) {
  135772. _super.call(this, scheduler, work);
  135773. this.scheduler = scheduler;
  135774. this.work = work;
  135775. }
  135776. AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
  135777. if (delay === void 0) { delay = 0; }
  135778. // If delay is greater than 0, request as an async action.
  135779. if (delay !== null && delay > 0) {
  135780. return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
  135781. }
  135782. // Push the action to the end of the scheduler queue.
  135783. scheduler.actions.push(this);
  135784. // If a microtask has already been scheduled, don't schedule another
  135785. // one. If a microtask hasn't been scheduled yet, schedule one now. Return
  135786. // the current scheduled microtask id.
  135787. return scheduler.scheduled || (scheduler.scheduled = Immediate_1.Immediate.setImmediate(scheduler.flush.bind(scheduler, null)));
  135788. };
  135789. AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
  135790. if (delay === void 0) { delay = 0; }
  135791. // If delay exists and is greater than 0, or if the delay is null (the
  135792. // action wasn't rescheduled) but was originally scheduled as an async
  135793. // action, then recycle as an async action.
  135794. if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
  135795. return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
  135796. }
  135797. // If the scheduler queue is empty, cancel the requested microtask and
  135798. // set the scheduled flag to undefined so the next AsapAction will schedule
  135799. // its own.
  135800. if (scheduler.actions.length === 0) {
  135801. Immediate_1.Immediate.clearImmediate(id);
  135802. scheduler.scheduled = undefined;
  135803. }
  135804. // Return undefined so the action knows to request a new async id if it's rescheduled.
  135805. return undefined;
  135806. };
  135807. return AsapAction;
  135808. }(AsyncAction_1.AsyncAction));
  135809. exports.AsapAction = AsapAction;
  135810. //# sourceMappingURL=AsapAction.js.map
  135811. /***/ }),
  135812. /* 604 */
  135813. /***/ (function(module, exports, __webpack_require__) {
  135814. "use strict";
  135815. /* WEBPACK VAR INJECTION */(function(clearImmediate, setImmediate) {/**
  135816. Some credit for this helper goes to http://github.com/YuzuJS/setImmediate
  135817. */
  135818. var root_1 = __webpack_require__(19);
  135819. var ImmediateDefinition = (function () {
  135820. function ImmediateDefinition(root) {
  135821. this.root = root;
  135822. if (root.setImmediate && typeof root.setImmediate === 'function') {
  135823. this.setImmediate = root.setImmediate.bind(root);
  135824. this.clearImmediate = root.clearImmediate.bind(root);
  135825. }
  135826. else {
  135827. this.nextHandle = 1;
  135828. this.tasksByHandle = {};
  135829. this.currentlyRunningATask = false;
  135830. // Don't get fooled by e.g. browserify environments.
  135831. if (this.canUseProcessNextTick()) {
  135832. // For Node.js before 0.9
  135833. this.setImmediate = this.createProcessNextTickSetImmediate();
  135834. }
  135835. else if (this.canUsePostMessage()) {
  135836. // For non-IE10 modern browsers
  135837. this.setImmediate = this.createPostMessageSetImmediate();
  135838. }
  135839. else if (this.canUseMessageChannel()) {
  135840. // For web workers, where supported
  135841. this.setImmediate = this.createMessageChannelSetImmediate();
  135842. }
  135843. else if (this.canUseReadyStateChange()) {
  135844. // For IE 6–8
  135845. this.setImmediate = this.createReadyStateChangeSetImmediate();
  135846. }
  135847. else {
  135848. // For older browsers
  135849. this.setImmediate = this.createSetTimeoutSetImmediate();
  135850. }
  135851. var ci = function clearImmediate(handle) {
  135852. delete clearImmediate.instance.tasksByHandle[handle];
  135853. };
  135854. ci.instance = this;
  135855. this.clearImmediate = ci;
  135856. }
  135857. }
  135858. ImmediateDefinition.prototype.identify = function (o) {
  135859. return this.root.Object.prototype.toString.call(o);
  135860. };
  135861. ImmediateDefinition.prototype.canUseProcessNextTick = function () {
  135862. return this.identify(this.root.process) === '[object process]';
  135863. };
  135864. ImmediateDefinition.prototype.canUseMessageChannel = function () {
  135865. return Boolean(this.root.MessageChannel);
  135866. };
  135867. ImmediateDefinition.prototype.canUseReadyStateChange = function () {
  135868. var document = this.root.document;
  135869. return Boolean(document && 'onreadystatechange' in document.createElement('script'));
  135870. };
  135871. ImmediateDefinition.prototype.canUsePostMessage = function () {
  135872. var root = this.root;
  135873. // The test against `importScripts` prevents this implementation from being installed inside a web worker,
  135874. // where `root.postMessage` means something completely different and can't be used for this purpose.
  135875. if (root.postMessage && !root.importScripts) {
  135876. var postMessageIsAsynchronous_1 = true;
  135877. var oldOnMessage = root.onmessage;
  135878. root.onmessage = function () {
  135879. postMessageIsAsynchronous_1 = false;
  135880. };
  135881. root.postMessage('', '*');
  135882. root.onmessage = oldOnMessage;
  135883. return postMessageIsAsynchronous_1;
  135884. }
  135885. return false;
  135886. };
  135887. // This function accepts the same arguments as setImmediate, but
  135888. // returns a function that requires no arguments.
  135889. ImmediateDefinition.prototype.partiallyApplied = function (handler) {
  135890. var args = [];
  135891. for (var _i = 1; _i < arguments.length; _i++) {
  135892. args[_i - 1] = arguments[_i];
  135893. }
  135894. var fn = function result() {
  135895. var _a = result, handler = _a.handler, args = _a.args;
  135896. if (typeof handler === 'function') {
  135897. handler.apply(undefined, args);
  135898. }
  135899. else {
  135900. (new Function('' + handler))();
  135901. }
  135902. };
  135903. fn.handler = handler;
  135904. fn.args = args;
  135905. return fn;
  135906. };
  135907. ImmediateDefinition.prototype.addFromSetImmediateArguments = function (args) {
  135908. this.tasksByHandle[this.nextHandle] = this.partiallyApplied.apply(undefined, args);
  135909. return this.nextHandle++;
  135910. };
  135911. ImmediateDefinition.prototype.createProcessNextTickSetImmediate = function () {
  135912. var fn = function setImmediate() {
  135913. var instance = setImmediate.instance;
  135914. var handle = instance.addFromSetImmediateArguments(arguments);
  135915. instance.root.process.nextTick(instance.partiallyApplied(instance.runIfPresent, handle));
  135916. return handle;
  135917. };
  135918. fn.instance = this;
  135919. return fn;
  135920. };
  135921. ImmediateDefinition.prototype.createPostMessageSetImmediate = function () {
  135922. // Installs an event handler on `global` for the `message` event: see
  135923. // * https://developer.mozilla.org/en/DOM/window.postMessage
  135924. // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
  135925. var root = this.root;
  135926. var messagePrefix = 'setImmediate$' + root.Math.random() + '$';
  135927. var onGlobalMessage = function globalMessageHandler(event) {
  135928. var instance = globalMessageHandler.instance;
  135929. if (event.source === root &&
  135930. typeof event.data === 'string' &&
  135931. event.data.indexOf(messagePrefix) === 0) {
  135932. instance.runIfPresent(+event.data.slice(messagePrefix.length));
  135933. }
  135934. };
  135935. onGlobalMessage.instance = this;
  135936. root.addEventListener('message', onGlobalMessage, false);
  135937. var fn = function setImmediate() {
  135938. var _a = setImmediate, messagePrefix = _a.messagePrefix, instance = _a.instance;
  135939. var handle = instance.addFromSetImmediateArguments(arguments);
  135940. instance.root.postMessage(messagePrefix + handle, '*');
  135941. return handle;
  135942. };
  135943. fn.instance = this;
  135944. fn.messagePrefix = messagePrefix;
  135945. return fn;
  135946. };
  135947. ImmediateDefinition.prototype.runIfPresent = function (handle) {
  135948. // From the spec: 'Wait until any invocations of this algorithm started before this one have completed.'
  135949. // So if we're currently running a task, we'll need to delay this invocation.
  135950. if (this.currentlyRunningATask) {
  135951. // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
  135952. // 'too much recursion' error.
  135953. this.root.setTimeout(this.partiallyApplied(this.runIfPresent, handle), 0);
  135954. }
  135955. else {
  135956. var task = this.tasksByHandle[handle];
  135957. if (task) {
  135958. this.currentlyRunningATask = true;
  135959. try {
  135960. task();
  135961. }
  135962. finally {
  135963. this.clearImmediate(handle);
  135964. this.currentlyRunningATask = false;
  135965. }
  135966. }
  135967. }
  135968. };
  135969. ImmediateDefinition.prototype.createMessageChannelSetImmediate = function () {
  135970. var _this = this;
  135971. var channel = new this.root.MessageChannel();
  135972. channel.port1.onmessage = function (event) {
  135973. var handle = event.data;
  135974. _this.runIfPresent(handle);
  135975. };
  135976. var fn = function setImmediate() {
  135977. var _a = setImmediate, channel = _a.channel, instance = _a.instance;
  135978. var handle = instance.addFromSetImmediateArguments(arguments);
  135979. channel.port2.postMessage(handle);
  135980. return handle;
  135981. };
  135982. fn.channel = channel;
  135983. fn.instance = this;
  135984. return fn;
  135985. };
  135986. ImmediateDefinition.prototype.createReadyStateChangeSetImmediate = function () {
  135987. var fn = function setImmediate() {
  135988. var instance = setImmediate.instance;
  135989. var root = instance.root;
  135990. var doc = root.document;
  135991. var html = doc.documentElement;
  135992. var handle = instance.addFromSetImmediateArguments(arguments);
  135993. // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
  135994. // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
  135995. var script = doc.createElement('script');
  135996. script.onreadystatechange = function () {
  135997. instance.runIfPresent(handle);
  135998. script.onreadystatechange = null;
  135999. html.removeChild(script);
  136000. script = null;
  136001. };
  136002. html.appendChild(script);
  136003. return handle;
  136004. };
  136005. fn.instance = this;
  136006. return fn;
  136007. };
  136008. ImmediateDefinition.prototype.createSetTimeoutSetImmediate = function () {
  136009. var fn = function setImmediate() {
  136010. var instance = setImmediate.instance;
  136011. var handle = instance.addFromSetImmediateArguments(arguments);
  136012. instance.root.setTimeout(instance.partiallyApplied(instance.runIfPresent, handle), 0);
  136013. return handle;
  136014. };
  136015. fn.instance = this;
  136016. return fn;
  136017. };
  136018. return ImmediateDefinition;
  136019. }());
  136020. exports.ImmediateDefinition = ImmediateDefinition;
  136021. exports.Immediate = new ImmediateDefinition(root_1.root);
  136022. //# sourceMappingURL=Immediate.js.map
  136023. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(283).clearImmediate, __webpack_require__(283).setImmediate))
  136024. /***/ }),
  136025. /* 605 */
  136026. /***/ (function(module, exports, __webpack_require__) {
  136027. /* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
  136028. "use strict";
  136029. if (global.setImmediate) {
  136030. return;
  136031. }
  136032. var nextHandle = 1; // Spec says greater than zero
  136033. var tasksByHandle = {};
  136034. var currentlyRunningATask = false;
  136035. var doc = global.document;
  136036. var registerImmediate;
  136037. function setImmediate(callback) {
  136038. // Callback can either be a function or a string
  136039. if (typeof callback !== "function") {
  136040. callback = new Function("" + callback);
  136041. }
  136042. // Copy function arguments
  136043. var args = new Array(arguments.length - 1);
  136044. for (var i = 0; i < args.length; i++) {
  136045. args[i] = arguments[i + 1];
  136046. }
  136047. // Store and register the task
  136048. var task = { callback: callback, args: args };
  136049. tasksByHandle[nextHandle] = task;
  136050. registerImmediate(nextHandle);
  136051. return nextHandle++;
  136052. }
  136053. function clearImmediate(handle) {
  136054. delete tasksByHandle[handle];
  136055. }
  136056. function run(task) {
  136057. var callback = task.callback;
  136058. var args = task.args;
  136059. switch (args.length) {
  136060. case 0:
  136061. callback();
  136062. break;
  136063. case 1:
  136064. callback(args[0]);
  136065. break;
  136066. case 2:
  136067. callback(args[0], args[1]);
  136068. break;
  136069. case 3:
  136070. callback(args[0], args[1], args[2]);
  136071. break;
  136072. default:
  136073. callback.apply(undefined, args);
  136074. break;
  136075. }
  136076. }
  136077. function runIfPresent(handle) {
  136078. // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
  136079. // So if we're currently running a task, we'll need to delay this invocation.
  136080. if (currentlyRunningATask) {
  136081. // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
  136082. // "too much recursion" error.
  136083. setTimeout(runIfPresent, 0, handle);
  136084. } else {
  136085. var task = tasksByHandle[handle];
  136086. if (task) {
  136087. currentlyRunningATask = true;
  136088. try {
  136089. run(task);
  136090. } finally {
  136091. clearImmediate(handle);
  136092. currentlyRunningATask = false;
  136093. }
  136094. }
  136095. }
  136096. }
  136097. function installNextTickImplementation() {
  136098. registerImmediate = function(handle) {
  136099. process.nextTick(function () { runIfPresent(handle); });
  136100. };
  136101. }
  136102. function canUsePostMessage() {
  136103. // The test against `importScripts` prevents this implementation from being installed inside a web worker,
  136104. // where `global.postMessage` means something completely different and can't be used for this purpose.
  136105. if (global.postMessage && !global.importScripts) {
  136106. var postMessageIsAsynchronous = true;
  136107. var oldOnMessage = global.onmessage;
  136108. global.onmessage = function() {
  136109. postMessageIsAsynchronous = false;
  136110. };
  136111. global.postMessage("", "*");
  136112. global.onmessage = oldOnMessage;
  136113. return postMessageIsAsynchronous;
  136114. }
  136115. }
  136116. function installPostMessageImplementation() {
  136117. // Installs an event handler on `global` for the `message` event: see
  136118. // * https://developer.mozilla.org/en/DOM/window.postMessage
  136119. // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
  136120. var messagePrefix = "setImmediate$" + Math.random() + "$";
  136121. var onGlobalMessage = function(event) {
  136122. if (event.source === global &&
  136123. typeof event.data === "string" &&
  136124. event.data.indexOf(messagePrefix) === 0) {
  136125. runIfPresent(+event.data.slice(messagePrefix.length));
  136126. }
  136127. };
  136128. if (global.addEventListener) {
  136129. global.addEventListener("message", onGlobalMessage, false);
  136130. } else {
  136131. global.attachEvent("onmessage", onGlobalMessage);
  136132. }
  136133. registerImmediate = function(handle) {
  136134. global.postMessage(messagePrefix + handle, "*");
  136135. };
  136136. }
  136137. function installMessageChannelImplementation() {
  136138. var channel = new MessageChannel();
  136139. channel.port1.onmessage = function(event) {
  136140. var handle = event.data;
  136141. runIfPresent(handle);
  136142. };
  136143. registerImmediate = function(handle) {
  136144. channel.port2.postMessage(handle);
  136145. };
  136146. }
  136147. function installReadyStateChangeImplementation() {
  136148. var html = doc.documentElement;
  136149. registerImmediate = function(handle) {
  136150. // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
  136151. // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
  136152. var script = doc.createElement("script");
  136153. script.onreadystatechange = function () {
  136154. runIfPresent(handle);
  136155. script.onreadystatechange = null;
  136156. html.removeChild(script);
  136157. script = null;
  136158. };
  136159. html.appendChild(script);
  136160. };
  136161. }
  136162. function installSetTimeoutImplementation() {
  136163. registerImmediate = function(handle) {
  136164. setTimeout(runIfPresent, 0, handle);
  136165. };
  136166. }
  136167. // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
  136168. var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
  136169. attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
  136170. // Don't get fooled by e.g. browserify environments.
  136171. if ({}.toString.call(global.process) === "[object process]") {
  136172. // For Node.js before 0.9
  136173. installNextTickImplementation();
  136174. } else if (canUsePostMessage()) {
  136175. // For non-IE10 modern browsers
  136176. installPostMessageImplementation();
  136177. } else if (global.MessageChannel) {
  136178. // For web workers, where supported
  136179. installMessageChannelImplementation();
  136180. } else if (doc && "onreadystatechange" in doc.createElement("script")) {
  136181. // For IE 6–8
  136182. installReadyStateChangeImplementation();
  136183. } else {
  136184. // For older browsers
  136185. installSetTimeoutImplementation();
  136186. }
  136187. attachTo.setImmediate = setImmediate;
  136188. attachTo.clearImmediate = clearImmediate;
  136189. }(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
  136190. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(61), __webpack_require__(606)))
  136191. /***/ }),
  136192. /* 606 */
  136193. /***/ (function(module, exports) {
  136194. // shim for using process in browser
  136195. var process = module.exports = {};
  136196. // cached from whatever global is present so that test runners that stub it
  136197. // don't break things. But we need to wrap it in a try catch in case it is
  136198. // wrapped in strict mode code which doesn't define any globals. It's inside a
  136199. // function because try/catches deoptimize in certain engines.
  136200. var cachedSetTimeout;
  136201. var cachedClearTimeout;
  136202. function defaultSetTimout() {
  136203. throw new Error('setTimeout has not been defined');
  136204. }
  136205. function defaultClearTimeout () {
  136206. throw new Error('clearTimeout has not been defined');
  136207. }
  136208. (function () {
  136209. try {
  136210. if (typeof setTimeout === 'function') {
  136211. cachedSetTimeout = setTimeout;
  136212. } else {
  136213. cachedSetTimeout = defaultSetTimout;
  136214. }
  136215. } catch (e) {
  136216. cachedSetTimeout = defaultSetTimout;
  136217. }
  136218. try {
  136219. if (typeof clearTimeout === 'function') {
  136220. cachedClearTimeout = clearTimeout;
  136221. } else {
  136222. cachedClearTimeout = defaultClearTimeout;
  136223. }
  136224. } catch (e) {
  136225. cachedClearTimeout = defaultClearTimeout;
  136226. }
  136227. } ())
  136228. function runTimeout(fun) {
  136229. if (cachedSetTimeout === setTimeout) {
  136230. //normal enviroments in sane situations
  136231. return setTimeout(fun, 0);
  136232. }
  136233. // if setTimeout wasn't available but was latter defined
  136234. if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  136235. cachedSetTimeout = setTimeout;
  136236. return setTimeout(fun, 0);
  136237. }
  136238. try {
  136239. // when when somebody has screwed with setTimeout but no I.E. maddness
  136240. return cachedSetTimeout(fun, 0);
  136241. } catch(e){
  136242. try {
  136243. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  136244. return cachedSetTimeout.call(null, fun, 0);
  136245. } catch(e){
  136246. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
  136247. return cachedSetTimeout.call(this, fun, 0);
  136248. }
  136249. }
  136250. }
  136251. function runClearTimeout(marker) {
  136252. if (cachedClearTimeout === clearTimeout) {
  136253. //normal enviroments in sane situations
  136254. return clearTimeout(marker);
  136255. }
  136256. // if clearTimeout wasn't available but was latter defined
  136257. if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  136258. cachedClearTimeout = clearTimeout;
  136259. return clearTimeout(marker);
  136260. }
  136261. try {
  136262. // when when somebody has screwed with setTimeout but no I.E. maddness
  136263. return cachedClearTimeout(marker);
  136264. } catch (e){
  136265. try {
  136266. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  136267. return cachedClearTimeout.call(null, marker);
  136268. } catch (e){
  136269. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
  136270. // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  136271. return cachedClearTimeout.call(this, marker);
  136272. }
  136273. }
  136274. }
  136275. var queue = [];
  136276. var draining = false;
  136277. var currentQueue;
  136278. var queueIndex = -1;
  136279. function cleanUpNextTick() {
  136280. if (!draining || !currentQueue) {
  136281. return;
  136282. }
  136283. draining = false;
  136284. if (currentQueue.length) {
  136285. queue = currentQueue.concat(queue);
  136286. } else {
  136287. queueIndex = -1;
  136288. }
  136289. if (queue.length) {
  136290. drainQueue();
  136291. }
  136292. }
  136293. function drainQueue() {
  136294. if (draining) {
  136295. return;
  136296. }
  136297. var timeout = runTimeout(cleanUpNextTick);
  136298. draining = true;
  136299. var len = queue.length;
  136300. while(len) {
  136301. currentQueue = queue;
  136302. queue = [];
  136303. while (++queueIndex < len) {
  136304. if (currentQueue) {
  136305. currentQueue[queueIndex].run();
  136306. }
  136307. }
  136308. queueIndex = -1;
  136309. len = queue.length;
  136310. }
  136311. currentQueue = null;
  136312. draining = false;
  136313. runClearTimeout(timeout);
  136314. }
  136315. process.nextTick = function (fun) {
  136316. var args = new Array(arguments.length - 1);
  136317. if (arguments.length > 1) {
  136318. for (var i = 1; i < arguments.length; i++) {
  136319. args[i - 1] = arguments[i];
  136320. }
  136321. }
  136322. queue.push(new Item(fun, args));
  136323. if (queue.length === 1 && !draining) {
  136324. runTimeout(drainQueue);
  136325. }
  136326. };
  136327. // v8 likes predictible objects
  136328. function Item(fun, array) {
  136329. this.fun = fun;
  136330. this.array = array;
  136331. }
  136332. Item.prototype.run = function () {
  136333. this.fun.apply(null, this.array);
  136334. };
  136335. process.title = 'browser';
  136336. process.browser = true;
  136337. process.env = {};
  136338. process.argv = [];
  136339. process.version = ''; // empty string to avoid regexp issues
  136340. process.versions = {};
  136341. function noop() {}
  136342. process.on = noop;
  136343. process.addListener = noop;
  136344. process.once = noop;
  136345. process.off = noop;
  136346. process.removeListener = noop;
  136347. process.removeAllListeners = noop;
  136348. process.emit = noop;
  136349. process.prependListener = noop;
  136350. process.prependOnceListener = noop;
  136351. process.listeners = function (name) { return [] }
  136352. process.binding = function (name) {
  136353. throw new Error('process.binding is not supported');
  136354. };
  136355. process.cwd = function () { return '/' };
  136356. process.chdir = function (dir) {
  136357. throw new Error('process.chdir is not supported');
  136358. };
  136359. process.umask = function() { return 0; };
  136360. /***/ }),
  136361. /* 607 */
  136362. /***/ (function(module, exports, __webpack_require__) {
  136363. "use strict";
  136364. var __extends = (this && this.__extends) || function (d, b) {
  136365. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  136366. function __() { this.constructor = d; }
  136367. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  136368. };
  136369. var AsyncScheduler_1 = __webpack_require__(58);
  136370. var AsapScheduler = (function (_super) {
  136371. __extends(AsapScheduler, _super);
  136372. function AsapScheduler() {
  136373. _super.apply(this, arguments);
  136374. }
  136375. AsapScheduler.prototype.flush = function (action) {
  136376. this.active = true;
  136377. this.scheduled = undefined;
  136378. var actions = this.actions;
  136379. var error;
  136380. var index = -1;
  136381. var count = actions.length;
  136382. action = action || actions.shift();
  136383. do {
  136384. if (error = action.execute(action.state, action.delay)) {
  136385. break;
  136386. }
  136387. } while (++index < count && (action = actions.shift()));
  136388. this.active = false;
  136389. if (error) {
  136390. while (++index < count && (action = actions.shift())) {
  136391. action.unsubscribe();
  136392. }
  136393. throw error;
  136394. }
  136395. };
  136396. return AsapScheduler;
  136397. }(AsyncScheduler_1.AsyncScheduler));
  136398. exports.AsapScheduler = AsapScheduler;
  136399. //# sourceMappingURL=AsapScheduler.js.map
  136400. /***/ }),
  136401. /* 608 */
  136402. /***/ (function(module, exports, __webpack_require__) {
  136403. "use strict";
  136404. var Observable_1 = __webpack_require__(0);
  136405. var switch_1 = __webpack_require__(609);
  136406. Observable_1.Observable.prototype.switch = switch_1._switch;
  136407. Observable_1.Observable.prototype._switch = switch_1._switch;
  136408. //# sourceMappingURL=switch.js.map
  136409. /***/ }),
  136410. /* 609 */
  136411. /***/ (function(module, exports, __webpack_require__) {
  136412. "use strict";
  136413. var switchAll_1 = __webpack_require__(284);
  136414. /**
  136415. * Converts a higher-order Observable into a first-order Observable by
  136416. * subscribing to only the most recently emitted of those inner Observables.
  136417. *
  136418. * <span class="informal">Flattens an Observable-of-Observables by dropping the
  136419. * previous inner Observable once a new one appears.</span>
  136420. *
  136421. * <img src="./img/switch.png" width="100%">
  136422. *
  136423. * `switch` subscribes to an Observable that emits Observables, also known as a
  136424. * higher-order Observable. Each time it observes one of these emitted inner
  136425. * Observables, the output Observable subscribes to the inner Observable and
  136426. * begins emitting the items emitted by that. So far, it behaves
  136427. * like {@link mergeAll}. However, when a new inner Observable is emitted,
  136428. * `switch` unsubscribes from the earlier-emitted inner Observable and
  136429. * subscribes to the new inner Observable and begins emitting items from it. It
  136430. * continues to behave like this for subsequent inner Observables.
  136431. *
  136432. * @example <caption>Rerun an interval Observable on every click event</caption>
  136433. * var clicks = Rx.Observable.fromEvent(document, 'click');
  136434. * // Each click event is mapped to an Observable that ticks every second
  136435. * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));
  136436. * var switched = higherOrder.switch();
  136437. * // The outcome is that `switched` is essentially a timer that restarts
  136438. * // on every click. The interval Observables from older clicks do not merge
  136439. * // with the current interval Observable.
  136440. * switched.subscribe(x => console.log(x));
  136441. *
  136442. * @see {@link combineAll}
  136443. * @see {@link concatAll}
  136444. * @see {@link exhaust}
  136445. * @see {@link mergeAll}
  136446. * @see {@link switchMap}
  136447. * @see {@link switchMapTo}
  136448. * @see {@link zipAll}
  136449. *
  136450. * @return {Observable<T>} An Observable that emits the items emitted by the
  136451. * Observable most recently emitted by the source Observable.
  136452. * @method switch
  136453. * @name switch
  136454. * @owner Observable
  136455. */
  136456. function _switch() {
  136457. return switchAll_1.switchAll()(this);
  136458. }
  136459. exports._switch = _switch;
  136460. //# sourceMappingURL=switch.js.map
  136461. /***/ }),
  136462. /* 610 */
  136463. /***/ (function(module, exports, __webpack_require__) {
  136464. "use strict";
  136465. var Observable_1 = __webpack_require__(0);
  136466. var switchMap_1 = __webpack_require__(611);
  136467. Observable_1.Observable.prototype.switchMap = switchMap_1.switchMap;
  136468. //# sourceMappingURL=switchMap.js.map
  136469. /***/ }),
  136470. /* 611 */
  136471. /***/ (function(module, exports, __webpack_require__) {
  136472. "use strict";
  136473. var switchMap_1 = __webpack_require__(125);
  136474. /* tslint:enable:max-line-length */
  136475. /**
  136476. * Projects each source value to an Observable which is merged in the output
  136477. * Observable, emitting values only from the most recently projected Observable.
  136478. *
  136479. * <span class="informal">Maps each value to an Observable, then flattens all of
  136480. * these inner Observables using {@link switch}.</span>
  136481. *
  136482. * <img src="./img/switchMap.png" width="100%">
  136483. *
  136484. * Returns an Observable that emits items based on applying a function that you
  136485. * supply to each item emitted by the source Observable, where that function
  136486. * returns an (so-called "inner") Observable. Each time it observes one of these
  136487. * inner Observables, the output Observable begins emitting the items emitted by
  136488. * that inner Observable. When a new inner Observable is emitted, `switchMap`
  136489. * stops emitting items from the earlier-emitted inner Observable and begins
  136490. * emitting items from the new one. It continues to behave like this for
  136491. * subsequent inner Observables.
  136492. *
  136493. * @example <caption>Rerun an interval Observable on every click event</caption>
  136494. * var clicks = Rx.Observable.fromEvent(document, 'click');
  136495. * var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));
  136496. * result.subscribe(x => console.log(x));
  136497. *
  136498. * @see {@link concatMap}
  136499. * @see {@link exhaustMap}
  136500. * @see {@link mergeMap}
  136501. * @see {@link switch}
  136502. * @see {@link switchMapTo}
  136503. *
  136504. * @param {function(value: T, ?index: number): ObservableInput} project A function
  136505. * that, when applied to an item emitted by the source Observable, returns an
  136506. * Observable.
  136507. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  136508. * A function to produce the value on the output Observable based on the values
  136509. * and the indices of the source (outer) emission and the inner Observable
  136510. * emission. The arguments passed to this function are:
  136511. * - `outerValue`: the value that came from the source
  136512. * - `innerValue`: the value that came from the projected Observable
  136513. * - `outerIndex`: the "index" of the value that came from the source
  136514. * - `innerIndex`: the "index" of the value from the projected Observable
  136515. * @return {Observable} An Observable that emits the result of applying the
  136516. * projection function (and the optional `resultSelector`) to each item emitted
  136517. * by the source Observable and taking only the values from the most recently
  136518. * projected inner Observable.
  136519. * @method switchMap
  136520. * @owner Observable
  136521. */
  136522. function switchMap(project, resultSelector) {
  136523. return switchMap_1.switchMap(project, resultSelector)(this);
  136524. }
  136525. exports.switchMap = switchMap;
  136526. //# sourceMappingURL=switchMap.js.map
  136527. /***/ }),
  136528. /* 612 */
  136529. /***/ (function(module, exports, __webpack_require__) {
  136530. "use strict";
  136531. var Observable_1 = __webpack_require__(0);
  136532. var switchMapTo_1 = __webpack_require__(613);
  136533. Observable_1.Observable.prototype.switchMapTo = switchMapTo_1.switchMapTo;
  136534. //# sourceMappingURL=switchMapTo.js.map
  136535. /***/ }),
  136536. /* 613 */
  136537. /***/ (function(module, exports, __webpack_require__) {
  136538. "use strict";
  136539. var switchMapTo_1 = __webpack_require__(285);
  136540. /* tslint:enable:max-line-length */
  136541. /**
  136542. * Projects each source value to the same Observable which is flattened multiple
  136543. * times with {@link switch} in the output Observable.
  136544. *
  136545. * <span class="informal">It's like {@link switchMap}, but maps each value
  136546. * always to the same inner Observable.</span>
  136547. *
  136548. * <img src="./img/switchMapTo.png" width="100%">
  136549. *
  136550. * Maps each source value to the given Observable `innerObservable` regardless
  136551. * of the source value, and then flattens those resulting Observables into one
  136552. * single Observable, which is the output Observable. The output Observables
  136553. * emits values only from the most recently emitted instance of
  136554. * `innerObservable`.
  136555. *
  136556. * @example <caption>Rerun an interval Observable on every click event</caption>
  136557. * var clicks = Rx.Observable.fromEvent(document, 'click');
  136558. * var result = clicks.switchMapTo(Rx.Observable.interval(1000));
  136559. * result.subscribe(x => console.log(x));
  136560. *
  136561. * @see {@link concatMapTo}
  136562. * @see {@link switch}
  136563. * @see {@link switchMap}
  136564. * @see {@link mergeMapTo}
  136565. *
  136566. * @param {ObservableInput} innerObservable An Observable to replace each value from
  136567. * the source Observable.
  136568. * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
  136569. * A function to produce the value on the output Observable based on the values
  136570. * and the indices of the source (outer) emission and the inner Observable
  136571. * emission. The arguments passed to this function are:
  136572. * - `outerValue`: the value that came from the source
  136573. * - `innerValue`: the value that came from the projected Observable
  136574. * - `outerIndex`: the "index" of the value that came from the source
  136575. * - `innerIndex`: the "index" of the value from the projected Observable
  136576. * @return {Observable} An Observable that emits items from the given
  136577. * `innerObservable` (and optionally transformed through `resultSelector`) every
  136578. * time a value is emitted on the source Observable, and taking only the values
  136579. * from the most recently projected inner Observable.
  136580. * @method switchMapTo
  136581. * @owner Observable
  136582. */
  136583. function switchMapTo(innerObservable, resultSelector) {
  136584. return switchMapTo_1.switchMapTo(innerObservable, resultSelector)(this);
  136585. }
  136586. exports.switchMapTo = switchMapTo;
  136587. //# sourceMappingURL=switchMapTo.js.map
  136588. /***/ }),
  136589. /* 614 */
  136590. /***/ (function(module, exports, __webpack_require__) {
  136591. "use strict";
  136592. var Observable_1 = __webpack_require__(0);
  136593. var take_1 = __webpack_require__(615);
  136594. Observable_1.Observable.prototype.take = take_1.take;
  136595. //# sourceMappingURL=take.js.map
  136596. /***/ }),
  136597. /* 615 */
  136598. /***/ (function(module, exports, __webpack_require__) {
  136599. "use strict";
  136600. var take_1 = __webpack_require__(286);
  136601. /**
  136602. * Emits only the first `count` values emitted by the source Observable.
  136603. *
  136604. * <span class="informal">Takes the first `count` values from the source, then
  136605. * completes.</span>
  136606. *
  136607. * <img src="./img/take.png" width="100%">
  136608. *
  136609. * `take` returns an Observable that emits only the first `count` values emitted
  136610. * by the source Observable. If the source emits fewer than `count` values then
  136611. * all of its values are emitted. After that, it completes, regardless if the
  136612. * source completes.
  136613. *
  136614. * @example <caption>Take the first 5 seconds of an infinite 1-second interval Observable</caption>
  136615. * var interval = Rx.Observable.interval(1000);
  136616. * var five = interval.take(5);
  136617. * five.subscribe(x => console.log(x));
  136618. *
  136619. * @see {@link takeLast}
  136620. * @see {@link takeUntil}
  136621. * @see {@link takeWhile}
  136622. * @see {@link skip}
  136623. *
  136624. * @throws {ArgumentOutOfRangeError} When using `take(i)`, it delivers an
  136625. * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.
  136626. *
  136627. * @param {number} count The maximum number of `next` values to emit.
  136628. * @return {Observable<T>} An Observable that emits only the first `count`
  136629. * values emitted by the source Observable, or all of the values from the source
  136630. * if the source emits fewer than `count` values.
  136631. * @method take
  136632. * @owner Observable
  136633. */
  136634. function take(count) {
  136635. return take_1.take(count)(this);
  136636. }
  136637. exports.take = take;
  136638. //# sourceMappingURL=take.js.map
  136639. /***/ }),
  136640. /* 616 */
  136641. /***/ (function(module, exports, __webpack_require__) {
  136642. "use strict";
  136643. var Observable_1 = __webpack_require__(0);
  136644. var takeLast_1 = __webpack_require__(617);
  136645. Observable_1.Observable.prototype.takeLast = takeLast_1.takeLast;
  136646. //# sourceMappingURL=takeLast.js.map
  136647. /***/ }),
  136648. /* 617 */
  136649. /***/ (function(module, exports, __webpack_require__) {
  136650. "use strict";
  136651. var takeLast_1 = __webpack_require__(124);
  136652. /**
  136653. * Emits only the last `count` values emitted by the source Observable.
  136654. *
  136655. * <span class="informal">Remembers the latest `count` values, then emits those
  136656. * only when the source completes.</span>
  136657. *
  136658. * <img src="./img/takeLast.png" width="100%">
  136659. *
  136660. * `takeLast` returns an Observable that emits at most the last `count` values
  136661. * emitted by the source Observable. If the source emits fewer than `count`
  136662. * values then all of its values are emitted. This operator must wait until the
  136663. * `complete` notification emission from the source in order to emit the `next`
  136664. * values on the output Observable, because otherwise it is impossible to know
  136665. * whether or not more values will be emitted on the source. For this reason,
  136666. * all values are emitted synchronously, followed by the complete notification.
  136667. *
  136668. * @example <caption>Take the last 3 values of an Observable with many values</caption>
  136669. * var many = Rx.Observable.range(1, 100);
  136670. * var lastThree = many.takeLast(3);
  136671. * lastThree.subscribe(x => console.log(x));
  136672. *
  136673. * @see {@link take}
  136674. * @see {@link takeUntil}
  136675. * @see {@link takeWhile}
  136676. * @see {@link skip}
  136677. *
  136678. * @throws {ArgumentOutOfRangeError} When using `takeLast(i)`, it delivers an
  136679. * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.
  136680. *
  136681. * @param {number} count The maximum number of values to emit from the end of
  136682. * the sequence of values emitted by the source Observable.
  136683. * @return {Observable<T>} An Observable that emits at most the last count
  136684. * values emitted by the source Observable.
  136685. * @method takeLast
  136686. * @owner Observable
  136687. */
  136688. function takeLast(count) {
  136689. return takeLast_1.takeLast(count)(this);
  136690. }
  136691. exports.takeLast = takeLast;
  136692. //# sourceMappingURL=takeLast.js.map
  136693. /***/ }),
  136694. /* 618 */
  136695. /***/ (function(module, exports, __webpack_require__) {
  136696. "use strict";
  136697. var Observable_1 = __webpack_require__(0);
  136698. var takeWhile_1 = __webpack_require__(619);
  136699. Observable_1.Observable.prototype.takeWhile = takeWhile_1.takeWhile;
  136700. //# sourceMappingURL=takeWhile.js.map
  136701. /***/ }),
  136702. /* 619 */
  136703. /***/ (function(module, exports, __webpack_require__) {
  136704. "use strict";
  136705. var takeWhile_1 = __webpack_require__(287);
  136706. /**
  136707. * Emits values emitted by the source Observable so long as each value satisfies
  136708. * the given `predicate`, and then completes as soon as this `predicate` is not
  136709. * satisfied.
  136710. *
  136711. * <span class="informal">Takes values from the source only while they pass the
  136712. * condition given. When the first value does not satisfy, it completes.</span>
  136713. *
  136714. * <img src="./img/takeWhile.png" width="100%">
  136715. *
  136716. * `takeWhile` subscribes and begins mirroring the source Observable. Each value
  136717. * emitted on the source is given to the `predicate` function which returns a
  136718. * boolean, representing a condition to be satisfied by the source values. The
  136719. * output Observable emits the source values until such time as the `predicate`
  136720. * returns false, at which point `takeWhile` stops mirroring the source
  136721. * Observable and completes the output Observable.
  136722. *
  136723. * @example <caption>Emit click events only while the clientX property is greater than 200</caption>
  136724. * var clicks = Rx.Observable.fromEvent(document, 'click');
  136725. * var result = clicks.takeWhile(ev => ev.clientX > 200);
  136726. * result.subscribe(x => console.log(x));
  136727. *
  136728. * @see {@link take}
  136729. * @see {@link takeLast}
  136730. * @see {@link takeUntil}
  136731. * @see {@link skip}
  136732. *
  136733. * @param {function(value: T, index: number): boolean} predicate A function that
  136734. * evaluates a value emitted by the source Observable and returns a boolean.
  136735. * Also takes the (zero-based) index as the second argument.
  136736. * @return {Observable<T>} An Observable that emits the values from the source
  136737. * Observable so long as each value satisfies the condition defined by the
  136738. * `predicate`, then completes.
  136739. * @method takeWhile
  136740. * @owner Observable
  136741. */
  136742. function takeWhile(predicate) {
  136743. return takeWhile_1.takeWhile(predicate)(this);
  136744. }
  136745. exports.takeWhile = takeWhile;
  136746. //# sourceMappingURL=takeWhile.js.map
  136747. /***/ }),
  136748. /* 620 */
  136749. /***/ (function(module, exports, __webpack_require__) {
  136750. "use strict";
  136751. var Observable_1 = __webpack_require__(0);
  136752. var throttle_1 = __webpack_require__(621);
  136753. Observable_1.Observable.prototype.throttle = throttle_1.throttle;
  136754. //# sourceMappingURL=throttle.js.map
  136755. /***/ }),
  136756. /* 621 */
  136757. /***/ (function(module, exports, __webpack_require__) {
  136758. "use strict";
  136759. var throttle_1 = __webpack_require__(80);
  136760. /**
  136761. * Emits a value from the source Observable, then ignores subsequent source
  136762. * values for a duration determined by another Observable, then repeats this
  136763. * process.
  136764. *
  136765. * <span class="informal">It's like {@link throttleTime}, but the silencing
  136766. * duration is determined by a second Observable.</span>
  136767. *
  136768. * <img src="./img/throttle.png" width="100%">
  136769. *
  136770. * `throttle` emits the source Observable values on the output Observable
  136771. * when its internal timer is disabled, and ignores source values when the timer
  136772. * is enabled. Initially, the timer is disabled. As soon as the first source
  136773. * value arrives, it is forwarded to the output Observable, and then the timer
  136774. * is enabled by calling the `durationSelector` function with the source value,
  136775. * which returns the "duration" Observable. When the duration Observable emits a
  136776. * value or completes, the timer is disabled, and this process repeats for the
  136777. * next source value.
  136778. *
  136779. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  136780. * var clicks = Rx.Observable.fromEvent(document, 'click');
  136781. * var result = clicks.throttle(ev => Rx.Observable.interval(1000));
  136782. * result.subscribe(x => console.log(x));
  136783. *
  136784. * @see {@link audit}
  136785. * @see {@link debounce}
  136786. * @see {@link delayWhen}
  136787. * @see {@link sample}
  136788. * @see {@link throttleTime}
  136789. *
  136790. * @param {function(value: T): SubscribableOrPromise} durationSelector A function
  136791. * that receives a value from the source Observable, for computing the silencing
  136792. * duration for each source value, returned as an Observable or a Promise.
  136793. * @param {Object} config a configuration object to define `leading` and `trailing` behavior. Defaults
  136794. * to `{ leading: true, trailing: false }`.
  136795. * @return {Observable<T>} An Observable that performs the throttle operation to
  136796. * limit the rate of emissions from the source.
  136797. * @method throttle
  136798. * @owner Observable
  136799. */
  136800. function throttle(durationSelector, config) {
  136801. if (config === void 0) { config = throttle_1.defaultThrottleConfig; }
  136802. return throttle_1.throttle(durationSelector, config)(this);
  136803. }
  136804. exports.throttle = throttle;
  136805. //# sourceMappingURL=throttle.js.map
  136806. /***/ }),
  136807. /* 622 */
  136808. /***/ (function(module, exports, __webpack_require__) {
  136809. "use strict";
  136810. var Observable_1 = __webpack_require__(0);
  136811. var throttleTime_1 = __webpack_require__(623);
  136812. Observable_1.Observable.prototype.throttleTime = throttleTime_1.throttleTime;
  136813. //# sourceMappingURL=throttleTime.js.map
  136814. /***/ }),
  136815. /* 623 */
  136816. /***/ (function(module, exports, __webpack_require__) {
  136817. "use strict";
  136818. var async_1 = __webpack_require__(10);
  136819. var throttle_1 = __webpack_require__(80);
  136820. var throttleTime_1 = __webpack_require__(288);
  136821. /**
  136822. * Emits a value from the source Observable, then ignores subsequent source
  136823. * values for `duration` milliseconds, then repeats this process.
  136824. *
  136825. * <span class="informal">Lets a value pass, then ignores source values for the
  136826. * next `duration` milliseconds.</span>
  136827. *
  136828. * <img src="./img/throttleTime.png" width="100%">
  136829. *
  136830. * `throttleTime` emits the source Observable values on the output Observable
  136831. * when its internal timer is disabled, and ignores source values when the timer
  136832. * is enabled. Initially, the timer is disabled. As soon as the first source
  136833. * value arrives, it is forwarded to the output Observable, and then the timer
  136834. * is enabled. After `duration` milliseconds (or the time unit determined
  136835. * internally by the optional `scheduler`) has passed, the timer is disabled,
  136836. * and this process repeats for the next source value. Optionally takes a
  136837. * {@link IScheduler} for managing timers.
  136838. *
  136839. * @example <caption>Emit clicks at a rate of at most one click per second</caption>
  136840. * var clicks = Rx.Observable.fromEvent(document, 'click');
  136841. * var result = clicks.throttleTime(1000);
  136842. * result.subscribe(x => console.log(x));
  136843. *
  136844. * @see {@link auditTime}
  136845. * @see {@link debounceTime}
  136846. * @see {@link delay}
  136847. * @see {@link sampleTime}
  136848. * @see {@link throttle}
  136849. *
  136850. * @param {number} duration Time to wait before emitting another value after
  136851. * emitting the last value, measured in milliseconds or the time unit determined
  136852. * internally by the optional `scheduler`.
  136853. * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for
  136854. * managing the timers that handle the throttling.
  136855. * @return {Observable<T>} An Observable that performs the throttle operation to
  136856. * limit the rate of emissions from the source.
  136857. * @method throttleTime
  136858. * @owner Observable
  136859. */
  136860. function throttleTime(duration, scheduler, config) {
  136861. if (scheduler === void 0) { scheduler = async_1.async; }
  136862. if (config === void 0) { config = throttle_1.defaultThrottleConfig; }
  136863. return throttleTime_1.throttleTime(duration, scheduler, config)(this);
  136864. }
  136865. exports.throttleTime = throttleTime;
  136866. //# sourceMappingURL=throttleTime.js.map
  136867. /***/ }),
  136868. /* 624 */
  136869. /***/ (function(module, exports, __webpack_require__) {
  136870. "use strict";
  136871. var Observable_1 = __webpack_require__(0);
  136872. var timeInterval_1 = __webpack_require__(289);
  136873. Observable_1.Observable.prototype.timeInterval = timeInterval_1.timeInterval;
  136874. //# sourceMappingURL=timeInterval.js.map
  136875. /***/ }),
  136876. /* 625 */
  136877. /***/ (function(module, exports, __webpack_require__) {
  136878. "use strict";
  136879. var Observable_1 = __webpack_require__(0);
  136880. var timeout_1 = __webpack_require__(626);
  136881. Observable_1.Observable.prototype.timeout = timeout_1.timeout;
  136882. //# sourceMappingURL=timeout.js.map
  136883. /***/ }),
  136884. /* 626 */
  136885. /***/ (function(module, exports, __webpack_require__) {
  136886. "use strict";
  136887. var async_1 = __webpack_require__(10);
  136888. var timeout_1 = __webpack_require__(291);
  136889. /**
  136890. *
  136891. * Errors if Observable does not emit a value in given time span.
  136892. *
  136893. * <span class="informal">Timeouts on Observable that doesn't emit values fast enough.</span>
  136894. *
  136895. * <img src="./img/timeout.png" width="100%">
  136896. *
  136897. * `timeout` operator accepts as an argument either a number or a Date.
  136898. *
  136899. * If number was provided, it returns an Observable that behaves like a source
  136900. * Observable, unless there is a period of time where there is no value emitted.
  136901. * So if you provide `100` as argument and first value comes after 50ms from
  136902. * the moment of subscription, this value will be simply re-emitted by the resulting
  136903. * Observable. If however after that 100ms passes without a second value being emitted,
  136904. * stream will end with an error and source Observable will be unsubscribed.
  136905. * These checks are performed throughout whole lifecycle of Observable - from the moment
  136906. * it was subscribed to, until it completes or errors itself. Thus every value must be
  136907. * emitted within specified period since previous value.
  136908. *
  136909. * If provided argument was Date, returned Observable behaves differently. It throws
  136910. * if Observable did not complete before provided Date. This means that periods between
  136911. * emission of particular values do not matter in this case. If Observable did not complete
  136912. * before provided Date, source Observable will be unsubscribed. Other than that, resulting
  136913. * stream behaves just as source Observable.
  136914. *
  136915. * `timeout` accepts also a Scheduler as a second parameter. It is used to schedule moment (or moments)
  136916. * when returned Observable will check if source stream emitted value or completed.
  136917. *
  136918. * @example <caption>Check if ticks are emitted within certain timespan</caption>
  136919. * const seconds = Rx.Observable.interval(1000);
  136920. *
  136921. * seconds.timeout(1100) // Let's use bigger timespan to be safe,
  136922. * // since `interval` might fire a bit later then scheduled.
  136923. * .subscribe(
  136924. * value => console.log(value), // Will emit numbers just as regular `interval` would.
  136925. * err => console.log(err) // Will never be called.
  136926. * );
  136927. *
  136928. * seconds.timeout(900).subscribe(
  136929. * value => console.log(value), // Will never be called.
  136930. * err => console.log(err) // Will emit error before even first value is emitted,
  136931. * // since it did not arrive within 900ms period.
  136932. * );
  136933. *
  136934. * @example <caption>Use Date to check if Observable completed</caption>
  136935. * const seconds = Rx.Observable.interval(1000);
  136936. *
  136937. * seconds.timeout(new Date("December 17, 2020 03:24:00"))
  136938. * .subscribe(
  136939. * value => console.log(value), // Will emit values as regular `interval` would
  136940. * // until December 17, 2020 at 03:24:00.
  136941. * err => console.log(err) // On December 17, 2020 at 03:24:00 it will emit an error,
  136942. * // since Observable did not complete by then.
  136943. * );
  136944. *
  136945. * @see {@link timeoutWith}
  136946. *
  136947. * @param {number|Date} due Number specifying period within which Observable must emit values
  136948. * or Date specifying before when Observable should complete
  136949. * @param {Scheduler} [scheduler] Scheduler controlling when timeout checks occur.
  136950. * @return {Observable<T>} Observable that mirrors behaviour of source, unless timeout checks fail.
  136951. * @method timeout
  136952. * @owner Observable
  136953. */
  136954. function timeout(due, scheduler) {
  136955. if (scheduler === void 0) { scheduler = async_1.async; }
  136956. return timeout_1.timeout(due, scheduler)(this);
  136957. }
  136958. exports.timeout = timeout;
  136959. //# sourceMappingURL=timeout.js.map
  136960. /***/ }),
  136961. /* 627 */
  136962. /***/ (function(module, exports, __webpack_require__) {
  136963. "use strict";
  136964. var Observable_1 = __webpack_require__(0);
  136965. var timeoutWith_1 = __webpack_require__(628);
  136966. Observable_1.Observable.prototype.timeoutWith = timeoutWith_1.timeoutWith;
  136967. //# sourceMappingURL=timeoutWith.js.map
  136968. /***/ }),
  136969. /* 628 */
  136970. /***/ (function(module, exports, __webpack_require__) {
  136971. "use strict";
  136972. var async_1 = __webpack_require__(10);
  136973. var timeoutWith_1 = __webpack_require__(293);
  136974. /* tslint:enable:max-line-length */
  136975. /**
  136976. *
  136977. * Errors if Observable does not emit a value in given time span, in case of which
  136978. * subscribes to the second Observable.
  136979. *
  136980. * <span class="informal">It's a version of `timeout` operator that let's you specify fallback Observable.</span>
  136981. *
  136982. * <img src="./img/timeoutWith.png" width="100%">
  136983. *
  136984. * `timeoutWith` is a variation of `timeout` operator. It behaves exactly the same,
  136985. * still accepting as a first argument either a number or a Date, which control - respectively -
  136986. * when values of source Observable should be emitted or when it should complete.
  136987. *
  136988. * The only difference is that it accepts a second, required parameter. This parameter
  136989. * should be an Observable which will be subscribed when source Observable fails any timeout check.
  136990. * So whenever regular `timeout` would emit an error, `timeoutWith` will instead start re-emitting
  136991. * values from second Observable. Note that this fallback Observable is not checked for timeouts
  136992. * itself, so it can emit values and complete at arbitrary points in time. From the moment of a second
  136993. * subscription, Observable returned from `timeoutWith` simply mirrors fallback stream. When that
  136994. * stream completes, it completes as well.
  136995. *
  136996. * Scheduler, which in case of `timeout` is provided as as second argument, can be still provided
  136997. * here - as a third, optional parameter. It still is used to schedule timeout checks and -
  136998. * as a consequence - when second Observable will be subscribed, since subscription happens
  136999. * immediately after failing check.
  137000. *
  137001. * @example <caption>Add fallback observable</caption>
  137002. * const seconds = Rx.Observable.interval(1000);
  137003. * const minutes = Rx.Observable.interval(60 * 1000);
  137004. *
  137005. * seconds.timeoutWith(900, minutes)
  137006. * .subscribe(
  137007. * value => console.log(value), // After 900ms, will start emitting `minutes`,
  137008. * // since first value of `seconds` will not arrive fast enough.
  137009. * err => console.log(err) // Would be called after 900ms in case of `timeout`,
  137010. * // but here will never be called.
  137011. * );
  137012. *
  137013. * @param {number|Date} due Number specifying period within which Observable must emit values
  137014. * or Date specifying before when Observable should complete
  137015. * @param {Observable<T>} withObservable Observable which will be subscribed if source fails timeout check.
  137016. * @param {Scheduler} [scheduler] Scheduler controlling when timeout checks occur.
  137017. * @return {Observable<T>} Observable that mirrors behaviour of source or, when timeout check fails, of an Observable
  137018. * passed as a second parameter.
  137019. * @method timeoutWith
  137020. * @owner Observable
  137021. */
  137022. function timeoutWith(due, withObservable, scheduler) {
  137023. if (scheduler === void 0) { scheduler = async_1.async; }
  137024. return timeoutWith_1.timeoutWith(due, withObservable, scheduler)(this);
  137025. }
  137026. exports.timeoutWith = timeoutWith;
  137027. //# sourceMappingURL=timeoutWith.js.map
  137028. /***/ }),
  137029. /* 629 */
  137030. /***/ (function(module, exports, __webpack_require__) {
  137031. "use strict";
  137032. var Observable_1 = __webpack_require__(0);
  137033. var timestamp_1 = __webpack_require__(630);
  137034. Observable_1.Observable.prototype.timestamp = timestamp_1.timestamp;
  137035. //# sourceMappingURL=timestamp.js.map
  137036. /***/ }),
  137037. /* 630 */
  137038. /***/ (function(module, exports, __webpack_require__) {
  137039. "use strict";
  137040. var async_1 = __webpack_require__(10);
  137041. var timestamp_1 = __webpack_require__(126);
  137042. /**
  137043. * @param scheduler
  137044. * @return {Observable<Timestamp<any>>|WebSocketSubject<T>|Observable<T>}
  137045. * @method timestamp
  137046. * @owner Observable
  137047. */
  137048. function timestamp(scheduler) {
  137049. if (scheduler === void 0) { scheduler = async_1.async; }
  137050. return timestamp_1.timestamp(scheduler)(this);
  137051. }
  137052. exports.timestamp = timestamp;
  137053. //# sourceMappingURL=timestamp.js.map
  137054. /***/ }),
  137055. /* 631 */
  137056. /***/ (function(module, exports, __webpack_require__) {
  137057. "use strict";
  137058. var Observable_1 = __webpack_require__(0);
  137059. var toArray_1 = __webpack_require__(632);
  137060. Observable_1.Observable.prototype.toArray = toArray_1.toArray;
  137061. //# sourceMappingURL=toArray.js.map
  137062. /***/ }),
  137063. /* 632 */
  137064. /***/ (function(module, exports, __webpack_require__) {
  137065. "use strict";
  137066. var toArray_1 = __webpack_require__(294);
  137067. /**
  137068. * Collects all source emissions and emits them as an array when the source completes.
  137069. *
  137070. * <span class="informal">Get all values inside an array when the source completes</span>
  137071. *
  137072. * <img src="./img/toArray.png" width="100%">
  137073. *
  137074. * `toArray` will wait until the source Observable completes
  137075. * before emitting the array containing all emissions.
  137076. * When the source Observable errors no array will be emitted.
  137077. *
  137078. * @example <caption>Create array from input</caption>
  137079. * const input = Rx.Observable.interval(100).take(4);
  137080. *
  137081. * input.toArray()
  137082. * .subscribe(arr => console.log(arr)); // [0,1,2,3]
  137083. *
  137084. * @see {@link buffer}
  137085. *
  137086. * @return {Observable<any[]>|WebSocketSubject<T>|Observable<T>}
  137087. * @method toArray
  137088. * @owner Observable
  137089. */
  137090. function toArray() {
  137091. return toArray_1.toArray()(this);
  137092. }
  137093. exports.toArray = toArray;
  137094. //# sourceMappingURL=toArray.js.map
  137095. /***/ }),
  137096. /* 633 */
  137097. /***/ (function(module, exports) {
  137098. // HACK: does nothing, because `toPromise` now lives on the `Observable` itself.
  137099. // leaving this module here to prevent breakage.
  137100. //# sourceMappingURL=toPromise.js.map
  137101. /***/ }),
  137102. /* 634 */
  137103. /***/ (function(module, exports, __webpack_require__) {
  137104. "use strict";
  137105. var Observable_1 = __webpack_require__(0);
  137106. var window_1 = __webpack_require__(635);
  137107. Observable_1.Observable.prototype.window = window_1.window;
  137108. //# sourceMappingURL=window.js.map
  137109. /***/ }),
  137110. /* 635 */
  137111. /***/ (function(module, exports, __webpack_require__) {
  137112. "use strict";
  137113. var window_1 = __webpack_require__(295);
  137114. /**
  137115. * Branch out the source Observable values as a nested Observable whenever
  137116. * `windowBoundaries` emits.
  137117. *
  137118. * <span class="informal">It's like {@link buffer}, but emits a nested Observable
  137119. * instead of an array.</span>
  137120. *
  137121. * <img src="./img/window.png" width="100%">
  137122. *
  137123. * Returns an Observable that emits windows of items it collects from the source
  137124. * Observable. The output Observable emits connected, non-overlapping
  137125. * windows. It emits the current window and opens a new one whenever the
  137126. * Observable `windowBoundaries` emits an item. Because each window is an
  137127. * Observable, the output is a higher-order Observable.
  137128. *
  137129. * @example <caption>In every window of 1 second each, emit at most 2 click events</caption>
  137130. * var clicks = Rx.Observable.fromEvent(document, 'click');
  137131. * var interval = Rx.Observable.interval(1000);
  137132. * var result = clicks.window(interval)
  137133. * .map(win => win.take(2)) // each window has at most 2 emissions
  137134. * .mergeAll(); // flatten the Observable-of-Observables
  137135. * result.subscribe(x => console.log(x));
  137136. *
  137137. * @see {@link windowCount}
  137138. * @see {@link windowTime}
  137139. * @see {@link windowToggle}
  137140. * @see {@link windowWhen}
  137141. * @see {@link buffer}
  137142. *
  137143. * @param {Observable<any>} windowBoundaries An Observable that completes the
  137144. * previous window and starts a new window.
  137145. * @return {Observable<Observable<T>>} An Observable of windows, which are
  137146. * Observables emitting values of the source Observable.
  137147. * @method window
  137148. * @owner Observable
  137149. */
  137150. function window(windowBoundaries) {
  137151. return window_1.window(windowBoundaries)(this);
  137152. }
  137153. exports.window = window;
  137154. //# sourceMappingURL=window.js.map
  137155. /***/ }),
  137156. /* 636 */
  137157. /***/ (function(module, exports, __webpack_require__) {
  137158. "use strict";
  137159. var Observable_1 = __webpack_require__(0);
  137160. var windowCount_1 = __webpack_require__(637);
  137161. Observable_1.Observable.prototype.windowCount = windowCount_1.windowCount;
  137162. //# sourceMappingURL=windowCount.js.map
  137163. /***/ }),
  137164. /* 637 */
  137165. /***/ (function(module, exports, __webpack_require__) {
  137166. "use strict";
  137167. var windowCount_1 = __webpack_require__(296);
  137168. /**
  137169. * Branch out the source Observable values as a nested Observable with each
  137170. * nested Observable emitting at most `windowSize` values.
  137171. *
  137172. * <span class="informal">It's like {@link bufferCount}, but emits a nested
  137173. * Observable instead of an array.</span>
  137174. *
  137175. * <img src="./img/windowCount.png" width="100%">
  137176. *
  137177. * Returns an Observable that emits windows of items it collects from the source
  137178. * Observable. The output Observable emits windows every `startWindowEvery`
  137179. * items, each containing no more than `windowSize` items. When the source
  137180. * Observable completes or encounters an error, the output Observable emits
  137181. * the current window and propagates the notification from the source
  137182. * Observable. If `startWindowEvery` is not provided, then new windows are
  137183. * started immediately at the start of the source and when each window completes
  137184. * with size `windowSize`.
  137185. *
  137186. * @example <caption>Ignore every 3rd click event, starting from the first one</caption>
  137187. * var clicks = Rx.Observable.fromEvent(document, 'click');
  137188. * var result = clicks.windowCount(3)
  137189. * .map(win => win.skip(1)) // skip first of every 3 clicks
  137190. * .mergeAll(); // flatten the Observable-of-Observables
  137191. * result.subscribe(x => console.log(x));
  137192. *
  137193. * @example <caption>Ignore every 3rd click event, starting from the third one</caption>
  137194. * var clicks = Rx.Observable.fromEvent(document, 'click');
  137195. * var result = clicks.windowCount(2, 3)
  137196. * .mergeAll(); // flatten the Observable-of-Observables
  137197. * result.subscribe(x => console.log(x));
  137198. *
  137199. * @see {@link window}
  137200. * @see {@link windowTime}
  137201. * @see {@link windowToggle}
  137202. * @see {@link windowWhen}
  137203. * @see {@link bufferCount}
  137204. *
  137205. * @param {number} windowSize The maximum number of values emitted by each
  137206. * window.
  137207. * @param {number} [startWindowEvery] Interval at which to start a new window.
  137208. * For example if `startWindowEvery` is `2`, then a new window will be started
  137209. * on every other value from the source. A new window is started at the
  137210. * beginning of the source by default.
  137211. * @return {Observable<Observable<T>>} An Observable of windows, which in turn
  137212. * are Observable of values.
  137213. * @method windowCount
  137214. * @owner Observable
  137215. */
  137216. function windowCount(windowSize, startWindowEvery) {
  137217. if (startWindowEvery === void 0) { startWindowEvery = 0; }
  137218. return windowCount_1.windowCount(windowSize, startWindowEvery)(this);
  137219. }
  137220. exports.windowCount = windowCount;
  137221. //# sourceMappingURL=windowCount.js.map
  137222. /***/ }),
  137223. /* 638 */
  137224. /***/ (function(module, exports, __webpack_require__) {
  137225. "use strict";
  137226. var Observable_1 = __webpack_require__(0);
  137227. var windowTime_1 = __webpack_require__(639);
  137228. Observable_1.Observable.prototype.windowTime = windowTime_1.windowTime;
  137229. //# sourceMappingURL=windowTime.js.map
  137230. /***/ }),
  137231. /* 639 */
  137232. /***/ (function(module, exports, __webpack_require__) {
  137233. "use strict";
  137234. var async_1 = __webpack_require__(10);
  137235. var isNumeric_1 = __webpack_require__(56);
  137236. var isScheduler_1 = __webpack_require__(22);
  137237. var windowTime_1 = __webpack_require__(297);
  137238. function windowTime(windowTimeSpan) {
  137239. var scheduler = async_1.async;
  137240. var windowCreationInterval = null;
  137241. var maxWindowSize = Number.POSITIVE_INFINITY;
  137242. if (isScheduler_1.isScheduler(arguments[3])) {
  137243. scheduler = arguments[3];
  137244. }
  137245. if (isScheduler_1.isScheduler(arguments[2])) {
  137246. scheduler = arguments[2];
  137247. }
  137248. else if (isNumeric_1.isNumeric(arguments[2])) {
  137249. maxWindowSize = arguments[2];
  137250. }
  137251. if (isScheduler_1.isScheduler(arguments[1])) {
  137252. scheduler = arguments[1];
  137253. }
  137254. else if (isNumeric_1.isNumeric(arguments[1])) {
  137255. windowCreationInterval = arguments[1];
  137256. }
  137257. return windowTime_1.windowTime(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler)(this);
  137258. }
  137259. exports.windowTime = windowTime;
  137260. //# sourceMappingURL=windowTime.js.map
  137261. /***/ }),
  137262. /* 640 */
  137263. /***/ (function(module, exports, __webpack_require__) {
  137264. "use strict";
  137265. var Observable_1 = __webpack_require__(0);
  137266. var windowToggle_1 = __webpack_require__(641);
  137267. Observable_1.Observable.prototype.windowToggle = windowToggle_1.windowToggle;
  137268. //# sourceMappingURL=windowToggle.js.map
  137269. /***/ }),
  137270. /* 641 */
  137271. /***/ (function(module, exports, __webpack_require__) {
  137272. "use strict";
  137273. var windowToggle_1 = __webpack_require__(298);
  137274. /**
  137275. * Branch out the source Observable values as a nested Observable starting from
  137276. * an emission from `openings` and ending when the output of `closingSelector`
  137277. * emits.
  137278. *
  137279. * <span class="informal">It's like {@link bufferToggle}, but emits a nested
  137280. * Observable instead of an array.</span>
  137281. *
  137282. * <img src="./img/windowToggle.png" width="100%">
  137283. *
  137284. * Returns an Observable that emits windows of items it collects from the source
  137285. * Observable. The output Observable emits windows that contain those items
  137286. * emitted by the source Observable between the time when the `openings`
  137287. * Observable emits an item and when the Observable returned by
  137288. * `closingSelector` emits an item.
  137289. *
  137290. * @example <caption>Every other second, emit the click events from the next 500ms</caption>
  137291. * var clicks = Rx.Observable.fromEvent(document, 'click');
  137292. * var openings = Rx.Observable.interval(1000);
  137293. * var result = clicks.windowToggle(openings, i =>
  137294. * i % 2 ? Rx.Observable.interval(500) : Rx.Observable.empty()
  137295. * ).mergeAll();
  137296. * result.subscribe(x => console.log(x));
  137297. *
  137298. * @see {@link window}
  137299. * @see {@link windowCount}
  137300. * @see {@link windowTime}
  137301. * @see {@link windowWhen}
  137302. * @see {@link bufferToggle}
  137303. *
  137304. * @param {Observable<O>} openings An observable of notifications to start new
  137305. * windows.
  137306. * @param {function(value: O): Observable} closingSelector A function that takes
  137307. * the value emitted by the `openings` observable and returns an Observable,
  137308. * which, when it emits (either `next` or `complete`), signals that the
  137309. * associated window should complete.
  137310. * @return {Observable<Observable<T>>} An observable of windows, which in turn
  137311. * are Observables.
  137312. * @method windowToggle
  137313. * @owner Observable
  137314. */
  137315. function windowToggle(openings, closingSelector) {
  137316. return windowToggle_1.windowToggle(openings, closingSelector)(this);
  137317. }
  137318. exports.windowToggle = windowToggle;
  137319. //# sourceMappingURL=windowToggle.js.map
  137320. /***/ }),
  137321. /* 642 */
  137322. /***/ (function(module, exports, __webpack_require__) {
  137323. "use strict";
  137324. var Observable_1 = __webpack_require__(0);
  137325. var windowWhen_1 = __webpack_require__(643);
  137326. Observable_1.Observable.prototype.windowWhen = windowWhen_1.windowWhen;
  137327. //# sourceMappingURL=windowWhen.js.map
  137328. /***/ }),
  137329. /* 643 */
  137330. /***/ (function(module, exports, __webpack_require__) {
  137331. "use strict";
  137332. var windowWhen_1 = __webpack_require__(299);
  137333. /**
  137334. * Branch out the source Observable values as a nested Observable using a
  137335. * factory function of closing Observables to determine when to start a new
  137336. * window.
  137337. *
  137338. * <span class="informal">It's like {@link bufferWhen}, but emits a nested
  137339. * Observable instead of an array.</span>
  137340. *
  137341. * <img src="./img/windowWhen.png" width="100%">
  137342. *
  137343. * Returns an Observable that emits windows of items it collects from the source
  137344. * Observable. The output Observable emits connected, non-overlapping windows.
  137345. * It emits the current window and opens a new one whenever the Observable
  137346. * produced by the specified `closingSelector` function emits an item. The first
  137347. * window is opened immediately when subscribing to the output Observable.
  137348. *
  137349. * @example <caption>Emit only the first two clicks events in every window of [1-5] random seconds</caption>
  137350. * var clicks = Rx.Observable.fromEvent(document, 'click');
  137351. * var result = clicks
  137352. * .windowWhen(() => Rx.Observable.interval(1000 + Math.random() * 4000))
  137353. * .map(win => win.take(2)) // each window has at most 2 emissions
  137354. * .mergeAll(); // flatten the Observable-of-Observables
  137355. * result.subscribe(x => console.log(x));
  137356. *
  137357. * @see {@link window}
  137358. * @see {@link windowCount}
  137359. * @see {@link windowTime}
  137360. * @see {@link windowToggle}
  137361. * @see {@link bufferWhen}
  137362. *
  137363. * @param {function(): Observable} closingSelector A function that takes no
  137364. * arguments and returns an Observable that signals (on either `next` or
  137365. * `complete`) when to close the previous window and start a new one.
  137366. * @return {Observable<Observable<T>>} An observable of windows, which in turn
  137367. * are Observables.
  137368. * @method windowWhen
  137369. * @owner Observable
  137370. */
  137371. function windowWhen(closingSelector) {
  137372. return windowWhen_1.windowWhen(closingSelector)(this);
  137373. }
  137374. exports.windowWhen = windowWhen;
  137375. //# sourceMappingURL=windowWhen.js.map
  137376. /***/ }),
  137377. /* 644 */
  137378. /***/ (function(module, exports, __webpack_require__) {
  137379. "use strict";
  137380. var Observable_1 = __webpack_require__(0);
  137381. var withLatestFrom_1 = __webpack_require__(645);
  137382. Observable_1.Observable.prototype.withLatestFrom = withLatestFrom_1.withLatestFrom;
  137383. //# sourceMappingURL=withLatestFrom.js.map
  137384. /***/ }),
  137385. /* 645 */
  137386. /***/ (function(module, exports, __webpack_require__) {
  137387. "use strict";
  137388. var withLatestFrom_1 = __webpack_require__(300);
  137389. /* tslint:enable:max-line-length */
  137390. /**
  137391. * Combines the source Observable with other Observables to create an Observable
  137392. * whose values are calculated from the latest values of each, only when the
  137393. * source emits.
  137394. *
  137395. * <span class="informal">Whenever the source Observable emits a value, it
  137396. * computes a formula using that value plus the latest values from other input
  137397. * Observables, then emits the output of that formula.</span>
  137398. *
  137399. * <img src="./img/withLatestFrom.png" width="100%">
  137400. *
  137401. * `withLatestFrom` combines each value from the source Observable (the
  137402. * instance) with the latest values from the other input Observables only when
  137403. * the source emits a value, optionally using a `project` function to determine
  137404. * the value to be emitted on the output Observable. All input Observables must
  137405. * emit at least one value before the output Observable will emit a value.
  137406. *
  137407. * @example <caption>On every click event, emit an array with the latest timer event plus the click event</caption>
  137408. * var clicks = Rx.Observable.fromEvent(document, 'click');
  137409. * var timer = Rx.Observable.interval(1000);
  137410. * var result = clicks.withLatestFrom(timer);
  137411. * result.subscribe(x => console.log(x));
  137412. *
  137413. * @see {@link combineLatest}
  137414. *
  137415. * @param {ObservableInput} other An input Observable to combine with the source
  137416. * Observable. More than one input Observables may be given as argument.
  137417. * @param {Function} [project] Projection function for combining values
  137418. * together. Receives all values in order of the Observables passed, where the
  137419. * first parameter is a value from the source Observable. (e.g.
  137420. * `a.withLatestFrom(b, c, (a1, b1, c1) => a1 + b1 + c1)`). If this is not
  137421. * passed, arrays will be emitted on the output Observable.
  137422. * @return {Observable} An Observable of projected values from the most recent
  137423. * values from each input Observable, or an array of the most recent values from
  137424. * each input Observable.
  137425. * @method withLatestFrom
  137426. * @owner Observable
  137427. */
  137428. function withLatestFrom() {
  137429. var args = [];
  137430. for (var _i = 0; _i < arguments.length; _i++) {
  137431. args[_i - 0] = arguments[_i];
  137432. }
  137433. return withLatestFrom_1.withLatestFrom.apply(void 0, args)(this);
  137434. }
  137435. exports.withLatestFrom = withLatestFrom;
  137436. //# sourceMappingURL=withLatestFrom.js.map
  137437. /***/ }),
  137438. /* 646 */
  137439. /***/ (function(module, exports, __webpack_require__) {
  137440. "use strict";
  137441. var Observable_1 = __webpack_require__(0);
  137442. var zip_1 = __webpack_require__(647);
  137443. Observable_1.Observable.prototype.zip = zip_1.zipProto;
  137444. //# sourceMappingURL=zip.js.map
  137445. /***/ }),
  137446. /* 647 */
  137447. /***/ (function(module, exports, __webpack_require__) {
  137448. "use strict";
  137449. var zip_1 = __webpack_require__(77);
  137450. /* tslint:enable:max-line-length */
  137451. /**
  137452. * @param observables
  137453. * @return {Observable<R>}
  137454. * @method zip
  137455. * @owner Observable
  137456. */
  137457. function zipProto() {
  137458. var observables = [];
  137459. for (var _i = 0; _i < arguments.length; _i++) {
  137460. observables[_i - 0] = arguments[_i];
  137461. }
  137462. return zip_1.zip.apply(void 0, observables)(this);
  137463. }
  137464. exports.zipProto = zipProto;
  137465. //# sourceMappingURL=zip.js.map
  137466. /***/ }),
  137467. /* 648 */
  137468. /***/ (function(module, exports, __webpack_require__) {
  137469. "use strict";
  137470. var Observable_1 = __webpack_require__(0);
  137471. var zipAll_1 = __webpack_require__(649);
  137472. Observable_1.Observable.prototype.zipAll = zipAll_1.zipAll;
  137473. //# sourceMappingURL=zipAll.js.map
  137474. /***/ }),
  137475. /* 649 */
  137476. /***/ (function(module, exports, __webpack_require__) {
  137477. "use strict";
  137478. var zipAll_1 = __webpack_require__(301);
  137479. /**
  137480. * @param project
  137481. * @return {Observable<R>|WebSocketSubject<T>|Observable<T>}
  137482. * @method zipAll
  137483. * @owner Observable
  137484. */
  137485. function zipAll(project) {
  137486. return zipAll_1.zipAll(project)(this);
  137487. }
  137488. exports.zipAll = zipAll;
  137489. //# sourceMappingURL=zipAll.js.map
  137490. /***/ }),
  137491. /* 650 */
  137492. /***/ (function(module, exports, __webpack_require__) {
  137493. "use strict";
  137494. var __extends = (this && this.__extends) || function (d, b) {
  137495. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  137496. function __() { this.constructor = d; }
  137497. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  137498. };
  137499. var Observable_1 = __webpack_require__(0);
  137500. var Notification_1 = __webpack_require__(55);
  137501. var ColdObservable_1 = __webpack_require__(651);
  137502. var HotObservable_1 = __webpack_require__(652);
  137503. var SubscriptionLog_1 = __webpack_require__(303);
  137504. var VirtualTimeScheduler_1 = __webpack_require__(305);
  137505. var defaultMaxFrame = 750;
  137506. var TestScheduler = (function (_super) {
  137507. __extends(TestScheduler, _super);
  137508. function TestScheduler(assertDeepEqual) {
  137509. _super.call(this, VirtualTimeScheduler_1.VirtualAction, defaultMaxFrame);
  137510. this.assertDeepEqual = assertDeepEqual;
  137511. this.hotObservables = [];
  137512. this.coldObservables = [];
  137513. this.flushTests = [];
  137514. }
  137515. TestScheduler.prototype.createTime = function (marbles) {
  137516. var indexOf = marbles.indexOf('|');
  137517. if (indexOf === -1) {
  137518. throw new Error('marble diagram for time should have a completion marker "|"');
  137519. }
  137520. return indexOf * TestScheduler.frameTimeFactor;
  137521. };
  137522. TestScheduler.prototype.createColdObservable = function (marbles, values, error) {
  137523. if (marbles.indexOf('^') !== -1) {
  137524. throw new Error('cold observable cannot have subscription offset "^"');
  137525. }
  137526. if (marbles.indexOf('!') !== -1) {
  137527. throw new Error('cold observable cannot have unsubscription marker "!"');
  137528. }
  137529. var messages = TestScheduler.parseMarbles(marbles, values, error);
  137530. var cold = new ColdObservable_1.ColdObservable(messages, this);
  137531. this.coldObservables.push(cold);
  137532. return cold;
  137533. };
  137534. TestScheduler.prototype.createHotObservable = function (marbles, values, error) {
  137535. if (marbles.indexOf('!') !== -1) {
  137536. throw new Error('hot observable cannot have unsubscription marker "!"');
  137537. }
  137538. var messages = TestScheduler.parseMarbles(marbles, values, error);
  137539. var subject = new HotObservable_1.HotObservable(messages, this);
  137540. this.hotObservables.push(subject);
  137541. return subject;
  137542. };
  137543. TestScheduler.prototype.materializeInnerObservable = function (observable, outerFrame) {
  137544. var _this = this;
  137545. var messages = [];
  137546. observable.subscribe(function (value) {
  137547. messages.push({ frame: _this.frame - outerFrame, notification: Notification_1.Notification.createNext(value) });
  137548. }, function (err) {
  137549. messages.push({ frame: _this.frame - outerFrame, notification: Notification_1.Notification.createError(err) });
  137550. }, function () {
  137551. messages.push({ frame: _this.frame - outerFrame, notification: Notification_1.Notification.createComplete() });
  137552. });
  137553. return messages;
  137554. };
  137555. TestScheduler.prototype.expectObservable = function (observable, unsubscriptionMarbles) {
  137556. var _this = this;
  137557. if (unsubscriptionMarbles === void 0) { unsubscriptionMarbles = null; }
  137558. var actual = [];
  137559. var flushTest = { actual: actual, ready: false };
  137560. var unsubscriptionFrame = TestScheduler
  137561. .parseMarblesAsSubscriptions(unsubscriptionMarbles).unsubscribedFrame;
  137562. var subscription;
  137563. this.schedule(function () {
  137564. subscription = observable.subscribe(function (x) {
  137565. var value = x;
  137566. // Support Observable-of-Observables
  137567. if (x instanceof Observable_1.Observable) {
  137568. value = _this.materializeInnerObservable(value, _this.frame);
  137569. }
  137570. actual.push({ frame: _this.frame, notification: Notification_1.Notification.createNext(value) });
  137571. }, function (err) {
  137572. actual.push({ frame: _this.frame, notification: Notification_1.Notification.createError(err) });
  137573. }, function () {
  137574. actual.push({ frame: _this.frame, notification: Notification_1.Notification.createComplete() });
  137575. });
  137576. }, 0);
  137577. if (unsubscriptionFrame !== Number.POSITIVE_INFINITY) {
  137578. this.schedule(function () { return subscription.unsubscribe(); }, unsubscriptionFrame);
  137579. }
  137580. this.flushTests.push(flushTest);
  137581. return {
  137582. toBe: function (marbles, values, errorValue) {
  137583. flushTest.ready = true;
  137584. flushTest.expected = TestScheduler.parseMarbles(marbles, values, errorValue, true);
  137585. }
  137586. };
  137587. };
  137588. TestScheduler.prototype.expectSubscriptions = function (actualSubscriptionLogs) {
  137589. var flushTest = { actual: actualSubscriptionLogs, ready: false };
  137590. this.flushTests.push(flushTest);
  137591. return {
  137592. toBe: function (marbles) {
  137593. var marblesArray = (typeof marbles === 'string') ? [marbles] : marbles;
  137594. flushTest.ready = true;
  137595. flushTest.expected = marblesArray.map(function (marbles) {
  137596. return TestScheduler.parseMarblesAsSubscriptions(marbles);
  137597. });
  137598. }
  137599. };
  137600. };
  137601. TestScheduler.prototype.flush = function () {
  137602. var hotObservables = this.hotObservables;
  137603. while (hotObservables.length > 0) {
  137604. hotObservables.shift().setup();
  137605. }
  137606. _super.prototype.flush.call(this);
  137607. var readyFlushTests = this.flushTests.filter(function (test) { return test.ready; });
  137608. while (readyFlushTests.length > 0) {
  137609. var test = readyFlushTests.shift();
  137610. this.assertDeepEqual(test.actual, test.expected);
  137611. }
  137612. };
  137613. TestScheduler.parseMarblesAsSubscriptions = function (marbles) {
  137614. if (typeof marbles !== 'string') {
  137615. return new SubscriptionLog_1.SubscriptionLog(Number.POSITIVE_INFINITY);
  137616. }
  137617. var len = marbles.length;
  137618. var groupStart = -1;
  137619. var subscriptionFrame = Number.POSITIVE_INFINITY;
  137620. var unsubscriptionFrame = Number.POSITIVE_INFINITY;
  137621. for (var i = 0; i < len; i++) {
  137622. var frame = i * this.frameTimeFactor;
  137623. var c = marbles[i];
  137624. switch (c) {
  137625. case '-':
  137626. case ' ':
  137627. break;
  137628. case '(':
  137629. groupStart = frame;
  137630. break;
  137631. case ')':
  137632. groupStart = -1;
  137633. break;
  137634. case '^':
  137635. if (subscriptionFrame !== Number.POSITIVE_INFINITY) {
  137636. throw new Error('found a second subscription point \'^\' in a ' +
  137637. 'subscription marble diagram. There can only be one.');
  137638. }
  137639. subscriptionFrame = groupStart > -1 ? groupStart : frame;
  137640. break;
  137641. case '!':
  137642. if (unsubscriptionFrame !== Number.POSITIVE_INFINITY) {
  137643. throw new Error('found a second subscription point \'^\' in a ' +
  137644. 'subscription marble diagram. There can only be one.');
  137645. }
  137646. unsubscriptionFrame = groupStart > -1 ? groupStart : frame;
  137647. break;
  137648. default:
  137649. throw new Error('there can only be \'^\' and \'!\' markers in a ' +
  137650. 'subscription marble diagram. Found instead \'' + c + '\'.');
  137651. }
  137652. }
  137653. if (unsubscriptionFrame < 0) {
  137654. return new SubscriptionLog_1.SubscriptionLog(subscriptionFrame);
  137655. }
  137656. else {
  137657. return new SubscriptionLog_1.SubscriptionLog(subscriptionFrame, unsubscriptionFrame);
  137658. }
  137659. };
  137660. TestScheduler.parseMarbles = function (marbles, values, errorValue, materializeInnerObservables) {
  137661. if (materializeInnerObservables === void 0) { materializeInnerObservables = false; }
  137662. if (marbles.indexOf('!') !== -1) {
  137663. throw new Error('conventional marble diagrams cannot have the ' +
  137664. 'unsubscription marker "!"');
  137665. }
  137666. var len = marbles.length;
  137667. var testMessages = [];
  137668. var subIndex = marbles.indexOf('^');
  137669. var frameOffset = subIndex === -1 ? 0 : (subIndex * -this.frameTimeFactor);
  137670. var getValue = typeof values !== 'object' ?
  137671. function (x) { return x; } :
  137672. function (x) {
  137673. // Support Observable-of-Observables
  137674. if (materializeInnerObservables && values[x] instanceof ColdObservable_1.ColdObservable) {
  137675. return values[x].messages;
  137676. }
  137677. return values[x];
  137678. };
  137679. var groupStart = -1;
  137680. for (var i = 0; i < len; i++) {
  137681. var frame = i * this.frameTimeFactor + frameOffset;
  137682. var notification = void 0;
  137683. var c = marbles[i];
  137684. switch (c) {
  137685. case '-':
  137686. case ' ':
  137687. break;
  137688. case '(':
  137689. groupStart = frame;
  137690. break;
  137691. case ')':
  137692. groupStart = -1;
  137693. break;
  137694. case '|':
  137695. notification = Notification_1.Notification.createComplete();
  137696. break;
  137697. case '^':
  137698. break;
  137699. case '#':
  137700. notification = Notification_1.Notification.createError(errorValue || 'error');
  137701. break;
  137702. default:
  137703. notification = Notification_1.Notification.createNext(getValue(c));
  137704. break;
  137705. }
  137706. if (notification) {
  137707. testMessages.push({ frame: groupStart > -1 ? groupStart : frame, notification: notification });
  137708. }
  137709. }
  137710. return testMessages;
  137711. };
  137712. return TestScheduler;
  137713. }(VirtualTimeScheduler_1.VirtualTimeScheduler));
  137714. exports.TestScheduler = TestScheduler;
  137715. //# sourceMappingURL=TestScheduler.js.map
  137716. /***/ }),
  137717. /* 651 */
  137718. /***/ (function(module, exports, __webpack_require__) {
  137719. "use strict";
  137720. var __extends = (this && this.__extends) || function (d, b) {
  137721. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  137722. function __() { this.constructor = d; }
  137723. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  137724. };
  137725. var Observable_1 = __webpack_require__(0);
  137726. var Subscription_1 = __webpack_require__(14);
  137727. var SubscriptionLoggable_1 = __webpack_require__(302);
  137728. var applyMixins_1 = __webpack_require__(304);
  137729. /**
  137730. * We need this JSDoc comment for affecting ESDoc.
  137731. * @ignore
  137732. * @extends {Ignored}
  137733. */
  137734. var ColdObservable = (function (_super) {
  137735. __extends(ColdObservable, _super);
  137736. function ColdObservable(messages, scheduler) {
  137737. _super.call(this, function (subscriber) {
  137738. var observable = this;
  137739. var index = observable.logSubscribedFrame();
  137740. subscriber.add(new Subscription_1.Subscription(function () {
  137741. observable.logUnsubscribedFrame(index);
  137742. }));
  137743. observable.scheduleMessages(subscriber);
  137744. return subscriber;
  137745. });
  137746. this.messages = messages;
  137747. this.subscriptions = [];
  137748. this.scheduler = scheduler;
  137749. }
  137750. ColdObservable.prototype.scheduleMessages = function (subscriber) {
  137751. var messagesLength = this.messages.length;
  137752. for (var i = 0; i < messagesLength; i++) {
  137753. var message = this.messages[i];
  137754. subscriber.add(this.scheduler.schedule(function (_a) {
  137755. var message = _a.message, subscriber = _a.subscriber;
  137756. message.notification.observe(subscriber);
  137757. }, message.frame, { message: message, subscriber: subscriber }));
  137758. }
  137759. };
  137760. return ColdObservable;
  137761. }(Observable_1.Observable));
  137762. exports.ColdObservable = ColdObservable;
  137763. applyMixins_1.applyMixins(ColdObservable, [SubscriptionLoggable_1.SubscriptionLoggable]);
  137764. //# sourceMappingURL=ColdObservable.js.map
  137765. /***/ }),
  137766. /* 652 */
  137767. /***/ (function(module, exports, __webpack_require__) {
  137768. "use strict";
  137769. var __extends = (this && this.__extends) || function (d, b) {
  137770. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  137771. function __() { this.constructor = d; }
  137772. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  137773. };
  137774. var Subject_1 = __webpack_require__(12);
  137775. var Subscription_1 = __webpack_require__(14);
  137776. var SubscriptionLoggable_1 = __webpack_require__(302);
  137777. var applyMixins_1 = __webpack_require__(304);
  137778. /**
  137779. * We need this JSDoc comment for affecting ESDoc.
  137780. * @ignore
  137781. * @extends {Ignored}
  137782. */
  137783. var HotObservable = (function (_super) {
  137784. __extends(HotObservable, _super);
  137785. function HotObservable(messages, scheduler) {
  137786. _super.call(this);
  137787. this.messages = messages;
  137788. this.subscriptions = [];
  137789. this.scheduler = scheduler;
  137790. }
  137791. /** @deprecated internal use only */ HotObservable.prototype._subscribe = function (subscriber) {
  137792. var subject = this;
  137793. var index = subject.logSubscribedFrame();
  137794. subscriber.add(new Subscription_1.Subscription(function () {
  137795. subject.logUnsubscribedFrame(index);
  137796. }));
  137797. return _super.prototype._subscribe.call(this, subscriber);
  137798. };
  137799. HotObservable.prototype.setup = function () {
  137800. var subject = this;
  137801. var messagesLength = subject.messages.length;
  137802. /* tslint:disable:no-var-keyword */
  137803. for (var i = 0; i < messagesLength; i++) {
  137804. (function () {
  137805. var message = subject.messages[i];
  137806. /* tslint:enable */
  137807. subject.scheduler.schedule(function () { message.notification.observe(subject); }, message.frame);
  137808. })();
  137809. }
  137810. };
  137811. return HotObservable;
  137812. }(Subject_1.Subject));
  137813. exports.HotObservable = HotObservable;
  137814. applyMixins_1.applyMixins(HotObservable, [SubscriptionLoggable_1.SubscriptionLoggable]);
  137815. //# sourceMappingURL=HotObservable.js.map
  137816. /***/ }),
  137817. /* 653 */
  137818. /***/ (function(module, exports, __webpack_require__) {
  137819. "use strict";
  137820. var AnimationFrameAction_1 = __webpack_require__(654);
  137821. var AnimationFrameScheduler_1 = __webpack_require__(656);
  137822. /**
  137823. *
  137824. * Animation Frame Scheduler
  137825. *
  137826. * <span class="informal">Perform task when `window.requestAnimationFrame` would fire</span>
  137827. *
  137828. * When `animationFrame` scheduler is used with delay, it will fall back to {@link async} scheduler
  137829. * behaviour.
  137830. *
  137831. * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.
  137832. * It makes sure scheduled task will happen just before next browser content repaint,
  137833. * thus performing animations as efficiently as possible.
  137834. *
  137835. * @example <caption>Schedule div height animation</caption>
  137836. * const div = document.querySelector('.some-div');
  137837. *
  137838. * Rx.Scheduler.schedule(function(height) {
  137839. * div.style.height = height + "px";
  137840. *
  137841. * this.schedule(height + 1); // `this` references currently executing Action,
  137842. * // which we reschedule with new state
  137843. * }, 0, 0);
  137844. *
  137845. * // You will see .some-div element growing in height
  137846. *
  137847. *
  137848. * @static true
  137849. * @name animationFrame
  137850. * @owner Scheduler
  137851. */
  137852. exports.animationFrame = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction);
  137853. //# sourceMappingURL=animationFrame.js.map
  137854. /***/ }),
  137855. /* 654 */
  137856. /***/ (function(module, exports, __webpack_require__) {
  137857. "use strict";
  137858. var __extends = (this && this.__extends) || function (d, b) {
  137859. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  137860. function __() { this.constructor = d; }
  137861. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  137862. };
  137863. var AsyncAction_1 = __webpack_require__(57);
  137864. var AnimationFrame_1 = __webpack_require__(655);
  137865. /**
  137866. * We need this JSDoc comment for affecting ESDoc.
  137867. * @ignore
  137868. * @extends {Ignored}
  137869. */
  137870. var AnimationFrameAction = (function (_super) {
  137871. __extends(AnimationFrameAction, _super);
  137872. function AnimationFrameAction(scheduler, work) {
  137873. _super.call(this, scheduler, work);
  137874. this.scheduler = scheduler;
  137875. this.work = work;
  137876. }
  137877. AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
  137878. if (delay === void 0) { delay = 0; }
  137879. // If delay is greater than 0, request as an async action.
  137880. if (delay !== null && delay > 0) {
  137881. return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
  137882. }
  137883. // Push the action to the end of the scheduler queue.
  137884. scheduler.actions.push(this);
  137885. // If an animation frame has already been requested, don't request another
  137886. // one. If an animation frame hasn't been requested yet, request one. Return
  137887. // the current animation frame request id.
  137888. return scheduler.scheduled || (scheduler.scheduled = AnimationFrame_1.AnimationFrame.requestAnimationFrame(scheduler.flush.bind(scheduler, null)));
  137889. };
  137890. AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
  137891. if (delay === void 0) { delay = 0; }
  137892. // If delay exists and is greater than 0, or if the delay is null (the
  137893. // action wasn't rescheduled) but was originally scheduled as an async
  137894. // action, then recycle as an async action.
  137895. if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
  137896. return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
  137897. }
  137898. // If the scheduler queue is empty, cancel the requested animation frame and
  137899. // set the scheduled flag to undefined so the next AnimationFrameAction will
  137900. // request its own.
  137901. if (scheduler.actions.length === 0) {
  137902. AnimationFrame_1.AnimationFrame.cancelAnimationFrame(id);
  137903. scheduler.scheduled = undefined;
  137904. }
  137905. // Return undefined so the action knows to request a new async id if it's rescheduled.
  137906. return undefined;
  137907. };
  137908. return AnimationFrameAction;
  137909. }(AsyncAction_1.AsyncAction));
  137910. exports.AnimationFrameAction = AnimationFrameAction;
  137911. //# sourceMappingURL=AnimationFrameAction.js.map
  137912. /***/ }),
  137913. /* 655 */
  137914. /***/ (function(module, exports, __webpack_require__) {
  137915. "use strict";
  137916. var root_1 = __webpack_require__(19);
  137917. var RequestAnimationFrameDefinition = (function () {
  137918. function RequestAnimationFrameDefinition(root) {
  137919. if (root.requestAnimationFrame) {
  137920. this.cancelAnimationFrame = root.cancelAnimationFrame.bind(root);
  137921. this.requestAnimationFrame = root.requestAnimationFrame.bind(root);
  137922. }
  137923. else if (root.mozRequestAnimationFrame) {
  137924. this.cancelAnimationFrame = root.mozCancelAnimationFrame.bind(root);
  137925. this.requestAnimationFrame = root.mozRequestAnimationFrame.bind(root);
  137926. }
  137927. else if (root.webkitRequestAnimationFrame) {
  137928. this.cancelAnimationFrame = root.webkitCancelAnimationFrame.bind(root);
  137929. this.requestAnimationFrame = root.webkitRequestAnimationFrame.bind(root);
  137930. }
  137931. else if (root.msRequestAnimationFrame) {
  137932. this.cancelAnimationFrame = root.msCancelAnimationFrame.bind(root);
  137933. this.requestAnimationFrame = root.msRequestAnimationFrame.bind(root);
  137934. }
  137935. else if (root.oRequestAnimationFrame) {
  137936. this.cancelAnimationFrame = root.oCancelAnimationFrame.bind(root);
  137937. this.requestAnimationFrame = root.oRequestAnimationFrame.bind(root);
  137938. }
  137939. else {
  137940. this.cancelAnimationFrame = root.clearTimeout.bind(root);
  137941. this.requestAnimationFrame = function (cb) { return root.setTimeout(cb, 1000 / 60); };
  137942. }
  137943. }
  137944. return RequestAnimationFrameDefinition;
  137945. }());
  137946. exports.RequestAnimationFrameDefinition = RequestAnimationFrameDefinition;
  137947. exports.AnimationFrame = new RequestAnimationFrameDefinition(root_1.root);
  137948. //# sourceMappingURL=AnimationFrame.js.map
  137949. /***/ }),
  137950. /* 656 */
  137951. /***/ (function(module, exports, __webpack_require__) {
  137952. "use strict";
  137953. var __extends = (this && this.__extends) || function (d, b) {
  137954. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  137955. function __() { this.constructor = d; }
  137956. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  137957. };
  137958. var AsyncScheduler_1 = __webpack_require__(58);
  137959. var AnimationFrameScheduler = (function (_super) {
  137960. __extends(AnimationFrameScheduler, _super);
  137961. function AnimationFrameScheduler() {
  137962. _super.apply(this, arguments);
  137963. }
  137964. AnimationFrameScheduler.prototype.flush = function (action) {
  137965. this.active = true;
  137966. this.scheduled = undefined;
  137967. var actions = this.actions;
  137968. var error;
  137969. var index = -1;
  137970. var count = actions.length;
  137971. action = action || actions.shift();
  137972. do {
  137973. if (error = action.execute(action.state, action.delay)) {
  137974. break;
  137975. }
  137976. } while (++index < count && (action = actions.shift()));
  137977. this.active = false;
  137978. if (error) {
  137979. while (++index < count && (action = actions.shift())) {
  137980. action.unsubscribe();
  137981. }
  137982. throw error;
  137983. }
  137984. };
  137985. return AnimationFrameScheduler;
  137986. }(AsyncScheduler_1.AsyncScheduler));
  137987. exports.AnimationFrameScheduler = AnimationFrameScheduler;
  137988. //# sourceMappingURL=AnimationFrameScheduler.js.map
  137989. /***/ }),
  137990. /* 657 */
  137991. /***/ (function(module, exports, __webpack_require__) {
  137992. "use strict";
  137993. var audit_1 = __webpack_require__(122);
  137994. exports.audit = audit_1.audit;
  137995. var auditTime_1 = __webpack_require__(248);
  137996. exports.auditTime = auditTime_1.auditTime;
  137997. var buffer_1 = __webpack_require__(219);
  137998. exports.buffer = buffer_1.buffer;
  137999. var bufferCount_1 = __webpack_require__(220);
  138000. exports.bufferCount = bufferCount_1.bufferCount;
  138001. var bufferTime_1 = __webpack_require__(221);
  138002. exports.bufferTime = bufferTime_1.bufferTime;
  138003. var bufferToggle_1 = __webpack_require__(222);
  138004. exports.bufferToggle = bufferToggle_1.bufferToggle;
  138005. var bufferWhen_1 = __webpack_require__(223);
  138006. exports.bufferWhen = bufferWhen_1.bufferWhen;
  138007. var catchError_1 = __webpack_require__(225);
  138008. exports.catchError = catchError_1.catchError;
  138009. var combineAll_1 = __webpack_require__(226);
  138010. exports.combineAll = combineAll_1.combineAll;
  138011. var combineLatest_1 = __webpack_require__(74);
  138012. exports.combineLatest = combineLatest_1.combineLatest;
  138013. var concat_1 = __webpack_require__(227);
  138014. exports.concat = concat_1.concat;
  138015. var concatAll_1 = __webpack_require__(114);
  138016. exports.concatAll = concatAll_1.concatAll;
  138017. var concatMap_1 = __webpack_require__(117);
  138018. exports.concatMap = concatMap_1.concatMap;
  138019. var concatMapTo_1 = __webpack_require__(228);
  138020. exports.concatMapTo = concatMapTo_1.concatMapTo;
  138021. var count_1 = __webpack_require__(229);
  138022. exports.count = count_1.count;
  138023. var debounce_1 = __webpack_require__(231);
  138024. exports.debounce = debounce_1.debounce;
  138025. var debounceTime_1 = __webpack_require__(232);
  138026. exports.debounceTime = debounceTime_1.debounceTime;
  138027. var defaultIfEmpty_1 = __webpack_require__(118);
  138028. exports.defaultIfEmpty = defaultIfEmpty_1.defaultIfEmpty;
  138029. var delay_1 = __webpack_require__(233);
  138030. exports.delay = delay_1.delay;
  138031. var delayWhen_1 = __webpack_require__(234);
  138032. exports.delayWhen = delayWhen_1.delayWhen;
  138033. var dematerialize_1 = __webpack_require__(230);
  138034. exports.dematerialize = dematerialize_1.dematerialize;
  138035. var distinct_1 = __webpack_require__(235);
  138036. exports.distinct = distinct_1.distinct;
  138037. var distinctUntilChanged_1 = __webpack_require__(119);
  138038. exports.distinctUntilChanged = distinctUntilChanged_1.distinctUntilChanged;
  138039. var distinctUntilKeyChanged_1 = __webpack_require__(236);
  138040. exports.distinctUntilKeyChanged = distinctUntilKeyChanged_1.distinctUntilKeyChanged;
  138041. var elementAt_1 = __webpack_require__(241);
  138042. exports.elementAt = elementAt_1.elementAt;
  138043. var every_1 = __webpack_require__(250);
  138044. exports.every = every_1.every;
  138045. var exhaust_1 = __webpack_require__(238);
  138046. exports.exhaust = exhaust_1.exhaust;
  138047. var exhaustMap_1 = __webpack_require__(239);
  138048. exports.exhaustMap = exhaustMap_1.exhaustMap;
  138049. var expand_1 = __webpack_require__(240);
  138050. exports.expand = expand_1.expand;
  138051. var filter_1 = __webpack_require__(120);
  138052. exports.filter = filter_1.filter;
  138053. var finalize_1 = __webpack_require__(242);
  138054. exports.finalize = finalize_1.finalize;
  138055. var find_1 = __webpack_require__(121);
  138056. exports.find = find_1.find;
  138057. var findIndex_1 = __webpack_require__(243);
  138058. exports.findIndex = findIndex_1.findIndex;
  138059. var first_1 = __webpack_require__(244);
  138060. exports.first = first_1.first;
  138061. var groupBy_1 = __webpack_require__(245);
  138062. exports.groupBy = groupBy_1.groupBy;
  138063. var ignoreElements_1 = __webpack_require__(246);
  138064. exports.ignoreElements = ignoreElements_1.ignoreElements;
  138065. var isEmpty_1 = __webpack_require__(247);
  138066. exports.isEmpty = isEmpty_1.isEmpty;
  138067. var last_1 = __webpack_require__(249);
  138068. exports.last = last_1.last;
  138069. var map_1 = __webpack_require__(49);
  138070. exports.map = map_1.map;
  138071. var mapTo_1 = __webpack_require__(252);
  138072. exports.mapTo = mapTo_1.mapTo;
  138073. var materialize_1 = __webpack_require__(253);
  138074. exports.materialize = materialize_1.materialize;
  138075. var max_1 = __webpack_require__(254);
  138076. exports.max = max_1.max;
  138077. var merge_1 = __webpack_require__(255);
  138078. exports.merge = merge_1.merge;
  138079. var mergeAll_1 = __webpack_require__(65);
  138080. exports.mergeAll = mergeAll_1.mergeAll;
  138081. var mergeMap_1 = __webpack_require__(45);
  138082. exports.mergeMap = mergeMap_1.mergeMap;
  138083. var mergeMap_2 = __webpack_require__(45);
  138084. exports.flatMap = mergeMap_2.mergeMap;
  138085. var mergeMapTo_1 = __webpack_require__(256);
  138086. exports.mergeMapTo = mergeMapTo_1.mergeMapTo;
  138087. var mergeScan_1 = __webpack_require__(257);
  138088. exports.mergeScan = mergeScan_1.mergeScan;
  138089. var min_1 = __webpack_require__(258);
  138090. exports.min = min_1.min;
  138091. var multicast_1 = __webpack_require__(39);
  138092. exports.multicast = multicast_1.multicast;
  138093. var observeOn_1 = __webpack_require__(75);
  138094. exports.observeOn = observeOn_1.observeOn;
  138095. var onErrorResumeNext_1 = __webpack_require__(116);
  138096. exports.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNext;
  138097. var pairwise_1 = __webpack_require__(259);
  138098. exports.pairwise = pairwise_1.pairwise;
  138099. var partition_1 = __webpack_require__(260);
  138100. exports.partition = partition_1.partition;
  138101. var pluck_1 = __webpack_require__(261);
  138102. exports.pluck = pluck_1.pluck;
  138103. var publish_1 = __webpack_require__(262);
  138104. exports.publish = publish_1.publish;
  138105. var publishBehavior_1 = __webpack_require__(263);
  138106. exports.publishBehavior = publishBehavior_1.publishBehavior;
  138107. var publishLast_1 = __webpack_require__(266);
  138108. exports.publishLast = publishLast_1.publishLast;
  138109. var publishReplay_1 = __webpack_require__(265);
  138110. exports.publishReplay = publishReplay_1.publishReplay;
  138111. var race_1 = __webpack_require__(267);
  138112. exports.race = race_1.race;
  138113. var reduce_1 = __webpack_require__(60);
  138114. exports.reduce = reduce_1.reduce;
  138115. var repeat_1 = __webpack_require__(268);
  138116. exports.repeat = repeat_1.repeat;
  138117. var repeatWhen_1 = __webpack_require__(269);
  138118. exports.repeatWhen = repeatWhen_1.repeatWhen;
  138119. var retry_1 = __webpack_require__(270);
  138120. exports.retry = retry_1.retry;
  138121. var retryWhen_1 = __webpack_require__(271);
  138122. exports.retryWhen = retryWhen_1.retryWhen;
  138123. var refCount_1 = __webpack_require__(90);
  138124. exports.refCount = refCount_1.refCount;
  138125. var sample_1 = __webpack_require__(272);
  138126. exports.sample = sample_1.sample;
  138127. var sampleTime_1 = __webpack_require__(273);
  138128. exports.sampleTime = sampleTime_1.sampleTime;
  138129. var scan_1 = __webpack_require__(123);
  138130. exports.scan = scan_1.scan;
  138131. var sequenceEqual_1 = __webpack_require__(274);
  138132. exports.sequenceEqual = sequenceEqual_1.sequenceEqual;
  138133. var share_1 = __webpack_require__(161);
  138134. exports.share = share_1.share;
  138135. var shareReplay_1 = __webpack_require__(275);
  138136. exports.shareReplay = shareReplay_1.shareReplay;
  138137. var single_1 = __webpack_require__(276);
  138138. exports.single = single_1.single;
  138139. var skip_1 = __webpack_require__(277);
  138140. exports.skip = skip_1.skip;
  138141. var skipLast_1 = __webpack_require__(278);
  138142. exports.skipLast = skipLast_1.skipLast;
  138143. var skipUntil_1 = __webpack_require__(279);
  138144. exports.skipUntil = skipUntil_1.skipUntil;
  138145. var skipWhile_1 = __webpack_require__(280);
  138146. exports.skipWhile = skipWhile_1.skipWhile;
  138147. var startWith_1 = __webpack_require__(281);
  138148. exports.startWith = startWith_1.startWith;
  138149. /**
  138150. * TODO(https://github.com/ReactiveX/rxjs/issues/2900): Add back subscribeOn once it can be
  138151. * treeshaken. Currently if this export is added back, it
  138152. * forces apps to bring in asap scheduler along with
  138153. * Immediate, root, and other supporting code.
  138154. */
  138155. // export { subscribeOn } from './operators/subscribeOn';
  138156. var switchAll_1 = __webpack_require__(284);
  138157. exports.switchAll = switchAll_1.switchAll;
  138158. var switchMap_1 = __webpack_require__(125);
  138159. exports.switchMap = switchMap_1.switchMap;
  138160. var switchMapTo_1 = __webpack_require__(285);
  138161. exports.switchMapTo = switchMapTo_1.switchMapTo;
  138162. var take_1 = __webpack_require__(286);
  138163. exports.take = take_1.take;
  138164. var takeLast_1 = __webpack_require__(124);
  138165. exports.takeLast = takeLast_1.takeLast;
  138166. var takeUntil_1 = __webpack_require__(194);
  138167. exports.takeUntil = takeUntil_1.takeUntil;
  138168. var takeWhile_1 = __webpack_require__(287);
  138169. exports.takeWhile = takeWhile_1.takeWhile;
  138170. var tap_1 = __webpack_require__(237);
  138171. exports.tap = tap_1.tap;
  138172. var throttle_1 = __webpack_require__(80);
  138173. exports.throttle = throttle_1.throttle;
  138174. var throttleTime_1 = __webpack_require__(288);
  138175. exports.throttleTime = throttleTime_1.throttleTime;
  138176. var timeInterval_1 = __webpack_require__(290);
  138177. exports.timeInterval = timeInterval_1.timeInterval;
  138178. var timeout_1 = __webpack_require__(291);
  138179. exports.timeout = timeout_1.timeout;
  138180. var timeoutWith_1 = __webpack_require__(293);
  138181. exports.timeoutWith = timeoutWith_1.timeoutWith;
  138182. var timestamp_1 = __webpack_require__(126);
  138183. exports.timestamp = timestamp_1.timestamp;
  138184. var toArray_1 = __webpack_require__(294);
  138185. exports.toArray = toArray_1.toArray;
  138186. var window_1 = __webpack_require__(295);
  138187. exports.window = window_1.window;
  138188. var windowCount_1 = __webpack_require__(296);
  138189. exports.windowCount = windowCount_1.windowCount;
  138190. var windowTime_1 = __webpack_require__(297);
  138191. exports.windowTime = windowTime_1.windowTime;
  138192. var windowToggle_1 = __webpack_require__(298);
  138193. exports.windowToggle = windowToggle_1.windowToggle;
  138194. var windowWhen_1 = __webpack_require__(299);
  138195. exports.windowWhen = windowWhen_1.windowWhen;
  138196. var withLatestFrom_1 = __webpack_require__(300);
  138197. exports.withLatestFrom = withLatestFrom_1.withLatestFrom;
  138198. var zip_1 = __webpack_require__(77);
  138199. exports.zip = zip_1.zip;
  138200. var zipAll_1 = __webpack_require__(301);
  138201. exports.zipAll = zipAll_1.zipAll;
  138202. //# sourceMappingURL=operators.js.map
  138203. /***/ }),
  138204. /* 658 */
  138205. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138206. "use strict";
  138207. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ModalSlideIn; });
  138208. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ModalSlideOut; });
  138209. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ModalMDSlideIn; });
  138210. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ModalMDSlideOut; });
  138211. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  138212. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__ = __webpack_require__(43);
  138213. var __extends = (this && this.__extends) || (function () {
  138214. var extendStatics = Object.setPrototypeOf ||
  138215. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  138216. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  138217. return function (d, b) {
  138218. extendStatics(d, b);
  138219. function __() { this.constructor = d; }
  138220. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  138221. };
  138222. })();
  138223. /**
  138224. * Animations for modals
  138225. */
  138226. var ModalSlideIn = (function (_super) {
  138227. __extends(ModalSlideIn, _super);
  138228. function ModalSlideIn() {
  138229. return _super !== null && _super.apply(this, arguments) || this;
  138230. }
  138231. ModalSlideIn.prototype.init = function () {
  138232. _super.prototype.init.call(this);
  138233. var ele = this.enteringView.pageRef().nativeElement;
  138234. var backdropEle = ele.querySelector('ion-backdrop');
  138235. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, backdropEle);
  138236. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.modal-wrapper'));
  138237. wrapper.beforeStyles({ 'opacity': 1 });
  138238. wrapper.fromTo('translateY', '100%', '0%');
  138239. backdrop.fromTo('opacity', 0.01, 0.4);
  138240. this
  138241. .element(this.enteringView.pageRef())
  138242. .easing('cubic-bezier(0.36,0.66,0.04,1)')
  138243. .duration(400)
  138244. .add(backdrop)
  138245. .add(wrapper);
  138246. };
  138247. return ModalSlideIn;
  138248. }(__WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__["a" /* PageTransition */]));
  138249. var ModalSlideOut = (function (_super) {
  138250. __extends(ModalSlideOut, _super);
  138251. function ModalSlideOut() {
  138252. return _super !== null && _super.apply(this, arguments) || this;
  138253. }
  138254. ModalSlideOut.prototype.init = function () {
  138255. _super.prototype.init.call(this);
  138256. var ele = this.leavingView.pageRef().nativeElement;
  138257. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  138258. var wrapperEle = ele.querySelector('.modal-wrapper');
  138259. var wrapperEleRect = wrapperEle.getBoundingClientRect();
  138260. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  138261. // height of the screen - top of the container tells us how much to scoot it down
  138262. // so it's off-screen
  138263. wrapper.fromTo('translateY', '0px', this.plt.height() - wrapperEleRect.top + "px");
  138264. backdrop.fromTo('opacity', 0.4, 0.0);
  138265. this
  138266. .element(this.leavingView.pageRef())
  138267. .easing('ease-out')
  138268. .duration(250)
  138269. .add(backdrop)
  138270. .add(wrapper);
  138271. };
  138272. return ModalSlideOut;
  138273. }(__WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__["a" /* PageTransition */]));
  138274. var ModalMDSlideIn = (function (_super) {
  138275. __extends(ModalMDSlideIn, _super);
  138276. function ModalMDSlideIn() {
  138277. return _super !== null && _super.apply(this, arguments) || this;
  138278. }
  138279. ModalMDSlideIn.prototype.init = function () {
  138280. _super.prototype.init.call(this);
  138281. var ele = this.enteringView.pageRef().nativeElement;
  138282. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  138283. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.modal-wrapper'));
  138284. backdrop.fromTo('opacity', 0.01, 0.4);
  138285. wrapper.fromTo('translateY', '40px', '0px');
  138286. wrapper.fromTo('opacity', 0.01, 1);
  138287. var DURATION = 280;
  138288. var EASING = 'cubic-bezier(0.36,0.66,0.04,1)';
  138289. this.element(this.enteringView.pageRef()).easing(EASING).duration(DURATION)
  138290. .add(backdrop)
  138291. .add(wrapper);
  138292. };
  138293. return ModalMDSlideIn;
  138294. }(__WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__["a" /* PageTransition */]));
  138295. var ModalMDSlideOut = (function (_super) {
  138296. __extends(ModalMDSlideOut, _super);
  138297. function ModalMDSlideOut() {
  138298. return _super !== null && _super.apply(this, arguments) || this;
  138299. }
  138300. ModalMDSlideOut.prototype.init = function () {
  138301. _super.prototype.init.call(this);
  138302. var ele = this.leavingView.pageRef().nativeElement;
  138303. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  138304. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.modal-wrapper'));
  138305. backdrop.fromTo('opacity', 0.4, 0.0);
  138306. wrapper.fromTo('translateY', '0px', '40px');
  138307. wrapper.fromTo('opacity', 0.99, 0);
  138308. this
  138309. .element(this.leavingView.pageRef())
  138310. .duration(200)
  138311. .easing('cubic-bezier(0.47,0,0.745,0.715)')
  138312. .add(wrapper)
  138313. .add(backdrop);
  138314. };
  138315. return ModalMDSlideOut;
  138316. }(__WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__["a" /* PageTransition */]));
  138317. //# sourceMappingURL=modal-transitions.js.map
  138318. /***/ }),
  138319. /* 659 */
  138320. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138321. "use strict";
  138322. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PopoverImpl; });
  138323. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  138324. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__popover_component__ = __webpack_require__(131);
  138325. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__popover_transitions__ = __webpack_require__(660);
  138326. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__ = __webpack_require__(9);
  138327. var __extends = (this && this.__extends) || (function () {
  138328. var extendStatics = Object.setPrototypeOf ||
  138329. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  138330. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  138331. return function (d, b) {
  138332. extendStatics(d, b);
  138333. function __() { this.constructor = d; }
  138334. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  138335. };
  138336. })();
  138337. /**
  138338. * @hidden
  138339. */
  138340. var PopoverImpl = (function (_super) {
  138341. __extends(PopoverImpl, _super);
  138342. function PopoverImpl(app, component, data, opts, config) {
  138343. if (data === void 0) { data = {}; }
  138344. if (opts === void 0) { opts = {}; }
  138345. var _this = this;
  138346. opts.showBackdrop = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.showBackdrop) ? !!opts.showBackdrop : true;
  138347. opts.enableBackdropDismiss = Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["l" /* isPresent */])(opts.enableBackdropDismiss) ? !!opts.enableBackdropDismiss : true;
  138348. data.component = component;
  138349. data.opts = opts;
  138350. _this = _super.call(this, __WEBPACK_IMPORTED_MODULE_1__popover_component__["a" /* PopoverCmp */], data, null) || this;
  138351. _this._app = app;
  138352. _this.isOverlay = true;
  138353. config.setTransition('popover-pop-in', __WEBPACK_IMPORTED_MODULE_2__popover_transitions__["c" /* PopoverPopIn */]);
  138354. config.setTransition('popover-pop-out', __WEBPACK_IMPORTED_MODULE_2__popover_transitions__["d" /* PopoverPopOut */]);
  138355. config.setTransition('popover-md-pop-in', __WEBPACK_IMPORTED_MODULE_2__popover_transitions__["a" /* PopoverMdPopIn */]);
  138356. config.setTransition('popover-md-pop-out', __WEBPACK_IMPORTED_MODULE_2__popover_transitions__["b" /* PopoverMdPopOut */]);
  138357. return _this;
  138358. }
  138359. /**
  138360. * @hidden
  138361. */
  138362. PopoverImpl.prototype.getTransitionName = function (direction) {
  138363. var key = (direction === 'back' ? 'popoverLeave' : 'popoverEnter');
  138364. return this._nav && this._nav.config.get(key);
  138365. };
  138366. /**
  138367. * Present the popover instance.
  138368. *
  138369. * @param {NavOptions} [navOptions={}] Nav options to go with this transition.
  138370. * @returns {Promise} Returns a promise which is resolved when the transition has completed.
  138371. */
  138372. PopoverImpl.prototype.present = function (navOptions) {
  138373. if (navOptions === void 0) { navOptions = {}; }
  138374. return this._app.present(this, navOptions);
  138375. };
  138376. return PopoverImpl;
  138377. }(__WEBPACK_IMPORTED_MODULE_3__navigation_view_controller__["a" /* ViewController */]));
  138378. //# sourceMappingURL=popover-impl.js.map
  138379. /***/ }),
  138380. /* 660 */
  138381. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138382. "use strict";
  138383. /* unused harmony export PopoverTransition */
  138384. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return PopoverPopIn; });
  138385. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return PopoverPopOut; });
  138386. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PopoverMdPopIn; });
  138387. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return PopoverMdPopOut; });
  138388. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  138389. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__ = __webpack_require__(43);
  138390. var __extends = (this && this.__extends) || (function () {
  138391. var extendStatics = Object.setPrototypeOf ||
  138392. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  138393. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  138394. return function (d, b) {
  138395. extendStatics(d, b);
  138396. function __() { this.constructor = d; }
  138397. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  138398. };
  138399. })();
  138400. /**
  138401. * Animations for popover
  138402. */
  138403. var PopoverTransition = (function (_super) {
  138404. __extends(PopoverTransition, _super);
  138405. function PopoverTransition() {
  138406. return _super !== null && _super.apply(this, arguments) || this;
  138407. }
  138408. PopoverTransition.prototype.mdPositionView = function (nativeEle, ev) {
  138409. var originY = 'top';
  138410. var originX = 'left';
  138411. var popoverWrapperEle = nativeEle.querySelector('.popover-wrapper');
  138412. // Popover content width and height
  138413. var popoverEle = nativeEle.querySelector('.popover-content');
  138414. var popoverDim = popoverEle.getBoundingClientRect();
  138415. var popoverWidth = popoverDim.width;
  138416. var popoverHeight = popoverDim.height;
  138417. // Window body width and height
  138418. var bodyWidth = this.plt.width();
  138419. var bodyHeight = this.plt.height();
  138420. // If ev was passed, use that for target element
  138421. var targetDim = ev && ev.target && ev.target.getBoundingClientRect();
  138422. var targetTop = (targetDim && 'top' in targetDim) ? targetDim.top : (bodyHeight / 2) - (popoverHeight / 2);
  138423. var targetLeft = (targetDim && 'left' in targetDim) ? targetDim.left : (bodyWidth / 2) - (popoverWidth / 2);
  138424. var targetHeight = targetDim && targetDim.height || 0;
  138425. var popoverCSS = {
  138426. top: targetTop,
  138427. left: targetLeft
  138428. };
  138429. // If the popover left is less than the padding it is off screen
  138430. // to the left so adjust it, else if the width of the popover
  138431. // exceeds the body width it is off screen to the right so adjust
  138432. if (popoverCSS.left < POPOVER_MD_BODY_PADDING) {
  138433. popoverCSS.left = POPOVER_MD_BODY_PADDING;
  138434. }
  138435. else if (popoverWidth + POPOVER_MD_BODY_PADDING + popoverCSS.left > bodyWidth) {
  138436. popoverCSS.left = bodyWidth - popoverWidth - POPOVER_MD_BODY_PADDING;
  138437. originX = 'right';
  138438. }
  138439. // If the popover when popped down stretches past bottom of screen,
  138440. // make it pop up if there's room above
  138441. if (targetTop + targetHeight + popoverHeight > bodyHeight && targetTop - popoverHeight > 0) {
  138442. popoverCSS.top = targetTop - popoverHeight;
  138443. nativeEle.className = nativeEle.className + ' popover-bottom';
  138444. originY = 'bottom';
  138445. // If there isn't room for it to pop up above the target cut it off
  138446. }
  138447. else if (targetTop + targetHeight + popoverHeight > bodyHeight) {
  138448. popoverEle.style.bottom = POPOVER_MD_BODY_PADDING + 'px';
  138449. }
  138450. popoverEle.style.top = popoverCSS.top + 'px';
  138451. popoverEle.style.left = popoverCSS.left + 'px';
  138452. popoverEle.style[this.plt.Css.transformOrigin] = originY + ' ' + originX;
  138453. // Since the transition starts before styling is done we
  138454. // want to wait for the styles to apply before showing the wrapper
  138455. popoverWrapperEle.style.opacity = '1';
  138456. };
  138457. PopoverTransition.prototype.iosPositionView = function (nativeEle, ev) {
  138458. var originY = 'top';
  138459. var originX = 'left';
  138460. var popoverWrapperEle = nativeEle.querySelector('.popover-wrapper');
  138461. // Popover content width and height
  138462. var popoverEle = nativeEle.querySelector('.popover-content');
  138463. var popoverDim = popoverEle.getBoundingClientRect();
  138464. var popoverWidth = popoverDim.width;
  138465. var popoverHeight = popoverDim.height;
  138466. // Window body width and height
  138467. var bodyWidth = this.plt.width();
  138468. var bodyHeight = this.plt.height();
  138469. // If ev was passed, use that for target element
  138470. var targetDim = ev && ev.target && ev.target.getBoundingClientRect();
  138471. var targetTop = (targetDim && 'top' in targetDim) ? targetDim.top : (bodyHeight / 2) - (popoverHeight / 2);
  138472. var targetLeft = (targetDim && 'left' in targetDim) ? targetDim.left : (bodyWidth / 2);
  138473. var targetWidth = targetDim && targetDim.width || 0;
  138474. var targetHeight = targetDim && targetDim.height || 0;
  138475. // The arrow that shows above the popover on iOS
  138476. var arrowEle = nativeEle.querySelector('.popover-arrow');
  138477. var arrowDim = arrowEle.getBoundingClientRect();
  138478. var arrowWidth = arrowDim.width;
  138479. var arrowHeight = arrowDim.height;
  138480. // If no ev was passed, hide the arrow
  138481. if (!targetDim) {
  138482. arrowEle.style.display = 'none';
  138483. }
  138484. var arrowCSS = {
  138485. top: targetTop + targetHeight,
  138486. left: targetLeft + (targetWidth / 2) - (arrowWidth / 2)
  138487. };
  138488. var popoverCSS = {
  138489. top: targetTop + targetHeight + (arrowHeight - 1),
  138490. left: targetLeft + (targetWidth / 2) - (popoverWidth / 2)
  138491. };
  138492. // If the popover left is less than the padding it is off screen
  138493. // to the left so adjust it, else if the width of the popover
  138494. // exceeds the body width it is off screen to the right so adjust
  138495. //
  138496. var checkSafeAreaLeft = false;
  138497. var checkSafeAreaRight = false;
  138498. // If the popover left is less than the padding it is off screen
  138499. // to the left so adjust it, else if the width of the popover
  138500. // exceeds the body width it is off screen to the right so adjust
  138501. // 25 is a random/arbitrary number. It seems to work fine for ios11
  138502. // and iPhoneX. Is it perfect? No. Does it work? Yes.
  138503. if (popoverCSS.left < (POPOVER_IOS_BODY_PADDING + 25)) {
  138504. checkSafeAreaLeft = true;
  138505. popoverCSS.left = POPOVER_IOS_BODY_PADDING;
  138506. }
  138507. else if ((popoverWidth + POPOVER_IOS_BODY_PADDING + popoverCSS.left + 25) > bodyWidth) {
  138508. // Ok, so we're on the right side of the screen,
  138509. // but now we need to make sure we're still a bit further right
  138510. // cus....notchurally... Again, 25 is random. It works tho
  138511. checkSafeAreaRight = true;
  138512. popoverCSS.left = bodyWidth - popoverWidth - POPOVER_IOS_BODY_PADDING;
  138513. originX = 'right';
  138514. }
  138515. // make it pop up if there's room above
  138516. if (targetTop + targetHeight + popoverHeight > bodyHeight && targetTop - popoverHeight > 0) {
  138517. arrowCSS.top = targetTop - (arrowHeight + 1);
  138518. popoverCSS.top = targetTop - popoverHeight - (arrowHeight - 1);
  138519. nativeEle.className = nativeEle.className + ' popover-bottom';
  138520. originY = 'bottom';
  138521. // If there isn't room for it to pop up above the target cut it off
  138522. }
  138523. else if (targetTop + targetHeight + popoverHeight > bodyHeight) {
  138524. popoverEle.style.bottom = POPOVER_IOS_BODY_PADDING + '%';
  138525. }
  138526. arrowEle.style.top = arrowCSS.top + 'px';
  138527. arrowEle.style.left = arrowCSS.left + 'px';
  138528. popoverEle.style.top = popoverCSS.top + 'px';
  138529. popoverEle.style.left = popoverCSS.left + 'px';
  138530. if (checkSafeAreaLeft) {
  138531. if (CSS.supports('left', 'constant(safe-area-inset-left)')) {
  138532. popoverEle.style.left = "calc(" + popoverCSS.left + "px + constant(safe-area-inset-left)";
  138533. }
  138534. else if (CSS.supports('left', 'env(safe-area-inset-left)')) {
  138535. popoverEle.style.left = "calc(" + popoverCSS.left + "px + env(safe-area-inset-left)";
  138536. }
  138537. }
  138538. if (checkSafeAreaRight) {
  138539. if (CSS.supports('right', 'constant(safe-area-inset-right)')) {
  138540. popoverEle.style.left = "calc(" + popoverCSS.left + "px - constant(safe-area-inset-right)";
  138541. }
  138542. else if (CSS.supports('right', 'env(safe-area-inset-right)')) {
  138543. popoverEle.style.left = "calc(" + popoverCSS.left + "px - env(safe-area-inset-right)";
  138544. }
  138545. }
  138546. popoverEle.style[this.plt.Css.transformOrigin] = originY + ' ' + originX;
  138547. // Since the transition starts before styling is done we
  138548. // want to wait for the styles to apply before showing the wrapper
  138549. popoverWrapperEle.style.opacity = '1';
  138550. };
  138551. return PopoverTransition;
  138552. }(__WEBPACK_IMPORTED_MODULE_1__transitions_page_transition__["a" /* PageTransition */]));
  138553. var PopoverPopIn = (function (_super) {
  138554. __extends(PopoverPopIn, _super);
  138555. function PopoverPopIn() {
  138556. return _super !== null && _super.apply(this, arguments) || this;
  138557. }
  138558. PopoverPopIn.prototype.init = function () {
  138559. var ele = this.enteringView.pageRef().nativeElement;
  138560. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  138561. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.popover-wrapper'));
  138562. wrapper.fromTo('opacity', 0.01, 1);
  138563. backdrop.fromTo('opacity', 0.01, 0.08);
  138564. this
  138565. .easing('ease')
  138566. .duration(100)
  138567. .add(backdrop)
  138568. .add(wrapper);
  138569. };
  138570. PopoverPopIn.prototype.play = function () {
  138571. var _this = this;
  138572. this.plt.raf(function () {
  138573. _this.iosPositionView(_this.enteringView.pageRef().nativeElement, _this.opts.ev);
  138574. _super.prototype.play.call(_this);
  138575. });
  138576. };
  138577. return PopoverPopIn;
  138578. }(PopoverTransition));
  138579. var PopoverPopOut = (function (_super) {
  138580. __extends(PopoverPopOut, _super);
  138581. function PopoverPopOut() {
  138582. return _super !== null && _super.apply(this, arguments) || this;
  138583. }
  138584. PopoverPopOut.prototype.init = function () {
  138585. var ele = this.leavingView.pageRef().nativeElement;
  138586. var backdrop = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('ion-backdrop'));
  138587. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.popover-wrapper'));
  138588. wrapper.fromTo('opacity', 0.99, 0);
  138589. backdrop.fromTo('opacity', 0.08, 0);
  138590. this
  138591. .easing('ease')
  138592. .duration(500)
  138593. .add(backdrop)
  138594. .add(wrapper);
  138595. };
  138596. return PopoverPopOut;
  138597. }(PopoverTransition));
  138598. var PopoverMdPopIn = (function (_super) {
  138599. __extends(PopoverMdPopIn, _super);
  138600. function PopoverMdPopIn() {
  138601. return _super !== null && _super.apply(this, arguments) || this;
  138602. }
  138603. PopoverMdPopIn.prototype.init = function () {
  138604. var ele = this.enteringView.pageRef().nativeElement;
  138605. var content = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.popover-content'));
  138606. var viewport = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.popover-viewport'));
  138607. content.fromTo('scale', 0.001, 1);
  138608. viewport.fromTo('opacity', 0.01, 1);
  138609. this
  138610. .easing('cubic-bezier(0.36,0.66,0.04,1)')
  138611. .duration(300)
  138612. .add(content)
  138613. .add(viewport);
  138614. };
  138615. PopoverMdPopIn.prototype.play = function () {
  138616. var _this = this;
  138617. this.plt.raf(function () {
  138618. _this.mdPositionView(_this.enteringView.pageRef().nativeElement, _this.opts.ev);
  138619. _super.prototype.play.call(_this);
  138620. });
  138621. };
  138622. return PopoverMdPopIn;
  138623. }(PopoverTransition));
  138624. var PopoverMdPopOut = (function (_super) {
  138625. __extends(PopoverMdPopOut, _super);
  138626. function PopoverMdPopOut() {
  138627. return _super !== null && _super.apply(this, arguments) || this;
  138628. }
  138629. PopoverMdPopOut.prototype.init = function () {
  138630. var ele = this.leavingView.pageRef().nativeElement;
  138631. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, ele.querySelector('.popover-wrapper'));
  138632. wrapper.fromTo('opacity', 0.99, 0);
  138633. this
  138634. .easing('ease')
  138635. .duration(500)
  138636. .fromTo('opacity', 0.01, 1)
  138637. .add(wrapper);
  138638. };
  138639. return PopoverMdPopOut;
  138640. }(PopoverTransition));
  138641. var POPOVER_IOS_BODY_PADDING = 2;
  138642. var POPOVER_MD_BODY_PADDING = 12;
  138643. //# sourceMappingURL=popover-transitions.js.map
  138644. /***/ }),
  138645. /* 661 */
  138646. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138647. "use strict";
  138648. /* harmony export (immutable) */ __webpack_exports__["a"] = enableKeyboardControl;
  138649. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  138650. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper__ = __webpack_require__(81);
  138651. /*=========================
  138652. Keyboard Control
  138653. ===========================*/
  138654. function handleKeyboard(s, plt, e) {
  138655. var win = plt.win();
  138656. var kc = e.keyCode || e.charCode;
  138657. // Directions locks
  138658. if (!s._allowSwipeToNext && (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && kc === 39 || !Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && kc === 40)) {
  138659. return false;
  138660. }
  138661. if (!s._allowSwipeToPrev && (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && kc === 37 || !Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && kc === 38)) {
  138662. return false;
  138663. }
  138664. if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
  138665. return;
  138666. }
  138667. var activeEle = plt.getActiveElement();
  138668. if (activeEle && activeEle.nodeName && (activeEle.nodeName.toLowerCase() === 'input' || activeEle.nodeName.toLowerCase() === 'textarea')) {
  138669. return;
  138670. }
  138671. if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {
  138672. var inView = false;
  138673. // Check that swiper should be inside of visible area of window
  138674. if (s.container.closest('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide) && !s.container.closest('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideActive)) {
  138675. return;
  138676. }
  138677. var windowScroll = {
  138678. left: win.pageXOffset,
  138679. top: win.pageYOffset
  138680. };
  138681. var windowWidth = plt.width();
  138682. var windowHeight = plt.height();
  138683. var swiperOffset = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["j" /* offset */])(s.container, plt);
  138684. if (s._rtl) {
  138685. swiperOffset.left = swiperOffset.left - s.container.scrollLeft;
  138686. }
  138687. var swiperCoord = [
  138688. [swiperOffset.left, swiperOffset.top],
  138689. [swiperOffset.left + s.renderedWidth, swiperOffset.top],
  138690. [swiperOffset.left, swiperOffset.top + s.renderedHeight],
  138691. [swiperOffset.left + s.renderedWidth, swiperOffset.top + s.renderedHeight]
  138692. ];
  138693. for (var i = 0; i < swiperCoord.length; i++) {
  138694. var point = swiperCoord[i];
  138695. if (point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&
  138696. point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight) {
  138697. inView = true;
  138698. }
  138699. }
  138700. if (!inView)
  138701. return;
  138702. }
  138703. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  138704. if (kc === 37 || kc === 39) {
  138705. if (e.preventDefault) {
  138706. e.preventDefault();
  138707. }
  138708. else {
  138709. e.returnValue = false;
  138710. }
  138711. }
  138712. if ((kc === 39 && !s._rtl) || (kc === 37 && s._rtl)) {
  138713. Object(__WEBPACK_IMPORTED_MODULE_1__swiper__["h" /* slideNext */])(s, plt);
  138714. }
  138715. if ((kc === 37 && !s._rtl) || (kc === 39 && s._rtl)) {
  138716. Object(__WEBPACK_IMPORTED_MODULE_1__swiper__["i" /* slidePrev */])(s, plt);
  138717. }
  138718. }
  138719. else {
  138720. if (kc === 38 || kc === 40) {
  138721. if (e.preventDefault) {
  138722. e.preventDefault();
  138723. }
  138724. else {
  138725. e.returnValue = false;
  138726. }
  138727. }
  138728. if (kc === 40) {
  138729. Object(__WEBPACK_IMPORTED_MODULE_1__swiper__["h" /* slideNext */])(s, plt);
  138730. }
  138731. if (kc === 38) {
  138732. Object(__WEBPACK_IMPORTED_MODULE_1__swiper__["i" /* slidePrev */])(s, plt);
  138733. }
  138734. }
  138735. }
  138736. function enableKeyboardControl(s, plt, shouldEnable) {
  138737. if (shouldEnable && !s._keyboardUnReg) {
  138738. s._keyboardUnReg = plt.registerListener(plt.doc(), 'keydown', function (ev) {
  138739. handleKeyboard(s, plt, ev);
  138740. }, { zone: false });
  138741. }
  138742. else if (!shouldEnable && s._keyboardUnReg) {
  138743. s._keyboardUnReg();
  138744. }
  138745. }
  138746. //# sourceMappingURL=swiper-keyboard.js.map
  138747. /***/ }),
  138748. /* 662 */
  138749. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138750. "use strict";
  138751. /* unused harmony export initA11y */
  138752. /* unused harmony export makeFocusable */
  138753. /* unused harmony export addRole */
  138754. /* unused harmony export addLabel */
  138755. /* harmony export (immutable) */ __webpack_exports__["a"] = ariaDisable;
  138756. /* harmony export (immutable) */ __webpack_exports__["b"] = ariaHidden;
  138757. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  138758. function initA11y(s, plt) {
  138759. var unregs = [];
  138760. s._liveRegion = plt.doc().createElement('span');
  138761. s._liveRegion.className = __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].notification;
  138762. s._liveRegion.setAttribute('aria-live', 'assertive');
  138763. s._liveRegion.setAttribute('aria-atomic', 'true');
  138764. s.container.appendChild(s._liveRegion);
  138765. // Setup accessibility
  138766. if (s.nextButton) {
  138767. makeFocusable(s.nextButton);
  138768. addRole(s.nextButton, 'button');
  138769. addLabel(s.nextButton, s.nextSlideMessage);
  138770. plt.registerListener(s.nextButton, 'keydown', function (ev) {
  138771. onEnterKey(s, ev);
  138772. }, { zone: false }, unregs);
  138773. }
  138774. if (s.prevButton) {
  138775. makeFocusable(s.prevButton);
  138776. addRole(s.prevButton, 'button');
  138777. addLabel(s.prevButton, s.prevSlideMessage);
  138778. plt.registerListener(s.prevButton, 'keydown', function (ev) {
  138779. onEnterKey(s, ev);
  138780. }, { zone: false }, unregs);
  138781. }
  138782. return function () {
  138783. unregs.forEach(function (unreg) {
  138784. unreg();
  138785. });
  138786. unregs = null;
  138787. if (s._liveRegion) {
  138788. s._liveRegion.parentElement.removeChild(s._liveRegion);
  138789. }
  138790. };
  138791. }
  138792. function makeFocusable(ele) {
  138793. ele.setAttribute('tabIndex', '0');
  138794. }
  138795. function addRole(ele, role) {
  138796. ele.setAttribute('role', role);
  138797. }
  138798. function addLabel(ele, label) {
  138799. ele.setAttribute('aria-label', label);
  138800. }
  138801. function ariaDisable(ele, isDisabled) {
  138802. if (isDisabled) {
  138803. ele.setAttribute('aria-disabled', 'true');
  138804. }
  138805. else if (ele.hasAttribute('aria-disabled')) {
  138806. ele.removeAttribute('aria-disabled');
  138807. }
  138808. }
  138809. function ariaHidden(ele, isHidden) {
  138810. if (isHidden) {
  138811. ele.setAttribute('aria-hidden', 'true');
  138812. }
  138813. else if (ele.hasAttribute('aria-hidden')) {
  138814. ele.removeAttribute('aria-hidden');
  138815. }
  138816. }
  138817. function onEnterKey(_, __) {
  138818. // if (event.keyCode !== 13) return;
  138819. // const target: HTMLElement = <any>event.target;
  138820. // if (target.classList.contains(PARAMS.nextButtonClass)) {
  138821. // if (s.isEnd) {
  138822. // notify(s, PARAMS.lastSlideMessage);
  138823. // } else {
  138824. // notify(s, PARAMS.nextSlideMessage);
  138825. // }
  138826. // } else if (target.classList.contains(PARAMS.prevButtonClass)) {
  138827. // if (s.isBeginning) {
  138828. // notify(s, PARAMS.firstSlideMessage);
  138829. // } else {
  138830. // notify(s, PARAMS.prevSlideMessage);
  138831. // }
  138832. // }
  138833. }
  138834. // function notify(s: Slides, message: string) {
  138835. // var notification = s._liveRegion;
  138836. // if (notification) {
  138837. // notification.innerHTML = message || '';
  138838. // }
  138839. // }
  138840. //# sourceMappingURL=swiper-a11y.js.map
  138841. /***/ }),
  138842. /* 663 */
  138843. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138844. "use strict";
  138845. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SWIPER_CONTROLLER; });
  138846. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper__ = __webpack_require__(81);
  138847. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper_index__ = __webpack_require__(83);
  138848. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__swiper_utils__ = __webpack_require__(21);
  138849. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__swiper_progress__ = __webpack_require__(82);
  138850. /*=========================
  138851. Controller
  138852. ===========================*/
  138853. var SWIPER_CONTROLLER = {
  138854. LinearSpline: function (_s, _platform, x, y) {
  138855. this.x = x;
  138856. this.y = y;
  138857. this.lastIndex = x.length - 1;
  138858. // Given an x value (x2), return the expected y2 value:
  138859. // (x1,y1) is the known point before given value,
  138860. // (x3,y3) is the known point after given value.
  138861. var i1, i3;
  138862. this.interpolate = function (x2) {
  138863. if (!x2)
  138864. return 0;
  138865. // Get the indexes of x1 and x3 (the array indexes before and after given x2):
  138866. i3 = binarySearch(this.x, x2);
  138867. i1 = i3 - 1;
  138868. // We have our indexes i1 & i3, so we can calculate already:
  138869. // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
  138870. return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];
  138871. };
  138872. var binarySearch = (function () {
  138873. var maxIndex, minIndex, guess;
  138874. return function (array, val) {
  138875. minIndex = -1;
  138876. maxIndex = array.length;
  138877. while (maxIndex - minIndex > 1)
  138878. if (array[guess = maxIndex + minIndex >> 1] <= val) {
  138879. minIndex = guess;
  138880. }
  138881. else {
  138882. maxIndex = guess;
  138883. }
  138884. return maxIndex;
  138885. };
  138886. })();
  138887. },
  138888. // xxx: for now i will just save one spline function to to
  138889. getInterpolateFunction: function (s, plt, c) {
  138890. if (!s._spline)
  138891. s._spline = s.loop ?
  138892. new SWIPER_CONTROLLER.LinearSpline(s, plt, s._slidesGrid, c._slidesGrid) :
  138893. new SWIPER_CONTROLLER.LinearSpline(s, plt, s._snapGrid, c._snapGrid);
  138894. },
  138895. setTranslate: function (s, plt, translate, byController, setWrapperTranslate) {
  138896. var controlled = s.control;
  138897. var multiplier, controlledTranslate;
  138898. function setControlledTranslate(c) {
  138899. // this will create an Interpolate function based on the snapGrids
  138900. // x is the Grid of the scrolled scroller and y will be the controlled scroller
  138901. // it makes sense to create this only once and recall it for the interpolation
  138902. // the function does a lot of value caching for performance
  138903. translate = c._rtl && Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["g" /* isHorizontal */])(c) ? -s._translate : s._translate;
  138904. if (s.controlBy === 'slide') {
  138905. SWIPER_CONTROLLER.getInterpolateFunction(s, plt, c);
  138906. // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
  138907. // but it did not work out
  138908. controlledTranslate = -s._spline.interpolate(-translate);
  138909. }
  138910. if (!controlledTranslate || s.controlBy === 'container') {
  138911. multiplier = (Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["h" /* maxTranslate */])(c) - Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["i" /* minTranslate */])(c)) / (Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["h" /* maxTranslate */])(s) - Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["i" /* minTranslate */])(s));
  138912. controlledTranslate = (translate - Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["i" /* minTranslate */])(s)) * multiplier + Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["i" /* minTranslate */])(c);
  138913. }
  138914. if (s.controlInverse) {
  138915. controlledTranslate = Object(__WEBPACK_IMPORTED_MODULE_2__swiper_utils__["h" /* maxTranslate */])(c) - controlledTranslate;
  138916. }
  138917. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_progress__["a" /* updateProgress */])(c, controlledTranslate);
  138918. setWrapperTranslate(c, plt, controlledTranslate, false, s);
  138919. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_index__["a" /* updateActiveIndex */])(c);
  138920. }
  138921. if (Array.isArray(controlled)) {
  138922. for (var i = 0; i < controlled.length; i++) {
  138923. if (controlled[i] !== byController) {
  138924. setControlledTranslate(controlled[i]);
  138925. }
  138926. }
  138927. }
  138928. else if (byController !== controlled) {
  138929. setControlledTranslate(controlled);
  138930. }
  138931. },
  138932. setTransition: function (s, plt, duration, byController, setWrapperTransition) {
  138933. var controlled = s.control;
  138934. var i;
  138935. function setControlledTransition(c) {
  138936. setWrapperTransition(c, plt, duration, s);
  138937. if (duration !== 0) {
  138938. Object(__WEBPACK_IMPORTED_MODULE_0__swiper__["f" /* onTransitionStart */])(c);
  138939. plt.transitionEnd(c._wrapper, function () {
  138940. if (!controlled)
  138941. return;
  138942. if (c.loop && s.controlBy === 'slide') {
  138943. Object(__WEBPACK_IMPORTED_MODULE_0__swiper__["c" /* fixLoop */])(c, plt);
  138944. }
  138945. Object(__WEBPACK_IMPORTED_MODULE_0__swiper__["e" /* onTransitionEnd */])(c, plt);
  138946. });
  138947. }
  138948. }
  138949. if (Array.isArray(controlled)) {
  138950. for (i = 0; i < controlled.length; i++) {
  138951. if (controlled[i] !== byController) {
  138952. setControlledTransition(controlled[i]);
  138953. }
  138954. }
  138955. }
  138956. else if (byController !== controlled) {
  138957. setControlledTransition(controlled);
  138958. }
  138959. }
  138960. };
  138961. //# sourceMappingURL=swiper-controller.js.map
  138962. /***/ }),
  138963. /* 664 */
  138964. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  138965. "use strict";
  138966. /* harmony export (immutable) */ __webpack_exports__["a"] = initEvents;
  138967. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__swiper_utils__ = __webpack_require__(21);
  138968. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__swiper_transition__ = __webpack_require__(138);
  138969. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__swiper__ = __webpack_require__(81);
  138970. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__swiper_progress__ = __webpack_require__(82);
  138971. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__swiper_index__ = __webpack_require__(83);
  138972. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__swiper_pagination__ = __webpack_require__(140);
  138973. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__swiper_classes__ = __webpack_require__(139);
  138974. /*=========================
  138975. Events
  138976. ===========================*/
  138977. // Attach/detach events
  138978. function initEvents(s, plt) {
  138979. var win = plt.win();
  138980. var doc = plt.doc();
  138981. s._supportTouch = (function () {
  138982. return !!(('ontouchstart' in win) || win.DocumentTouch && doc instanceof win.DocumentTouch);
  138983. })();
  138984. // Define Touch Events
  138985. s._touchEventsDesktop = { start: 'mousedown', move: 'mousemove', end: 'mouseup' };
  138986. if (win.navigator.pointerEnabled) {
  138987. s._touchEventsDesktop = { start: 'pointerdown', move: 'pointermove', end: 'pointerup' };
  138988. }
  138989. else if (win.navigator.msPointerEnabled) {
  138990. s._touchEventsDesktop = { start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp' };
  138991. }
  138992. s._touchEvents = {
  138993. start: s._supportTouch || !s.simulateTouch ? 'touchstart' : s._touchEventsDesktop.start,
  138994. move: s._supportTouch || !s.simulateTouch ? 'touchmove' : s._touchEventsDesktop.move,
  138995. end: s._supportTouch || !s.simulateTouch ? 'touchend' : s._touchEventsDesktop.end
  138996. };
  138997. // WP8 Touch Events Fix
  138998. if (win.navigator.pointerEnabled || win.navigator.msPointerEnabled) {
  138999. (s.touchEventsTarget === 'container' ? s.container : s._wrapper).classList.add('swiper-wp8-' + s.direction);
  139000. }
  139001. var unregs = [];
  139002. var touchEventsTarget = s.touchEventsTarget === 'container' ? s.container : s._wrapper;
  139003. // Touch Events
  139004. if (s._supportTouch) {
  139005. // touchstart
  139006. plt.registerListener(touchEventsTarget, s._touchEvents.start, function (ev) {
  139007. onTouchStart(s, plt, ev);
  139008. }, { passive: true, zone: false }, unregs);
  139009. // touchmove
  139010. plt.registerListener(touchEventsTarget, s._touchEvents.move, function (ev) {
  139011. onTouchMove(s, plt, ev);
  139012. }, { zone: false }, unregs);
  139013. // touchend
  139014. plt.registerListener(touchEventsTarget, s._touchEvents.end, function (ev) {
  139015. onTouchEnd(s, plt, ev);
  139016. }, { passive: true, zone: false }, unregs);
  139017. }
  139018. if ((s.simulateTouch && !plt.is('ios') && !plt.is('android')) || (s.simulateTouch && !s._supportTouch && plt.is('ios')) || plt.getQueryParam('ionicPlatform')) {
  139019. // mousedown
  139020. plt.registerListener(touchEventsTarget, 'mousedown', function (ev) {
  139021. onTouchStart(s, plt, ev);
  139022. }, { zone: false }, unregs);
  139023. // mousemove
  139024. plt.registerListener(touchEventsTarget, 'mousemove', function (ev) {
  139025. onTouchMove(s, plt, ev);
  139026. }, { zone: false }, unregs);
  139027. // mouseup
  139028. plt.registerListener(touchEventsTarget, 'mouseup', function (ev) {
  139029. onTouchEnd(s, plt, ev);
  139030. }, { zone: false }, unregs);
  139031. }
  139032. // onresize
  139033. var resizeObs = plt.resize.subscribe(function () { return onResize(s, plt, false); });
  139034. // Next, Prev, Index
  139035. if (s.nextButton) {
  139036. plt.registerListener(s.nextButton, 'click', function (ev) {
  139037. onClickNext(s, plt, ev);
  139038. }, { zone: false }, unregs);
  139039. }
  139040. if (s.prevButton) {
  139041. plt.registerListener(s.prevButton, 'click', function (ev) {
  139042. onClickPrev(s, plt, ev);
  139043. }, { zone: false }, unregs);
  139044. }
  139045. if (s.paginationType) {
  139046. plt.registerListener(s._paginationContainer, 'click', function (ev) {
  139047. onClickIndex(s, plt, ev);
  139048. }, { zone: false }, unregs);
  139049. }
  139050. // Prevent Links Clicks
  139051. if (s.preventClicks || s.preventClicksPropagation) {
  139052. plt.registerListener(touchEventsTarget, 'click', function (ev) {
  139053. preventClicks(s, ev);
  139054. }, { zone: false, capture: true }, unregs);
  139055. }
  139056. // return a function that removes all of the added listeners
  139057. return function () {
  139058. resizeObs.unsubscribe();
  139059. unregs.forEach(function (unreg) {
  139060. unreg();
  139061. });
  139062. unregs = null;
  139063. };
  139064. }
  139065. /*=========================
  139066. Handle Clicks
  139067. ===========================*/
  139068. // Prevent Clicks
  139069. function preventClicks(s, e) {
  139070. if (!s._allowClick) {
  139071. if (s.preventClicks) {
  139072. e.preventDefault();
  139073. }
  139074. if (s.preventClicksPropagation && s._animating) {
  139075. e.stopPropagation();
  139076. e.stopImmediatePropagation();
  139077. }
  139078. }
  139079. }
  139080. // Clicks
  139081. function onClickNext(s, plt, e) {
  139082. e.preventDefault();
  139083. if (s._isEnd && !s.loop) {
  139084. return;
  139085. }
  139086. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["h" /* slideNext */])(s, plt);
  139087. }
  139088. function onClickPrev(s, plt, e) {
  139089. e.preventDefault();
  139090. if (s._isBeginning && !s.loop) {
  139091. return;
  139092. }
  139093. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["i" /* slidePrev */])(s, plt);
  139094. }
  139095. function onClickIndex(s, plt, e) {
  139096. var indexStr = e.target.getAttribute('data-slide-index');
  139097. if (indexStr) {
  139098. var index = parseInt(indexStr, 10);
  139099. e.preventDefault();
  139100. if (s.loop) {
  139101. index = index + s.loopedSlides;
  139102. }
  139103. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, index);
  139104. }
  139105. }
  139106. /*=========================
  139107. Handle Touches
  139108. ===========================*/
  139109. function findElementInEvent(e, selector) {
  139110. var el = e.target;
  139111. if (!el.matches(selector)) {
  139112. if (typeof selector === 'string') {
  139113. el = el.closest(selector);
  139114. }
  139115. else if (selector.nodeType) {
  139116. var parentEl = el.parentElement;
  139117. while (parentEl) {
  139118. if (parentEl === selector) {
  139119. return selector;
  139120. }
  139121. }
  139122. return undefined;
  139123. }
  139124. }
  139125. return el;
  139126. }
  139127. function updateClickedSlide(s, plt, e) {
  139128. var slide = findElementInEvent(e, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide);
  139129. var slideIndex = -1;
  139130. if (slide) {
  139131. for (var i = 0; i < s._slides.length; i++) {
  139132. if (s._slides[i] === slide) {
  139133. slideIndex = i;
  139134. break;
  139135. }
  139136. }
  139137. }
  139138. if (slide && slideIndex > -1) {
  139139. s.clickedSlide = slide;
  139140. s.clickedIndex = slideIndex;
  139141. }
  139142. else {
  139143. s.clickedSlide = undefined;
  139144. s.clickedIndex = undefined;
  139145. return;
  139146. }
  139147. if (s.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s._activeIndex) {
  139148. var slideToIndex = s.clickedIndex;
  139149. var realIndex;
  139150. var slidesPerView = s.slidesPerView === 'auto' ? Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["a" /* currentSlidesPerView */])(s) : s.slidesPerView;
  139151. if (s.loop) {
  139152. if (s._animating)
  139153. return;
  139154. realIndex = parseInt(s.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
  139155. if (s.centeredSlides) {
  139156. if ((slideToIndex < s.loopedSlides - slidesPerView / 2) || (slideToIndex > s._slides.length - s.loopedSlides + slidesPerView / 2)) {
  139157. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["c" /* fixLoop */])(s, plt);
  139158. slideToIndex = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["d" /* getElementIndex */])(s._wrapper.querySelector('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideDuplicate + ')'));
  139159. plt.timeout(function () {
  139160. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, slideToIndex);
  139161. });
  139162. }
  139163. else {
  139164. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, slideToIndex);
  139165. }
  139166. }
  139167. else {
  139168. if (slideToIndex > s._slides.length - slidesPerView) {
  139169. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["c" /* fixLoop */])(s, plt);
  139170. slideToIndex = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["d" /* getElementIndex */])(s._wrapper.querySelector('.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slide + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].slideDuplicate + ')'));
  139171. plt.timeout(function () {
  139172. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, slideToIndex);
  139173. });
  139174. }
  139175. else {
  139176. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, slideToIndex);
  139177. }
  139178. }
  139179. }
  139180. else {
  139181. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, slideToIndex);
  139182. }
  139183. }
  139184. }
  139185. var isTouched;
  139186. var isMoved;
  139187. var allowTouchCallbacks;
  139188. var touchStartTime;
  139189. var isScrolling;
  139190. var currentTranslate;
  139191. var startTranslate;
  139192. var allowThresholdMove;
  139193. // Last click time
  139194. var lastClickTime = Date.now();
  139195. var clickTimeout;
  139196. // Velocities
  139197. var velocities = [];
  139198. var allowMomentumBounce;
  139199. // Touch handlers
  139200. var isTouchEvent;
  139201. var startMoving;
  139202. function onTouchStart(s, plt, ev) {
  139203. (void 0) /* console.debug */;
  139204. if (ev.originalEvent) {
  139205. ev = ev.originalEvent;
  139206. }
  139207. s.originalEvent = ev;
  139208. isTouchEvent = ev.type === 'touchstart';
  139209. if (!isTouchEvent && 'which' in ev && ev.which === 3) {
  139210. return;
  139211. }
  139212. if (s.noSwiping && findElementInEvent(ev, '.' + __WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].noSwiping)) {
  139213. s._allowClick = true;
  139214. return;
  139215. }
  139216. if (s.swipeHandler) {
  139217. if (!findElementInEvent(ev, s.swipeHandler))
  139218. return;
  139219. }
  139220. var startX = s._touches.currentX = ev.type === 'touchstart' ? ev.targetTouches[0].pageX : ev.pageX;
  139221. var startY = s._touches.currentY = ev.type === 'touchstart' ? ev.targetTouches[0].pageY : ev.pageY;
  139222. // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
  139223. if (plt.is('ios') && s.iOSEdgeSwipeDetection && startX <= s.iOSEdgeSwipeThreshold) {
  139224. return;
  139225. }
  139226. isTouched = true;
  139227. isMoved = false;
  139228. allowTouchCallbacks = true;
  139229. isScrolling = undefined;
  139230. startMoving = undefined;
  139231. s._touches.startX = startX;
  139232. s._touches.startY = startY;
  139233. touchStartTime = Date.now();
  139234. s._allowClick = true;
  139235. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["p" /* updateContainerSize */])(s, plt);
  139236. s.swipeDirection = undefined;
  139237. if (s.threshold > 0) {
  139238. allowThresholdMove = false;
  139239. }
  139240. if (ev.type !== 'touchstart') {
  139241. var preventDefault = true;
  139242. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["f" /* isFormElement */])(ev.target)) {
  139243. preventDefault = false;
  139244. }
  139245. plt.focusOutActiveElement();
  139246. if (preventDefault) {
  139247. ev.preventDefault();
  139248. }
  139249. }
  139250. s.ionSlideTouchStart.emit(ev);
  139251. }
  139252. function onTouchMove(s, plt, ev) {
  139253. (void 0) /* console.debug */;
  139254. if (ev.originalEvent) {
  139255. ev = ev.originalEvent;
  139256. }
  139257. s.originalEvent = ev;
  139258. if (isTouchEvent && ev.type === 'mousemove')
  139259. return;
  139260. if (ev.preventedByNestedSwiper) {
  139261. s._touches.startX = ev.type === 'touchmove' ? ev.targetTouches[0].pageX : ev.pageX;
  139262. s._touches.startY = ev.type === 'touchmove' ? ev.targetTouches[0].pageY : ev.pageY;
  139263. return;
  139264. }
  139265. if (s.onlyExternal) {
  139266. // isMoved = true;
  139267. s._allowClick = false;
  139268. if (isTouched) {
  139269. s._touches.startX = s._touches.currentX = ev.type === 'touchmove' ? ev.targetTouches[0].pageX : ev.pageX;
  139270. s._touches.startY = s._touches.currentY = ev.type === 'touchmove' ? ev.targetTouches[0].pageY : ev.pageY;
  139271. touchStartTime = Date.now();
  139272. }
  139273. return;
  139274. }
  139275. if (isTouchEvent && s.touchReleaseOnEdges && !s.loop) {
  139276. if (!Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s)) {
  139277. // Vertical
  139278. if ((s._touches.currentY < s._touches.startY && s._translate <= Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)) ||
  139279. (s._touches.currentY > s._touches.startY && s._translate >= Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s))) {
  139280. return;
  139281. }
  139282. }
  139283. else {
  139284. if ((s._touches.currentX < s._touches.startX && s._translate <= Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)) ||
  139285. (s._touches.currentX > s._touches.startX && s._translate >= Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s))) {
  139286. return;
  139287. }
  139288. }
  139289. }
  139290. var activeEle = plt.getActiveElement();
  139291. if (isTouchEvent && activeEle) {
  139292. if (ev.target === activeEle && Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["f" /* isFormElement */])(ev.target)) {
  139293. isMoved = true;
  139294. s._allowClick = false;
  139295. return;
  139296. }
  139297. }
  139298. if (ev.targetTouches && ev.targetTouches.length > 1)
  139299. return;
  139300. s._touches.currentX = ev.type === 'touchmove' ? ev.targetTouches[0].pageX : ev.pageX;
  139301. s._touches.currentY = ev.type === 'touchmove' ? ev.targetTouches[0].pageY : ev.pageY;
  139302. if (typeof isScrolling === 'undefined') {
  139303. var touchAngle;
  139304. if (Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && s._touches.currentY === s._touches.startY || !Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) && s._touches.currentX === s._touches.startX) {
  139305. isScrolling = false;
  139306. }
  139307. else {
  139308. touchAngle = Math.atan2(Math.abs(s._touches.currentY - s._touches.startY), Math.abs(s._touches.currentX - s._touches.startX)) * 180 / Math.PI;
  139309. isScrolling = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? touchAngle > s.touchAngle : (90 - touchAngle > s.touchAngle);
  139310. }
  139311. }
  139312. if (!isTouched)
  139313. return;
  139314. if (isScrolling) {
  139315. isTouched = false;
  139316. return;
  139317. }
  139318. s._allowClick = false;
  139319. s.ionSlideDrag.emit(s);
  139320. ev.preventDefault();
  139321. if (s.touchMoveStopPropagation) {
  139322. ev.stopPropagation();
  139323. }
  139324. if (!isMoved) {
  139325. if (s.loop) {
  139326. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["c" /* fixLoop */])(s, plt);
  139327. }
  139328. startTranslate = Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["b" /* getWrapperTranslate */])(s, plt);
  139329. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, 0);
  139330. if (s._animating) {
  139331. Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["p" /* triggerTransitionEnd */])(plt, s._wrapper);
  139332. }
  139333. if (s.autoplay && s._autoplaying) {
  139334. if (s.autoplayDisableOnInteraction) {
  139335. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["m" /* stopAutoplay */])(s);
  139336. }
  139337. else {
  139338. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["g" /* pauseAutoplay */])(s, plt);
  139339. }
  139340. }
  139341. allowMomentumBounce = false;
  139342. }
  139343. isMoved = true;
  139344. var diff = s._touches.diff = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? s._touches.currentX - s._touches.startX : s._touches.currentY - s._touches.startY;
  139345. diff = diff * s.touchRatio;
  139346. if (s._rtl)
  139347. diff = -diff;
  139348. s.swipeDirection = diff > 0 ? 'prev' : 'next';
  139349. currentTranslate = diff + startTranslate;
  139350. var disableParentSwiper = true;
  139351. if ((diff > 0 && currentTranslate > Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s))) {
  139352. disableParentSwiper = false;
  139353. if (s.resistance) {
  139354. currentTranslate = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s) - 1 + Math.pow(-Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s) + startTranslate + diff, s.resistanceRatio);
  139355. }
  139356. }
  139357. else if (diff < 0 && currentTranslate < Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)) {
  139358. disableParentSwiper = false;
  139359. if (s.resistance)
  139360. currentTranslate = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s) + 1 - Math.pow(Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s) - startTranslate - diff, s.resistanceRatio);
  139361. }
  139362. if (disableParentSwiper) {
  139363. ev.preventedByNestedSwiper = true;
  139364. }
  139365. // Directions locks
  139366. if (!s._allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {
  139367. currentTranslate = startTranslate;
  139368. }
  139369. if (!s._allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {
  139370. currentTranslate = startTranslate;
  139371. }
  139372. // Threshold
  139373. if (s.threshold > 0) {
  139374. if (Math.abs(diff) > s.threshold || allowThresholdMove) {
  139375. if (!allowThresholdMove) {
  139376. allowThresholdMove = true;
  139377. s._touches.startX = s._touches.currentX;
  139378. s._touches.startY = s._touches.currentY;
  139379. currentTranslate = startTranslate;
  139380. s._touches.diff = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? s._touches.currentX - s._touches.startX : s._touches.currentY - s._touches.startY;
  139381. return;
  139382. }
  139383. }
  139384. else {
  139385. currentTranslate = startTranslate;
  139386. return;
  139387. }
  139388. }
  139389. if (!s.followFinger)
  139390. return;
  139391. // Update active index in free mode
  139392. if (s.freeMode || s.watchSlidesProgress) {
  139393. Object(__WEBPACK_IMPORTED_MODULE_4__swiper_index__["a" /* updateActiveIndex */])(s);
  139394. }
  139395. if (s.freeMode) {
  139396. // Velocity
  139397. if (velocities.length === 0) {
  139398. velocities.push({
  139399. position: s._touches[Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'startX' : 'startY'],
  139400. time: touchStartTime
  139401. });
  139402. }
  139403. velocities.push({
  139404. position: s._touches[Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["g" /* isHorizontal */])(s) ? 'currentX' : 'currentY'],
  139405. time: (new Date()).getTime()
  139406. });
  139407. }
  139408. // Update progress
  139409. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_progress__["a" /* updateProgress */])(s, currentTranslate);
  139410. // Update translate
  139411. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, currentTranslate);
  139412. }
  139413. function onTouchEnd(s, plt, ev) {
  139414. (void 0) /* console.debug */;
  139415. if (ev.originalEvent) {
  139416. ev = ev.originalEvent;
  139417. }
  139418. s.originalEvent = ev;
  139419. if (allowTouchCallbacks) {
  139420. s.ionSlideTouchEnd.emit(ev);
  139421. }
  139422. allowTouchCallbacks = false;
  139423. if (!isTouched)
  139424. return;
  139425. // Time diff
  139426. var touchEndTime = Date.now();
  139427. var timeDiff = touchEndTime - touchStartTime;
  139428. // Tap, doubleTap, Click
  139429. if (s._allowClick) {
  139430. updateClickedSlide(s, plt, ev);
  139431. s._zone.run(function () {
  139432. s.ionSlideTap.emit(s);
  139433. if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {
  139434. if (clickTimeout) {
  139435. plt.cancelTimeout(clickTimeout);
  139436. }
  139437. clickTimeout = plt.timeout(function () {
  139438. if (!s)
  139439. return;
  139440. if (s.paginationHide && s._paginationContainer && !ev.target.classList.contains(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].bullet)) {
  139441. s._paginationContainer.classList.toggle(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["a" /* CLS */].paginationHidden);
  139442. }
  139443. }, 300);
  139444. }
  139445. if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {
  139446. if (clickTimeout)
  139447. clearTimeout(clickTimeout);
  139448. s.ionSlideDoubleTap.emit(s);
  139449. }
  139450. });
  139451. }
  139452. lastClickTime = Date.now();
  139453. plt.timeout(function () {
  139454. if (s) {
  139455. s._allowClick = true;
  139456. }
  139457. });
  139458. if (!isTouched || !isMoved || !s.swipeDirection || s._touches.diff === 0 || currentTranslate === startTranslate) {
  139459. isTouched = isMoved = false;
  139460. return;
  139461. }
  139462. isTouched = isMoved = false;
  139463. var currentPos;
  139464. if (s.followFinger) {
  139465. currentPos = s._rtl ? s._translate : -s._translate;
  139466. }
  139467. else {
  139468. currentPos = -currentTranslate;
  139469. }
  139470. if (s.freeMode) {
  139471. if (currentPos < -Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s)) {
  139472. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._activeIndex);
  139473. return;
  139474. }
  139475. else if (currentPos > -Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)) {
  139476. if (s._slides.length < s._snapGrid.length) {
  139477. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._snapGrid.length - 1);
  139478. }
  139479. else {
  139480. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._slides.length - 1);
  139481. }
  139482. return;
  139483. }
  139484. if (s.freeModeMomentum) {
  139485. if (velocities.length > 1) {
  139486. var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();
  139487. var distance = lastMoveEvent.position - velocityEvent.position;
  139488. var time = lastMoveEvent.time - velocityEvent.time;
  139489. s.velocity = distance / time;
  139490. s.velocity = s.velocity / 2;
  139491. if (Math.abs(s.velocity) < s.freeModeMinimumVelocity) {
  139492. s.velocity = 0;
  139493. }
  139494. // this implies that the user stopped moving a finger then released.
  139495. // There would be no events with distance zero, so the last event is stale.
  139496. if (time > 150 || (new Date().getTime() - lastMoveEvent.time) > 300) {
  139497. s.velocity = 0;
  139498. }
  139499. }
  139500. else {
  139501. s.velocity = 0;
  139502. }
  139503. s.velocity = s.velocity * s.freeModeMomentumVelocityRatio;
  139504. velocities.length = 0;
  139505. var momentumDuration = 1000 * s.freeModeMomentumRatio;
  139506. var momentumDistance = s.velocity * momentumDuration;
  139507. var newPosition = s._translate + momentumDistance;
  139508. if (s._rtl)
  139509. newPosition = -newPosition;
  139510. var doBounce = false;
  139511. var afterBouncePosition;
  139512. var bounceAmount = Math.abs(s.velocity) * 20 * s.freeModeMomentumBounceRatio;
  139513. if (newPosition < Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)) {
  139514. if (s.freeModeMomentumBounce) {
  139515. if (newPosition + Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s) < -bounceAmount) {
  139516. newPosition = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s) - bounceAmount;
  139517. }
  139518. afterBouncePosition = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s);
  139519. doBounce = true;
  139520. allowMomentumBounce = true;
  139521. }
  139522. else {
  139523. newPosition = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s);
  139524. }
  139525. }
  139526. else if (newPosition > Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s)) {
  139527. if (s.freeModeMomentumBounce) {
  139528. if (newPosition - Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s) > bounceAmount) {
  139529. newPosition = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s) + bounceAmount;
  139530. }
  139531. afterBouncePosition = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s);
  139532. doBounce = true;
  139533. allowMomentumBounce = true;
  139534. }
  139535. else {
  139536. newPosition = Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s);
  139537. }
  139538. }
  139539. else if (s.freeModeSticky) {
  139540. var j = 0;
  139541. var nextSlide;
  139542. for (j = 0; j < s._snapGrid.length; j += 1) {
  139543. if (s._snapGrid[j] > -newPosition) {
  139544. nextSlide = j;
  139545. break;
  139546. }
  139547. }
  139548. if (Math.abs(s._snapGrid[nextSlide] - newPosition) < Math.abs(s._snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {
  139549. newPosition = s._snapGrid[nextSlide];
  139550. }
  139551. else {
  139552. newPosition = s._snapGrid[nextSlide - 1];
  139553. }
  139554. if (!s._rtl)
  139555. newPosition = -newPosition;
  139556. }
  139557. // Fix duration
  139558. if (s.velocity !== 0) {
  139559. if (s._rtl) {
  139560. momentumDuration = Math.abs((-newPosition - s._translate) / s.velocity);
  139561. }
  139562. else {
  139563. momentumDuration = Math.abs((newPosition - s._translate) / s.velocity);
  139564. }
  139565. }
  139566. else if (s.freeModeSticky) {
  139567. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["j" /* slideReset */])(s, plt);
  139568. return;
  139569. }
  139570. if (s.freeModeMomentumBounce && doBounce) {
  139571. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_progress__["a" /* updateProgress */])(s, afterBouncePosition);
  139572. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, momentumDuration);
  139573. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, newPosition);
  139574. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["f" /* onTransitionStart */])(s);
  139575. s._animating = true;
  139576. plt.transitionEnd(s._wrapper, function () {
  139577. if (!s || !allowMomentumBounce)
  139578. return;
  139579. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, s.speed);
  139580. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, afterBouncePosition);
  139581. plt.transitionEnd(s._wrapper, function () {
  139582. if (!s)
  139583. return;
  139584. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["e" /* onTransitionEnd */])(s, plt);
  139585. });
  139586. });
  139587. }
  139588. else if (s.velocity) {
  139589. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_progress__["a" /* updateProgress */])(s, newPosition);
  139590. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["c" /* setWrapperTransition */])(s, plt, momentumDuration);
  139591. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, newPosition);
  139592. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["f" /* onTransitionStart */])(s);
  139593. if (!s._animating) {
  139594. s._animating = true;
  139595. plt.transitionEnd(s._wrapper, function () {
  139596. if (!s)
  139597. return;
  139598. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["e" /* onTransitionEnd */])(s, plt);
  139599. });
  139600. }
  139601. }
  139602. else {
  139603. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_progress__["a" /* updateProgress */])(s, newPosition);
  139604. }
  139605. Object(__WEBPACK_IMPORTED_MODULE_4__swiper_index__["a" /* updateActiveIndex */])(s);
  139606. }
  139607. if (!s.freeModeMomentum || timeDiff >= s.longSwipesMs) {
  139608. Object(__WEBPACK_IMPORTED_MODULE_3__swiper_progress__["a" /* updateProgress */])(s);
  139609. Object(__WEBPACK_IMPORTED_MODULE_4__swiper_index__["a" /* updateActiveIndex */])(s);
  139610. }
  139611. return;
  139612. }
  139613. // Find current slide
  139614. var stopIndex = 0;
  139615. var groupSize = s._slidesSizesGrid[0];
  139616. for (var i = 0; i < s._slidesGrid.length; i += s.slidesPerGroup) {
  139617. if (typeof s._slidesGrid[i + s.slidesPerGroup] !== 'undefined') {
  139618. if (currentPos >= s._slidesGrid[i] && currentPos < s._slidesGrid[i + s.slidesPerGroup]) {
  139619. stopIndex = i;
  139620. groupSize = s._slidesGrid[i + s.slidesPerGroup] - s._slidesGrid[i];
  139621. }
  139622. }
  139623. else {
  139624. if (currentPos >= s._slidesGrid[i]) {
  139625. stopIndex = i;
  139626. groupSize = s._slidesGrid[s._slidesGrid.length - 1] - s._slidesGrid[s._slidesGrid.length - 2];
  139627. }
  139628. }
  139629. }
  139630. // Find current slide size
  139631. var ratio = (currentPos - s._slidesGrid[stopIndex]) / groupSize;
  139632. if (timeDiff > s.longSwipesMs) {
  139633. // Long touches
  139634. if (!s.longSwipes) {
  139635. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._activeIndex);
  139636. return;
  139637. }
  139638. if (s.swipeDirection === 'next') {
  139639. if (ratio >= s.longSwipesRatio) {
  139640. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, stopIndex + s.slidesPerGroup);
  139641. }
  139642. else {
  139643. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, stopIndex);
  139644. }
  139645. }
  139646. if (s.swipeDirection === 'prev') {
  139647. if (ratio > (1 - s.longSwipesRatio)) {
  139648. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, stopIndex + s.slidesPerGroup);
  139649. }
  139650. else {
  139651. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, stopIndex);
  139652. }
  139653. }
  139654. }
  139655. else {
  139656. // Short swipes
  139657. if (!s.shortSwipes) {
  139658. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._activeIndex);
  139659. return;
  139660. }
  139661. if (s.swipeDirection === 'next') {
  139662. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, stopIndex + s.slidesPerGroup);
  139663. }
  139664. if (s.swipeDirection === 'prev') {
  139665. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, stopIndex);
  139666. }
  139667. }
  139668. }
  139669. /*=========================
  139670. Resize Handler
  139671. ===========================*/
  139672. var resizeId;
  139673. function onResize(s, plt, forceUpdatePagination) {
  139674. // TODO: hacky, we should use Resize Observer in the future
  139675. if (resizeId) {
  139676. plt.cancelTimeout(resizeId);
  139677. resizeId = null;
  139678. }
  139679. resizeId = plt.timeout(function () { return doResize(s, plt, forceUpdatePagination); }, 200);
  139680. }
  139681. function doResize(s, plt, forceUpdatePagination) {
  139682. resizeId = null;
  139683. // Disable locks on resize
  139684. var allowSwipeToPrev = s._allowSwipeToPrev;
  139685. var allowSwipeToNext = s._allowSwipeToNext;
  139686. s._allowSwipeToPrev = s._allowSwipeToNext = true;
  139687. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["p" /* updateContainerSize */])(s, plt);
  139688. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["q" /* updateSlidesSize */])(s, plt);
  139689. if (s.slidesPerView === 'auto' || s.freeMode || forceUpdatePagination) {
  139690. Object(__WEBPACK_IMPORTED_MODULE_5__swiper_pagination__["a" /* updatePagination */])(s);
  139691. }
  139692. if (s._spline) {
  139693. s._spline = undefined;
  139694. }
  139695. var slideChangedBySlideTo = false;
  139696. if (s.freeMode) {
  139697. var newTranslate = Math.min(Math.max(s._translate, Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["h" /* maxTranslate */])(s)), Object(__WEBPACK_IMPORTED_MODULE_0__swiper_utils__["i" /* minTranslate */])(s));
  139698. Object(__WEBPACK_IMPORTED_MODULE_1__swiper_transition__["d" /* setWrapperTranslate */])(s, plt, newTranslate);
  139699. Object(__WEBPACK_IMPORTED_MODULE_4__swiper_index__["a" /* updateActiveIndex */])(s);
  139700. Object(__WEBPACK_IMPORTED_MODULE_6__swiper_classes__["a" /* updateClasses */])(s);
  139701. if (s.autoHeight) {
  139702. Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["o" /* updateAutoHeight */])(s);
  139703. }
  139704. }
  139705. else {
  139706. Object(__WEBPACK_IMPORTED_MODULE_6__swiper_classes__["a" /* updateClasses */])(s);
  139707. if ((s.slidesPerView === 'auto' || s.slidesPerView > 1) && s._isEnd && !s.centeredSlides) {
  139708. slideChangedBySlideTo = Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._slides.length - 1, 0, false, true);
  139709. }
  139710. else {
  139711. slideChangedBySlideTo = Object(__WEBPACK_IMPORTED_MODULE_2__swiper__["k" /* slideTo */])(s, plt, s._activeIndex, 0, false, true);
  139712. }
  139713. }
  139714. // Return locks after resize
  139715. s._allowSwipeToPrev = allowSwipeToPrev;
  139716. s._allowSwipeToNext = allowSwipeToNext;
  139717. }
  139718. //# sourceMappingURL=swiper-events.js.map
  139719. /***/ }),
  139720. /* 665 */
  139721. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  139722. "use strict";
  139723. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ToastSlideIn; });
  139724. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return ToastSlideOut; });
  139725. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToastMdSlideIn; });
  139726. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ToastMdSlideOut; });
  139727. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return ToastWpPopIn; });
  139728. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return ToastWpPopOut; });
  139729. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animations_animation__ = __webpack_require__(20);
  139730. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transitions_transition__ = __webpack_require__(42);
  139731. var __extends = (this && this.__extends) || (function () {
  139732. var extendStatics = Object.setPrototypeOf ||
  139733. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  139734. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  139735. return function (d, b) {
  139736. extendStatics(d, b);
  139737. function __() { this.constructor = d; }
  139738. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  139739. };
  139740. })();
  139741. var ToastSlideIn = (function (_super) {
  139742. __extends(ToastSlideIn, _super);
  139743. function ToastSlideIn() {
  139744. return _super !== null && _super.apply(this, arguments) || this;
  139745. }
  139746. ToastSlideIn.prototype.init = function () {
  139747. // DOM READS
  139748. var ele = this.enteringView.pageRef().nativeElement;
  139749. var wrapperEle = ele.querySelector('.toast-wrapper');
  139750. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  139751. if (this.enteringView.data && this.enteringView.data.position === TOAST_POSITION_TOP) {
  139752. // top
  139753. // by default, it is -100% hidden (above the screen)
  139754. // so move from that to 10px below top: 0px;
  139755. wrapper.fromTo('translateY', '-100%', 10 + "px");
  139756. }
  139757. else if (this.enteringView.data && this.enteringView.data.position === TOAST_POSITION_MIDDLE) {
  139758. // Middle
  139759. // just center it and fade it in
  139760. var topPosition = Math.floor(ele.clientHeight / 2 - wrapperEle.clientHeight / 2);
  139761. // DOM WRITE
  139762. wrapperEle.style.top = topPosition + "px";
  139763. wrapper.fromTo('opacity', 0.01, 1);
  139764. }
  139765. else {
  139766. // bottom
  139767. // by default, it is 100% hidden (below the screen),
  139768. // so move from that to 10 px above bottom: 0px
  139769. wrapper.fromTo('translateY', '100%', 0 - 10 + "px");
  139770. }
  139771. this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add(wrapper);
  139772. };
  139773. return ToastSlideIn;
  139774. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  139775. var ToastSlideOut = (function (_super) {
  139776. __extends(ToastSlideOut, _super);
  139777. function ToastSlideOut() {
  139778. return _super !== null && _super.apply(this, arguments) || this;
  139779. }
  139780. ToastSlideOut.prototype.init = function () {
  139781. var ele = this.leavingView.pageRef().nativeElement;
  139782. var wrapperEle = ele.querySelector('.toast-wrapper');
  139783. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  139784. if (this.leavingView.data && this.leavingView.data.position === TOAST_POSITION_TOP) {
  139785. // top
  139786. // reverse arguments from enter transition
  139787. wrapper.fromTo('translateY', 10 + "px", '-100%');
  139788. }
  139789. else if (this.leavingView.data && this.leavingView.data.position === TOAST_POSITION_MIDDLE) {
  139790. // Middle
  139791. // just fade it out
  139792. wrapper.fromTo('opacity', 0.99, 0);
  139793. }
  139794. else {
  139795. // bottom
  139796. // reverse arguments from enter transition
  139797. wrapper.fromTo('translateY', 0 - 10 + "px", '100%');
  139798. }
  139799. this.easing('cubic-bezier(.36,.66,.04,1)').duration(300).add(wrapper);
  139800. };
  139801. return ToastSlideOut;
  139802. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  139803. var ToastMdSlideIn = (function (_super) {
  139804. __extends(ToastMdSlideIn, _super);
  139805. function ToastMdSlideIn() {
  139806. return _super !== null && _super.apply(this, arguments) || this;
  139807. }
  139808. ToastMdSlideIn.prototype.init = function () {
  139809. // DOM reads
  139810. var ele = this.enteringView.pageRef().nativeElement;
  139811. var wrapperEle = ele.querySelector('.toast-wrapper');
  139812. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  139813. if (this.enteringView.data && this.enteringView.data.position === TOAST_POSITION_TOP) {
  139814. // top
  139815. // by default, it is -100% hidden (above the screen)
  139816. // so move from that to top: 0px;
  139817. wrapper.fromTo('translateY', '-100%', "0%");
  139818. }
  139819. else if (this.enteringView.data && this.enteringView.data.position === TOAST_POSITION_MIDDLE) {
  139820. // Middle
  139821. // just center it and fade it in
  139822. var topPosition = Math.floor(ele.clientHeight / 2 - wrapperEle.clientHeight / 2);
  139823. // DOM WRITE
  139824. wrapperEle.style.top = topPosition + "px";
  139825. wrapper.fromTo('opacity', 0.01, 1);
  139826. }
  139827. else {
  139828. // bottom
  139829. // by default, it is 100% hidden (below the screen),
  139830. // so move from that to bottom: 0px
  139831. wrapper.fromTo('translateY', '100%', "0%");
  139832. }
  139833. this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add(wrapper);
  139834. };
  139835. return ToastMdSlideIn;
  139836. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  139837. var ToastMdSlideOut = (function (_super) {
  139838. __extends(ToastMdSlideOut, _super);
  139839. function ToastMdSlideOut() {
  139840. return _super !== null && _super.apply(this, arguments) || this;
  139841. }
  139842. ToastMdSlideOut.prototype.init = function () {
  139843. var ele = this.leavingView.pageRef().nativeElement;
  139844. var wrapperEle = ele.querySelector('.toast-wrapper');
  139845. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  139846. if (this.leavingView.data && this.leavingView.data.position === TOAST_POSITION_TOP) {
  139847. // top
  139848. // reverse arguments from enter transition
  139849. wrapper.fromTo('translateY', 0 + "%", '-100%');
  139850. }
  139851. else if (this.leavingView.data && this.leavingView.data.position === TOAST_POSITION_MIDDLE) {
  139852. // Middle
  139853. // just fade it out
  139854. wrapper.fromTo('opacity', 0.99, 0);
  139855. }
  139856. else {
  139857. // bottom
  139858. // reverse arguments from enter transition
  139859. wrapper.fromTo('translateY', 0 + "%", '100%');
  139860. }
  139861. this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add(wrapper);
  139862. };
  139863. return ToastMdSlideOut;
  139864. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  139865. var ToastWpPopIn = (function (_super) {
  139866. __extends(ToastWpPopIn, _super);
  139867. function ToastWpPopIn() {
  139868. return _super !== null && _super.apply(this, arguments) || this;
  139869. }
  139870. ToastWpPopIn.prototype.init = function () {
  139871. var ele = this.enteringView.pageRef().nativeElement;
  139872. var wrapperEle = ele.querySelector('.toast-wrapper');
  139873. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  139874. if (this.enteringView.data && this.enteringView.data.position === TOAST_POSITION_TOP) {
  139875. // top
  139876. wrapper.fromTo('opacity', 0.01, 1);
  139877. wrapper.fromTo('scale', 1.3, 1);
  139878. }
  139879. else if (this.enteringView.data && this.enteringView.data.position === TOAST_POSITION_MIDDLE) {
  139880. // Middle
  139881. // just center it and fade it in
  139882. var topPosition = Math.floor(ele.clientHeight / 2 - wrapperEle.clientHeight / 2);
  139883. // DOM WRITE
  139884. wrapperEle.style.top = topPosition + "px";
  139885. wrapper.fromTo('opacity', 0.01, 1);
  139886. wrapper.fromTo('scale', 1.3, 1);
  139887. }
  139888. else {
  139889. // bottom
  139890. wrapper.fromTo('opacity', 0.01, 1);
  139891. wrapper.fromTo('scale', 1.3, 1);
  139892. }
  139893. this.easing('cubic-bezier(0,0,0.05,1)').duration(200).add(wrapper);
  139894. };
  139895. return ToastWpPopIn;
  139896. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  139897. var ToastWpPopOut = (function (_super) {
  139898. __extends(ToastWpPopOut, _super);
  139899. function ToastWpPopOut() {
  139900. return _super !== null && _super.apply(this, arguments) || this;
  139901. }
  139902. ToastWpPopOut.prototype.init = function () {
  139903. // DOM reads
  139904. var ele = this.leavingView.pageRef().nativeElement;
  139905. var wrapperEle = ele.querySelector('.toast-wrapper');
  139906. var wrapper = new __WEBPACK_IMPORTED_MODULE_0__animations_animation__["a" /* Animation */](this.plt, wrapperEle);
  139907. if (this.leavingView.data && this.leavingView.data.position === TOAST_POSITION_TOP) {
  139908. // top
  139909. // reverse arguments from enter transition
  139910. wrapper.fromTo('opacity', 0.99, 0);
  139911. wrapper.fromTo('scale', 1, 1.3);
  139912. }
  139913. else if (this.leavingView.data && this.leavingView.data.position === TOAST_POSITION_MIDDLE) {
  139914. // Middle
  139915. // just fade it out
  139916. wrapper.fromTo('opacity', 0.99, 0);
  139917. wrapper.fromTo('scale', 1, 1.3);
  139918. }
  139919. else {
  139920. // bottom
  139921. // reverse arguments from enter transition
  139922. wrapper.fromTo('opacity', 0.99, 0);
  139923. wrapper.fromTo('scale', 1, 1.3);
  139924. }
  139925. // DOM writes
  139926. var EASE = 'ease-out';
  139927. var DURATION = 150;
  139928. this.easing(EASE).duration(DURATION).add(wrapper);
  139929. };
  139930. return ToastWpPopOut;
  139931. }(__WEBPACK_IMPORTED_MODULE_1__transitions_transition__["a" /* Transition */]));
  139932. var TOAST_POSITION_TOP = 'top';
  139933. var TOAST_POSITION_MIDDLE = 'middle';
  139934. //# sourceMappingURL=toast-transitions.js.map
  139935. /***/ }),
  139936. /* 666 */
  139937. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  139938. "use strict";
  139939. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ToggleGesture; });
  139940. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__ = __webpack_require__(13);
  139941. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__gestures_pan_gesture__ = __webpack_require__(70);
  139942. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  139943. var __extends = (this && this.__extends) || (function () {
  139944. var extendStatics = Object.setPrototypeOf ||
  139945. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  139946. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  139947. return function (d, b) {
  139948. extendStatics(d, b);
  139949. function __() { this.constructor = d; }
  139950. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  139951. };
  139952. })();
  139953. /**
  139954. * @hidden
  139955. */
  139956. var ToggleGesture = (function (_super) {
  139957. __extends(ToggleGesture, _super);
  139958. function ToggleGesture(plt, toggle, gestureCtrl, domCtrl) {
  139959. var _this = _super.call(this, plt, toggle.getNativeElement(), {
  139960. threshold: 0,
  139961. zone: false,
  139962. domController: domCtrl,
  139963. gesture: gestureCtrl.createGesture({
  139964. name: __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__["k" /* GESTURE_TOGGLE */],
  139965. priority: __WEBPACK_IMPORTED_MODULE_0__gestures_gesture_controller__["i" /* GESTURE_PRIORITY_TOGGLE */]
  139966. })
  139967. }) || this;
  139968. _this.toggle = toggle;
  139969. return _this;
  139970. }
  139971. ToggleGesture.prototype.canStart = function () {
  139972. return true;
  139973. };
  139974. ToggleGesture.prototype.onDragStart = function (ev) {
  139975. ev.preventDefault();
  139976. this.toggle._onDragStart(Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev).x);
  139977. };
  139978. ToggleGesture.prototype.onDragMove = function (ev) {
  139979. ev.preventDefault();
  139980. this.toggle._onDragMove(Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev).x);
  139981. };
  139982. ToggleGesture.prototype.onDragEnd = function (ev) {
  139983. ev.preventDefault();
  139984. this.toggle._onDragEnd(Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev).x);
  139985. };
  139986. return ToggleGesture;
  139987. }(__WEBPACK_IMPORTED_MODULE_1__gestures_pan_gesture__["a" /* PanGesture */]));
  139988. //# sourceMappingURL=toggle-gesture.js.map
  139989. /***/ }),
  139990. /* 667 */
  139991. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  139992. "use strict";
  139993. /* harmony export (immutable) */ __webpack_exports__["f"] = processRecords;
  139994. /* harmony export (immutable) */ __webpack_exports__["e"] = populateNodeData;
  139995. /* harmony export (immutable) */ __webpack_exports__["d"] = initReadNodes;
  139996. /* harmony export (immutable) */ __webpack_exports__["g"] = updateDimensions;
  139997. /* harmony export (immutable) */ __webpack_exports__["h"] = updateNodeContext;
  139998. /* harmony export (immutable) */ __webpack_exports__["i"] = writeToNodes;
  139999. /* harmony export (immutable) */ __webpack_exports__["a"] = adjustRendered;
  140000. /* unused harmony export getVirtualHeight */
  140001. /* harmony export (immutable) */ __webpack_exports__["c"] = estimateHeight;
  140002. /* harmony export (immutable) */ __webpack_exports__["b"] = calcDimensions;
  140003. /* unused harmony export VirtualContext */
  140004. var PREVIOUS_CELL = {
  140005. row: 0,
  140006. width: 0,
  140007. height: 0,
  140008. top: 0,
  140009. left: 0,
  140010. tmpl: -1
  140011. };
  140012. /**
  140013. * NO DOM
  140014. */
  140015. function processRecords(stopAtHeight, records, cells, headerFn, footerFn, data) {
  140016. var record;
  140017. var startRecordIndex;
  140018. var previousCell;
  140019. var tmpData;
  140020. var lastRecordIndex = records ? (records.length - 1) : -1;
  140021. if (cells.length) {
  140022. // we already have cells
  140023. previousCell = cells[cells.length - 1];
  140024. if (previousCell.top + previousCell.height > stopAtHeight) {
  140025. return;
  140026. }
  140027. startRecordIndex = (previousCell.record + 1);
  140028. }
  140029. else {
  140030. // no cells have been created yet
  140031. previousCell = PREVIOUS_CELL;
  140032. startRecordIndex = 0;
  140033. }
  140034. var processedTotal = 0;
  140035. for (var recordIndex = startRecordIndex; recordIndex <= lastRecordIndex; recordIndex++) {
  140036. record = records[recordIndex];
  140037. if (headerFn) {
  140038. tmpData = headerFn(record, recordIndex, records);
  140039. if (tmpData !== null) {
  140040. // add header data
  140041. previousCell = addCell(previousCell, recordIndex, 1 /* Header */, tmpData, data.hdrWidth, data.hdrHeight, data.viewWidth);
  140042. cells.push(previousCell);
  140043. }
  140044. }
  140045. // add item data
  140046. previousCell = addCell(previousCell, recordIndex, 0 /* Item */, null, data.itmWidth, data.itmHeight, data.viewWidth);
  140047. cells.push(previousCell);
  140048. if (footerFn) {
  140049. tmpData = footerFn(record, recordIndex, records);
  140050. if (tmpData !== null) {
  140051. // add footer data
  140052. previousCell = addCell(previousCell, recordIndex, 2 /* Footer */, tmpData, data.ftrWidth, data.ftrHeight, data.viewWidth);
  140053. cells.push(previousCell);
  140054. }
  140055. }
  140056. if (previousCell.record === lastRecordIndex) {
  140057. previousCell.isLast = true;
  140058. }
  140059. // should always process at least 3 records
  140060. processedTotal++;
  140061. if (previousCell.top + previousCell.height + data.itmHeight > stopAtHeight && processedTotal > 3) {
  140062. return;
  140063. }
  140064. }
  140065. }
  140066. function addCell(previousCell, recordIndex, tmpl, tmplData, cellWidth, cellHeight, viewportWidth) {
  140067. var newCell = {
  140068. record: recordIndex,
  140069. tmpl: tmpl,
  140070. width: cellWidth,
  140071. height: cellHeight,
  140072. reads: 0
  140073. };
  140074. if (previousCell.left + previousCell.width + cellWidth > viewportWidth) {
  140075. // add a new cell in a new row
  140076. newCell.row = (previousCell.row + 1);
  140077. newCell.top = (previousCell.top + previousCell.height);
  140078. newCell.left = 0;
  140079. }
  140080. else {
  140081. // add a new cell in the same row
  140082. newCell.row = previousCell.row;
  140083. newCell.top = previousCell.top;
  140084. newCell.left = (previousCell.left + previousCell.width);
  140085. }
  140086. if (tmplData) {
  140087. newCell.data = tmplData;
  140088. }
  140089. return newCell;
  140090. }
  140091. /**
  140092. * NO DOM
  140093. */
  140094. function populateNodeData(startCellIndex, endCellIndex, scrollingDown, cells, records, nodes, viewContainer, itmTmp, hdrTmp, ftrTmp) {
  140095. if (!records || records.length === 0) {
  140096. nodes.length = 0;
  140097. viewContainer.clear();
  140098. return true;
  140099. }
  140100. var recordsLength = records.length;
  140101. var hasChanges = false;
  140102. // let node: VirtualNode;
  140103. var availableNode;
  140104. var cell;
  140105. var viewInsertIndex = null;
  140106. var totalNodes = nodes.length;
  140107. var templateRef;
  140108. startCellIndex = Math.max(startCellIndex, 0);
  140109. endCellIndex = Math.min(endCellIndex, cells.length - 1);
  140110. var usedNodes = [];
  140111. for (var cellIndex = startCellIndex; cellIndex <= endCellIndex; cellIndex++) {
  140112. cell = cells[cellIndex];
  140113. availableNode = null;
  140114. // find the first one that's available
  140115. var existingNode = nodes.find(function (n) { return n.cell === cellIndex && n.tmpl === cell.tmpl; });
  140116. if (existingNode) {
  140117. if (existingNode.view.context.$implicit === records[cell.record]) {
  140118. usedNodes.push(existingNode);
  140119. continue; // optimization: node data is the same no need to update
  140120. }
  140121. (void 0) /* console.debug */;
  140122. availableNode = existingNode; // update existing node
  140123. }
  140124. else {
  140125. (void 0) /* console.debug */;
  140126. for (var i = 0; i < totalNodes; i++) {
  140127. var node = nodes[i];
  140128. if (cell.tmpl !== node.tmpl || i === 0 && cellIndex !== 0) {
  140129. // the cell must use the correct template
  140130. // first node can only be used by the first cell (css :first-child reasons)
  140131. // this node is never available to be reused
  140132. continue;
  140133. }
  140134. if (node.cell < startCellIndex || node.cell > endCellIndex) {
  140135. if (!availableNode) {
  140136. // havent gotten an available node yet
  140137. availableNode = node;
  140138. (void 0) /* console.debug */;
  140139. }
  140140. else if (scrollingDown) {
  140141. // scrolling down
  140142. if (node.cell < availableNode.cell) {
  140143. availableNode = node;
  140144. (void 0) /* console.debug */;
  140145. }
  140146. }
  140147. else {
  140148. // scrolling up
  140149. if (node.cell > availableNode.cell) {
  140150. availableNode = node;
  140151. (void 0) /* console.debug */;
  140152. }
  140153. }
  140154. }
  140155. }
  140156. }
  140157. if (!availableNode) {
  140158. // did not find an available node to put the cell data into
  140159. // insert a new node after existing ones
  140160. if (viewInsertIndex === null) {
  140161. viewInsertIndex = -1;
  140162. for (var j = totalNodes - 1; j >= 0; j--) {
  140163. var node = nodes[j];
  140164. if (node) {
  140165. viewInsertIndex = viewContainer.indexOf(node.view);
  140166. break;
  140167. }
  140168. }
  140169. }
  140170. // select which templateRef should be used for this cell
  140171. templateRef = cell.tmpl === 1 /* Header */ ? hdrTmp : cell.tmpl === 2 /* Footer */ ? ftrTmp : itmTmp;
  140172. if (!templateRef) {
  140173. console.error("virtual" + (cell.tmpl === 1 /* Header */ ? 'Header' : cell.tmpl === 2 /* Footer */ ? 'Footer' : 'Item') + " template required");
  140174. continue;
  140175. }
  140176. availableNode = {
  140177. tmpl: cell.tmpl,
  140178. view: viewContainer.createEmbeddedView(templateRef, new VirtualContext(null, null, null), viewInsertIndex)
  140179. };
  140180. totalNodes = nodes.push(availableNode);
  140181. }
  140182. // assign who's the new cell index for this node
  140183. availableNode.cell = cellIndex;
  140184. // apply the cell's data to this node
  140185. var context = availableNode.view.context;
  140186. context.$implicit = cell.data || records[cell.record];
  140187. context.index = cellIndex;
  140188. context.count = recordsLength;
  140189. availableNode.hasChanges = true;
  140190. availableNode.lastTransform = null;
  140191. hasChanges = true;
  140192. usedNodes.push(availableNode);
  140193. }
  140194. var unusedNodes = nodes.filter(function (n) { return usedNodes.indexOf(n) < 0; });
  140195. unusedNodes.forEach(function (node) {
  140196. var index = viewContainer.indexOf(node.view);
  140197. viewContainer.remove(index);
  140198. var removeIndex = nodes.findIndex(function (n) { return n === node; });
  140199. nodes.splice(removeIndex, 1);
  140200. });
  140201. usedNodes.length = 0;
  140202. unusedNodes.length = 0;
  140203. return hasChanges;
  140204. }
  140205. /**
  140206. * DOM READ
  140207. */
  140208. function initReadNodes(plt, nodes, cells, data) {
  140209. if (nodes.length && cells.length) {
  140210. // first node
  140211. // ******** DOM READ ****************
  140212. var ele = getElement(nodes[0]);
  140213. var firstCell = cells[0];
  140214. firstCell.top = ele.clientTop;
  140215. firstCell.left = ele.clientLeft;
  140216. firstCell.row = 0;
  140217. // ******** DOM READ ****************
  140218. updateDimensions(plt, nodes, cells, data, true);
  140219. }
  140220. }
  140221. /**
  140222. * DOM READ
  140223. */
  140224. function updateDimensions(plt, nodes, cells, data, initialUpdate) {
  140225. var node;
  140226. var element;
  140227. var cell;
  140228. var previousCell;
  140229. var totalCells = cells.length;
  140230. for (var i = 0; i < nodes.length; i++) {
  140231. node = nodes[i];
  140232. cell = cells[node.cell];
  140233. // read element dimensions if they haven't been checked enough times
  140234. if (cell && cell.reads < REQUIRED_DOM_READS) {
  140235. element = getElement(node);
  140236. // ******** DOM READ ****************
  140237. readElements(plt, cell, element);
  140238. if (initialUpdate) {
  140239. // update estimated dimensions with more accurate dimensions
  140240. if (cell.tmpl === 1 /* Header */) {
  140241. data.hdrHeight = cell.height;
  140242. if (cell.left === 0) {
  140243. data.hdrWidth = cell.width;
  140244. }
  140245. }
  140246. else if (cell.tmpl === 2 /* Footer */) {
  140247. data.ftrHeight = cell.height;
  140248. if (cell.left === 0) {
  140249. data.ftrWidth = cell.width;
  140250. }
  140251. }
  140252. else {
  140253. data.itmHeight = cell.height;
  140254. if (cell.left === 0) {
  140255. data.itmWidth = cell.width;
  140256. }
  140257. }
  140258. }
  140259. cell.reads++;
  140260. }
  140261. }
  140262. // figure out which cells are currently viewable within the viewport
  140263. var viewableBottom = (data.scrollTop + data.viewHeight);
  140264. data.topViewCell = totalCells;
  140265. data.bottomViewCell = 0;
  140266. if (totalCells > 0) {
  140267. // completely realign position to ensure they're all accurately placed
  140268. cell = cells[0];
  140269. previousCell = {
  140270. row: 0,
  140271. width: 0,
  140272. height: 0,
  140273. top: cell.top,
  140274. left: 0,
  140275. tmpl: -1
  140276. };
  140277. for (var i_1 = 0; i_1 < totalCells; i_1++) {
  140278. cell = cells[i_1];
  140279. if (previousCell.left + previousCell.width + cell.width > data.viewWidth) {
  140280. // new row
  140281. cell.row++;
  140282. cell.top = (previousCell.top + previousCell.height);
  140283. cell.left = 0;
  140284. }
  140285. else {
  140286. // same row
  140287. cell.row = previousCell.row;
  140288. cell.top = previousCell.top;
  140289. cell.left = (previousCell.left + previousCell.width);
  140290. }
  140291. // figure out which cells are viewable within the viewport
  140292. if (cell.top + cell.height > data.scrollTop && i_1 < data.topViewCell) {
  140293. data.topViewCell = i_1;
  140294. }
  140295. else if (cell.top < viewableBottom && i_1 > data.bottomViewCell) {
  140296. data.bottomViewCell = i_1;
  140297. }
  140298. previousCell = cell;
  140299. }
  140300. }
  140301. }
  140302. function updateNodeContext(nodes, cells, data) {
  140303. // ensure each node has the correct bounds in its context
  140304. var node;
  140305. var cell;
  140306. var bounds;
  140307. for (var i = 0, ilen = nodes.length; i < ilen; i++) {
  140308. node = nodes[i];
  140309. cell = cells[node.cell];
  140310. if (node && cell) {
  140311. bounds = node.view.context.bounds;
  140312. bounds.top = cell.top + data.viewTop;
  140313. bounds.bottom = bounds.top + cell.height;
  140314. bounds.left = cell.left + data.viewLeft;
  140315. bounds.right = bounds.left + cell.width;
  140316. bounds.width = cell.width;
  140317. bounds.height = cell.height;
  140318. }
  140319. }
  140320. }
  140321. /**
  140322. * DOM READ
  140323. */
  140324. function readElements(plt, cell, element) {
  140325. // ******** DOM READ ****************
  140326. var styles = plt.getElementComputedStyle(element);
  140327. // ******** DOM READ ****************
  140328. cell.left = (element.clientLeft - parseFloat(styles.marginLeft));
  140329. // ******** DOM READ ****************
  140330. cell.width = (element.offsetWidth + parseFloat(styles.marginLeft) + parseFloat(styles.marginRight));
  140331. // ******** DOM READ ****************
  140332. cell.height = (element.offsetHeight + parseFloat(styles.marginTop) + parseFloat(styles.marginBottom));
  140333. }
  140334. /**
  140335. * DOM WRITE
  140336. */
  140337. function writeToNodes(plt, nodes, cells, totalRecords) {
  140338. var node;
  140339. var element;
  140340. var cell;
  140341. var transform;
  140342. var totalCells = Math.max(totalRecords, cells.length);
  140343. for (var i = 0, ilen = nodes.length; i < ilen; i++) {
  140344. node = nodes[i];
  140345. cell = cells[node.cell];
  140346. transform = "translate3d(" + cell.left + "px," + cell.top + "px,0px)";
  140347. if (node.lastTransform !== transform) {
  140348. element = getElement(node);
  140349. if (element) {
  140350. // ******** DOM WRITE ****************
  140351. element.style[plt.Css.transform] = node.lastTransform = transform;
  140352. // ******** DOM WRITE ****************
  140353. element.classList.add('virtual-position');
  140354. // https://www.w3.org/TR/wai-aria/states_and_properties#aria-posinset
  140355. // ******** DOM WRITE ****************
  140356. element.setAttribute('aria-posinset', node.cell + 1);
  140357. // https://www.w3.org/TR/wai-aria/states_and_properties#aria-setsize
  140358. // ******** DOM WRITE ****************
  140359. element.setAttribute('aria-setsize', totalCells);
  140360. }
  140361. }
  140362. }
  140363. }
  140364. /**
  140365. * NO DOM
  140366. */
  140367. function adjustRendered(cells, data) {
  140368. var maxRenderHeight = (data.renderHeight - data.itmHeight);
  140369. var totalCells = cells.length;
  140370. var viewableRenderedPadding = (data.itmHeight < 90 ? VIEWABLE_RENDERED_PADDING : 0);
  140371. if (data.scrollDiff > 0) {
  140372. // scrolling down
  140373. data.topCell = Math.max(data.topViewCell - viewableRenderedPadding, 0);
  140374. data.bottomCell = data.topCell;
  140375. var cellsRenderHeight = 0;
  140376. for (var i = data.topCell; i < totalCells; i++) {
  140377. cellsRenderHeight += cells[i].height;
  140378. if (i > data.bottomCell)
  140379. data.bottomCell = i;
  140380. if (cellsRenderHeight >= maxRenderHeight)
  140381. break;
  140382. }
  140383. if (cellsRenderHeight < maxRenderHeight) {
  140384. // there are no more cells at the bottom, so move topCell to a smaller index
  140385. for (var i = data.topCell - 1; i >= 0; i--) {
  140386. cellsRenderHeight += cells[i].height;
  140387. data.topCell = i;
  140388. if (cellsRenderHeight >= maxRenderHeight)
  140389. break;
  140390. }
  140391. }
  140392. }
  140393. else {
  140394. // scroll up
  140395. data.bottomCell = Math.min(data.bottomViewCell + viewableRenderedPadding, totalCells - 1);
  140396. data.topCell = data.bottomCell;
  140397. var cellsRenderHeight = 0;
  140398. (void 0) /* assert */;
  140399. for (var i = data.bottomCell; i >= 0; i--) {
  140400. cellsRenderHeight += cells[i].height;
  140401. if (i < data.topCell)
  140402. data.topCell = i;
  140403. if (cellsRenderHeight >= maxRenderHeight)
  140404. break;
  140405. }
  140406. if (cellsRenderHeight < maxRenderHeight) {
  140407. // there are no more cells at the top, so move bottomCell to a higher index
  140408. for (var i = data.bottomCell; i < totalCells; i++) {
  140409. cellsRenderHeight += cells[i].height;
  140410. data.bottomCell = i;
  140411. if (cellsRenderHeight >= maxRenderHeight)
  140412. break;
  140413. }
  140414. }
  140415. }
  140416. }
  140417. /**
  140418. * NO DOM
  140419. */
  140420. function getVirtualHeight(totalRecords, lastCell) {
  140421. if (lastCell.record >= totalRecords - 1) {
  140422. return (lastCell.top + lastCell.height);
  140423. }
  140424. var unknownRecords = (totalRecords - lastCell.record - 1);
  140425. var knownHeight = (lastCell.top + lastCell.height);
  140426. return Math.ceil(knownHeight + ((knownHeight / (totalRecords - unknownRecords)) * unknownRecords));
  140427. }
  140428. /**
  140429. * NO DOM
  140430. */
  140431. function estimateHeight(totalRecords, lastCell, existingHeight, difference) {
  140432. if (!totalRecords || !lastCell) {
  140433. return 0;
  140434. }
  140435. var newHeight = getVirtualHeight(totalRecords, lastCell);
  140436. var percentToBottom = (lastCell.record / (totalRecords - 1));
  140437. var diff = Math.abs(existingHeight - newHeight);
  140438. if ((diff > (newHeight * difference)) ||
  140439. (percentToBottom > .995)) {
  140440. return newHeight;
  140441. }
  140442. return existingHeight;
  140443. }
  140444. /**
  140445. * DOM READ
  140446. */
  140447. function calcDimensions(data, virtualScrollElement, approxItemWidth, approxItemHeight, appoxHeaderWidth, approxHeaderHeight, approxFooterWidth, approxFooterHeight, bufferRatio) {
  140448. // get the parent container's viewport bounds
  140449. var viewportElement = virtualScrollElement.parentElement;
  140450. // ******** DOM READ ****************
  140451. data.viewWidth = viewportElement.offsetWidth;
  140452. // ******** DOM READ ****************
  140453. data.viewHeight = viewportElement.offsetHeight;
  140454. // get the virtual scroll element's offset data
  140455. // ******** DOM READ ****************
  140456. data.viewTop = virtualScrollElement.offsetTop;
  140457. // ******** DOM READ ****************
  140458. data.viewLeft = virtualScrollElement.offsetLeft;
  140459. // the height we'd like to render, which is larger than viewable
  140460. data.renderHeight = (data.viewHeight * bufferRatio);
  140461. if (data.viewWidth > 0 && data.viewHeight > 0) {
  140462. data.itmWidth = calcWidth(data.viewWidth, approxItemWidth);
  140463. data.itmHeight = calcHeight(data.viewHeight, approxItemHeight);
  140464. data.hdrWidth = calcWidth(data.viewWidth, appoxHeaderWidth);
  140465. data.hdrHeight = calcHeight(data.viewHeight, approxHeaderHeight);
  140466. data.ftrWidth = calcWidth(data.viewWidth, approxFooterWidth);
  140467. data.ftrHeight = calcHeight(data.viewHeight, approxFooterHeight);
  140468. data.valid = true;
  140469. }
  140470. }
  140471. /**
  140472. * NO DOM
  140473. */
  140474. function calcWidth(viewportWidth, approxWidth) {
  140475. if (approxWidth.indexOf('%') > 0) {
  140476. return (viewportWidth * (parseFloat(approxWidth) / 100));
  140477. }
  140478. else if (approxWidth.indexOf('px') > 0) {
  140479. return parseFloat(approxWidth);
  140480. }
  140481. throw new Error('virtual scroll width can only use "%" or "px" units');
  140482. }
  140483. /**
  140484. * NO DOM
  140485. */
  140486. function calcHeight(_viewportHeight, approxHeight) {
  140487. if (approxHeight.indexOf('px') > 0) {
  140488. return parseFloat(approxHeight);
  140489. }
  140490. throw new Error('virtual scroll height must use "px" units');
  140491. }
  140492. /**
  140493. * NO DOM
  140494. */
  140495. function getElement(node) {
  140496. var rootNodes = node.view.rootNodes;
  140497. for (var i = 0; i < rootNodes.length; i++) {
  140498. if (rootNodes[i].nodeType === 1) {
  140499. return rootNodes[i];
  140500. }
  140501. }
  140502. return null;
  140503. }
  140504. var VirtualContext = (function () {
  140505. function VirtualContext($implicit, index, count) {
  140506. this.$implicit = $implicit;
  140507. this.index = index;
  140508. this.count = count;
  140509. this.bounds = {};
  140510. }
  140511. Object.defineProperty(VirtualContext.prototype, "first", {
  140512. get: function () { return this.index === 0; },
  140513. enumerable: true,
  140514. configurable: true
  140515. });
  140516. Object.defineProperty(VirtualContext.prototype, "last", {
  140517. get: function () { return this.index === this.count - 1; },
  140518. enumerable: true,
  140519. configurable: true
  140520. });
  140521. Object.defineProperty(VirtualContext.prototype, "even", {
  140522. get: function () { return this.index % 2 === 0; },
  140523. enumerable: true,
  140524. configurable: true
  140525. });
  140526. Object.defineProperty(VirtualContext.prototype, "odd", {
  140527. get: function () { return !this.even; },
  140528. enumerable: true,
  140529. configurable: true
  140530. });
  140531. return VirtualContext;
  140532. }());
  140533. var VIEWABLE_RENDERED_PADDING = 3;
  140534. var REQUIRED_DOM_READS = 2;
  140535. //# sourceMappingURL=virtual-util.js.map
  140536. /***/ }),
  140537. /* 668 */
  140538. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  140539. "use strict";
  140540. /* unused harmony export IonicPage */
  140541. /**
  140542. * @name IonicPage
  140543. * @description
  140544. * The Ionic Page handles registering and displaying specific pages based on URLs. It's used
  140545. * underneath `NavController` so it will never have to be interacted with directly. When a new
  140546. * page is pushed with `NavController`, the URL is updated to match the path to this page.
  140547. *
  140548. * Unlike traditional web apps, URLs don't dictate navigation in Ionic apps.
  140549. * Instead, URLs help us link to specific pieces of content as a breadcrumb.
  140550. * The current URL gets updated as we navigate, but we use the `NavController`
  140551. * push and pop, or `NavPush` and `NavPop` to move around. This makes it much easier
  140552. * to handle complicated nested navigation.
  140553. *
  140554. * We refer to our URL system as a deep link system instead of a router to encourage
  140555. * Ionic developers to think of URLs as a breadcrumb rather than as the source of
  140556. * truth in navigation. This encourages flexible navigation design and happy apps all
  140557. * over the world.
  140558. *
  140559. *
  140560. * @usage
  140561. *
  140562. * The first step to setting up deep links is to add the page that should be
  140563. * a deep link in the `IonicPageModule.forChild` import of the page's module.
  140564. * For our examples, this will be `MyPage`:
  140565. *
  140566. * ```ts
  140567. * @NgModule({
  140568. * declarations: [
  140569. * MyPage
  140570. * ],
  140571. * imports: [
  140572. * IonicPageModule.forChild(MyPage)
  140573. * ],
  140574. * entryComponents: [
  140575. * MyPage
  140576. * ]
  140577. * })
  140578. * export class MyPageModule {}
  140579. * ```
  140580. *
  140581. * Then, add the `@IonicPage` decorator to the component. The most simple usage is adding an
  140582. * empty decorator:
  140583. *
  140584. * ```ts
  140585. * @IonicPage()
  140586. * @Component({
  140587. * templateUrl: 'main.html'
  140588. * })
  140589. * export class MyPage {}
  140590. * ```
  140591. *
  140592. * This will automatically create a link to the `MyPage` component using the same name as the class,
  140593. * `name`: `'MyPage'`. The page can now be navigated to by using this name. For example:
  140594. *
  140595. * ```ts
  140596. * @Component({
  140597. * templateUrl: 'another-page.html'
  140598. * })
  140599. * export class AnotherPage {
  140600. * constructor(public navCtrl: NavController) {}
  140601. *
  140602. * goToMyPage() {
  140603. * // go to the MyPage component
  140604. * this.navCtrl.push('MyPage');
  140605. * }
  140606. * }
  140607. * ```
  140608. *
  140609. * The `@IonicPage` decorator accepts a `DeepLinkMetadataType` object. This object accepts
  140610. * the following properties: `name`, `segment`, `defaultHistory`, and `priority`. All of them
  140611. * are optional but can be used to create complex navigation links.
  140612. *
  140613. *
  140614. * ### Changing Name
  140615. *
  140616. * As mentioned previously, the `name` property will be set to the class name if it isn't provided.
  140617. * Changing the name of the link is extremely simple. To change the name used to link to the
  140618. * component, simply pass it in the decorator like so:
  140619. *
  140620. * ```ts
  140621. * @IonicPage({
  140622. * name: 'my-page'
  140623. * })
  140624. * ```
  140625. *
  140626. * This will create a link to the `MyPage` component using the name `'my-page'`. Similar to the previous
  140627. * example, the page can be navigated to by using the name:
  140628. *
  140629. * ```ts
  140630. * goToMyPage() {
  140631. * // go to the MyPage component
  140632. * this.navCtrl.push('my-page');
  140633. * }
  140634. * ```
  140635. *
  140636. *
  140637. * ### Setting URL Path
  140638. *
  140639. * The `segment` property is used to set the URL to the page. If this property isn't provided, the
  140640. * `segment` will use the value of `name`. Since components can be loaded anywhere in the app, the
  140641. * `segment` doesn't require a full URL path. When a page becomes the active page, the `segment` is
  140642. * appended to the URL.
  140643. *
  140644. * The `segment` can be changed to anything and doesn't have to match the `name`. For example, passing
  140645. * a value for `name` and `segment`:
  140646. *
  140647. * ```ts
  140648. * @IonicPage({
  140649. * name: 'my-page',
  140650. * segment: 'some-path'
  140651. * })
  140652. * ```
  140653. *
  140654. * When navigating to this page as the first page in the app, the URL will look something like:
  140655. *
  140656. * ```
  140657. * http://localhost:8101/#/some-path
  140658. * ```
  140659. *
  140660. * However, navigating to the page will still use the `name` like the previous examples do.
  140661. *
  140662. *
  140663. * ### Dynamic Links
  140664. *
  140665. * The `segment` property is useful for creating dynamic links. Sometimes the URL isn't known ahead
  140666. * of time, so it can be passed as a variable.
  140667. *
  140668. * Since passing data around is common practice in an app, it can be reflected in the app's URL by
  140669. * using the `:param` syntax. For example, set the `segment` in the `@IonicPage` decorator:
  140670. *
  140671. * ```ts
  140672. * @IonicPage({
  140673. * name: 'detail-page',
  140674. * segment: 'detail/:id'
  140675. * })
  140676. * ```
  140677. *
  140678. * In this case, when we `push` to a new instance of `'detail-page'`, the value of `id` will
  140679. * in the `detailInfo` data being passed to `push` will replace `:id` in the URL.
  140680. *
  140681. * Important: The property needs to be something that can be converted into a string, objects
  140682. * are not supported.
  140683. *
  140684. * For example, to push the `'detail-page'` in the `ListPage` component, the following code could
  140685. * be used:
  140686. *
  140687. * ```ts
  140688. * @IonicPage({
  140689. * name: 'list'
  140690. * })
  140691. * export class ListPage {
  140692. * constructor(public navCtrl: NavController) {}
  140693. *
  140694. * pushPage(detailInfo) {
  140695. * // Push an `id` to the `'detail-page'`
  140696. * this.navCtrl.push('detail-page', {
  140697. * 'id': detailInfo.id
  140698. * })
  140699. * }
  140700. * }
  140701. * ```
  140702. *
  140703. * If the value of `detailInfo.id` is `12`, for example, the URL would end up looking like this:
  140704. *
  140705. * ```
  140706. * http://localhost:8101/#/list/detail/12
  140707. * ```
  140708. *
  140709. * Since this `id` will be used to pull in the data of the specific detail page, it's Important
  140710. * that the `id` is unique.
  140711. *
  140712. * Note: Even though the `name` is `detail-page`, the `segment` uses `detail/:id`, and the URL
  140713. * will use the `segment`.
  140714. *
  140715. *
  140716. * ### Default History
  140717. *
  140718. * Pages can be navigated to using deep links from anywhere in the app, but sometimes the app is
  140719. * launched from a URL and the page needs to have the same history as if it were navigated to from
  140720. * inside of the app.
  140721. *
  140722. * By default, the page would be navigated to as the first page in the stack with no prior history.
  140723. * A good example is the App Store on iOS. Clicking on a URL to an application in the App Store will
  140724. * load the details of the application with no back button, as if it were the first page ever viewed.
  140725. *
  140726. * The default history of any page can be set in the `defaultHistory` property. This history will only
  140727. * be used if the history doesn't already exist, meaning if you navigate to the page the history will
  140728. * be the pages that were navigated from.
  140729. *
  140730. * The `defaultHistory` property takes an array of page names. The page names are specified as statically
  140731. * analyzable strings (which means you must use strings and not variables or delared constants). If the
  140732. * parent page does not have a `name` specified in its `IonicPage` decorator its name is its class name.
  140733. *
  140734. * For example, setting the history of the detail page to the list page where the `name` is `list`:
  140735. *
  140736. * ```ts
  140737. * @IonicPage({
  140738. * name: 'detail-page',
  140739. * segment: 'detail/:id',
  140740. * defaultHistory: ['list']
  140741. * })
  140742. * ```
  140743. *
  140744. * In this example, if the app is launched at `http://localhost:8101/#/detail/my-detail` the displayed page
  140745. * will be the `'detail-page'` with an id of `my-detail` and it will show a back button that goes back to
  140746. * the `'list'` page.
  140747. *
  140748. * For a deeper example:
  140749. *
  140750. * ```ts
  140751. * @IonicPage({
  140752. * segment: 'contact-more-info',
  140753. * defaultHistory: ['ContactDetailPage', 'Contact']
  140754. * })
  140755. * ...
  140756. * export class ContactMoreInfoPage {
  140757. * ...
  140758. * }
  140759. * ```
  140760. *
  140761. * In this example, if the app is launched at `http://localhost:8101/#/contact/contact-more-info` the displayed page
  140762. * will be the `'ContactMoreInfoPage'`. It will show a back button that will go to the `'ContactDetailPage'` which
  140763. * will also show a back button which will go to the `'Constact'` page.
  140764. *
  140765. * An example of an application with a set history stack is the Instagram application. Opening a link
  140766. * to an image on Instagram will show the details for that image with a back button to the user's profile
  140767. * page. There is no "right" way of setting the history for a page, it is up to the application.
  140768. *
  140769. * ### Priority
  140770. *
  140771. * The `priority` property is only used during preloading. By default, preloading is turned off so setting
  140772. * this property would do nothing. Preloading eagerly loads all deep links after the application boots
  140773. * instead of on demand as needed. To enable preloading, set `preloadModules` in the main application module
  140774. * config to `true`:
  140775. *
  140776. * ```ts
  140777. * @NgModule({
  140778. * declarations: [
  140779. * MyApp
  140780. * ],
  140781. * imports: [
  140782. * BrowserModule,
  140783. * IonicModule.forRoot(MyApp, {
  140784. * preloadModules: true
  140785. * })
  140786. * ],
  140787. * bootstrap: [IonicApp],
  140788. * entryComponents: [
  140789. * MyApp
  140790. * ]
  140791. * })
  140792. * export class AppModule { }
  140793. * ```
  140794. *
  140795. * If preloading is turned on, it will load the modules based on the value of `priority`. The following
  140796. * values are possible for `priority`: `"high"`, `"low"`, and `"off"`. When there is no `priority`, it
  140797. * will be set to `"low"`.
  140798. *
  140799. * All deep links with their priority set to `"high"` will be loaded first. Upon completion of loading the
  140800. * `"high"` priority modules, all deep links with a priority of `"low"` (or no priority) will be loaded. If
  140801. * the priority is set to `"off"` the link will not be preloaded. Setting the `priority` is as simple as
  140802. * passing it to the `@IonicPage` decorator:
  140803. *
  140804. * ```ts
  140805. * @IonicPage({
  140806. * name: 'my-page',
  140807. * priority: 'high'
  140808. * })
  140809. * ```
  140810. *
  140811. * We recommend setting the `priority` to `"high"` on the pages that will be viewed first when launching
  140812. * the application.
  140813. *
  140814. */
  140815. function IonicPage(_config) {
  140816. return function (clazz) {
  140817. return clazz;
  140818. };
  140819. }
  140820. //# sourceMappingURL=ionic-page.js.map
  140821. /***/ }),
  140822. /* 669 */
  140823. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  140824. "use strict";
  140825. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RippleActivator; });
  140826. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__activator_base__ = __webpack_require__(340);
  140827. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__activator__ = __webpack_require__(339);
  140828. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_dom__ = __webpack_require__(18);
  140829. /**
  140830. * @hidden
  140831. */
  140832. var RippleActivator = (function () {
  140833. function RippleActivator(app, config, dom) {
  140834. this.dom = dom;
  140835. this.highlight = new __WEBPACK_IMPORTED_MODULE_1__activator__["a" /* Activator */](app, config, dom);
  140836. }
  140837. RippleActivator.prototype.clickAction = function (ev, activatableEle, startCoord) {
  140838. // Highlight
  140839. this.highlight && this.highlight.clickAction(ev, activatableEle, startCoord);
  140840. // Ripple
  140841. this._clickAction(ev, activatableEle, startCoord);
  140842. };
  140843. RippleActivator.prototype.downAction = function (ev, activatableEle, startCoord) {
  140844. // Highlight
  140845. this.highlight && this.highlight.downAction(ev, activatableEle, startCoord);
  140846. // Ripple
  140847. this._downAction(ev, activatableEle, startCoord);
  140848. };
  140849. RippleActivator.prototype.upAction = function (ev, activatableEle, startCoord) {
  140850. // Highlight
  140851. this.highlight && this.highlight.upAction(ev, activatableEle, startCoord);
  140852. // Ripple
  140853. this._upAction(ev, activatableEle, startCoord);
  140854. };
  140855. RippleActivator.prototype.clearState = function (animated) {
  140856. // Highlight
  140857. this.highlight && this.highlight.clearState(animated);
  140858. };
  140859. RippleActivator.prototype._downAction = function (ev, activatableEle, _startCoord) {
  140860. if (Object(__WEBPACK_IMPORTED_MODULE_0__activator_base__["a" /* isActivatedDisabled */])(ev, activatableEle)) {
  140861. return;
  140862. }
  140863. var j = activatableEle.childElementCount;
  140864. while (j--) {
  140865. var rippleEle = activatableEle.children[j];
  140866. if (rippleEle.classList.contains('button-effect')) {
  140867. // DOM READ
  140868. var clientRect = activatableEle.getBoundingClientRect();
  140869. rippleEle.$top = clientRect.top;
  140870. rippleEle.$left = clientRect.left;
  140871. rippleEle.$width = clientRect.width;
  140872. rippleEle.$height = clientRect.height;
  140873. break;
  140874. }
  140875. }
  140876. };
  140877. RippleActivator.prototype._upAction = function (ev, activatableEle, startCoord) {
  140878. if (!Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["d" /* hasPointerMoved */])(6, startCoord, Object(__WEBPACK_IMPORTED_MODULE_2__util_dom__["f" /* pointerCoord */])(ev))) {
  140879. var i = activatableEle.childElementCount;
  140880. while (i--) {
  140881. var rippleEle = activatableEle.children[i];
  140882. if (rippleEle.classList.contains('button-effect')) {
  140883. // DOM WRITE
  140884. this.startRippleEffect(rippleEle, activatableEle, startCoord);
  140885. break;
  140886. }
  140887. }
  140888. }
  140889. };
  140890. RippleActivator.prototype._clickAction = function (_ev, _activatableEle, _startCoord) {
  140891. // NOTHING
  140892. };
  140893. RippleActivator.prototype.startRippleEffect = function (rippleEle, activatableEle, startCoord) {
  140894. if (!startCoord) {
  140895. return;
  140896. }
  140897. var clientPointerX = (startCoord.x - rippleEle.$left);
  140898. var clientPointerY = (startCoord.y - rippleEle.$top);
  140899. var x = Math.max(Math.abs(rippleEle.$width - clientPointerX), clientPointerX) * 2;
  140900. var y = Math.max(Math.abs(rippleEle.$height - clientPointerY), clientPointerY) * 2;
  140901. var diameter = Math.min(Math.max(Math.hypot(x, y), 64), 240);
  140902. if (activatableEle.hasAttribute('ion-item')) {
  140903. diameter = Math.min(diameter, 140);
  140904. }
  140905. clientPointerX -= diameter / 2;
  140906. clientPointerY -= diameter / 2;
  140907. clientPointerX = Math.round(clientPointerX);
  140908. clientPointerY = Math.round(clientPointerY);
  140909. diameter = Math.round(diameter);
  140910. // Reset ripple
  140911. // DOM WRITE
  140912. var Css = this.dom.plt.Css;
  140913. rippleEle.style.opacity = '';
  140914. rippleEle.style[Css.transform] = "translate3d(" + clientPointerX + "px, " + clientPointerY + "px, 0px) scale(0.001)";
  140915. rippleEle.style[Css.transition] = '';
  140916. // Start ripple animation
  140917. var radius = Math.sqrt(rippleEle.$width + rippleEle.$height);
  140918. var scaleTransitionDuration = Math.max(1600 * Math.sqrt(radius / TOUCH_DOWN_ACCEL) + 0.5, 260);
  140919. var opacityTransitionDuration = Math.round(scaleTransitionDuration * 0.7);
  140920. var opacityTransitionDelay = Math.round(scaleTransitionDuration - opacityTransitionDuration);
  140921. scaleTransitionDuration = Math.round(scaleTransitionDuration);
  140922. var transform = "translate3d(" + clientPointerX + "px, " + clientPointerY + "px, 0px) scale(1)";
  140923. var transition = "transform " + scaleTransitionDuration + "ms,opacity " + opacityTransitionDuration + "ms " + opacityTransitionDelay + "ms";
  140924. this.dom.write(function () {
  140925. // DOM WRITE
  140926. rippleEle.style.width = rippleEle.style.height = diameter + 'px';
  140927. rippleEle.style.opacity = '0';
  140928. rippleEle.style[Css.transform] = transform;
  140929. rippleEle.style[Css.transition] = transition;
  140930. }, 16);
  140931. };
  140932. return RippleActivator;
  140933. }());
  140934. var TOUCH_DOWN_ACCEL = 300;
  140935. //# sourceMappingURL=ripple.js.map
  140936. /***/ }),
  140937. /* 670 */
  140938. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  140939. "use strict";
  140940. /* unused harmony export Gesture */
  140941. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_util__ = __webpack_require__(3);
  140942. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__hammer__ = __webpack_require__(671);
  140943. /**
  140944. * @hidden
  140945. * A gesture recognizer class.
  140946. *
  140947. * TODO(mlynch): Re-enable the DOM event simulation that was causing issues (or verify hammer does this already, it might);
  140948. */
  140949. var Gesture = (function () {
  140950. function Gesture(element, opts) {
  140951. if (opts === void 0) { opts = {}; }
  140952. this._callbacks = {};
  140953. this.isListening = false;
  140954. Object(__WEBPACK_IMPORTED_MODULE_0__util_util__["d" /* defaults */])(opts, {
  140955. domEvents: true
  140956. });
  140957. this.element = element;
  140958. // Map 'x' or 'y' string to hammerjs opts
  140959. this.direction = opts.direction || 'x';
  140960. opts.direction = this.direction === 'x' ?
  140961. __WEBPACK_IMPORTED_MODULE_1__hammer__["a" /* DIRECTION_HORIZONTAL */] :
  140962. __WEBPACK_IMPORTED_MODULE_1__hammer__["b" /* DIRECTION_VERTICAL */];
  140963. this._options = opts;
  140964. }
  140965. Gesture.prototype.options = function (opts) {
  140966. Object.assign(this._options, opts);
  140967. };
  140968. Gesture.prototype.on = function (type, cb) {
  140969. if (type === 'pinch' || type === 'rotate') {
  140970. this._hammer.get(type).set({ enable: true });
  140971. }
  140972. this._hammer.on(type, cb);
  140973. (this._callbacks[type] || (this._callbacks[type] = [])).push(cb);
  140974. };
  140975. Gesture.prototype.off = function (type, cb) {
  140976. this._hammer.off(type, this._callbacks[type] ? cb : null);
  140977. };
  140978. Gesture.prototype.listen = function () {
  140979. if (!this.isListening) {
  140980. this._hammer = Object(__WEBPACK_IMPORTED_MODULE_1__hammer__["c" /* Hammer */])(this.element, this._options);
  140981. }
  140982. this.isListening = true;
  140983. };
  140984. Gesture.prototype.unlisten = function () {
  140985. var eventType;
  140986. var i;
  140987. if (this._hammer && this.isListening) {
  140988. for (eventType in this._callbacks) {
  140989. for (i = 0; i < this._callbacks[eventType].length; i++) {
  140990. this._hammer.off(eventType, this._callbacks[eventType]);
  140991. }
  140992. }
  140993. this._hammer.destroy();
  140994. }
  140995. this._callbacks = {};
  140996. this._hammer = null;
  140997. this.isListening = false;
  140998. };
  140999. Gesture.prototype.destroy = function () {
  141000. this.unlisten();
  141001. this.element = this._options = null;
  141002. };
  141003. return Gesture;
  141004. }());
  141005. //# sourceMappingURL=gesture.js.map
  141006. /***/ }),
  141007. /* 671 */
  141008. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  141009. "use strict";
  141010. /* unused harmony export DIRECTION_LEFT */
  141011. /* unused harmony export DIRECTION_RIGHT */
  141012. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DIRECTION_HORIZONTAL; });
  141013. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return DIRECTION_VERTICAL; });
  141014. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return Hammer; });
  141015. /* tslint:disable */
  141016. var win = window;
  141017. var doc = document;
  141018. /*! Hammer.JS - v2.0.6 - 2015-12-23
  141019. * http://hammerjs.github.io/
  141020. *
  141021. * Copyright (c) 2015 Jorik Tangelder;
  141022. * Licensed under the license */
  141023. var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];
  141024. var TEST_ELEMENT = doc.createElement('div');
  141025. var TYPE_FUNCTION = 'function';
  141026. var round = Math.round;
  141027. var abs = Math.abs;
  141028. var now = Date.now;
  141029. /**
  141030. * set a timeout with a given scope
  141031. * @param {Function} fn
  141032. * @param {Number} timeout
  141033. * @param {Object} context
  141034. * @returns {number}
  141035. */
  141036. function setTimeoutContext(fn, timeout, context) {
  141037. return setTimeout(bindFn(fn, context), timeout);
  141038. }
  141039. /**
  141040. * if the argument is an array, we want to execute the fn on each entry
  141041. * if it aint an array we don't want to do a thing.
  141042. * this is used by all the methods that accept a single and array argument.
  141043. * @param {*|Array} arg
  141044. * @param {String} fn
  141045. * @param {Object} [context]
  141046. * @returns {Boolean}
  141047. */
  141048. function invokeArrayArg(arg, fn, context) {
  141049. if (Array.isArray(arg)) {
  141050. each(arg, context[fn], context);
  141051. return true;
  141052. }
  141053. return false;
  141054. }
  141055. /**
  141056. * walk objects and arrays
  141057. * @param {Object} obj
  141058. * @param {Function} iterator
  141059. * @param {Object} context
  141060. */
  141061. function each(obj, iterator, context) {
  141062. var i;
  141063. if (!obj) {
  141064. return;
  141065. }
  141066. if (obj.forEach) {
  141067. obj.forEach(iterator, context);
  141068. }
  141069. else if (obj.length !== undefined) {
  141070. i = 0;
  141071. while (i < obj.length) {
  141072. iterator.call(context, obj[i], i, obj);
  141073. i++;
  141074. }
  141075. }
  141076. else {
  141077. for (i in obj) {
  141078. obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);
  141079. }
  141080. }
  141081. }
  141082. /**
  141083. * simple class inheritance
  141084. * @param {Function} child
  141085. * @param {Function} base
  141086. * @param {Object} [properties]
  141087. */
  141088. function inherit(child, base, properties) {
  141089. var baseP = base.prototype, childP;
  141090. childP = child.prototype = Object.create(baseP);
  141091. childP.constructor = child;
  141092. childP._super = baseP;
  141093. if (properties) {
  141094. Object.assign(childP, properties);
  141095. }
  141096. }
  141097. /**
  141098. * simple function bind
  141099. * @param {Function} fn
  141100. * @param {Object} context
  141101. * @returns {Function}
  141102. */
  141103. function bindFn(fn, context) {
  141104. return function boundFn() {
  141105. return fn.apply(context, arguments);
  141106. };
  141107. }
  141108. /**
  141109. * let a boolean value also be a function that must return a boolean
  141110. * this first item in args will be used as the context
  141111. * @param {Boolean|Function} val
  141112. * @param {Array} [args]
  141113. * @returns {Boolean}
  141114. */
  141115. function boolOrFn(val, args) {
  141116. if (typeof val == TYPE_FUNCTION) {
  141117. return val.apply(args ? args[0] || undefined : undefined, args);
  141118. }
  141119. return val;
  141120. }
  141121. /**
  141122. * use the val2 when val1 is undefined
  141123. * @param {*} val1
  141124. * @param {*} val2
  141125. * @returns {*}
  141126. */
  141127. function ifUndefined(val1, val2) {
  141128. return (val1 === undefined) ? val2 : val1;
  141129. }
  141130. /**
  141131. * addEventListener with multiple events at once
  141132. * @param {EventTarget} target
  141133. * @param {String} types
  141134. * @param {Function} handler
  141135. */
  141136. function addEventListeners(target, types, handler) {
  141137. each(splitStr(types), function (type) {
  141138. target.addEventListener(type, handler, false);
  141139. });
  141140. }
  141141. /**
  141142. * removeEventListener with multiple events at once
  141143. * @param {EventTarget} target
  141144. * @param {String} types
  141145. * @param {Function} handler
  141146. */
  141147. function removeEventListeners(target, types, handler) {
  141148. each(splitStr(types), function (type) {
  141149. target.removeEventListener(type, handler, false);
  141150. });
  141151. }
  141152. /**
  141153. * find if a node is in the given parent
  141154. * @method hasParent
  141155. * @param {HTMLElement} node
  141156. * @param {HTMLElement} parent
  141157. * @return {Boolean} found
  141158. */
  141159. function hasParent(node, parent) {
  141160. while (node) {
  141161. if (node == parent) {
  141162. return true;
  141163. }
  141164. node = node.parentNode;
  141165. }
  141166. return false;
  141167. }
  141168. /**
  141169. * small indexOf wrapper
  141170. * @param {String} str
  141171. * @param {String} find
  141172. * @returns {Boolean} found
  141173. */
  141174. function inStr(str, find) {
  141175. return str.indexOf(find) > -1;
  141176. }
  141177. /**
  141178. * split string on whitespace
  141179. * @param {String} str
  141180. * @returns {Array} words
  141181. */
  141182. function splitStr(str) {
  141183. return str.trim().split(/\s+/g);
  141184. }
  141185. /**
  141186. * find if a array contains the object using indexOf or a simple polyFill
  141187. * @param {Array} src
  141188. * @param {String} find
  141189. * @param {String} [findByKey]
  141190. * @return {Boolean|Number} false when not found, or the index
  141191. */
  141192. function inArray(src, find, findByKey) {
  141193. if (src.indexOf && !findByKey) {
  141194. return src.indexOf(find);
  141195. }
  141196. else {
  141197. var i = 0;
  141198. while (i < src.length) {
  141199. if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {
  141200. return i;
  141201. }
  141202. i++;
  141203. }
  141204. return -1;
  141205. }
  141206. }
  141207. /**
  141208. * convert array-like objects to real arrays
  141209. * @param {Object} obj
  141210. * @returns {Array}
  141211. */
  141212. function toArray(obj) {
  141213. return Array.prototype.slice.call(obj, 0);
  141214. }
  141215. /**
  141216. * unique array with objects based on a key (like 'id') or just by the array's value
  141217. * @param {Array} src [{id:1},{id:2},{id:1}]
  141218. * @param {String} [key]
  141219. * @param {Boolean} [sort=False]
  141220. * @returns {Array} [{id:1},{id:2}]
  141221. */
  141222. function uniqueArray(src, key, sort) {
  141223. var results = [];
  141224. var values = [];
  141225. var i = 0;
  141226. while (i < src.length) {
  141227. var val = key ? src[i][key] : src[i];
  141228. if (inArray(values, val) < 0) {
  141229. results.push(src[i]);
  141230. }
  141231. values[i] = val;
  141232. i++;
  141233. }
  141234. if (sort) {
  141235. if (!key) {
  141236. results = results.sort();
  141237. }
  141238. else {
  141239. results = results.sort(function sortUniqueArray(a, b) {
  141240. return a[key] > b[key] ? 1 : 0;
  141241. });
  141242. }
  141243. }
  141244. return results;
  141245. }
  141246. /**
  141247. * get the prefixed property
  141248. * @param {Object} obj
  141249. * @param {String} property
  141250. * @returns {String|Undefined} prefixed
  141251. */
  141252. function prefixed(obj, property) {
  141253. var prefix, prop;
  141254. var camelProp = property[0].toUpperCase() + property.slice(1);
  141255. var i = 0;
  141256. while (i < VENDOR_PREFIXES.length) {
  141257. prefix = VENDOR_PREFIXES[i];
  141258. prop = (prefix) ? prefix + camelProp : property;
  141259. if (prop in obj) {
  141260. return prop;
  141261. }
  141262. i++;
  141263. }
  141264. return undefined;
  141265. }
  141266. /**
  141267. * get a unique id
  141268. * @returns {number} uniqueId
  141269. */
  141270. var _uniqueId = 1;
  141271. function uniqueId() {
  141272. return _uniqueId++;
  141273. }
  141274. /**
  141275. * get the window object of an element
  141276. * @param {HTMLElement} element
  141277. * @returns {DocumentView|Window}
  141278. */
  141279. function getWindowForElement(element) {
  141280. var doc = element.ownerDocument || element;
  141281. return (doc.defaultView || doc.parentWindow || window);
  141282. }
  141283. var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;
  141284. var SUPPORT_TOUCH = ('ontouchstart' in window);
  141285. var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;
  141286. var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);
  141287. var INPUT_TYPE_TOUCH = 'touch';
  141288. var INPUT_TYPE_PEN = 'pen';
  141289. var INPUT_TYPE_MOUSE = 'mouse';
  141290. var INPUT_TYPE_KINECT = 'kinect';
  141291. var COMPUTE_INTERVAL = 25;
  141292. var INPUT_START = 1;
  141293. var INPUT_MOVE = 2;
  141294. var INPUT_END = 4;
  141295. var INPUT_CANCEL = 8;
  141296. var DIRECTION_NONE = 1;
  141297. var DIRECTION_LEFT = 2;
  141298. var DIRECTION_RIGHT = 4;
  141299. var DIRECTION_UP = 8;
  141300. var DIRECTION_DOWN = 16;
  141301. var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;
  141302. var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;
  141303. var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;
  141304. var PROPS_XY = ['x', 'y'];
  141305. var PROPS_CLIENT_XY = ['clientX', 'clientY'];
  141306. /**
  141307. * create new input type manager
  141308. * @param {Manager} manager
  141309. * @param {Function} callback
  141310. * @returns {Input}
  141311. * @constructor
  141312. */
  141313. function Input(manager, callback) {
  141314. var self = this;
  141315. this.manager = manager;
  141316. this.callback = callback;
  141317. this.element = manager.element;
  141318. this.target = manager.options.inputTarget;
  141319. // smaller wrapper around the handler, for the scope and the enabled state of the manager,
  141320. // so when disabled the input events are completely bypassed.
  141321. this.domHandler = function (ev) {
  141322. if (boolOrFn(manager.options.enable, [manager])) {
  141323. self.handler(ev);
  141324. }
  141325. };
  141326. this.init();
  141327. }
  141328. Input.prototype = {
  141329. /**
  141330. * should handle the inputEvent data and trigger the callback
  141331. * @virtual
  141332. */
  141333. handler: function () { },
  141334. /**
  141335. * bind the events
  141336. */
  141337. init: function () {
  141338. this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
  141339. this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
  141340. this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
  141341. },
  141342. /**
  141343. * unbind the events
  141344. */
  141345. destroy: function () {
  141346. this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
  141347. this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
  141348. this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
  141349. }
  141350. };
  141351. /**
  141352. * create new input type manager
  141353. * called by the Manager constructor
  141354. * @param {Hammer} manager
  141355. * @returns {Input}
  141356. */
  141357. function createInputInstance(manager) {
  141358. var Type;
  141359. var inputClass = manager.options.inputClass;
  141360. if (inputClass) {
  141361. Type = inputClass;
  141362. }
  141363. else if (SUPPORT_POINTER_EVENTS) {
  141364. Type = PointerEventInput;
  141365. }
  141366. else if (SUPPORT_ONLY_TOUCH) {
  141367. Type = TouchInput;
  141368. }
  141369. else if (!SUPPORT_TOUCH) {
  141370. Type = MouseInput;
  141371. }
  141372. else {
  141373. Type = TouchMouseInput;
  141374. }
  141375. return new (Type)(manager, inputHandler);
  141376. }
  141377. /**
  141378. * handle input events
  141379. * @param {Manager} manager
  141380. * @param {String} eventType
  141381. * @param {Object} input
  141382. */
  141383. function inputHandler(manager, eventType, input) {
  141384. var pointersLen = input.pointers.length;
  141385. var changedPointersLen = input.changedPointers.length;
  141386. var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));
  141387. var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));
  141388. input.isFirst = !!isFirst;
  141389. input.isFinal = !!isFinal;
  141390. if (isFirst) {
  141391. manager.session = {};
  141392. }
  141393. // source event is the normalized value of the domEvents
  141394. // like 'touchstart, mouseup, pointerdown'
  141395. input.eventType = eventType;
  141396. // compute scale, rotation etc
  141397. computeInputData(manager, input);
  141398. // emit secret event
  141399. manager.emit('hammer.input', input);
  141400. manager.recognize(input);
  141401. manager.session.prevInput = input;
  141402. }
  141403. /**
  141404. * extend the data with some usable properties like scale, rotate, velocity etc
  141405. * @param {Object} manager
  141406. * @param {Object} input
  141407. */
  141408. function computeInputData(manager, input) {
  141409. var session = manager.session;
  141410. var pointers = input.pointers;
  141411. var pointersLength = pointers.length;
  141412. // store the first input to calculate the distance and direction
  141413. if (!session.firstInput) {
  141414. session.firstInput = simpleCloneInputData(input);
  141415. }
  141416. // to compute scale and rotation we need to store the multiple touches
  141417. if (pointersLength > 1 && !session.firstMultiple) {
  141418. session.firstMultiple = simpleCloneInputData(input);
  141419. }
  141420. else if (pointersLength === 1) {
  141421. session.firstMultiple = false;
  141422. }
  141423. var firstInput = session.firstInput;
  141424. var firstMultiple = session.firstMultiple;
  141425. var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;
  141426. var center = input.center = getCenter(pointers);
  141427. input.timeStamp = now();
  141428. input.deltaTime = input.timeStamp - firstInput.timeStamp;
  141429. input.angle = getAngle(offsetCenter, center);
  141430. input.distance = getDistance(offsetCenter, center);
  141431. computeDeltaXY(session, input);
  141432. input.offsetDirection = getDirection(input.deltaX, input.deltaY);
  141433. var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);
  141434. input.overallVelocityX = overallVelocity.x;
  141435. input.overallVelocityY = overallVelocity.y;
  141436. input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;
  141437. input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
  141438. input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;
  141439. input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >
  141440. session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);
  141441. computeIntervalInputData(session, input);
  141442. // find the correct target
  141443. var target = manager.element;
  141444. if (hasParent(input.srcEvent.target, target)) {
  141445. target = input.srcEvent.target;
  141446. }
  141447. input.target = target;
  141448. }
  141449. function computeDeltaXY(session, input) {
  141450. var center = input.center;
  141451. var offset = session.offsetDelta || {};
  141452. var prevDelta = session.prevDelta || {};
  141453. var prevInput = session.prevInput || {};
  141454. if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
  141455. prevDelta = session.prevDelta = {
  141456. x: prevInput.deltaX || 0,
  141457. y: prevInput.deltaY || 0
  141458. };
  141459. offset = session.offsetDelta = {
  141460. x: center.x,
  141461. y: center.y
  141462. };
  141463. }
  141464. input.deltaX = prevDelta.x + (center.x - offset.x);
  141465. input.deltaY = prevDelta.y + (center.y - offset.y);
  141466. }
  141467. /**
  141468. * velocity is calculated every x ms
  141469. * @param {Object} session
  141470. * @param {Object} input
  141471. */
  141472. function computeIntervalInputData(session, input) {
  141473. var last = session.lastInterval || input, deltaTime = input.timeStamp - last.timeStamp, velocity, velocityX, velocityY, direction;
  141474. if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
  141475. var deltaX = input.deltaX - last.deltaX;
  141476. var deltaY = input.deltaY - last.deltaY;
  141477. var v = getVelocity(deltaTime, deltaX, deltaY);
  141478. velocityX = v.x;
  141479. velocityY = v.y;
  141480. velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
  141481. direction = getDirection(deltaX, deltaY);
  141482. session.lastInterval = input;
  141483. }
  141484. else {
  141485. // use latest velocity info if it doesn't overtake a minimum period
  141486. velocity = last.velocity;
  141487. velocityX = last.velocityX;
  141488. velocityY = last.velocityY;
  141489. direction = last.direction;
  141490. }
  141491. input.velocity = velocity;
  141492. input.velocityX = velocityX;
  141493. input.velocityY = velocityY;
  141494. input.direction = direction;
  141495. }
  141496. /**
  141497. * create a simple clone from the input used for storage of firstInput and firstMultiple
  141498. * @param {Object} input
  141499. * @returns {Object} clonedInputData
  141500. */
  141501. function simpleCloneInputData(input) {
  141502. // make a simple copy of the pointers because we will get a reference if we don't
  141503. // we only need clientXY for the calculations
  141504. var pointers = [];
  141505. var i = 0;
  141506. while (i < input.pointers.length) {
  141507. pointers[i] = {
  141508. clientX: round(input.pointers[i].clientX),
  141509. clientY: round(input.pointers[i].clientY)
  141510. };
  141511. i++;
  141512. }
  141513. return {
  141514. timeStamp: now(),
  141515. pointers: pointers,
  141516. center: getCenter(pointers),
  141517. deltaX: input.deltaX,
  141518. deltaY: input.deltaY
  141519. };
  141520. }
  141521. /**
  141522. * get the center of all the pointers
  141523. * @param {Array} pointers
  141524. * @return {Object} center contains `x` and `y` properties
  141525. */
  141526. function getCenter(pointers) {
  141527. var pointersLength = pointers.length;
  141528. // no need to loop when only one touch
  141529. if (pointersLength === 1) {
  141530. return {
  141531. x: round(pointers[0].clientX),
  141532. y: round(pointers[0].clientY)
  141533. };
  141534. }
  141535. var x = 0, y = 0, i = 0;
  141536. while (i < pointersLength) {
  141537. x += pointers[i].clientX;
  141538. y += pointers[i].clientY;
  141539. i++;
  141540. }
  141541. return {
  141542. x: round(x / pointersLength),
  141543. y: round(y / pointersLength)
  141544. };
  141545. }
  141546. /**
  141547. * calculate the velocity between two points. unit is in px per ms.
  141548. * @param {Number} deltaTime
  141549. * @param {Number} x
  141550. * @param {Number} y
  141551. * @return {Object} velocity `x` and `y`
  141552. */
  141553. function getVelocity(deltaTime, x, y) {
  141554. return {
  141555. x: x / deltaTime || 0,
  141556. y: y / deltaTime || 0
  141557. };
  141558. }
  141559. /**
  141560. * get the direction between two points
  141561. * @param {Number} x
  141562. * @param {Number} y
  141563. * @return {Number} direction
  141564. */
  141565. function getDirection(x, y) {
  141566. if (x === y) {
  141567. return DIRECTION_NONE;
  141568. }
  141569. if (abs(x) >= abs(y)) {
  141570. return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
  141571. }
  141572. return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;
  141573. }
  141574. /**
  141575. * calculate the absolute distance between two points
  141576. * @param {Object} p1 {x, y}
  141577. * @param {Object} p2 {x, y}
  141578. * @param {Array} [props] containing x and y keys
  141579. * @return {Number} distance
  141580. */
  141581. function getDistance(p1, p2, props) {
  141582. if (!props) {
  141583. props = PROPS_XY;
  141584. }
  141585. var x = p2[props[0]] - p1[props[0]], y = p2[props[1]] - p1[props[1]];
  141586. return Math.sqrt((x * x) + (y * y));
  141587. }
  141588. /**
  141589. * calculate the angle between two coordinates
  141590. * @param {Object} p1
  141591. * @param {Object} p2
  141592. * @param {Array} [props] containing x and y keys
  141593. * @return {Number} angle
  141594. */
  141595. function getAngle(p1, p2, props) {
  141596. if (!props) {
  141597. props = PROPS_XY;
  141598. }
  141599. var x = p2[props[0]] - p1[props[0]], y = p2[props[1]] - p1[props[1]];
  141600. return Math.atan2(y, x) * 180 / Math.PI;
  141601. }
  141602. /**
  141603. * calculate the rotation degrees between two pointersets
  141604. * @param {Array} start array of pointers
  141605. * @param {Array} end array of pointers
  141606. * @return {Number} rotation
  141607. */
  141608. function getRotation(start, end) {
  141609. return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);
  141610. }
  141611. /**
  141612. * calculate the scale factor between two pointersets
  141613. * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out
  141614. * @param {Array} start array of pointers
  141615. * @param {Array} end array of pointers
  141616. * @return {Number} scale
  141617. */
  141618. function getScale(start, end) {
  141619. return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);
  141620. }
  141621. var MOUSE_INPUT_MAP = {
  141622. mousedown: INPUT_START,
  141623. mousemove: INPUT_MOVE,
  141624. mouseup: INPUT_END
  141625. };
  141626. var MOUSE_ELEMENT_EVENTS = 'mousedown';
  141627. var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';
  141628. /**
  141629. * Mouse events input
  141630. * @constructor
  141631. * @extends Input
  141632. */
  141633. function MouseInput(_manager, _handler) {
  141634. this.evEl = MOUSE_ELEMENT_EVENTS;
  141635. this.evWin = MOUSE_WINDOW_EVENTS;
  141636. this.allow = true; // used by Input.TouchMouse to disable mouse events
  141637. this.pressed = false; // mousedown state
  141638. Input.apply(this, arguments);
  141639. }
  141640. inherit(MouseInput, Input, {
  141641. /**
  141642. * handle mouse events
  141643. * @param {Object} ev
  141644. */
  141645. handler: function MEhandler(ev) {
  141646. var eventType = MOUSE_INPUT_MAP[ev.type];
  141647. // on start we want to have the left mouse button down
  141648. if (eventType & INPUT_START && ev.button === 0) {
  141649. this.pressed = true;
  141650. }
  141651. if (eventType & INPUT_MOVE && ev.which !== 1) {
  141652. eventType = INPUT_END;
  141653. }
  141654. // mouse must be down, and mouse events are allowed (see the TouchMouse input)
  141655. if (!this.pressed || !this.allow) {
  141656. return;
  141657. }
  141658. if (eventType & INPUT_END) {
  141659. this.pressed = false;
  141660. }
  141661. this.callback(this.manager, eventType, {
  141662. pointers: [ev],
  141663. changedPointers: [ev],
  141664. pointerType: INPUT_TYPE_MOUSE,
  141665. srcEvent: ev
  141666. });
  141667. }
  141668. });
  141669. var POINTER_INPUT_MAP = {
  141670. pointerdown: INPUT_START,
  141671. pointermove: INPUT_MOVE,
  141672. pointerup: INPUT_END,
  141673. pointercancel: INPUT_CANCEL,
  141674. pointerout: INPUT_CANCEL
  141675. };
  141676. // in IE10 the pointer types is defined as an enum
  141677. var IE10_POINTER_TYPE_ENUM = {
  141678. 2: INPUT_TYPE_TOUCH,
  141679. 3: INPUT_TYPE_PEN,
  141680. 4: INPUT_TYPE_MOUSE,
  141681. 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816
  141682. };
  141683. var POINTER_ELEMENT_EVENTS = 'pointerdown';
  141684. var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';
  141685. // IE10 has prefixed support, and case-sensitive
  141686. if (win.MSPointerEvent && !win.PointerEvent) {
  141687. POINTER_ELEMENT_EVENTS = 'MSPointerDown';
  141688. POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';
  141689. }
  141690. /**
  141691. * Pointer events input
  141692. * @constructor
  141693. * @extends Input
  141694. */
  141695. function PointerEventInput() {
  141696. this.evEl = POINTER_ELEMENT_EVENTS;
  141697. this.evWin = POINTER_WINDOW_EVENTS;
  141698. Input.apply(this, arguments);
  141699. this.store = (this.manager.session.pointerEvents = []);
  141700. }
  141701. inherit(PointerEventInput, Input, {
  141702. /**
  141703. * handle mouse events
  141704. * @param {Object} ev
  141705. */
  141706. handler: function PEhandler(ev) {
  141707. var store = this.store;
  141708. var removePointer = false;
  141709. var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');
  141710. var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
  141711. var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;
  141712. var isTouch = (pointerType == INPUT_TYPE_TOUCH);
  141713. // get index of the event in the store
  141714. var storeIndex = inArray(store, ev.pointerId, 'pointerId');
  141715. // start and mouse must be down
  141716. if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
  141717. if (storeIndex < 0) {
  141718. store.push(ev);
  141719. storeIndex = store.length - 1;
  141720. }
  141721. }
  141722. else if (eventType & (INPUT_END | INPUT_CANCEL)) {
  141723. removePointer = true;
  141724. }
  141725. // it not found, so the pointer hasn't been down (so it's probably a hover)
  141726. if (storeIndex < 0) {
  141727. return;
  141728. }
  141729. // update the event in the store
  141730. store[storeIndex] = ev;
  141731. this.callback(this.manager, eventType, {
  141732. pointers: store,
  141733. changedPointers: [ev],
  141734. pointerType: pointerType,
  141735. srcEvent: ev
  141736. });
  141737. if (removePointer) {
  141738. // remove from the store
  141739. store.splice(storeIndex, 1);
  141740. }
  141741. }
  141742. });
  141743. var SINGLE_TOUCH_INPUT_MAP = {
  141744. touchstart: INPUT_START,
  141745. touchmove: INPUT_MOVE,
  141746. touchend: INPUT_END,
  141747. touchcancel: INPUT_CANCEL
  141748. };
  141749. var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';
  141750. var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';
  141751. /**
  141752. * Touch events input
  141753. * @constructor
  141754. * @extends Input
  141755. */
  141756. function SingleTouchInput() {
  141757. this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
  141758. this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
  141759. this.started = false;
  141760. Input.apply(this, arguments);
  141761. }
  141762. inherit(SingleTouchInput, Input, {
  141763. handler: function TEhandler(ev) {
  141764. var type = SINGLE_TOUCH_INPUT_MAP[ev.type];
  141765. // should we handle the touch events?
  141766. if (type === INPUT_START) {
  141767. this.started = true;
  141768. }
  141769. if (!this.started) {
  141770. return;
  141771. }
  141772. var touches = normalizeSingleTouches.call(this, ev, type);
  141773. // when done, reset the started state
  141774. if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
  141775. this.started = false;
  141776. }
  141777. this.callback(this.manager, type, {
  141778. pointers: touches[0],
  141779. changedPointers: touches[1],
  141780. pointerType: INPUT_TYPE_TOUCH,
  141781. srcEvent: ev
  141782. });
  141783. }
  141784. });
  141785. /**
  141786. * @this {TouchInput}
  141787. * @param {Object} ev
  141788. * @param {Number} type flag
  141789. * @returns {undefined|Array} [all, changed]
  141790. */
  141791. function normalizeSingleTouches(ev, type) {
  141792. var all = toArray(ev.touches);
  141793. var changed = toArray(ev.changedTouches);
  141794. if (type & (INPUT_END | INPUT_CANCEL)) {
  141795. all = uniqueArray(all.concat(changed), 'identifier', true);
  141796. }
  141797. return [all, changed];
  141798. }
  141799. var TOUCH_INPUT_MAP = {
  141800. touchstart: INPUT_START,
  141801. touchmove: INPUT_MOVE,
  141802. touchend: INPUT_END,
  141803. touchcancel: INPUT_CANCEL
  141804. };
  141805. var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';
  141806. /**
  141807. * Multi-user touch events input
  141808. * @constructor
  141809. * @extends Input
  141810. */
  141811. function TouchInput(_manager, _handler) {
  141812. this.evTarget = TOUCH_TARGET_EVENTS;
  141813. this.targetIds = {};
  141814. Input.apply(this, arguments);
  141815. }
  141816. inherit(TouchInput, Input, {
  141817. handler: function MTEhandler(ev) {
  141818. var type = TOUCH_INPUT_MAP[ev.type];
  141819. var touches = getTouches.call(this, ev, type);
  141820. if (!touches) {
  141821. return;
  141822. }
  141823. this.callback(this.manager, type, {
  141824. pointers: touches[0],
  141825. changedPointers: touches[1],
  141826. pointerType: INPUT_TYPE_TOUCH,
  141827. srcEvent: ev
  141828. });
  141829. }
  141830. });
  141831. /**
  141832. * @this {TouchInput}
  141833. * @param {Object} ev
  141834. * @param {Number} type flag
  141835. * @returns {undefined|Array} [all, changed]
  141836. */
  141837. function getTouches(ev, type) {
  141838. var allTouches = toArray(ev.touches);
  141839. var targetIds = this.targetIds;
  141840. // when there is only one touch, the process can be simplified
  141841. if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
  141842. targetIds[allTouches[0].identifier] = true;
  141843. return [allTouches, allTouches];
  141844. }
  141845. var i, targetTouches, changedTouches = toArray(ev.changedTouches), changedTargetTouches = [], target = this.target;
  141846. // get target touches from touches
  141847. targetTouches = allTouches.filter(function (touch) {
  141848. return hasParent(touch.target, target);
  141849. });
  141850. // collect touches
  141851. if (type === INPUT_START) {
  141852. i = 0;
  141853. while (i < targetTouches.length) {
  141854. targetIds[targetTouches[i].identifier] = true;
  141855. i++;
  141856. }
  141857. }
  141858. // filter changed touches to only contain touches that exist in the collected target ids
  141859. i = 0;
  141860. while (i < changedTouches.length) {
  141861. if (targetIds[changedTouches[i].identifier]) {
  141862. changedTargetTouches.push(changedTouches[i]);
  141863. }
  141864. // cleanup removed touches
  141865. if (type & (INPUT_END | INPUT_CANCEL)) {
  141866. delete targetIds[changedTouches[i].identifier];
  141867. }
  141868. i++;
  141869. }
  141870. if (!changedTargetTouches.length) {
  141871. return;
  141872. }
  141873. return [
  141874. // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'
  141875. uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
  141876. changedTargetTouches
  141877. ];
  141878. }
  141879. /**
  141880. * Combined touch and mouse input
  141881. *
  141882. * Touch has a higher priority then mouse, and while touching no mouse events are allowed.
  141883. * This because touch devices also emit mouse events while doing a touch.
  141884. *
  141885. * @constructor
  141886. * @extends Input
  141887. */
  141888. function TouchMouseInput() {
  141889. Input.apply(this, arguments);
  141890. var handler = bindFn(this.handler, this);
  141891. this.touch = new TouchInput(this.manager, handler);
  141892. this.mouse = new MouseInput(this.manager, handler);
  141893. }
  141894. inherit(TouchMouseInput, Input, {
  141895. /**
  141896. * handle mouse and touch events
  141897. * @param {Hammer} manager
  141898. * @param {String} inputEvent
  141899. * @param {Object} inputData
  141900. */
  141901. handler: function TMEhandler(manager, inputEvent, inputData) {
  141902. var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);
  141903. // when we're in a touch event, so block all upcoming mouse events
  141904. // most mobile browser also emit mouseevents, right after touchstart
  141905. if (isTouch) {
  141906. this.mouse.allow = false;
  141907. }
  141908. else if (isMouse && !this.mouse.allow) {
  141909. return;
  141910. }
  141911. // reset the allowMouse when we're done
  141912. if (inputEvent & (INPUT_END | INPUT_CANCEL)) {
  141913. this.mouse.allow = true;
  141914. }
  141915. this.callback(manager, inputEvent, inputData);
  141916. },
  141917. /**
  141918. * remove the event listeners
  141919. */
  141920. destroy: function destroy() {
  141921. this.touch.destroy();
  141922. this.mouse.destroy();
  141923. }
  141924. });
  141925. var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');
  141926. var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;
  141927. // magical touchAction value
  141928. var TOUCH_ACTION_COMPUTE = 'compute';
  141929. var TOUCH_ACTION_AUTO = 'auto';
  141930. var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented
  141931. var TOUCH_ACTION_NONE = 'none';
  141932. var TOUCH_ACTION_PAN_X = 'pan-x';
  141933. var TOUCH_ACTION_PAN_Y = 'pan-y';
  141934. /**
  141935. * Touch Action
  141936. * sets the touchAction property or uses the js alternative
  141937. * @param {Manager} manager
  141938. * @param {String} value
  141939. * @constructor
  141940. */
  141941. function TouchAction(manager, value) {
  141942. this.manager = manager;
  141943. this.set(value);
  141944. }
  141945. TouchAction.prototype = {
  141946. /**
  141947. * set the touchAction value on the element or enable the polyfill
  141948. * @param {String} value
  141949. */
  141950. set: function (value) {
  141951. // find out the touch-action by the event handlers
  141952. if (value == TOUCH_ACTION_COMPUTE) {
  141953. value = this.compute();
  141954. }
  141955. if (NATIVE_TOUCH_ACTION && this.manager.element.style) {
  141956. this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;
  141957. }
  141958. this.actions = value.toLowerCase().trim();
  141959. },
  141960. /**
  141961. * just re-set the touchAction value
  141962. */
  141963. update: function () {
  141964. this.set(this.manager.options.touchAction);
  141965. },
  141966. /**
  141967. * compute the value for the touchAction property based on the recognizer's settings
  141968. * @returns {String} value
  141969. */
  141970. compute: function () {
  141971. var actions = [];
  141972. each(this.manager.recognizers, function (recognizer) {
  141973. if (boolOrFn(recognizer.options.enable, [recognizer])) {
  141974. actions = actions.concat(recognizer.getTouchAction());
  141975. }
  141976. });
  141977. return cleanTouchActions(actions.join(' '));
  141978. },
  141979. /**
  141980. * this method is called on each input cycle and provides the preventing of the browser behavior
  141981. * @param {Object} input
  141982. */
  141983. preventDefaults: function (input) {
  141984. // not needed with native support for the touchAction property
  141985. if (NATIVE_TOUCH_ACTION) {
  141986. return;
  141987. }
  141988. var srcEvent = input.srcEvent;
  141989. var direction = input.offsetDirection;
  141990. // if the touch action did prevented once this session
  141991. if (this.manager.session.prevented) {
  141992. srcEvent.preventDefault();
  141993. return;
  141994. }
  141995. var actions = this.actions;
  141996. var hasNone = inStr(actions, TOUCH_ACTION_NONE);
  141997. var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);
  141998. var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
  141999. if (hasNone) {
  142000. //do not prevent defaults if this is a tap gesture
  142001. var isTapPointer = input.pointers.length === 1;
  142002. var isTapMovement = input.distance < 2;
  142003. var isTapTouchTime = input.deltaTime < 250;
  142004. if (isTapPointer && isTapMovement && isTapTouchTime) {
  142005. return;
  142006. }
  142007. }
  142008. if (hasPanX && hasPanY) {
  142009. // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent
  142010. return;
  142011. }
  142012. if (hasNone ||
  142013. (hasPanY && direction & DIRECTION_HORIZONTAL) ||
  142014. (hasPanX && direction & DIRECTION_VERTICAL)) {
  142015. return this.preventSrc(srcEvent);
  142016. }
  142017. },
  142018. /**
  142019. * call preventDefault to prevent the browser's default behavior (scrolling in most cases)
  142020. * @param {Object} srcEvent
  142021. */
  142022. preventSrc: function (srcEvent) {
  142023. this.manager.session.prevented = true;
  142024. srcEvent.preventDefault();
  142025. }
  142026. };
  142027. /**
  142028. * when the touchActions are collected they are not a valid value, so we need to clean things up. *
  142029. * @param {String} actions
  142030. * @returns {*}
  142031. */
  142032. function cleanTouchActions(actions) {
  142033. // none
  142034. if (inStr(actions, TOUCH_ACTION_NONE)) {
  142035. return TOUCH_ACTION_NONE;
  142036. }
  142037. var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
  142038. var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);
  142039. // if both pan-x and pan-y are set (different recognizers
  142040. // for different directions, e.g. horizontal pan but vertical swipe?)
  142041. // we need none (as otherwise with pan-x pan-y combined none of these
  142042. // recognizers will work, since the browser would handle all panning
  142043. if (hasPanX && hasPanY) {
  142044. return TOUCH_ACTION_NONE;
  142045. }
  142046. // pan-x OR pan-y
  142047. if (hasPanX || hasPanY) {
  142048. return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;
  142049. }
  142050. // manipulation
  142051. if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {
  142052. return TOUCH_ACTION_MANIPULATION;
  142053. }
  142054. return TOUCH_ACTION_AUTO;
  142055. }
  142056. /**
  142057. * Recognizer flow explained; *
  142058. * All recognizers have the initial state of POSSIBLE when a input session starts.
  142059. * The definition of a input session is from the first input until the last input, with all it's movement in it. *
  142060. * Example session for mouse-input: mousedown -> mousemove -> mouseup
  142061. *
  142062. * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed
  142063. * which determines with state it should be.
  142064. *
  142065. * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to
  142066. * POSSIBLE to give it another change on the next cycle.
  142067. *
  142068. * Possible
  142069. * |
  142070. * +-----+---------------+
  142071. * | |
  142072. * +-----+-----+ |
  142073. * | | |
  142074. * Failed Cancelled |
  142075. * +-------+------+
  142076. * | |
  142077. * Recognized Began
  142078. * |
  142079. * Changed
  142080. * |
  142081. * Ended/Recognized
  142082. */
  142083. var STATE_POSSIBLE = 1;
  142084. var STATE_BEGAN = 2;
  142085. var STATE_CHANGED = 4;
  142086. var STATE_ENDED = 8;
  142087. var STATE_RECOGNIZED = STATE_ENDED;
  142088. var STATE_CANCELLED = 16;
  142089. var STATE_FAILED = 32;
  142090. /**
  142091. * Recognizer
  142092. * Every recognizer needs to extend from this class.
  142093. * @constructor
  142094. * @param {Object} options
  142095. */
  142096. function Recognizer(options) {
  142097. this.options = Object.assign({}, this.defaults, options || {});
  142098. this.id = uniqueId();
  142099. this.manager = null;
  142100. // default is enable true
  142101. this.options.enable = ifUndefined(this.options.enable, true);
  142102. this.state = STATE_POSSIBLE;
  142103. this.simultaneous = {};
  142104. this.requireFail = [];
  142105. }
  142106. Recognizer.prototype = {
  142107. /**
  142108. * @virtual
  142109. * @type {Object}
  142110. */
  142111. defaults: {},
  142112. /**
  142113. * set options
  142114. * @param {Object} options
  142115. * @return {Recognizer}
  142116. */
  142117. set: function (options) {
  142118. Object.assign(this.options, options);
  142119. // also update the touchAction, in case something changed about the directions/enabled state
  142120. this.manager && this.manager.touchAction.update();
  142121. return this;
  142122. },
  142123. /**
  142124. * recognize simultaneous with an other recognizer.
  142125. * @param {Recognizer} otherRecognizer
  142126. * @returns {Recognizer} this
  142127. */
  142128. recognizeWith: function (otherRecognizer) {
  142129. if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {
  142130. return this;
  142131. }
  142132. var simultaneous = this.simultaneous;
  142133. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  142134. if (!simultaneous[otherRecognizer.id]) {
  142135. simultaneous[otherRecognizer.id] = otherRecognizer;
  142136. otherRecognizer.recognizeWith(this);
  142137. }
  142138. return this;
  142139. },
  142140. /**
  142141. * drop the simultaneous link. it doesnt remove the link on the other recognizer.
  142142. * @param {Recognizer} otherRecognizer
  142143. * @returns {Recognizer} this
  142144. */
  142145. dropRecognizeWith: function (otherRecognizer) {
  142146. if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {
  142147. return this;
  142148. }
  142149. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  142150. delete this.simultaneous[otherRecognizer.id];
  142151. return this;
  142152. },
  142153. /**
  142154. * recognizer can only run when an other is failing
  142155. * @param {Recognizer} otherRecognizer
  142156. * @returns {Recognizer} this
  142157. */
  142158. requireFailure: function (otherRecognizer) {
  142159. if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {
  142160. return this;
  142161. }
  142162. var requireFail = this.requireFail;
  142163. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  142164. if (inArray(requireFail, otherRecognizer) === -1) {
  142165. requireFail.push(otherRecognizer);
  142166. otherRecognizer.requireFailure(this);
  142167. }
  142168. return this;
  142169. },
  142170. /**
  142171. * drop the requireFailure link. it does not remove the link on the other recognizer.
  142172. * @param {Recognizer} otherRecognizer
  142173. * @returns {Recognizer} this
  142174. */
  142175. dropRequireFailure: function (otherRecognizer) {
  142176. if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {
  142177. return this;
  142178. }
  142179. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  142180. var index = inArray(this.requireFail, otherRecognizer);
  142181. if (index > -1) {
  142182. this.requireFail.splice(index, 1);
  142183. }
  142184. return this;
  142185. },
  142186. /**
  142187. * has require failures boolean
  142188. * @returns {boolean}
  142189. */
  142190. hasRequireFailures: function () {
  142191. return this.requireFail.length > 0;
  142192. },
  142193. /**
  142194. * if the recognizer can recognize simultaneous with an other recognizer
  142195. * @param {Recognizer} otherRecognizer
  142196. * @returns {Boolean}
  142197. */
  142198. canRecognizeWith: function (otherRecognizer) {
  142199. return !!this.simultaneous[otherRecognizer.id];
  142200. },
  142201. /**
  142202. * You should use `tryEmit` instead of `emit` directly to check
  142203. * that all the needed recognizers has failed before emitting.
  142204. * @param {Object} input
  142205. */
  142206. emit: function (input) {
  142207. var self = this;
  142208. var state = this.state;
  142209. function emit(event) {
  142210. self.manager.emit(event, input);
  142211. }
  142212. // 'panstart' and 'panmove'
  142213. if (state < STATE_ENDED) {
  142214. emit(self.options.event + stateStr(state));
  142215. }
  142216. emit(self.options.event); // simple 'eventName' events
  142217. if (input.additionalEvent) {
  142218. emit(input.additionalEvent);
  142219. }
  142220. // panend and pancancel
  142221. if (state >= STATE_ENDED) {
  142222. emit(self.options.event + stateStr(state));
  142223. }
  142224. },
  142225. /**
  142226. * Check that all the require failure recognizers has failed,
  142227. * if true, it emits a gesture event,
  142228. * otherwise, setup the state to FAILED.
  142229. * @param {Object} input
  142230. */
  142231. tryEmit: function (input) {
  142232. if (this.canEmit()) {
  142233. return this.emit(input);
  142234. }
  142235. // it's failing anyway
  142236. this.state = STATE_FAILED;
  142237. },
  142238. /**
  142239. * can we emit?
  142240. * @returns {boolean}
  142241. */
  142242. canEmit: function () {
  142243. var i = 0;
  142244. while (i < this.requireFail.length) {
  142245. if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
  142246. return false;
  142247. }
  142248. i++;
  142249. }
  142250. return true;
  142251. },
  142252. /**
  142253. * update the recognizer
  142254. * @param {Object} inputData
  142255. */
  142256. recognize: function (inputData) {
  142257. // make a new copy of the inputData
  142258. // so we can change the inputData without messing up the other recognizers
  142259. var inputDataClone = Object.assign({}, inputData);
  142260. // is is enabled and allow recognizing?
  142261. if (!boolOrFn(this.options.enable, [this, inputDataClone])) {
  142262. this.reset();
  142263. this.state = STATE_FAILED;
  142264. return;
  142265. }
  142266. // reset when we've reached the end
  142267. if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {
  142268. this.state = STATE_POSSIBLE;
  142269. }
  142270. this.state = this.process(inputDataClone);
  142271. // the recognizer has recognized a gesture
  142272. // so trigger an event
  142273. if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {
  142274. this.tryEmit(inputDataClone);
  142275. }
  142276. },
  142277. /**
  142278. * return the state of the recognizer
  142279. * the actual recognizing happens in this method
  142280. * @virtual
  142281. * @param {Object} inputData
  142282. * @returns {Const} STATE
  142283. */
  142284. process: function (_inputData) { },
  142285. /**
  142286. * return the preferred touch-action
  142287. * @virtual
  142288. * @returns {Array}
  142289. */
  142290. getTouchAction: function () { },
  142291. /**
  142292. * called when the gesture isn't allowed to recognize
  142293. * like when another is being recognized or it is disabled
  142294. * @virtual
  142295. */
  142296. reset: function () { }
  142297. };
  142298. /**
  142299. * get a usable string, used as event postfix
  142300. * @param {Const} state
  142301. * @returns {String} state
  142302. */
  142303. function stateStr(state) {
  142304. if (state & STATE_CANCELLED) {
  142305. return 'cancel';
  142306. }
  142307. else if (state & STATE_ENDED) {
  142308. return 'end';
  142309. }
  142310. else if (state & STATE_CHANGED) {
  142311. return 'move';
  142312. }
  142313. else if (state & STATE_BEGAN) {
  142314. return 'start';
  142315. }
  142316. return '';
  142317. }
  142318. /**
  142319. * direction cons to string
  142320. * @param {Const} direction
  142321. * @returns {String}
  142322. */
  142323. function directionStr(direction) {
  142324. if (direction == DIRECTION_DOWN) {
  142325. return 'down';
  142326. }
  142327. else if (direction == DIRECTION_UP) {
  142328. return 'up';
  142329. }
  142330. else if (direction == DIRECTION_LEFT) {
  142331. return 'left';
  142332. }
  142333. else if (direction == DIRECTION_RIGHT) {
  142334. return 'right';
  142335. }
  142336. return '';
  142337. }
  142338. /**
  142339. * get a recognizer by name if it is bound to a manager
  142340. * @param {Recognizer|String} otherRecognizer
  142341. * @param {Recognizer} recognizer
  142342. * @returns {Recognizer}
  142343. */
  142344. function getRecognizerByNameIfManager(otherRecognizer, recognizer) {
  142345. var manager = recognizer.manager;
  142346. if (manager) {
  142347. return manager.get(otherRecognizer);
  142348. }
  142349. return otherRecognizer;
  142350. }
  142351. /**
  142352. * This recognizer is just used as a base for the simple attribute recognizers.
  142353. * @constructor
  142354. * @extends Recognizer
  142355. */
  142356. function AttrRecognizer() {
  142357. Recognizer.apply(this, arguments);
  142358. }
  142359. inherit(AttrRecognizer, Recognizer, {
  142360. /**
  142361. * @namespace
  142362. * @memberof AttrRecognizer
  142363. */
  142364. defaults: {
  142365. /**
  142366. * @type {Number}
  142367. * @default 1
  142368. */
  142369. pointers: 1
  142370. },
  142371. /**
  142372. * Used to check if it the recognizer receives valid input, like input.distance > 10.
  142373. * @memberof AttrRecognizer
  142374. * @param {Object} input
  142375. * @returns {Boolean} recognized
  142376. */
  142377. attrTest: function (input) {
  142378. var optionPointers = this.options.pointers;
  142379. return optionPointers === 0 || input.pointers.length === optionPointers;
  142380. },
  142381. /**
  142382. * Process the input and return the state for the recognizer
  142383. * @memberof AttrRecognizer
  142384. * @param {Object} input
  142385. * @returns {*} State
  142386. */
  142387. process: function (input) {
  142388. var state = this.state;
  142389. var eventType = input.eventType;
  142390. var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);
  142391. var isValid = this.attrTest(input);
  142392. // on cancel input and we've recognized before, return STATE_CANCELLED
  142393. if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {
  142394. return state | STATE_CANCELLED;
  142395. }
  142396. else if (isRecognized || isValid) {
  142397. if (eventType & INPUT_END) {
  142398. return state | STATE_ENDED;
  142399. }
  142400. else if (!(state & STATE_BEGAN)) {
  142401. return STATE_BEGAN;
  142402. }
  142403. return state | STATE_CHANGED;
  142404. }
  142405. return STATE_FAILED;
  142406. }
  142407. });
  142408. /**
  142409. * Pan
  142410. * Recognized when the pointer is down and moved in the allowed direction.
  142411. * @constructor
  142412. * @extends AttrRecognizer
  142413. */
  142414. function PanRecognizer() {
  142415. AttrRecognizer.apply(this, arguments);
  142416. this.pX = null;
  142417. this.pY = null;
  142418. }
  142419. inherit(PanRecognizer, AttrRecognizer, {
  142420. /**
  142421. * @namespace
  142422. * @memberof PanRecognizer
  142423. */
  142424. defaults: {
  142425. event: 'pan',
  142426. threshold: 10,
  142427. pointers: 1,
  142428. direction: DIRECTION_ALL
  142429. },
  142430. getTouchAction: function () {
  142431. var direction = this.options.direction;
  142432. var actions = [];
  142433. if (direction & DIRECTION_HORIZONTAL) {
  142434. actions.push(TOUCH_ACTION_PAN_Y);
  142435. }
  142436. if (direction & DIRECTION_VERTICAL) {
  142437. actions.push(TOUCH_ACTION_PAN_X);
  142438. }
  142439. return actions;
  142440. },
  142441. directionTest: function (input) {
  142442. var options = this.options;
  142443. var hasMoved = true;
  142444. var distance = input.distance;
  142445. var direction = input.direction;
  142446. var x = input.deltaX;
  142447. var y = input.deltaY;
  142448. // lock to axis?
  142449. if (!(direction & options.direction)) {
  142450. if (options.direction & DIRECTION_HORIZONTAL) {
  142451. direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;
  142452. hasMoved = x != this.pX;
  142453. distance = Math.abs(input.deltaX);
  142454. }
  142455. else {
  142456. direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;
  142457. hasMoved = y != this.pY;
  142458. distance = Math.abs(input.deltaY);
  142459. }
  142460. }
  142461. input.direction = direction;
  142462. return hasMoved && distance > options.threshold && direction & options.direction;
  142463. },
  142464. attrTest: function (input) {
  142465. return AttrRecognizer.prototype.attrTest.call(this, input) &&
  142466. (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));
  142467. },
  142468. emit: function (input) {
  142469. this.pX = input.deltaX;
  142470. this.pY = input.deltaY;
  142471. var direction = directionStr(input.direction);
  142472. if (direction) {
  142473. input.additionalEvent = this.options.event + direction;
  142474. }
  142475. this._super.emit.call(this, input);
  142476. }
  142477. });
  142478. /**
  142479. * Pinch
  142480. * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).
  142481. * @constructor
  142482. * @extends AttrRecognizer
  142483. */
  142484. function PinchRecognizer() {
  142485. AttrRecognizer.apply(this, arguments);
  142486. }
  142487. inherit(PinchRecognizer, AttrRecognizer, {
  142488. /**
  142489. * @namespace
  142490. * @memberof PinchRecognizer
  142491. */
  142492. defaults: {
  142493. event: 'pinch',
  142494. threshold: 0,
  142495. pointers: 2
  142496. },
  142497. getTouchAction: function () {
  142498. return [TOUCH_ACTION_NONE];
  142499. },
  142500. attrTest: function (input) {
  142501. return this._super.attrTest.call(this, input) &&
  142502. (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);
  142503. },
  142504. emit: function (input) {
  142505. if (input.scale !== 1) {
  142506. var inOut = input.scale < 1 ? 'in' : 'out';
  142507. input.additionalEvent = this.options.event + inOut;
  142508. }
  142509. this._super.emit.call(this, input);
  142510. }
  142511. });
  142512. /**
  142513. * Press
  142514. * Recognized when the pointer is down for x ms without any movement.
  142515. * @constructor
  142516. * @extends Recognizer
  142517. */
  142518. function PressRecognizer() {
  142519. Recognizer.apply(this, arguments);
  142520. this._timer = null;
  142521. this._input = null;
  142522. }
  142523. inherit(PressRecognizer, Recognizer, {
  142524. /**
  142525. * @namespace
  142526. * @memberof PressRecognizer
  142527. */
  142528. defaults: {
  142529. event: 'press',
  142530. pointers: 1,
  142531. time: 251,
  142532. threshold: 9 // a minimal movement is ok, but keep it low
  142533. },
  142534. getTouchAction: function () {
  142535. return [TOUCH_ACTION_AUTO];
  142536. },
  142537. process: function (input) {
  142538. var options = this.options;
  142539. var validPointers = input.pointers.length === options.pointers;
  142540. var validMovement = input.distance < options.threshold;
  142541. var validTime = input.deltaTime > options.time;
  142542. this._input = input;
  142543. // we only allow little movement
  142544. // and we've reached an end event, so a tap is possible
  142545. if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {
  142546. this.reset();
  142547. }
  142548. else if (input.eventType & INPUT_START) {
  142549. this.reset();
  142550. this._timer = setTimeoutContext(function () {
  142551. this.state = STATE_RECOGNIZED;
  142552. this.tryEmit();
  142553. }, options.time, this);
  142554. }
  142555. else if (input.eventType & INPUT_END) {
  142556. return STATE_RECOGNIZED;
  142557. }
  142558. return STATE_FAILED;
  142559. },
  142560. reset: function () {
  142561. clearTimeout(this._timer);
  142562. },
  142563. emit: function (input) {
  142564. if (this.state !== STATE_RECOGNIZED) {
  142565. return;
  142566. }
  142567. if (input && (input.eventType & INPUT_END)) {
  142568. this.manager.emit(this.options.event + 'up', input);
  142569. }
  142570. else {
  142571. this._input.timeStamp = now();
  142572. this.manager.emit(this.options.event, this._input);
  142573. }
  142574. }
  142575. });
  142576. /**
  142577. * Rotate
  142578. * Recognized when two or more pointer are moving in a circular motion.
  142579. * @constructor
  142580. * @extends AttrRecognizer
  142581. */
  142582. function RotateRecognizer() {
  142583. AttrRecognizer.apply(this, arguments);
  142584. }
  142585. inherit(RotateRecognizer, AttrRecognizer, {
  142586. /**
  142587. * @namespace
  142588. * @memberof RotateRecognizer
  142589. */
  142590. defaults: {
  142591. event: 'rotate',
  142592. threshold: 0,
  142593. pointers: 2
  142594. },
  142595. getTouchAction: function () {
  142596. return [TOUCH_ACTION_NONE];
  142597. },
  142598. attrTest: function (input) {
  142599. return this._super.attrTest.call(this, input) &&
  142600. (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);
  142601. }
  142602. });
  142603. /**
  142604. * Swipe
  142605. * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.
  142606. * @constructor
  142607. * @extends AttrRecognizer
  142608. */
  142609. function SwipeRecognizer() {
  142610. AttrRecognizer.apply(this, arguments);
  142611. }
  142612. inherit(SwipeRecognizer, AttrRecognizer, {
  142613. /**
  142614. * @namespace
  142615. * @memberof SwipeRecognizer
  142616. */
  142617. defaults: {
  142618. event: 'swipe',
  142619. threshold: 10,
  142620. velocity: 0.3,
  142621. direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,
  142622. pointers: 1
  142623. },
  142624. getTouchAction: function () {
  142625. return PanRecognizer.prototype.getTouchAction.call(this);
  142626. },
  142627. attrTest: function (input) {
  142628. var direction = this.options.direction;
  142629. var velocity;
  142630. if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {
  142631. velocity = input.overallVelocity;
  142632. }
  142633. else if (direction & DIRECTION_HORIZONTAL) {
  142634. velocity = input.overallVelocityX;
  142635. }
  142636. else if (direction & DIRECTION_VERTICAL) {
  142637. velocity = input.overallVelocityY;
  142638. }
  142639. return this._super.attrTest.call(this, input) &&
  142640. direction & input.offsetDirection &&
  142641. input.distance > this.options.threshold &&
  142642. input.maxPointers == this.options.pointers &&
  142643. abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
  142644. },
  142645. emit: function (input) {
  142646. var direction = directionStr(input.offsetDirection);
  142647. if (direction) {
  142648. this.manager.emit(this.options.event + direction, input);
  142649. }
  142650. this.manager.emit(this.options.event, input);
  142651. }
  142652. });
  142653. /**
  142654. * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur
  142655. * between the given interval and position. The delay option can be used to recognize multi-taps without firing
  142656. * a single tap.
  142657. *
  142658. * The eventData from the emitted event contains the property `tapCount`, which contains the amount of
  142659. * multi-taps being recognized.
  142660. * @constructor
  142661. * @extends Recognizer
  142662. */
  142663. function TapRecognizer() {
  142664. Recognizer.apply(this, arguments);
  142665. // previous time and center,
  142666. // used for tap counting
  142667. this.pTime = false;
  142668. this.pCenter = false;
  142669. this._timer = null;
  142670. this._input = null;
  142671. this.count = 0;
  142672. }
  142673. inherit(TapRecognizer, Recognizer, {
  142674. /**
  142675. * @namespace
  142676. * @memberof PinchRecognizer
  142677. */
  142678. defaults: {
  142679. event: 'tap',
  142680. pointers: 1,
  142681. taps: 1,
  142682. interval: 300,
  142683. time: 250,
  142684. threshold: 9,
  142685. posThreshold: 10 // a multi-tap can be a bit off the initial position
  142686. },
  142687. getTouchAction: function () {
  142688. return [TOUCH_ACTION_MANIPULATION];
  142689. },
  142690. process: function (input) {
  142691. var options = this.options;
  142692. var validPointers = input.pointers.length === options.pointers;
  142693. var validMovement = input.distance < options.threshold;
  142694. var validTouchTime = input.deltaTime < options.time;
  142695. this.reset();
  142696. if ((input.eventType & INPUT_START) && (this.count === 0)) {
  142697. return this.failTimeout();
  142698. }
  142699. // we only allow little movement
  142700. // and we've reached an end event, so a tap is possible
  142701. if (validMovement && validTouchTime && validPointers) {
  142702. if (input.eventType != INPUT_END) {
  142703. return this.failTimeout();
  142704. }
  142705. var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;
  142706. var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;
  142707. this.pTime = input.timeStamp;
  142708. this.pCenter = input.center;
  142709. if (!validMultiTap || !validInterval) {
  142710. this.count = 1;
  142711. }
  142712. else {
  142713. this.count += 1;
  142714. }
  142715. this._input = input;
  142716. // if tap count matches we have recognized it,
  142717. // else it has began recognizing...
  142718. var tapCount = this.count % options.taps;
  142719. if (tapCount === 0) {
  142720. // no failing requirements, immediately trigger the tap event
  142721. // or wait as long as the multitap interval to trigger
  142722. if (!this.hasRequireFailures()) {
  142723. return STATE_RECOGNIZED;
  142724. }
  142725. else {
  142726. this._timer = setTimeoutContext(function () {
  142727. this.state = STATE_RECOGNIZED;
  142728. this.tryEmit();
  142729. }, options.interval, this);
  142730. return STATE_BEGAN;
  142731. }
  142732. }
  142733. }
  142734. return STATE_FAILED;
  142735. },
  142736. failTimeout: function () {
  142737. this._timer = setTimeoutContext(function () {
  142738. this.state = STATE_FAILED;
  142739. }, this.options.interval, this);
  142740. return STATE_FAILED;
  142741. },
  142742. reset: function () {
  142743. clearTimeout(this._timer);
  142744. },
  142745. emit: function () {
  142746. if (this.state == STATE_RECOGNIZED) {
  142747. this._input.tapCount = this.count;
  142748. this.manager.emit(this.options.event, this._input);
  142749. }
  142750. }
  142751. });
  142752. /**
  142753. * Simple way to create a manager with a default set of recognizers.
  142754. * @param {HTMLElement} element
  142755. * @param {Object} [options]
  142756. * @constructor
  142757. */
  142758. function Hammer(element, options) {
  142759. options = options || {};
  142760. options.recognizers = ifUndefined(options.recognizers, _defaults.preset);
  142761. return new Manager(element, options);
  142762. }
  142763. /**
  142764. * default settings
  142765. * @namespace
  142766. */
  142767. var _defaults = {
  142768. /**
  142769. * set if DOM events are being triggered.
  142770. * But this is slower and unused by simple implementations, so disabled by default.
  142771. * @type {Boolean}
  142772. * @default false
  142773. */
  142774. domEvents: false,
  142775. /**
  142776. * The value for the touchAction property/fallback.
  142777. * When set to `compute` it will magically set the correct value based on the added recognizers.
  142778. * @type {String}
  142779. * @default compute
  142780. */
  142781. touchAction: TOUCH_ACTION_COMPUTE,
  142782. /**
  142783. * @type {Boolean}
  142784. * @default true
  142785. */
  142786. enable: true,
  142787. /**
  142788. * EXPERIMENTAL FEATURE -- can be removed/changed
  142789. * Change the parent input target element.
  142790. * If Null, then it is being set the to main element.
  142791. * @type {Null|EventTarget}
  142792. * @default null
  142793. */
  142794. inputTarget: null,
  142795. /**
  142796. * force an input class
  142797. * @type {Null|Function}
  142798. * @default null
  142799. */
  142800. inputClass: null,
  142801. /**
  142802. * Default recognizer setup when calling `Hammer()`
  142803. * When creating a new Manager these will be skipped.
  142804. * @type {Array}
  142805. */
  142806. preset: [
  142807. // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]
  142808. [RotateRecognizer, { enable: false }],
  142809. [PinchRecognizer, { enable: false }, ['rotate']],
  142810. [SwipeRecognizer, { direction: DIRECTION_HORIZONTAL }],
  142811. [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ['swipe']],
  142812. [TapRecognizer],
  142813. [TapRecognizer, { event: 'doubletap', taps: 2 }, ['tap']],
  142814. [PressRecognizer]
  142815. ],
  142816. /**
  142817. * Some CSS properties can be used to improve the working of Hammer.
  142818. * Add them to this method and they will be set when creating a new Manager.
  142819. * @namespace
  142820. */
  142821. cssProps: {
  142822. /**
  142823. * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.
  142824. * @type {String}
  142825. * @default 'none'
  142826. */
  142827. userSelect: 'none',
  142828. /**
  142829. * Disable the Windows Phone grippers when pressing an element.
  142830. * @type {String}
  142831. * @default 'none'
  142832. */
  142833. touchSelect: 'none',
  142834. /**
  142835. * Disables the default callout shown when you touch and hold a touch target.
  142836. * On iOS, when you touch and hold a touch target such as a link, Safari displays
  142837. * a callout containing information about the link. This property allows you to disable that callout.
  142838. * @type {String}
  142839. * @default 'none'
  142840. */
  142841. touchCallout: 'none',
  142842. /**
  142843. * Specifies whether zooming is enabled. Used by IE10>
  142844. * @type {String}
  142845. * @default 'none'
  142846. */
  142847. contentZooming: 'none',
  142848. /**
  142849. * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.
  142850. * @type {String}
  142851. * @default 'none'
  142852. */
  142853. userDrag: 'none',
  142854. /**
  142855. * Overrides the highlight color shown when the user taps a link or a JavaScript
  142856. * clickable element in iOS. This property obeys the alpha value, if specified.
  142857. * @type {String}
  142858. * @default 'rgba(0,0,0,0)'
  142859. */
  142860. tapHighlightColor: 'rgba(0,0,0,0)'
  142861. }
  142862. };
  142863. var STOP = 1;
  142864. var FORCED_STOP = 2;
  142865. /**
  142866. * Manager
  142867. * @param {HTMLElement} element
  142868. * @param {Object} [options]
  142869. * @constructor
  142870. */
  142871. function Manager(element, options) {
  142872. this.options = Object.assign({}, _defaults, options || {});
  142873. this.options.inputTarget = this.options.inputTarget || element;
  142874. this.handlers = {};
  142875. this.session = {};
  142876. this.recognizers = [];
  142877. this.element = element;
  142878. this.input = createInputInstance(this);
  142879. this.touchAction = new TouchAction(this, this.options.touchAction);
  142880. toggleCssProps(this, true);
  142881. each(this.options.recognizers, function (item) {
  142882. var recognizer = this.add(new (item[0])(item[1]));
  142883. item[2] && recognizer.recognizeWith(item[2]);
  142884. item[3] && recognizer.requireFailure(item[3]);
  142885. }, this);
  142886. }
  142887. Manager.prototype = {
  142888. /**
  142889. * set options
  142890. * @param {Object} options
  142891. * @returns {Manager}
  142892. */
  142893. set: function (options) {
  142894. Object.assign(this.options, options);
  142895. // Options that need a little more setup
  142896. if (options.touchAction) {
  142897. this.touchAction.update();
  142898. }
  142899. if (options.inputTarget) {
  142900. // Clean up existing event listeners and reinitialize
  142901. this.input.destroy();
  142902. this.input.target = options.inputTarget;
  142903. this.input.init();
  142904. }
  142905. return this;
  142906. },
  142907. /**
  142908. * stop recognizing for this session.
  142909. * This session will be discarded, when a new [input]start event is fired.
  142910. * When forced, the recognizer cycle is stopped immediately.
  142911. * @param {Boolean} [force]
  142912. */
  142913. stop: function (force) {
  142914. this.session.stopped = force ? FORCED_STOP : STOP;
  142915. },
  142916. /**
  142917. * run the recognizers!
  142918. * called by the inputHandler function on every movement of the pointers (touches)
  142919. * it walks through all the recognizers and tries to detect the gesture that is being made
  142920. * @param {Object} inputData
  142921. */
  142922. recognize: function (inputData) {
  142923. var session = this.session;
  142924. if (session.stopped) {
  142925. return;
  142926. }
  142927. // run the touch-action polyfill
  142928. this.touchAction.preventDefaults(inputData);
  142929. var recognizer;
  142930. var recognizers = this.recognizers;
  142931. // this holds the recognizer that is being recognized.
  142932. // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED
  142933. // if no recognizer is detecting a thing, it is set to `null`
  142934. var curRecognizer = session.curRecognizer;
  142935. // reset when the last recognizer is recognized
  142936. // or when we're in a new session
  142937. if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {
  142938. curRecognizer = session.curRecognizer = null;
  142939. }
  142940. var i = 0;
  142941. while (i < recognizers.length) {
  142942. recognizer = recognizers[i];
  142943. // find out if we are allowed try to recognize the input for this one.
  142944. // 1. allow if the session is NOT forced stopped (see the .stop() method)
  142945. // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one
  142946. // that is being recognized.
  142947. // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.
  142948. // this can be setup with the `recognizeWith()` method on the recognizer.
  142949. if (session.stopped !== FORCED_STOP && (!curRecognizer || recognizer == curRecognizer ||
  142950. recognizer.canRecognizeWith(curRecognizer))) {
  142951. recognizer.recognize(inputData);
  142952. }
  142953. else {
  142954. recognizer.reset();
  142955. }
  142956. // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the
  142957. // current active recognizer. but only if we don't already have an active recognizer
  142958. if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
  142959. curRecognizer = session.curRecognizer = recognizer;
  142960. }
  142961. i++;
  142962. }
  142963. },
  142964. /**
  142965. * get a recognizer by its event name.
  142966. * @param {Recognizer|String} recognizer
  142967. * @returns {Recognizer|Null}
  142968. */
  142969. get: function (recognizer) {
  142970. if (recognizer instanceof Recognizer) {
  142971. return recognizer;
  142972. }
  142973. var recognizers = this.recognizers;
  142974. for (var i = 0; i < recognizers.length; i++) {
  142975. if (recognizers[i].options.event == recognizer) {
  142976. return recognizers[i];
  142977. }
  142978. }
  142979. return null;
  142980. },
  142981. /**
  142982. * add a recognizer to the manager
  142983. * existing recognizers with the same event name will be removed
  142984. * @param {Recognizer} recognizer
  142985. * @returns {Recognizer|Manager}
  142986. */
  142987. add: function (recognizer) {
  142988. if (invokeArrayArg(recognizer, 'add', this)) {
  142989. return this;
  142990. }
  142991. // remove existing
  142992. var existing = this.get(recognizer.options.event);
  142993. if (existing) {
  142994. this.remove(existing);
  142995. }
  142996. this.recognizers.push(recognizer);
  142997. recognizer.manager = this;
  142998. this.touchAction.update();
  142999. return recognizer;
  143000. },
  143001. /**
  143002. * remove a recognizer by name or instance
  143003. * @param {Recognizer|String} recognizer
  143004. * @returns {Manager}
  143005. */
  143006. remove: function (recognizer) {
  143007. if (invokeArrayArg(recognizer, 'remove', this)) {
  143008. return this;
  143009. }
  143010. recognizer = this.get(recognizer);
  143011. // let's make sure this recognizer exists
  143012. if (recognizer) {
  143013. var recognizers = this.recognizers;
  143014. var index = inArray(recognizers, recognizer);
  143015. if (index !== -1) {
  143016. recognizers.splice(index, 1);
  143017. this.touchAction.update();
  143018. }
  143019. }
  143020. return this;
  143021. },
  143022. /**
  143023. * bind event
  143024. * @param {String} events
  143025. * @param {Function} handler
  143026. * @returns {EventEmitter} this
  143027. */
  143028. on: function (events, handler) {
  143029. var handlers = this.handlers;
  143030. each(splitStr(events), function (event) {
  143031. handlers[event] = handlers[event] || [];
  143032. handlers[event].push(handler);
  143033. });
  143034. return this;
  143035. },
  143036. /**
  143037. * unbind event, leave emit blank to remove all handlers
  143038. * @param {String} events
  143039. * @param {Function} [handler]
  143040. * @returns {EventEmitter} this
  143041. */
  143042. off: function (events, handler) {
  143043. var handlers = this.handlers;
  143044. each(splitStr(events), function (event) {
  143045. if (!handler) {
  143046. delete handlers[event];
  143047. }
  143048. else {
  143049. handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);
  143050. }
  143051. });
  143052. return this;
  143053. },
  143054. /**
  143055. * emit event to the listeners
  143056. * @param {String} event
  143057. * @param {Object} data
  143058. */
  143059. emit: function (event, data) {
  143060. // we also want to trigger dom events
  143061. if (this.options.domEvents) {
  143062. triggerDomEvent(event, data);
  143063. }
  143064. // no handlers, so skip it all
  143065. var handlers = this.handlers[event] && this.handlers[event].slice();
  143066. if (!handlers || !handlers.length) {
  143067. return;
  143068. }
  143069. data.type = event;
  143070. data.preventDefault = function () {
  143071. data.srcEvent.preventDefault();
  143072. };
  143073. var i = 0;
  143074. while (i < handlers.length) {
  143075. handlers[i](data);
  143076. i++;
  143077. }
  143078. },
  143079. /**
  143080. * destroy the manager and unbinds all events
  143081. * it doesn't unbind dom events, that is the user own responsibility
  143082. */
  143083. destroy: function () {
  143084. this.element && toggleCssProps(this, false);
  143085. this.handlers = {};
  143086. this.session = {};
  143087. this.input.destroy();
  143088. this.element = null;
  143089. }
  143090. };
  143091. /**
  143092. * add/remove the css properties as defined in manager.options.cssProps
  143093. * @param {Manager} manager
  143094. * @param {Boolean} add
  143095. */
  143096. function toggleCssProps(manager, add) {
  143097. var element = manager.element;
  143098. if (!element.style) {
  143099. return;
  143100. }
  143101. each(manager.options.cssProps, function (value, name) {
  143102. element.style[prefixed(element.style, name)] = add ? value : '';
  143103. });
  143104. }
  143105. /**
  143106. * trigger dom event
  143107. * @param {String} event
  143108. * @param {Object} data
  143109. */
  143110. function triggerDomEvent(event, data) {
  143111. var gestureEvent = doc.createEvent('Event');
  143112. gestureEvent.initEvent(event, true, true);
  143113. gestureEvent.gesture = data;
  143114. data.target.dispatchEvent(gestureEvent);
  143115. }
  143116. Object.assign(Hammer, {
  143117. INPUT_START: INPUT_START,
  143118. INPUT_MOVE: INPUT_MOVE,
  143119. INPUT_END: INPUT_END,
  143120. INPUT_CANCEL: INPUT_CANCEL,
  143121. STATE_POSSIBLE: STATE_POSSIBLE,
  143122. STATE_BEGAN: STATE_BEGAN,
  143123. STATE_CHANGED: STATE_CHANGED,
  143124. STATE_ENDED: STATE_ENDED,
  143125. STATE_RECOGNIZED: STATE_RECOGNIZED,
  143126. STATE_CANCELLED: STATE_CANCELLED,
  143127. STATE_FAILED: STATE_FAILED,
  143128. DIRECTION_NONE: DIRECTION_NONE,
  143129. DIRECTION_LEFT: DIRECTION_LEFT,
  143130. DIRECTION_RIGHT: DIRECTION_RIGHT,
  143131. DIRECTION_UP: DIRECTION_UP,
  143132. DIRECTION_DOWN: DIRECTION_DOWN,
  143133. DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,
  143134. DIRECTION_VERTICAL: DIRECTION_VERTICAL,
  143135. DIRECTION_ALL: DIRECTION_ALL,
  143136. Manager: Manager,
  143137. Input: Input,
  143138. TouchAction: TouchAction,
  143139. TouchInput: TouchInput,
  143140. MouseInput: MouseInput,
  143141. PointerEventInput: PointerEventInput,
  143142. TouchMouseInput: TouchMouseInput,
  143143. SingleTouchInput: SingleTouchInput,
  143144. Recognizer: Recognizer,
  143145. AttrRecognizer: AttrRecognizer,
  143146. Tap: TapRecognizer,
  143147. Pan: PanRecognizer,
  143148. Swipe: SwipeRecognizer,
  143149. Pinch: PinchRecognizer,
  143150. Rotate: RotateRecognizer,
  143151. Press: PressRecognizer,
  143152. on: addEventListeners,
  143153. off: removeEventListeners,
  143154. each: each,
  143155. inherit: inherit,
  143156. bindFn: bindFn,
  143157. prefixed: prefixed
  143158. });
  143159. win.Hammer = Hammer;
  143160. //# sourceMappingURL=hammer.js.map
  143161. /***/ }),
  143162. /* 672 */
  143163. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  143164. "use strict";
  143165. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IonicErrorHandler; });
  143166. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  143167. var __extends = (this && this.__extends) || (function () {
  143168. var extendStatics = Object.setPrototypeOf ||
  143169. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  143170. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  143171. return function (d, b) {
  143172. extendStatics(d, b);
  143173. function __() { this.constructor = d; }
  143174. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  143175. };
  143176. })();
  143177. /**
  143178. * @name IonicErrorHandler
  143179. * @description
  143180. * The `IonicErrorHandler` intercepts the default `Console` error handling
  143181. * and displays runtime errors as an overlay when using Ionic's Dev Build Server.
  143182. *
  143183. *
  143184. * ### IonicErrorHandler Example
  143185. *
  143186. * ```typescript
  143187. * import { ErrorHandler, NgModule } from '@angular/core';
  143188. * import { IonicErrorHandler } from 'ionic-angular';
  143189. *
  143190. * @NgModule({
  143191. * providers: [{ provide: ErrorHandler, useClass: IonicErrorHandler }]
  143192. * })
  143193. * class AppModule { }
  143194. * ```
  143195. *
  143196. *
  143197. * ### Custom Error Handlers
  143198. *
  143199. * Custom error handlers can be built to replace the default, or extend Ionic's
  143200. * error handler.
  143201. *
  143202. * ```typescript
  143203. * class MyErrorHandler implements ErrorHandler {
  143204. * handleError(err: any): void {
  143205. * // do something with the error
  143206. * }
  143207. * }
  143208. *
  143209. * @NgModule({
  143210. * providers: [{ provide: ErrorHandler, useClass: MyErrorHandler }]
  143211. * })
  143212. * class AppModule { }
  143213. * ```
  143214. *
  143215. * More information about Angular's [`ErrorHandler`](https://angular.io/docs/ts/latest/api/core/index/ErrorHandler-class.html).
  143216. */
  143217. var IonicErrorHandler = (function (_super) {
  143218. __extends(IonicErrorHandler, _super);
  143219. function IonicErrorHandler() {
  143220. return _super.call(this) || this;
  143221. }
  143222. /**
  143223. * @internal
  143224. */
  143225. IonicErrorHandler.prototype.handleError = function (err) {
  143226. _super.prototype.handleError.call(this, err);
  143227. try {
  143228. var win = window;
  143229. var monitor = void 0;
  143230. monitor = win['IonicDevServer'];
  143231. monitor && monitor.handleError && monitor.handleError(err);
  143232. monitor = (win['Ionic'] = win['Ionic'] || {}).Monitor;
  143233. monitor && monitor.handleError && monitor.handleError(err);
  143234. }
  143235. catch (e) { }
  143236. };
  143237. return IonicErrorHandler;
  143238. }(__WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* ErrorHandler */]));
  143239. //# sourceMappingURL=ionic-error-handler.js.map
  143240. /***/ }),
  143241. /* 673 */
  143242. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  143243. "use strict";
  143244. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IonicModule; });
  143245. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return IonicPageModule; });
  143246. /* unused harmony export provideLocationStrategy */
  143247. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  143248. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_common__ = __webpack_require__(67);
  143249. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_platform_browser__ = __webpack_require__(40);
  143250. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_forms__ = __webpack_require__(25);
  143251. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_app_app__ = __webpack_require__(11);
  143252. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_app_app_root__ = __webpack_require__(91);
  143253. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__config_config__ = __webpack_require__(2);
  143254. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__navigation_deep_linker__ = __webpack_require__(24);
  143255. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__platform_dom_controller__ = __webpack_require__(15);
  143256. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__util_events__ = __webpack_require__(341);
  143257. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__util_form__ = __webpack_require__(27);
  143258. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__gestures_gesture_controller__ = __webpack_require__(13);
  143259. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__gestures_gesture_config__ = __webpack_require__(344);
  143260. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__tap_click_haptic__ = __webpack_require__(51);
  143261. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__platform_keyboard__ = __webpack_require__(50);
  143262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__util_module_loader__ = __webpack_require__(113);
  143263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__util_ng_module_loader__ = __webpack_require__(208);
  143264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__platform_platform__ = __webpack_require__(7);
  143265. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__platform_platform_registry__ = __webpack_require__(342);
  143266. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__tap_click_tap_click__ = __webpack_require__(338);
  143267. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__config_mode_registry__ = __webpack_require__(343);
  143268. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__transitions_transition_controller__ = __webpack_require__(71);
  143269. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__ = __webpack_require__(68);
  143270. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__components_action_sheet_action_sheet_component__ = __webpack_require__(94);
  143271. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__components_action_sheet_action_sheet_controller__ = __webpack_require__(168);
  143272. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__components_alert_alert_component__ = __webpack_require__(96);
  143273. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__components_alert_alert_controller__ = __webpack_require__(169);
  143274. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__components_app_click_block__ = __webpack_require__(674);
  143275. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__components_app_overlay_portal__ = __webpack_require__(165);
  143276. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__components_avatar_avatar__ = __webpack_require__(170);
  143277. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__components_backdrop_backdrop__ = __webpack_require__(97);
  143278. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__components_badge_badge__ = __webpack_require__(171);
  143279. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__components_button_button__ = __webpack_require__(48);
  143280. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__components_card_card__ = __webpack_require__(172);
  143281. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__components_card_card_content__ = __webpack_require__(173);
  143282. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__components_card_card_header__ = __webpack_require__(174);
  143283. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__components_card_card_title__ = __webpack_require__(175);
  143284. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__components_checkbox_checkbox__ = __webpack_require__(176);
  143285. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__components_chip_chip__ = __webpack_require__(184);
  143286. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__components_content_content__ = __webpack_require__(31);
  143287. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__components_datetime_datetime__ = __webpack_require__(185);
  143288. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__components_fab_fab__ = __webpack_require__(72);
  143289. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__components_fab_fab_container__ = __webpack_require__(187);
  143290. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__components_fab_fab_list__ = __webpack_require__(104);
  143291. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__components_grid_col__ = __webpack_require__(188);
  143292. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__components_grid_grid__ = __webpack_require__(189);
  143293. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__components_grid_row__ = __webpack_require__(190);
  143294. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__components_icon_icon__ = __webpack_require__(98);
  143295. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__components_img_img__ = __webpack_require__(191);
  143296. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__components_infinite_scroll_infinite_scroll__ = __webpack_require__(105);
  143297. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__components_infinite_scroll_infinite_scroll_content__ = __webpack_require__(192);
  143298. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__components_input_input__ = __webpack_require__(193);
  143299. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__components_item_item__ = __webpack_require__(28);
  143300. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__components_item_item_content__ = __webpack_require__(195);
  143301. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__components_item_item_divider__ = __webpack_require__(196);
  143302. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__components_item_item_group__ = __webpack_require__(197);
  143303. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_56__components_item_item_options__ = __webpack_require__(107);
  143304. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_57__components_item_item_reorder__ = __webpack_require__(100);
  143305. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_58__components_item_item_sliding__ = __webpack_require__(198);
  143306. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_59__components_item_reorder__ = __webpack_require__(199);
  143307. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_60__components_label_label__ = __webpack_require__(99);
  143308. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_61__components_list_list__ = __webpack_require__(108);
  143309. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_62__components_list_list_header__ = __webpack_require__(109);
  143310. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_63__components_loading_loading_component__ = __webpack_require__(110);
  143311. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_64__components_loading_loading_controller__ = __webpack_require__(201);
  143312. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_65__components_menu_menu__ = __webpack_require__(202);
  143313. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_66__components_menu_menu_close__ = __webpack_require__(203);
  143314. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_67__components_app_menu_controller__ = __webpack_require__(41);
  143315. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_68__components_menu_menu_toggle__ = __webpack_require__(204);
  143316. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_69__components_modal_modal_component__ = __webpack_require__(112);
  143317. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_70__components_modal_modal_controller__ = __webpack_require__(306);
  143318. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_71__components_nav_nav__ = __webpack_require__(111);
  143319. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_72__components_nav_nav_pop__ = __webpack_require__(127);
  143320. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_73__components_nav_nav_pop_anchor__ = __webpack_require__(307);
  143321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_74__components_nav_nav_push__ = __webpack_require__(128);
  143322. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_75__components_nav_nav_push_anchor__ = __webpack_require__(308);
  143323. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_76__components_note_note__ = __webpack_require__(309);
  143324. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_77__components_option_option__ = __webpack_require__(129);
  143325. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_78__components_picker_picker_component__ = __webpack_require__(102);
  143326. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_79__components_picker_picker_column__ = __webpack_require__(103);
  143327. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_80__components_picker_picker_controller__ = __webpack_require__(101);
  143328. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_81__components_popover_popover_component__ = __webpack_require__(131);
  143329. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_82__components_popover_popover_controller__ = __webpack_require__(310);
  143330. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_83__components_radio_radio_button__ = __webpack_require__(311);
  143331. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_84__components_radio_radio_group__ = __webpack_require__(132);
  143332. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_85__components_range_range__ = __webpack_require__(312);
  143333. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_86__components_range_range_knob__ = __webpack_require__(313);
  143334. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_87__components_refresher_refresher__ = __webpack_require__(133);
  143335. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_88__components_refresher_refresher_content__ = __webpack_require__(314);
  143336. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_89__components_scroll_scroll__ = __webpack_require__(315);
  143337. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_90__components_searchbar_searchbar__ = __webpack_require__(316);
  143338. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_91__components_segment_segment__ = __webpack_require__(317);
  143339. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_92__components_select_select__ = __webpack_require__(318);
  143340. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_93__components_select_select_popover_component__ = __webpack_require__(135);
  143341. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_94__components_segment_segment_button__ = __webpack_require__(134);
  143342. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_95__components_show_hide_when_show_when__ = __webpack_require__(319);
  143343. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_96__components_show_hide_when_hide_when__ = __webpack_require__(320);
  143344. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_97__components_slides_slide__ = __webpack_require__(321);
  143345. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_98__components_slides_slides__ = __webpack_require__(137);
  143346. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_99__components_spinner_spinner__ = __webpack_require__(325);
  143347. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_100__components_split_pane_split_pane__ = __webpack_require__(52);
  143348. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_101__components_tabs_tab__ = __webpack_require__(326);
  143349. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_102__components_tabs_tab_button__ = __webpack_require__(327);
  143350. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_103__components_tabs_tab_highlight__ = __webpack_require__(143);
  143351. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_104__components_tabs_tabs__ = __webpack_require__(142);
  143352. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_105__components_thumbnail_thumbnail__ = __webpack_require__(335);
  143353. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_106__components_toast_toast_component__ = __webpack_require__(144);
  143354. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_107__components_toast_toast_controller__ = __webpack_require__(329);
  143355. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_108__components_toggle_toggle__ = __webpack_require__(330);
  143356. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_109__components_toolbar_toolbar_footer__ = __webpack_require__(331);
  143357. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_110__components_toolbar_toolbar_header__ = __webpack_require__(332);
  143358. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_111__components_toolbar_toolbar__ = __webpack_require__(84);
  143359. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_112__components_toolbar_toolbar_item__ = __webpack_require__(333);
  143360. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_113__components_toolbar_toolbar_title__ = __webpack_require__(334);
  143361. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_114__components_toolbar_navbar__ = __webpack_require__(53);
  143362. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_115__components_typography_typography__ = __webpack_require__(336);
  143363. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_116__components_virtual_scroll_virtual_footer__ = __webpack_require__(145);
  143364. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_117__components_virtual_scroll_virtual_header__ = __webpack_require__(146);
  143365. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_118__components_virtual_scroll_virtual_item__ = __webpack_require__(147);
  143366. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_119__components_virtual_scroll_virtual_scroll__ = __webpack_require__(337);
  143367. /**
  143368. * Import Angular
  143369. */
  143370. /**
  143371. * Global Providers
  143372. */
  143373. /**
  143374. * Import Components/Directives/Etc
  143375. */
  143376. /**
  143377. * @name IonicModule
  143378. * @description
  143379. * IonicModule is an [NgModule](https://angular.io/docs/ts/latest/guide/ngmodule.html) that bootstraps
  143380. * an Ionic App. By passing a root component, IonicModule will make sure that all of the components,
  143381. * directives, and providers from the framework are imported.
  143382. *
  143383. * Any configuration for the app can be passed as the second argument to `forRoot`. This can be any
  143384. * valid property from the [Config](/docs/api/config/Config/).
  143385. *
  143386. * @usage
  143387. * ```ts
  143388. * import { NgModule } from '@angular/core';
  143389. *
  143390. * import { IonicApp, IonicModule } from 'ionic-angular';
  143391. *
  143392. * import { MyApp } from './app.component';
  143393. * import { HomePage } from '../pages/home/home';
  143394. *
  143395. * @NgModule({
  143396. * declarations: [
  143397. * MyApp,
  143398. * HomePage
  143399. * ],
  143400. * imports: [
  143401. * BrowserModule,
  143402. * IonicModule.forRoot(MyApp, {
  143403. *
  143404. * })
  143405. * ],
  143406. * bootstrap: [IonicApp],
  143407. * entryComponents: [
  143408. * MyApp,
  143409. * HomePage
  143410. * ],
  143411. * providers: []
  143412. * })
  143413. * export class AppModule {}
  143414. * ```
  143415. */
  143416. var IonicModule = (function () {
  143417. function IonicModule() {
  143418. }
  143419. /**
  143420. * Set the root app component for you IonicModule
  143421. * @param {any} appRoot The root AppComponent for this app.
  143422. * @param {any} config Config Options for the app. Accepts any config property.
  143423. * @param {any} deepLinkConfig Any configuration needed for the Ionic Deeplinker.
  143424. */
  143425. IonicModule.forRoot = function (appRoot, config, deepLinkConfig) {
  143426. if (config === void 0) { config = null; }
  143427. if (deepLinkConfig === void 0) { deepLinkConfig = null; }
  143428. return {
  143429. ngModule: IonicModule,
  143430. providers: [
  143431. // useValue: bootstrap values
  143432. { provide: __WEBPACK_IMPORTED_MODULE_5__components_app_app_root__["a" /* AppRootToken */], useValue: appRoot },
  143433. { provide: __WEBPACK_IMPORTED_MODULE_6__config_config__["b" /* ConfigToken */], useValue: config },
  143434. { provide: __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__["a" /* DeepLinkConfigToken */], useValue: deepLinkConfig },
  143435. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_common__["a" /* APP_BASE_HREF */], useValue: '/' },
  143436. // useFactory: user values
  143437. { provide: __WEBPACK_IMPORTED_MODULE_18__platform_platform_registry__["a" /* PlatformConfigToken */], useFactory: __WEBPACK_IMPORTED_MODULE_18__platform_platform_registry__["b" /* providePlatformConfigs */] },
  143438. // useFactory: ionic core providers
  143439. { provide: __WEBPACK_IMPORTED_MODULE_17__platform_platform__["a" /* Platform */], useFactory: __WEBPACK_IMPORTED_MODULE_17__platform_platform__["b" /* setupPlatform */], deps: [__WEBPACK_IMPORTED_MODULE_2__angular_platform_browser__["b" /* DOCUMENT */], __WEBPACK_IMPORTED_MODULE_18__platform_platform_registry__["a" /* PlatformConfigToken */], __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */]] },
  143440. { provide: __WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* Config */], useFactory: __WEBPACK_IMPORTED_MODULE_6__config_config__["c" /* setupConfig */], deps: [__WEBPACK_IMPORTED_MODULE_6__config_config__["b" /* ConfigToken */], __WEBPACK_IMPORTED_MODULE_17__platform_platform__["a" /* Platform */]] },
  143441. // useFactory: ionic app initializers
  143442. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["c" /* APP_INITIALIZER */], useFactory: __WEBPACK_IMPORTED_MODULE_20__config_mode_registry__["a" /* registerModeConfigs */], deps: [__WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* Config */]], multi: true },
  143443. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["c" /* APP_INITIALIZER */], useFactory: __WEBPACK_IMPORTED_MODULE_9__util_events__["b" /* setupProvideEvents */], deps: [__WEBPACK_IMPORTED_MODULE_17__platform_platform__["a" /* Platform */], __WEBPACK_IMPORTED_MODULE_8__platform_dom_controller__["a" /* DomController */]], multi: true },
  143444. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["c" /* APP_INITIALIZER */], useFactory: __WEBPACK_IMPORTED_MODULE_19__tap_click_tap_click__["b" /* setupTapClick */], deps: [__WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* Config */], __WEBPACK_IMPORTED_MODULE_17__platform_platform__["a" /* Platform */], __WEBPACK_IMPORTED_MODULE_8__platform_dom_controller__["a" /* DomController */], __WEBPACK_IMPORTED_MODULE_4__components_app_app__["a" /* App */], __WEBPACK_IMPORTED_MODULE_11__gestures_gesture_controller__["l" /* GestureController */]], multi: true },
  143445. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["c" /* APP_INITIALIZER */], useFactory: __WEBPACK_IMPORTED_MODULE_15__util_module_loader__["d" /* setupPreloading */], deps: [__WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* Config */], __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__["a" /* DeepLinkConfigToken */], __WEBPACK_IMPORTED_MODULE_15__util_module_loader__["b" /* ModuleLoader */], __WEBPACK_IMPORTED_MODULE_0__angular_core__["M" /* NgZone */]], multi: true },
  143446. // useClass
  143447. { provide: __WEBPACK_IMPORTED_MODULE_2__angular_platform_browser__["c" /* HAMMER_GESTURE_CONFIG */], useClass: __WEBPACK_IMPORTED_MODULE_12__gestures_gesture_config__["a" /* IonicGestureConfig */] },
  143448. // useValue
  143449. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["a" /* ANALYZE_FOR_ENTRY_COMPONENTS */], useValue: appRoot, multi: true },
  143450. // ionic providers
  143451. __WEBPACK_IMPORTED_MODULE_24__components_action_sheet_action_sheet_controller__["a" /* ActionSheetController */],
  143452. __WEBPACK_IMPORTED_MODULE_26__components_alert_alert_controller__["a" /* AlertController */],
  143453. __WEBPACK_IMPORTED_MODULE_4__components_app_app__["a" /* App */],
  143454. __WEBPACK_IMPORTED_MODULE_8__platform_dom_controller__["a" /* DomController */],
  143455. __WEBPACK_IMPORTED_MODULE_9__util_events__["a" /* Events */],
  143456. __WEBPACK_IMPORTED_MODULE_10__util_form__["a" /* Form */],
  143457. __WEBPACK_IMPORTED_MODULE_11__gestures_gesture_controller__["l" /* GestureController */],
  143458. __WEBPACK_IMPORTED_MODULE_13__tap_click_haptic__["a" /* Haptic */],
  143459. __WEBPACK_IMPORTED_MODULE_14__platform_keyboard__["a" /* Keyboard */],
  143460. __WEBPACK_IMPORTED_MODULE_64__components_loading_loading_controller__["a" /* LoadingController */],
  143461. __WEBPACK_IMPORTED_MODULE_1__angular_common__["e" /* Location */],
  143462. __WEBPACK_IMPORTED_MODULE_67__components_app_menu_controller__["a" /* MenuController */],
  143463. __WEBPACK_IMPORTED_MODULE_70__components_modal_modal_controller__["a" /* ModalController */],
  143464. __WEBPACK_IMPORTED_MODULE_16__util_ng_module_loader__["a" /* NgModuleLoader */],
  143465. __WEBPACK_IMPORTED_MODULE_80__components_picker_picker_controller__["a" /* PickerController */],
  143466. __WEBPACK_IMPORTED_MODULE_82__components_popover_popover_controller__["a" /* PopoverController */],
  143467. __WEBPACK_IMPORTED_MODULE_19__tap_click_tap_click__["a" /* TapClick */],
  143468. __WEBPACK_IMPORTED_MODULE_107__components_toast_toast_controller__["a" /* ToastController */],
  143469. __WEBPACK_IMPORTED_MODULE_21__transitions_transition_controller__["a" /* TransitionController */],
  143470. { provide: __WEBPACK_IMPORTED_MODULE_15__util_module_loader__["b" /* ModuleLoader */], useFactory: __WEBPACK_IMPORTED_MODULE_15__util_module_loader__["c" /* provideModuleLoader */], deps: [__WEBPACK_IMPORTED_MODULE_16__util_ng_module_loader__["a" /* NgModuleLoader */], __WEBPACK_IMPORTED_MODULE_0__angular_core__["C" /* Injector */]] },
  143471. { provide: __WEBPACK_IMPORTED_MODULE_1__angular_common__["f" /* LocationStrategy */], useFactory: provideLocationStrategy, deps: [__WEBPACK_IMPORTED_MODULE_1__angular_common__["h" /* PlatformLocation */], [new __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */](__WEBPACK_IMPORTED_MODULE_1__angular_common__["a" /* APP_BASE_HREF */]), new __WEBPACK_IMPORTED_MODULE_0__angular_core__["N" /* Optional */]()], __WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* Config */]] },
  143472. { provide: __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__["b" /* UrlSerializer */], useFactory: __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__["d" /* setupUrlSerializer */], deps: [__WEBPACK_IMPORTED_MODULE_4__components_app_app__["a" /* App */], __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__["a" /* DeepLinkConfigToken */]] },
  143473. { provide: __WEBPACK_IMPORTED_MODULE_7__navigation_deep_linker__["a" /* DeepLinker */], useFactory: __WEBPACK_IMPORTED_MODULE_7__navigation_deep_linker__["b" /* setupDeepLinker */], deps: [__WEBPACK_IMPORTED_MODULE_4__components_app_app__["a" /* App */], __WEBPACK_IMPORTED_MODULE_22__navigation_url_serializer__["b" /* UrlSerializer */], __WEBPACK_IMPORTED_MODULE_1__angular_common__["e" /* Location */], __WEBPACK_IMPORTED_MODULE_15__util_module_loader__["b" /* ModuleLoader */], __WEBPACK_IMPORTED_MODULE_0__angular_core__["o" /* ComponentFactoryResolver */]] },
  143474. ]
  143475. };
  143476. };
  143477. IonicModule.decorators = [
  143478. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */], args: [{
  143479. declarations: [
  143480. __WEBPACK_IMPORTED_MODULE_23__components_action_sheet_action_sheet_component__["a" /* ActionSheetCmp */],
  143481. __WEBPACK_IMPORTED_MODULE_25__components_alert_alert_component__["a" /* AlertCmp */],
  143482. __WEBPACK_IMPORTED_MODULE_27__components_app_click_block__["a" /* ClickBlock */],
  143483. __WEBPACK_IMPORTED_MODULE_5__components_app_app_root__["b" /* IonicApp */],
  143484. __WEBPACK_IMPORTED_MODULE_28__components_app_overlay_portal__["a" /* OverlayPortal */],
  143485. __WEBPACK_IMPORTED_MODULE_29__components_avatar_avatar__["a" /* Avatar */],
  143486. __WEBPACK_IMPORTED_MODULE_30__components_backdrop_backdrop__["a" /* Backdrop */],
  143487. __WEBPACK_IMPORTED_MODULE_31__components_badge_badge__["a" /* Badge */],
  143488. __WEBPACK_IMPORTED_MODULE_32__components_button_button__["a" /* Button */],
  143489. __WEBPACK_IMPORTED_MODULE_33__components_card_card__["a" /* Card */],
  143490. __WEBPACK_IMPORTED_MODULE_34__components_card_card_content__["a" /* CardContent */],
  143491. __WEBPACK_IMPORTED_MODULE_35__components_card_card_header__["a" /* CardHeader */],
  143492. __WEBPACK_IMPORTED_MODULE_36__components_card_card_title__["a" /* CardTitle */],
  143493. __WEBPACK_IMPORTED_MODULE_37__components_checkbox_checkbox__["a" /* Checkbox */],
  143494. __WEBPACK_IMPORTED_MODULE_38__components_chip_chip__["a" /* Chip */],
  143495. __WEBPACK_IMPORTED_MODULE_44__components_grid_col__["a" /* Col */],
  143496. __WEBPACK_IMPORTED_MODULE_39__components_content_content__["a" /* Content */],
  143497. __WEBPACK_IMPORTED_MODULE_40__components_datetime_datetime__["a" /* DateTime */],
  143498. __WEBPACK_IMPORTED_MODULE_41__components_fab_fab__["a" /* FabButton */],
  143499. __WEBPACK_IMPORTED_MODULE_42__components_fab_fab_container__["a" /* FabContainer */],
  143500. __WEBPACK_IMPORTED_MODULE_43__components_fab_fab_list__["a" /* FabList */],
  143501. __WEBPACK_IMPORTED_MODULE_45__components_grid_grid__["a" /* Grid */],
  143502. __WEBPACK_IMPORTED_MODULE_48__components_img_img__["a" /* Img */],
  143503. __WEBPACK_IMPORTED_MODULE_47__components_icon_icon__["a" /* Icon */],
  143504. __WEBPACK_IMPORTED_MODULE_49__components_infinite_scroll_infinite_scroll__["a" /* InfiniteScroll */],
  143505. __WEBPACK_IMPORTED_MODULE_50__components_infinite_scroll_infinite_scroll_content__["a" /* InfiniteScrollContent */],
  143506. __WEBPACK_IMPORTED_MODULE_52__components_item_item__["a" /* Item */],
  143507. __WEBPACK_IMPORTED_MODULE_53__components_item_item_content__["a" /* ItemContent */],
  143508. __WEBPACK_IMPORTED_MODULE_54__components_item_item_divider__["a" /* ItemDivider */],
  143509. __WEBPACK_IMPORTED_MODULE_55__components_item_item_group__["a" /* ItemGroup */],
  143510. __WEBPACK_IMPORTED_MODULE_56__components_item_item_options__["a" /* ItemOptions */],
  143511. __WEBPACK_IMPORTED_MODULE_57__components_item_item_reorder__["a" /* ItemReorder */],
  143512. __WEBPACK_IMPORTED_MODULE_58__components_item_item_sliding__["a" /* ItemSliding */],
  143513. __WEBPACK_IMPORTED_MODULE_60__components_label_label__["a" /* Label */],
  143514. __WEBPACK_IMPORTED_MODULE_61__components_list_list__["a" /* List */],
  143515. __WEBPACK_IMPORTED_MODULE_62__components_list_list_header__["a" /* ListHeader */],
  143516. __WEBPACK_IMPORTED_MODULE_59__components_item_reorder__["a" /* Reorder */],
  143517. __WEBPACK_IMPORTED_MODULE_63__components_loading_loading_component__["a" /* LoadingCmp */],
  143518. __WEBPACK_IMPORTED_MODULE_65__components_menu_menu__["a" /* Menu */],
  143519. __WEBPACK_IMPORTED_MODULE_66__components_menu_menu_close__["a" /* MenuClose */],
  143520. __WEBPACK_IMPORTED_MODULE_68__components_menu_menu_toggle__["a" /* MenuToggle */],
  143521. __WEBPACK_IMPORTED_MODULE_69__components_modal_modal_component__["a" /* ModalCmp */],
  143522. __WEBPACK_IMPORTED_MODULE_71__components_nav_nav__["a" /* Nav */],
  143523. __WEBPACK_IMPORTED_MODULE_72__components_nav_nav_pop__["a" /* NavPop */],
  143524. __WEBPACK_IMPORTED_MODULE_73__components_nav_nav_pop_anchor__["a" /* NavPopAnchor */],
  143525. __WEBPACK_IMPORTED_MODULE_74__components_nav_nav_push__["a" /* NavPush */],
  143526. __WEBPACK_IMPORTED_MODULE_75__components_nav_nav_push_anchor__["a" /* NavPushAnchor */],
  143527. __WEBPACK_IMPORTED_MODULE_76__components_note_note__["a" /* Note */],
  143528. __WEBPACK_IMPORTED_MODULE_77__components_option_option__["a" /* Option */],
  143529. __WEBPACK_IMPORTED_MODULE_78__components_picker_picker_component__["a" /* PickerCmp */],
  143530. __WEBPACK_IMPORTED_MODULE_79__components_picker_picker_column__["a" /* PickerColumnCmp */],
  143531. __WEBPACK_IMPORTED_MODULE_81__components_popover_popover_component__["a" /* PopoverCmp */],
  143532. __WEBPACK_IMPORTED_MODULE_83__components_radio_radio_button__["a" /* RadioButton */],
  143533. __WEBPACK_IMPORTED_MODULE_84__components_radio_radio_group__["a" /* RadioGroup */],
  143534. __WEBPACK_IMPORTED_MODULE_85__components_range_range__["a" /* Range */],
  143535. __WEBPACK_IMPORTED_MODULE_86__components_range_range_knob__["a" /* RangeKnob */],
  143536. __WEBPACK_IMPORTED_MODULE_87__components_refresher_refresher__["a" /* Refresher */],
  143537. __WEBPACK_IMPORTED_MODULE_88__components_refresher_refresher_content__["a" /* RefresherContent */],
  143538. __WEBPACK_IMPORTED_MODULE_46__components_grid_row__["a" /* Row */],
  143539. __WEBPACK_IMPORTED_MODULE_89__components_scroll_scroll__["a" /* Scroll */],
  143540. __WEBPACK_IMPORTED_MODULE_90__components_searchbar_searchbar__["a" /* Searchbar */],
  143541. __WEBPACK_IMPORTED_MODULE_91__components_segment_segment__["a" /* Segment */],
  143542. __WEBPACK_IMPORTED_MODULE_94__components_segment_segment_button__["a" /* SegmentButton */],
  143543. __WEBPACK_IMPORTED_MODULE_92__components_select_select__["a" /* Select */],
  143544. __WEBPACK_IMPORTED_MODULE_93__components_select_select_popover_component__["a" /* SelectPopover */],
  143545. __WEBPACK_IMPORTED_MODULE_95__components_show_hide_when_show_when__["a" /* ShowWhen */],
  143546. __WEBPACK_IMPORTED_MODULE_96__components_show_hide_when_hide_when__["a" /* HideWhen */],
  143547. __WEBPACK_IMPORTED_MODULE_97__components_slides_slide__["a" /* Slide */],
  143548. __WEBPACK_IMPORTED_MODULE_98__components_slides_slides__["a" /* Slides */],
  143549. __WEBPACK_IMPORTED_MODULE_99__components_spinner_spinner__["a" /* Spinner */],
  143550. __WEBPACK_IMPORTED_MODULE_100__components_split_pane_split_pane__["b" /* SplitPane */],
  143551. __WEBPACK_IMPORTED_MODULE_101__components_tabs_tab__["a" /* Tab */],
  143552. __WEBPACK_IMPORTED_MODULE_102__components_tabs_tab_button__["a" /* TabButton */],
  143553. __WEBPACK_IMPORTED_MODULE_103__components_tabs_tab_highlight__["a" /* TabHighlight */],
  143554. __WEBPACK_IMPORTED_MODULE_104__components_tabs_tabs__["a" /* Tabs */],
  143555. __WEBPACK_IMPORTED_MODULE_51__components_input_input__["a" /* TextInput */],
  143556. __WEBPACK_IMPORTED_MODULE_105__components_thumbnail_thumbnail__["a" /* Thumbnail */],
  143557. __WEBPACK_IMPORTED_MODULE_106__components_toast_toast_component__["a" /* ToastCmp */],
  143558. __WEBPACK_IMPORTED_MODULE_108__components_toggle_toggle__["a" /* Toggle */],
  143559. __WEBPACK_IMPORTED_MODULE_109__components_toolbar_toolbar_footer__["a" /* Footer */],
  143560. __WEBPACK_IMPORTED_MODULE_110__components_toolbar_toolbar_header__["a" /* Header */],
  143561. __WEBPACK_IMPORTED_MODULE_111__components_toolbar_toolbar__["a" /* Toolbar */],
  143562. __WEBPACK_IMPORTED_MODULE_112__components_toolbar_toolbar_item__["a" /* ToolbarItem */],
  143563. __WEBPACK_IMPORTED_MODULE_113__components_toolbar_toolbar_title__["a" /* ToolbarTitle */],
  143564. __WEBPACK_IMPORTED_MODULE_114__components_toolbar_navbar__["a" /* Navbar */],
  143565. __WEBPACK_IMPORTED_MODULE_115__components_typography_typography__["a" /* Typography */],
  143566. __WEBPACK_IMPORTED_MODULE_116__components_virtual_scroll_virtual_footer__["a" /* VirtualFooter */],
  143567. __WEBPACK_IMPORTED_MODULE_117__components_virtual_scroll_virtual_header__["a" /* VirtualHeader */],
  143568. __WEBPACK_IMPORTED_MODULE_118__components_virtual_scroll_virtual_item__["a" /* VirtualItem */],
  143569. __WEBPACK_IMPORTED_MODULE_119__components_virtual_scroll_virtual_scroll__["a" /* VirtualScroll */]
  143570. ],
  143571. imports: [
  143572. __WEBPACK_IMPORTED_MODULE_1__angular_common__["b" /* CommonModule */],
  143573. __WEBPACK_IMPORTED_MODULE_3__angular_forms__["b" /* FormsModule */],
  143574. __WEBPACK_IMPORTED_MODULE_3__angular_forms__["e" /* ReactiveFormsModule */],
  143575. ],
  143576. exports: [
  143577. __WEBPACK_IMPORTED_MODULE_1__angular_common__["b" /* CommonModule */],
  143578. __WEBPACK_IMPORTED_MODULE_3__angular_forms__["b" /* FormsModule */],
  143579. __WEBPACK_IMPORTED_MODULE_3__angular_forms__["e" /* ReactiveFormsModule */],
  143580. __WEBPACK_IMPORTED_MODULE_23__components_action_sheet_action_sheet_component__["a" /* ActionSheetCmp */],
  143581. __WEBPACK_IMPORTED_MODULE_25__components_alert_alert_component__["a" /* AlertCmp */],
  143582. __WEBPACK_IMPORTED_MODULE_27__components_app_click_block__["a" /* ClickBlock */],
  143583. __WEBPACK_IMPORTED_MODULE_5__components_app_app_root__["b" /* IonicApp */],
  143584. __WEBPACK_IMPORTED_MODULE_28__components_app_overlay_portal__["a" /* OverlayPortal */],
  143585. __WEBPACK_IMPORTED_MODULE_29__components_avatar_avatar__["a" /* Avatar */],
  143586. __WEBPACK_IMPORTED_MODULE_30__components_backdrop_backdrop__["a" /* Backdrop */],
  143587. __WEBPACK_IMPORTED_MODULE_31__components_badge_badge__["a" /* Badge */],
  143588. __WEBPACK_IMPORTED_MODULE_32__components_button_button__["a" /* Button */],
  143589. __WEBPACK_IMPORTED_MODULE_33__components_card_card__["a" /* Card */],
  143590. __WEBPACK_IMPORTED_MODULE_34__components_card_card_content__["a" /* CardContent */],
  143591. __WEBPACK_IMPORTED_MODULE_35__components_card_card_header__["a" /* CardHeader */],
  143592. __WEBPACK_IMPORTED_MODULE_36__components_card_card_title__["a" /* CardTitle */],
  143593. __WEBPACK_IMPORTED_MODULE_37__components_checkbox_checkbox__["a" /* Checkbox */],
  143594. __WEBPACK_IMPORTED_MODULE_38__components_chip_chip__["a" /* Chip */],
  143595. __WEBPACK_IMPORTED_MODULE_44__components_grid_col__["a" /* Col */],
  143596. __WEBPACK_IMPORTED_MODULE_39__components_content_content__["a" /* Content */],
  143597. __WEBPACK_IMPORTED_MODULE_40__components_datetime_datetime__["a" /* DateTime */],
  143598. __WEBPACK_IMPORTED_MODULE_41__components_fab_fab__["a" /* FabButton */],
  143599. __WEBPACK_IMPORTED_MODULE_42__components_fab_fab_container__["a" /* FabContainer */],
  143600. __WEBPACK_IMPORTED_MODULE_43__components_fab_fab_list__["a" /* FabList */],
  143601. __WEBPACK_IMPORTED_MODULE_45__components_grid_grid__["a" /* Grid */],
  143602. __WEBPACK_IMPORTED_MODULE_48__components_img_img__["a" /* Img */],
  143603. __WEBPACK_IMPORTED_MODULE_47__components_icon_icon__["a" /* Icon */],
  143604. __WEBPACK_IMPORTED_MODULE_49__components_infinite_scroll_infinite_scroll__["a" /* InfiniteScroll */],
  143605. __WEBPACK_IMPORTED_MODULE_50__components_infinite_scroll_infinite_scroll_content__["a" /* InfiniteScrollContent */],
  143606. __WEBPACK_IMPORTED_MODULE_52__components_item_item__["a" /* Item */],
  143607. __WEBPACK_IMPORTED_MODULE_53__components_item_item_content__["a" /* ItemContent */],
  143608. __WEBPACK_IMPORTED_MODULE_54__components_item_item_divider__["a" /* ItemDivider */],
  143609. __WEBPACK_IMPORTED_MODULE_55__components_item_item_group__["a" /* ItemGroup */],
  143610. __WEBPACK_IMPORTED_MODULE_56__components_item_item_options__["a" /* ItemOptions */],
  143611. __WEBPACK_IMPORTED_MODULE_57__components_item_item_reorder__["a" /* ItemReorder */],
  143612. __WEBPACK_IMPORTED_MODULE_58__components_item_item_sliding__["a" /* ItemSliding */],
  143613. __WEBPACK_IMPORTED_MODULE_60__components_label_label__["a" /* Label */],
  143614. __WEBPACK_IMPORTED_MODULE_61__components_list_list__["a" /* List */],
  143615. __WEBPACK_IMPORTED_MODULE_62__components_list_list_header__["a" /* ListHeader */],
  143616. __WEBPACK_IMPORTED_MODULE_59__components_item_reorder__["a" /* Reorder */],
  143617. __WEBPACK_IMPORTED_MODULE_63__components_loading_loading_component__["a" /* LoadingCmp */],
  143618. __WEBPACK_IMPORTED_MODULE_65__components_menu_menu__["a" /* Menu */],
  143619. __WEBPACK_IMPORTED_MODULE_66__components_menu_menu_close__["a" /* MenuClose */],
  143620. __WEBPACK_IMPORTED_MODULE_68__components_menu_menu_toggle__["a" /* MenuToggle */],
  143621. __WEBPACK_IMPORTED_MODULE_69__components_modal_modal_component__["a" /* ModalCmp */],
  143622. __WEBPACK_IMPORTED_MODULE_71__components_nav_nav__["a" /* Nav */],
  143623. __WEBPACK_IMPORTED_MODULE_72__components_nav_nav_pop__["a" /* NavPop */],
  143624. __WEBPACK_IMPORTED_MODULE_73__components_nav_nav_pop_anchor__["a" /* NavPopAnchor */],
  143625. __WEBPACK_IMPORTED_MODULE_74__components_nav_nav_push__["a" /* NavPush */],
  143626. __WEBPACK_IMPORTED_MODULE_75__components_nav_nav_push_anchor__["a" /* NavPushAnchor */],
  143627. __WEBPACK_IMPORTED_MODULE_76__components_note_note__["a" /* Note */],
  143628. __WEBPACK_IMPORTED_MODULE_77__components_option_option__["a" /* Option */],
  143629. __WEBPACK_IMPORTED_MODULE_78__components_picker_picker_component__["a" /* PickerCmp */],
  143630. __WEBPACK_IMPORTED_MODULE_79__components_picker_picker_column__["a" /* PickerColumnCmp */],
  143631. __WEBPACK_IMPORTED_MODULE_81__components_popover_popover_component__["a" /* PopoverCmp */],
  143632. __WEBPACK_IMPORTED_MODULE_83__components_radio_radio_button__["a" /* RadioButton */],
  143633. __WEBPACK_IMPORTED_MODULE_84__components_radio_radio_group__["a" /* RadioGroup */],
  143634. __WEBPACK_IMPORTED_MODULE_85__components_range_range__["a" /* Range */],
  143635. __WEBPACK_IMPORTED_MODULE_86__components_range_range_knob__["a" /* RangeKnob */],
  143636. __WEBPACK_IMPORTED_MODULE_87__components_refresher_refresher__["a" /* Refresher */],
  143637. __WEBPACK_IMPORTED_MODULE_88__components_refresher_refresher_content__["a" /* RefresherContent */],
  143638. __WEBPACK_IMPORTED_MODULE_46__components_grid_row__["a" /* Row */],
  143639. __WEBPACK_IMPORTED_MODULE_89__components_scroll_scroll__["a" /* Scroll */],
  143640. __WEBPACK_IMPORTED_MODULE_90__components_searchbar_searchbar__["a" /* Searchbar */],
  143641. __WEBPACK_IMPORTED_MODULE_91__components_segment_segment__["a" /* Segment */],
  143642. __WEBPACK_IMPORTED_MODULE_94__components_segment_segment_button__["a" /* SegmentButton */],
  143643. __WEBPACK_IMPORTED_MODULE_92__components_select_select__["a" /* Select */],
  143644. __WEBPACK_IMPORTED_MODULE_93__components_select_select_popover_component__["a" /* SelectPopover */],
  143645. __WEBPACK_IMPORTED_MODULE_95__components_show_hide_when_show_when__["a" /* ShowWhen */],
  143646. __WEBPACK_IMPORTED_MODULE_96__components_show_hide_when_hide_when__["a" /* HideWhen */],
  143647. __WEBPACK_IMPORTED_MODULE_97__components_slides_slide__["a" /* Slide */],
  143648. __WEBPACK_IMPORTED_MODULE_98__components_slides_slides__["a" /* Slides */],
  143649. __WEBPACK_IMPORTED_MODULE_99__components_spinner_spinner__["a" /* Spinner */],
  143650. __WEBPACK_IMPORTED_MODULE_100__components_split_pane_split_pane__["b" /* SplitPane */],
  143651. __WEBPACK_IMPORTED_MODULE_101__components_tabs_tab__["a" /* Tab */],
  143652. __WEBPACK_IMPORTED_MODULE_102__components_tabs_tab_button__["a" /* TabButton */],
  143653. __WEBPACK_IMPORTED_MODULE_103__components_tabs_tab_highlight__["a" /* TabHighlight */],
  143654. __WEBPACK_IMPORTED_MODULE_104__components_tabs_tabs__["a" /* Tabs */],
  143655. __WEBPACK_IMPORTED_MODULE_51__components_input_input__["a" /* TextInput */],
  143656. __WEBPACK_IMPORTED_MODULE_105__components_thumbnail_thumbnail__["a" /* Thumbnail */],
  143657. __WEBPACK_IMPORTED_MODULE_106__components_toast_toast_component__["a" /* ToastCmp */],
  143658. __WEBPACK_IMPORTED_MODULE_108__components_toggle_toggle__["a" /* Toggle */],
  143659. __WEBPACK_IMPORTED_MODULE_109__components_toolbar_toolbar_footer__["a" /* Footer */],
  143660. __WEBPACK_IMPORTED_MODULE_110__components_toolbar_toolbar_header__["a" /* Header */],
  143661. __WEBPACK_IMPORTED_MODULE_111__components_toolbar_toolbar__["a" /* Toolbar */],
  143662. __WEBPACK_IMPORTED_MODULE_112__components_toolbar_toolbar_item__["a" /* ToolbarItem */],
  143663. __WEBPACK_IMPORTED_MODULE_113__components_toolbar_toolbar_title__["a" /* ToolbarTitle */],
  143664. __WEBPACK_IMPORTED_MODULE_114__components_toolbar_navbar__["a" /* Navbar */],
  143665. __WEBPACK_IMPORTED_MODULE_115__components_typography_typography__["a" /* Typography */],
  143666. __WEBPACK_IMPORTED_MODULE_116__components_virtual_scroll_virtual_footer__["a" /* VirtualFooter */],
  143667. __WEBPACK_IMPORTED_MODULE_117__components_virtual_scroll_virtual_header__["a" /* VirtualHeader */],
  143668. __WEBPACK_IMPORTED_MODULE_118__components_virtual_scroll_virtual_item__["a" /* VirtualItem */],
  143669. __WEBPACK_IMPORTED_MODULE_119__components_virtual_scroll_virtual_scroll__["a" /* VirtualScroll */]
  143670. ],
  143671. entryComponents: [
  143672. __WEBPACK_IMPORTED_MODULE_23__components_action_sheet_action_sheet_component__["a" /* ActionSheetCmp */],
  143673. __WEBPACK_IMPORTED_MODULE_25__components_alert_alert_component__["a" /* AlertCmp */],
  143674. __WEBPACK_IMPORTED_MODULE_5__components_app_app_root__["b" /* IonicApp */],
  143675. __WEBPACK_IMPORTED_MODULE_63__components_loading_loading_component__["a" /* LoadingCmp */],
  143676. __WEBPACK_IMPORTED_MODULE_69__components_modal_modal_component__["a" /* ModalCmp */],
  143677. __WEBPACK_IMPORTED_MODULE_78__components_picker_picker_component__["a" /* PickerCmp */],
  143678. __WEBPACK_IMPORTED_MODULE_81__components_popover_popover_component__["a" /* PopoverCmp */],
  143679. __WEBPACK_IMPORTED_MODULE_93__components_select_select_popover_component__["a" /* SelectPopover */],
  143680. __WEBPACK_IMPORTED_MODULE_106__components_toast_toast_component__["a" /* ToastCmp */]
  143681. ]
  143682. },] },
  143683. ];
  143684. /** @nocollapse */
  143685. IonicModule.ctorParameters = function () { return []; };
  143686. return IonicModule;
  143687. }());
  143688. /**
  143689. * @name IonicPageModule
  143690. * @description
  143691. * IonicPageModule is an [NgModule](https://angular.io/docs/ts/latest/guide/ngmodule.html) that
  143692. * bootstraps a child [IonicPage](../navigation/IonicPage/) in order to set up routing.
  143693. *
  143694. * @usage
  143695. * ```ts
  143696. * import { NgModule } from '@angular/core';
  143697. *
  143698. * import { IonicPageModule } from 'ionic-angular';
  143699. *
  143700. * import { HomePage } from './home';
  143701. *
  143702. * @NgModule({
  143703. * declarations: [
  143704. * HomePage
  143705. * ],
  143706. * imports: [
  143707. * IonicPageModule.forChild(HomePage)
  143708. * ],
  143709. * entryComponents: [
  143710. * HomePage
  143711. * ]
  143712. * })
  143713. * export class HomePageModule { }
  143714. * ```
  143715. */
  143716. var IonicPageModule = (function () {
  143717. function IonicPageModule() {
  143718. }
  143719. IonicPageModule.forChild = function (page) {
  143720. return {
  143721. ngModule: IonicPageModule,
  143722. providers: [
  143723. { provide: __WEBPACK_IMPORTED_MODULE_15__util_module_loader__["a" /* LAZY_LOADED_TOKEN */], useValue: page },
  143724. { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["a" /* ANALYZE_FOR_ENTRY_COMPONENTS */], useValue: page, multi: true },
  143725. ]
  143726. };
  143727. };
  143728. IonicPageModule.decorators = [
  143729. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */], args: [{
  143730. imports: [IonicModule],
  143731. exports: [IonicModule]
  143732. },] },
  143733. ];
  143734. /** @nocollapse */
  143735. IonicPageModule.ctorParameters = function () { return []; };
  143736. return IonicPageModule;
  143737. }());
  143738. /**
  143739. * @hidden
  143740. */
  143741. function provideLocationStrategy(platformLocationStrategy, baseHref, config) {
  143742. return config.get('locationStrategy') === 'path' ?
  143743. new __WEBPACK_IMPORTED_MODULE_1__angular_common__["g" /* PathLocationStrategy */](platformLocationStrategy, baseHref) :
  143744. new __WEBPACK_IMPORTED_MODULE_1__angular_common__["d" /* HashLocationStrategy */](platformLocationStrategy, baseHref);
  143745. }
  143746. //# sourceMappingURL=module.js.map
  143747. /***/ }),
  143748. /* 674 */
  143749. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  143750. "use strict";
  143751. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ClickBlock; });
  143752. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(1);
  143753. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_app__ = __webpack_require__(11);
  143754. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__config_config__ = __webpack_require__(2);
  143755. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__platform_platform__ = __webpack_require__(7);
  143756. /**
  143757. * @hidden
  143758. */
  143759. var ClickBlock = (function () {
  143760. function ClickBlock(app, config, plt, elementRef, renderer) {
  143761. this.plt = plt;
  143762. this.elementRef = elementRef;
  143763. this.renderer = renderer;
  143764. this._showing = false;
  143765. app._clickBlock = this;
  143766. var enabled = this.isEnabled = config.getBoolean('clickBlock', true);
  143767. if (enabled) {
  143768. this._setElementClass('click-block-enabled', true);
  143769. }
  143770. }
  143771. ClickBlock.prototype.activate = function (shouldShow, expire, minDuration) {
  143772. if (expire === void 0) { expire = 100; }
  143773. if (minDuration === void 0) { minDuration = 0; }
  143774. if (this.isEnabled) {
  143775. this.plt.cancelTimeout(this._tmr);
  143776. if (shouldShow) {
  143777. // remember when we started the click block
  143778. this._start = Date.now();
  143779. // figure out the minimum time it should be showing until
  143780. // this is useful for transitions that are less than 300ms
  143781. this._minEnd = this._start + (minDuration || 0);
  143782. this._activate(true);
  143783. }
  143784. this._tmr = this.plt.timeout(this._activate.bind(this, false), expire);
  143785. }
  143786. };
  143787. /** @internal */
  143788. ClickBlock.prototype._activate = function (shouldShow) {
  143789. if (this._showing !== shouldShow) {
  143790. if (!shouldShow) {
  143791. // check if it was enabled before the minimum duration
  143792. // this is useful for transitions that are less than 300ms
  143793. var now = Date.now();
  143794. if (now < this._minEnd) {
  143795. this._tmr = this.plt.timeout(this._activate.bind(this, false), this._minEnd - now);
  143796. return;
  143797. }
  143798. }
  143799. this._setElementClass('click-block-active', shouldShow);
  143800. this._showing = shouldShow;
  143801. }
  143802. };
  143803. ClickBlock.prototype._setElementClass = function (className, add) {
  143804. this.renderer.setElementClass(this.elementRef.nativeElement, className, add);
  143805. };
  143806. ClickBlock.decorators = [
  143807. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["s" /* Directive */], args: [{
  143808. selector: '.click-block'
  143809. },] },
  143810. ];
  143811. /** @nocollapse */
  143812. ClickBlock.ctorParameters = function () { return [
  143813. { type: __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */], decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["z" /* Inject */], args: [Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_14" /* forwardRef */])(function () { return __WEBPACK_IMPORTED_MODULE_1__app_app__["a" /* App */]; }),] },] },
  143814. { type: __WEBPACK_IMPORTED_MODULE_2__config_config__["a" /* Config */], },
  143815. { type: __WEBPACK_IMPORTED_MODULE_3__platform_platform__["a" /* Platform */], },
  143816. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */], },
  143817. { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__["V" /* Renderer */], },
  143818. ]; };
  143819. return ClickBlock;
  143820. }());
  143821. //# sourceMappingURL=click-block.js.map
  143822. /***/ }),
  143823. /* 675 */
  143824. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  143825. "use strict";
  143826. /* harmony export (immutable) */ __webpack_exports__["a"] = checkReady;
  143827. function checkReady() {
  143828. var DEVICE_READY_TIMEOUT = 5000;
  143829. // To help developers using cordova, we listen for the device ready event and
  143830. // log an error if it didn't fire in a reasonable amount of time. Generally,
  143831. // when this happens, developers should remove and reinstall plugins, since
  143832. // an inconsistent plugin is often the culprit.
  143833. var before = Date.now();
  143834. var didFireReady = false;
  143835. document.addEventListener('deviceready', function () {
  143836. console.log("Ionic Native: deviceready event fired after " + (Date.now() - before) + " ms");
  143837. didFireReady = true;
  143838. });
  143839. setTimeout(function () {
  143840. if (!didFireReady && !!window.cordova) {
  143841. console.warn("Ionic Native: deviceready did not fire within " + DEVICE_READY_TIMEOUT + "ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.");
  143842. }
  143843. }, DEVICE_READY_TIMEOUT);
  143844. }
  143845. //# sourceMappingURL=bootstrap.js.map
  143846. /***/ }),
  143847. /* 676 */
  143848. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  143849. "use strict";
  143850. /* unused harmony export InstanceCheck */
  143851. /* unused harmony export CordovaCheck */
  143852. /* harmony export (immutable) */ __webpack_exports__["c"] = Plugin;
  143853. /* harmony export (immutable) */ __webpack_exports__["a"] = Cordova;
  143854. /* unused harmony export CordovaInstance */
  143855. /* harmony export (immutable) */ __webpack_exports__["b"] = CordovaProperty;
  143856. /* unused harmony export InstanceProperty */
  143857. /* unused harmony export CordovaFunctionOverride */
  143858. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_observable_throw__ = __webpack_require__(215);
  143859. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_observable_throw___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_rxjs_observable_throw__);
  143860. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__ = __webpack_require__(0);
  143861. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__);
  143862. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__plugin__ = __webpack_require__(347);
  143863. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util__ = __webpack_require__(148);
  143864. /**
  143865. * @private
  143866. */
  143867. function InstanceCheck(opts) {
  143868. if (opts === void 0) { opts = {}; }
  143869. return function (pluginObj, methodName, descriptor) {
  143870. return {
  143871. value: function () {
  143872. var args = [];
  143873. for (var _i = 0; _i < arguments.length; _i++) {
  143874. args[_i] = arguments[_i];
  143875. }
  143876. if (Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["b" /* instanceAvailability */])(this)) {
  143877. return descriptor.value.apply(this, args);
  143878. }
  143879. else {
  143880. if (opts.sync) {
  143881. return;
  143882. }
  143883. else if (opts.observable) {
  143884. return new __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__["Observable"](function () { });
  143885. }
  143886. return Object(__WEBPACK_IMPORTED_MODULE_3__util__["c" /* getPromise */])(function () { });
  143887. }
  143888. },
  143889. enumerable: true
  143890. };
  143891. };
  143892. }
  143893. /**
  143894. * Executes function only if plugin is available
  143895. * @private
  143896. */
  143897. function CordovaCheck(opts) {
  143898. if (opts === void 0) { opts = {}; }
  143899. return function (pluginObj, methodName, descriptor) {
  143900. return {
  143901. value: function () {
  143902. var args = [];
  143903. for (var _i = 0; _i < arguments.length; _i++) {
  143904. args[_i] = arguments[_i];
  143905. }
  143906. var check = Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["a" /* checkAvailability */])(pluginObj);
  143907. if (check === true) {
  143908. return descriptor.value.apply(this, args);
  143909. }
  143910. else {
  143911. if (opts.sync) {
  143912. return null;
  143913. }
  143914. else if (opts.observable) {
  143915. return Object(__WEBPACK_IMPORTED_MODULE_0_rxjs_observable_throw__["_throw"])(new Error(check && check.error));
  143916. }
  143917. return Promise.reject(check && check.error);
  143918. }
  143919. },
  143920. enumerable: true
  143921. };
  143922. };
  143923. }
  143924. /**
  143925. * @private
  143926. *
  143927. * Class decorator specifying Plugin metadata. Required for all plugins.
  143928. *
  143929. * @usage
  143930. * ```typescript
  143931. * @Plugin({
  143932. * pluginName: 'MyPlugin',
  143933. * plugin: 'cordova-plugin-myplugin',
  143934. * pluginRef: 'window.myplugin'
  143935. * })
  143936. * export class MyPlugin {
  143937. *
  143938. * // Plugin wrappers, properties, and functions go here ...
  143939. *
  143940. * }
  143941. * ```
  143942. */
  143943. function Plugin(config) {
  143944. return function (cls) {
  143945. // Add these fields to the class
  143946. for (var prop in config) {
  143947. cls[prop] = config[prop];
  143948. }
  143949. cls['installed'] = function (printWarning) {
  143950. return !!Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(config.pluginRef);
  143951. };
  143952. cls['getPlugin'] = function () {
  143953. return Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(config.pluginRef);
  143954. };
  143955. cls['checkInstall'] = function () {
  143956. return Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["a" /* checkAvailability */])(cls) === true;
  143957. };
  143958. cls['getPluginName'] = function () {
  143959. return config.pluginName;
  143960. };
  143961. cls['getPluginRef'] = function () {
  143962. return config.pluginRef;
  143963. };
  143964. cls['getPluginInstallName'] = function () {
  143965. return config.plugin;
  143966. };
  143967. cls['getPluginRepo'] = function () {
  143968. return config.repo;
  143969. };
  143970. cls['getSupportedPlatforms'] = function () {
  143971. return config.platforms;
  143972. };
  143973. return cls;
  143974. };
  143975. }
  143976. /**
  143977. * @private
  143978. *
  143979. * Wrap a stub function in a call to a Cordova plugin, checking if both Cordova
  143980. * and the required plugin are installed.
  143981. */
  143982. function Cordova(opts) {
  143983. if (opts === void 0) { opts = {}; }
  143984. return function (target, methodName, descriptor) {
  143985. return {
  143986. value: function () {
  143987. var args = [];
  143988. for (var _i = 0; _i < arguments.length; _i++) {
  143989. args[_i] = arguments[_i];
  143990. }
  143991. return Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["d" /* wrap */])(this, methodName, opts).apply(this, args);
  143992. },
  143993. enumerable: true
  143994. };
  143995. };
  143996. }
  143997. /**
  143998. * @private
  143999. *
  144000. * Wrap an instance method
  144001. */
  144002. function CordovaInstance(opts) {
  144003. if (opts === void 0) { opts = {}; }
  144004. return function (target, methodName) {
  144005. return {
  144006. value: function () {
  144007. var args = [];
  144008. for (var _i = 0; _i < arguments.length; _i++) {
  144009. args[_i] = arguments[_i];
  144010. }
  144011. return Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["e" /* wrapInstance */])(this, methodName, opts).apply(this, args);
  144012. },
  144013. enumerable: true
  144014. };
  144015. };
  144016. }
  144017. /**
  144018. * @private
  144019. *
  144020. *
  144021. * Before calling the original method, ensure Cordova and the plugin are installed.
  144022. */
  144023. function CordovaProperty(target, key) {
  144024. Object.defineProperty(target, key, {
  144025. enumerable: true,
  144026. get: function () {
  144027. if (Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["a" /* checkAvailability */])(target, key) === true) {
  144028. return Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(target.constructor.getPluginRef())[key];
  144029. }
  144030. else {
  144031. return null;
  144032. }
  144033. },
  144034. set: function (value) {
  144035. if (Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["a" /* checkAvailability */])(target, key) === true) {
  144036. Object(__WEBPACK_IMPORTED_MODULE_3__util__["b" /* getPlugin */])(target.constructor.getPluginRef())[key] = value;
  144037. }
  144038. }
  144039. });
  144040. }
  144041. /**
  144042. * @private
  144043. * @param target
  144044. * @param key
  144045. * @constructor
  144046. */
  144047. function InstanceProperty(target, key) {
  144048. Object.defineProperty(target, key, {
  144049. enumerable: true,
  144050. get: function () {
  144051. return this._objectInstance[key];
  144052. },
  144053. set: function (value) {
  144054. this._objectInstance[key] = value;
  144055. }
  144056. });
  144057. }
  144058. /**
  144059. * @private
  144060. *
  144061. * Wrap a stub function in a call to a Cordova plugin, checking if both Cordova
  144062. * and the required plugin are installed.
  144063. */
  144064. function CordovaFunctionOverride(opts) {
  144065. if (opts === void 0) { opts = {}; }
  144066. return function (target, methodName, descriptor) {
  144067. return {
  144068. value: function () {
  144069. var args = [];
  144070. for (var _i = 0; _i < arguments.length; _i++) {
  144071. args[_i] = arguments[_i];
  144072. }
  144073. return Object(__WEBPACK_IMPORTED_MODULE_2__plugin__["c" /* overrideFunction */])(this, methodName, opts);
  144074. },
  144075. enumerable: true
  144076. };
  144077. };
  144078. }
  144079. //# sourceMappingURL=decorators.js.map
  144080. /***/ }),
  144081. /* 677 */
  144082. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  144083. "use strict";
  144084. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IonicNativePlugin; });
  144085. var IonicNativePlugin = (function () {
  144086. function IonicNativePlugin() {
  144087. }
  144088. /**
  144089. * Returns a boolean that indicates whether the plugin is installed
  144090. * @return {boolean}
  144091. */
  144092. IonicNativePlugin.installed = function () {
  144093. return false;
  144094. };
  144095. /**
  144096. * Returns the original plugin object
  144097. */
  144098. IonicNativePlugin.getPlugin = function () { };
  144099. /**
  144100. * Returns the plugin's name
  144101. */
  144102. IonicNativePlugin.getPluginName = function () {
  144103. return;
  144104. };
  144105. /**
  144106. * Returns the plugin's reference
  144107. */
  144108. IonicNativePlugin.getPluginRef = function () {
  144109. return;
  144110. };
  144111. /**
  144112. * Returns the plugin's install name
  144113. */
  144114. IonicNativePlugin.getPluginInstallName = function () {
  144115. return;
  144116. };
  144117. /**
  144118. * Returns the plugin's supported platforms
  144119. */
  144120. IonicNativePlugin.getSupportedPlatforms = function () {
  144121. return;
  144122. };
  144123. return IonicNativePlugin;
  144124. }());
  144125. //# sourceMappingURL=ionic-native-plugin.js.map
  144126. /***/ })
  144127. /******/ ]);
  144128. //# sourceMappingURL=vendor.js.map